/branches/v1.0-menes/api/arbre/arbre.class.php |
---|
New file |
0,0 → 1,569 |
<?php |
/* ***************************** classe arbre *********************************** |
* classe permettant la creation d'un arbre, elle est fonctionnelle en tant que module |
* de gsite (www.gsite.org). |
* L'arbre peut servir de representation graphique de donnees statistiques. |
* Copyright 2001 Tela Botanica |
* Auteurs : Daniel Mathieu, Nicolas Touillaud, Alexandre Granier |
* Cette bibliothèque est libre, vous pouvez la redistribuer et/ou la modifier |
* selon les termes de la Licence Publique Générale GNU publiée par la |
* Free Software Foundation. |
* Cette bibliothèque est distribuée car potentiellement utile, mais SANS |
* AUCUNE GARANTIE, ni explicite ni implicite, y compris les garanties de |
* commercialisation ou d'adaptation dans un but spécifique. |
* |
* Derniere mise a jour : 10 decembre 2001 |
************************************************************************************/ |
error_reporting (E_ALL) ; |
//l'ecran |
//$xres=698; //doit etre divisible par 2 sinon bug d'alignement |
$innerTableWidth = 600; |
$xres=$innerTableWidth-10; |
$yres=600; |
//les images |
$yfait= 50; //la hauteur du "sommet" |
$xfait= 1; |
$xtronc= 36; //doit etre divisible par 2 sinon bug d'alignement |
$ytronc= 559; |
$xbranche= 200; |
$ybranche= 64; |
$xracine= 191; |
$yracine= 61; |
$xfeuille= 50; |
$yfeuille= 45; |
$xtextedroite=10; |
$ytextedroite=15; |
$xtextegauche=10; |
$ytextegauche=10; |
$yposnom=12; |
$xpuce=10; |
$ypuce=10; |
$taille_mini=60; |
$nhi_xsommet=191; |
$nhi_ysommet=61; |
include 'tailles.php3' ; |
define ("ARBRE_CHEMIN_IMAGES", 'api/arbre/images/') ; |
function calc_xref_branche($xres_,$xfeuille_, $xtronc_) |
//calcule la taille de reference des branches |
{ |
//global $xres, $xfeuille, $xtronc; |
$toto=round(($xres_-$xtronc_-(2*$xfeuille_))/2); |
return $toto; |
} |
//****************************************************** |
// calcule l'espace vertical entre 2 branche d'un meme coté: si il n'y a pas la place -> 12 pixels |
function calc_esver() |
{ |
global $nbdroite ; |
if ($nbdroite != 1): |
{ |
global $yres, $yfait, $yracine, $ybranche, $nbdroite; |
$toto=($yres-$yfait-$yracine-($nbdroite*$ybranche))/($nbdroite-1); |
if($toto<0):{$toto=12;} //on ne se place plus sur 1 ecran mais sur plus |
endif; |
return $toto; |
} |
else:{return 0;} |
endif; |
} |
//****************************************************** |
$esver=calc_esver(); |
//****************************************************** |
//calcul la position en x de la branche |
function calcul_x_branche($adroite,$xreel) |
{ |
global $xres, $xtronc, $xref_branche; |
$tempx=($xres+$xtronc)/2-2; //pour un bug |
if($adroite != 1): |
{ |
$tempx=$tempx+2-$xtronc-($xreel); |
} |
endif; |
return round($tempx); |
} |
//****************************************************** |
//Il est impératif d'afficher 1 branche d'un coté, puis de l'autre etc.. |
//****************************************************** |
//retourne la position y de la branche (et de la feuille) et met à jour la hauteur de la prochaine branche |
function calcul_y_branche() |
{ |
global $esver, $hauteur, $ybranche; |
$toto=$hauteur; |
$hauteur=$hauteur+(($ybranche+$esver)/2); |
return $toto; |
} |
//****************************************************** |
//****************************************************** |
//retourne la position x du tronc |
function x_tronc() |
{ |
global $xtronc, $xres; |
return ($xres-$xtronc)/2; |
} |
//****************************************************** |
//****************************************************** |
//retourne la position y du tronc |
function y_tronc() |
{ |
global $yfait; |
return ($yfait); |
} |
//****************************************************** |
//****************************************************** |
// retourne la position x de la racine |
function x_racine() |
{ |
global $xracine, $xres; |
return ($xres-$xracine)/2; |
} |
//****************************************************** |
//****************************************************** |
//retourne la taille du tronc en pixels |
function taille_tronc() |
{ |
global $nbdroite, $esver, $ybranche; |
$toto=($nbdroite-1)*$esver+($nbdroite*$ybranche); |
return $toto; |
} |
//****************************************************** |
//****************************************************** |
//retourne la position x de la feuille en fonction des param de la branche |
function calcul_x_feuille($adroite, $pos_branche, $xreel_brch) //xreel en % |
{ |
global $xref_branche, $xfeuille; |
if($adroite !=1): |
{ |
$toto=$pos_branche-$xfeuille; |
} |
else: |
{ |
$toto=$pos_branche+($xreel_brch); |
} |
endif; |
return $toto; |
} |
//****************************************************** |
//****************************************************** |
// retourne la position y de la racine |
function y_racine() |
{ |
global $yfait; |
$toto=$yfait+taille_tronc(); |
return $toto; |
} |
//****************************************************** |
//****************************************************** |
//met 1 à 0 et inversement |
function dg($dte) |
{ |
if($dte==1):{return 0;} |
else:{return 1;} |
endif; |
} |
//****************************************************** |
//****************************************************** |
//une fonction qui prend le % de vert *100 et qui sort la chaine html du vert correspondant |
function couleur_f($prc) |
{ |
if ($prc==0) return ("#279C27"); |
if (($prc>0) && ($prc<=16)) return ("#279C27"); |
if (($prc>16) && ($prc<=32)) return ("#CCCC00"); |
if (($prc>32) && ($prc<=48)) return ("#FFCC00"); |
if (($prc>48) && ($prc<=64)) return ("#DD8D22"); |
if (($prc>64) && ($prc<=80)) { |
return "#FF6600" ; |
} else { |
return "#CC3300" ; |
} |
} |
//***************************************************** |
//une fonction qui détermine si un entier est pair ou non |
function est_pair($un_entier) |
{ |
return(($un_entier %2)==0); |
} |
class arbre { |
var $nbre_branche ; |
var $branche ; |
var $blanc_cime ; |
/******************************************************************************** |
* constructeur arbre(chaine $nom, chaine $lien_nom, entier $intensite, chaine $lien_intensite, |
* chaine $lien_feuille) |
* crees une instance d'arbre, les parametres sont les informations du sommet de l'arbre |
* $nom : le texte du haut de l'arbre |
* $lien_nom : le lein associe |
* $intensite : le nombre a cote du nom |
* $lien_intensite : le lien sur l'intensite |
* $lien_feuille : le lien, lorsqu'on clique sur la feuille du haut de l'arbre |
*********************************************************************************/ |
function arbre() {} |
function cime($nom, $lien_nom, $intensite, $lien_intensite, $lien_feuille) { |
//global $nhi_xsommet, $nhi_ysommet,$ybranche,$yfeuille, $yres, $innerTableWidth ; |
//l'ecran |
//$xres=698; //doit etre divisible par 2 sinon bug d'alignement |
$innerTableWidth = 600; |
$xres=$innerTableWidth-10; |
$yres=600; |
//les images |
$yfait= 50; //la hauteur du "sommet" |
$xfait= 1; |
$xtronc= 36; //doit etre divisible par 2 sinon bug d'alignement |
$ytronc= 559; |
$xbranche= 200; |
$ybranche= 64; |
$xracine= 191; |
$yracine= 61; |
$xfeuille= 50; |
$yfeuille= 45; |
$xtextedroite=10; |
$ytextedroite=15; |
$xtextegauche=10; |
$ytextegauche=10; |
$yposnom=12; |
$xpuce=10; |
$ypuce=10; |
$taille_mini=60; |
$nhi_xsommet=191; |
$nhi_ysommet=61; |
// tailles.php3 contient les variables de tailles des fichiers graphiques associes |
// a l'arbre |
include 'tailles.php3' ; |
// Le blanc devant la cime de l'arbre |
$this->blanc_cime = round(($xres-$nhi_xsommet)/2); |
$res = '<tr> |
<td align="center"><a href="'.$lien_nom.'"><b><i>'.$nom.'</i></b></a> <a href="'.$lien_intensite.'"><b><i>('.$intensite.')</i></b></a></td> |
</tr> |
<tr> |
<td align="center"><table width="'.$xres.'" border="0" cellspacing="0" cellpadding="0" summary="">'; |
// haut de l'arbre |
$res .= '<tr> |
<td align="center"><table border="0" cellspacing="0" cellpadding="0" summary=""> |
<tr> |
<td><img alt="" width="'.$this->blanc_cime.'" height="1" src="'.ARBRE_CHEMIN_IMAGES.'vide.gif" /></td> |
<td width="'.$nhi_xsommet.'" height="'.$nhi_ysommet.'" align="center"><a href="'.$lien_feuille.'" target="_blank" class="image_lien"> |
<img alt="" width="'.$nhi_xsommet.'" height="'.$nhi_ysommet.'" border="0" src="'.ARBRE_CHEMIN_IMAGES.'haut.gif" /></a></td> |
<td><img alt="" width="'.$this->blanc_cime.'" height="1" src="'.ARBRE_CHEMIN_IMAGES.'vide.gif" /></td> |
</tr> |
</table> |
</td> |
</tr>'; |
return $res ; |
} |
/************************** fonction addBranche ****************************************** |
* ajoute une branche a l'arbre |
* |
* $nom : le label d'une branche |
* $lien_nom : le lien associe au label |
* $intensite : le nombre a droite du label |
* $lien_intensite : le lien sur le nombre |
* $lien feuille : le lien quand on clique sur la feuille |
* $intensite_feuille : un nombre compris entre 1 et 100, qui sera transforme en couleur |
* $longueur_branche : un nombre entre 1 et 100, pour la longueur de la branche* |
********************************************************************************************/ |
function addBranche($nom, $lien_nom, $intensite, $lien_intensite, $lien_feuille, $intensite_feuille, $longueur_branche) { |
$this->nbre_branche++ ; |
$this->branche["nom"][$this->nbre_branche] = $nom ; |
$this->branche["lien_nom"][$this->nbre_branche] = $lien_nom ; |
$this->branche["intensite"][$this->nbre_branche] = $intensite ; |
$this->branche["lien_intensite"][$this->nbre_branche] = $lien_intensite ; |
$this->branche["lien_feuille"][$this->nbre_branche] = $lien_feuille ; |
$this->branche["intensite_feuille"][$this->nbre_branche] = $intensite_feuille ; |
$this->branche["longueur_branche"][$this->nbre_branche] = $longueur_branche ; |
} |
/************ fonction affBranche() ajoute le code HTML des branches ******************** |
* ne renvoie rien |
*********************************************************************************************/ |
function affBranche() { |
//l'ecran |
//$xres=698; //doit etre divisible par 2 sinon bug d'alignement |
$innerTableWidth = 600; |
$xres=$innerTableWidth-10; |
$yres=600; |
//les images |
$yfait= 50; //la hauteur du "sommet" |
$xfait= 1; |
$xtronc= 36; //doit etre divisible par 2 sinon bug d'alignement |
$ytronc= 559; |
$xbranche= 200; |
$ybranche= 64; |
$xracine= 191; |
$yracine= 61; |
$xfeuille= 50; |
$yfeuille= 45; |
$xtextedroite=10; |
$ytextedroite=15; |
$xtextegauche=10; |
$ytextegauche=10; |
$yposnom=12; |
$xpuce=10; |
$ypuce=10; |
$taille_mini=60; |
$nhi_xsommet=191; |
$nhi_ysommet=61; |
$tb = "" ; $tb2 = "" ; |
//global $nhi_xsommet, $nhi_ysommet,$ybranche,$yfeuille, $xref_branche, $taille_mini; |
//global $xtronc, $espace_a_gauche, $xfeuille , $les_slashes, $xres, $innerTableWidth; |
include 'tailles.php3' ; |
$xref_branche = calc_xref_branche($xres,$xfeuille,$xtronc); |
$res = "<!-- xref_branche=$xref_branche -->"; |
$yinv=$ybranche-$yfeuille; //Hauteur de la case vide sous la feuille |
//le tableau des branches |
//ici, la boucle |
//ajustement de la boucle: le nombre de tables doit être pair dans la boucle |
$la_limite_de_la_boucle = $this->nbre_branche; |
if(true != est_pair($la_limite_de_la_boucle)): //ajustement de la boucle |
{ |
$la_limite_de_la_boucle-=1; |
}endif; |
$coul_ = '' ; |
for($i=0; $i < $la_limite_de_la_boucle ; $i += 2) { |
// informations concernant la branche gauche |
$coul_=couleur_f($this->branche["intensite_feuille"][$i+1]); |
$xrel=$this->branche["longueur_branche"][$i+2]/100; |
$tbr = round($xrel * $xref_branche); |
if($tbr < $taille_mini) $tbr = $taille_mini + $tbr ; //taille mini de la branche |
if(isset ($les_slashes) && $les_slashes == 1) { |
$this->branche["lien_nom"][$i+1] = stripslashes($this->branche["nom_lien"][$i+1]); |
$this->branche["lien_feuille"][$i+1] = stripslashes($this->branche["lien_feuille"][$i+1]); |
//$lien_puce2=stripslashes($lien_puce2); |
} |
// informations concernant la branche droite |
$coul_2=couleur_f($this->branche["intensite_feuille"][$i+2]); |
$xrel2 = $this->branche["longueur_branche"][$i+1]/100.0; |
$tbr2 = round($xrel2*$xref_branche); |
if($tbr2 < $taille_mini) $tbr2 = $taille_mini+$tbr2 ; //taille mini de la branche |
//pour des parametress de javascript, le addslash provient de appli_dessin_date |
if(isset ($les_slashes) && $les_slashes == 1) { |
$this->branche["lien_nom"][$i+2] = stripslashes($this->branche["lien_nom"][$i+2]); |
$this->branche["lien_feuille"][$i+2] = stripslashes($this->branche["lien_feuille"][$i+2]); |
//$lien_puce2=stripslashes($lien_puce2); |
} |
//espace à gauche |
$espace_a_gauche=round((($xres-$xtronc)/2)-$tbr2-$xfeuille); |
//espace à droite |
$espace_a_droite=round($xres-$xtronc-$tbr-$tbr2-2*$xfeuille-$espace_a_gauche); |
$res .= "<!-- Les noms des listes --> |
<tr> |
<td> |
<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\" summary=\"\"> |
<tr> |
<td colspan=\"3\" align=\"right\"><a href=\""; |
$res .= $this->branche["lien_nom"][$i+1]; |
$res .= '" class="lien_nom">'; |
$res .= $this->branche["nom"][$i+1]; |
$res .= "</a>"; |
if($this->branche["intensite"][$i+1] != 0) { |
$res .= " <a href=\"" ; |
$res .= $this->branche["lien_intensite"][$i+1]; |
$res .= '" class="lien_nom">('; |
$res .= $this->branche["intensite"][$i+1]; |
$res .= ")</a>"; |
} |
$res .= " </td> |
<!-- Le tronc --> |
<td bgcolor=\"#663333\"><img alt=\"\" width=\"$xtronc\" height=\"20\" src=\"".ARBRE_CHEMIN_IMAGES."vide.gif\" /></td> |
<td colspan=\"3\" align=\"left\"> <a href=\""; |
$res .= $this->branche["lien_nom"][$i+2]; |
$res .= '" class="lien_nom">'; |
$res .= $this->branche["nom"][$i+2]; |
$res .= "</a>"; |
if($this->branche["intensite"][$i+2] != 0) { |
$res .= " <a href=\""; |
$res .= $this->branche["lien_intensite"][$i+2]; |
$res .= '" class="lien_nom">('; |
$res .= $this->branche["intensite"][$i+2]; |
$res .= ")</a>"; |
} |
$res .= "</td> |
</tr> |
<!-- Bloc de 2 branches --> |
<tr> |
<!-- Espace gauche --> |
<td rowspan=\"2\"><img alt=\"\" width=\"$espace_a_gauche\" height=\"1\" src=\"".ARBRE_CHEMIN_IMAGES."vide.gif\" /></td> |
<!-- Feuille gauche --> |
<td class=\"chiffre\" align=\"center\" bgcolor=\"$coul_2\" width=\"$xfeuille\" height=\"$yfeuille\">"; |
if($this->branche["lien_feuille"][$i+1]!="") { |
$res .= '<a target="_blank" href="'; |
$res .= $this->branche["lien_feuille"][$i+1] ; |
$res .= '" class="image_lien">'; |
} |
$res .= "<img alt=\"\" width=\"$xfeuille\" height=\"$yfeuille\" border=\"0\" src=\"".ARBRE_CHEMIN_IMAGES."feuille_gauche.gif\" />"; |
if($this->branche["lien_feuille"][$i+1]!=""):{$res .= "</a>";}endif;$res .= "</td> |
<!-- Branche gauche: taille $tb2 % = $tbr2 pixels --> |
<td rowspan=\"2\"><img alt=\"\" width=\"$tbr2\" height=\"$ybranche\" src=\"".ARBRE_CHEMIN_IMAGES."branche_gauche.gif\" /></td> |
<!-- Le tronc --> |
<td rowspan=\"2\" bgcolor=\"#663333\"><img alt=\"\" width=\"$xtronc\" src=\"".ARBRE_CHEMIN_IMAGES."vide.gif\" /></td> |
<!-- Branche droite: taille $tb % = $tbr pixels --> |
<td rowspan=\"2\"><img alt=\"\" width=\"$tbr\" height=\"$ybranche\" src=\"".ARBRE_CHEMIN_IMAGES."branche_droite.gif\" /></td> |
<!-- Feuille droite --> |
<td class=\"chiffre\" align=\"center\" bgcolor=\"$coul_\" width=\"$xfeuille\" height=\"$yfeuille\">"; |
if($this->branche["lien_feuille"][$i+2] != "") { |
$res .= '<a target="_blank" href="'; |
$res .= $this->branche["lien_feuille"][$i+2]; |
$res .= '" class="image_lien">'; |
} |
$res .= "<img alt=\"\" width=\"$xfeuille\" height=\"$yfeuille\" border=\"0\" src=\"".ARBRE_CHEMIN_IMAGES."feuille_droite.gif\" />"; |
if($this->branche["lien_feuille"][$i+2] !="") { |
$res .= "</a>"; |
} |
$res .= '</td> |
<!-- Espace droit --> |
<td rowspan="2"><img alt="" width="'.$espace_a_droite.'" height="1" src="'.ARBRE_CHEMIN_IMAGES.'vide.gif" /></td> |
</tr> |
<!-- Les cases vides sous les feuilles --> |
<tr> |
<td height="'.$yinv.'"><img alt="" width="1" height="'.$yinv.'" src="'.ARBRE_CHEMIN_IMAGES.'vide.gif" /></td> |
<td height="'.$yinv.'"><img alt="" width="1" height="'.$yinv.'" src="'.ARBRE_CHEMIN_IMAGES.'vide.gif" /></td> |
</tr> |
</table> |
</td> |
</tr> |
<!-- Fin du bloc de 2 branches -->'; |
} |
if(!est_pair($this->nbre_branche)) { |
$coul_2=couleur_f($this->branche["intensite_feuille"][$this->nbre_branche]); |
$xrel2 = $this->branche["longueur_branche"][$this->nbre_branche]/100.0; |
$tbr2 = round($xrel2*$xref_branche); |
if($tbr2 < $taille_mini) $tbr2 = $taille_mini+$tbr2 ; //taille mini de la branche |
//pour des parametress de javascript, le addslash provient de appli_dessin_date |
if(isset ($les_slashes) && $les_slashes==1) { |
$this->branche["lien_nom"][$this->nbre_branche] = stripslashes($this->branche["lien_nom"][$this->nbre_branche]); |
$this->branche["lien_feuille"][$this->nbre_branche] = stripslashes($this->branche["lien_feuille"][$this->nbre_branche]); |
//$lien_puce2=stripslashes($lien_puce2); |
} |
//espace à gauche |
$espace_a_gauche=round((($xres-$xtronc)/2)-$tbr2-$xfeuille); |
$res .= '<!-- Le nom de la liste --> |
<tr> |
<td> |
<table border="0" cellspacing="0" cellpadding="0" align="left"> |
<tr> |
<td colspan="3" align="right"><a href="'; |
$res .= $this->branche["lien_nom"][$this->nbre_branche] ; |
$res .= '" class="lien_nom">'; |
$res .= $this->branche["nom"][$this->nbre_branche]; |
$res .= "</a>"; |
if($this->branche["intensite"][$this->nbre_branche] != 0 ) { |
$res .= ' <a href="'; |
$res .= $this->branche["lien_intensite"][$this->nbre_branche] ; |
$res .= '" class="lien_nom">('; |
$res .= $this->branche["intensite"][$this->nbre_branche]; |
$res .= ')</a>'; |
} |
$res .= ' </td> |
<!-- Le tronc --> |
<td bgcolor="#663333"><img alt="" width="'.$xtronc.'" height="20" src="'.ARBRE_CHEMIN_IMAGES.'vide.gif" /></td> |
<td colspan="3" rowspan="3" align="left"> </td> |
</tr> |
<!-- Bloc de 1 branche --> |
<tr> |
<!-- Espace gauche --> |
<td rowspan="2"><img alt="" width="'.$espace_a_gauche.'" height="1" src="'.ARBRE_CHEMIN_IMAGES.'vide.gif" /></td> |
<!-- Feuille gauche --> |
<td class="chiffre" align="center" bgcolor="'.$coul_.'" width="'.$xfeuille.'" height="'.$yfeuille.'" >'; |
if($this->branche["lien_feuille"][$this->nbre_branche] != "") { |
$res .= "<a target=\"_blank\" href=\""; |
$res .= $this->branche["lien_feuille"][$this->nbre_branche]; |
$res .= '">'; |
} |
$res .= "<img alt=\"\" width=\"$xfeuille\" height=\"$yfeuille\" border=\"0\" src=\"".ARBRE_CHEMIN_IMAGES."feuille_gauche.gif\" />"; |
if($this->branche["lien_feuille"][$this->nbre_branche]!=""):{$res .= "</a>";}endif;$res .= "</td> |
<!-- Branche gauche: taille $tb2 % = $tbr2 pixels --> |
<td rowspan=\"2\"><img alt=\"\" width=\"$tbr2\" height=\"$ybranche\" src=\"".ARBRE_CHEMIN_IMAGES."branche_gauche.gif\" /></td> |
<!-- Le tronc --> |
<td rowspan=\"2\" bgcolor=\"#663333\"><img alt=\"\" width=\"$xtronc\" src=\"".ARBRE_CHEMIN_IMAGES."vide.gif\" /></td> |
</tr> |
<!-- La case vide sous la feuille --> |
<tr> |
<td height=\"$yinv\"><img alt=\"\" width=\"1\" height=\"$yinv\" src=\"".ARBRE_CHEMIN_IMAGES."vide.gif\" /></td> |
</tr> |
</table> |
</td> |
</tr> |
"; |
} |
return $res ; |
} |
/******************** fonction affRacine() **************************************** |
* affiche la racine, ne renvoie rien |
*************************************************************************************/ |
function affRacine() { |
$xracine = 191 ; $yracine = 61; |
$this->blanc_cime -= 4 ; |
$res = '<!-- la racine --> |
<tr> |
<td align="left"><img width="'.$this->blanc_cime.'" height="1" border="0" src="'.ARBRE_CHEMIN_IMAGES.'vide.gif" alt="vide" /> |
<img src="'.ARBRE_CHEMIN_IMAGES.'racine.gif" width="'.$xracine.'" height="'.$yracine.'" border="0" alt="racine" /> |
</td> |
</tr> |
</table> |
</td> |
</tr>'; |
return $res ; |
} |
} |
?> |
/branches/v1.0-menes/api/arbre/images/branche_gauche.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/arbre/images/branche_gauche.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/arbre/images/feuille.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/arbre/images/feuille.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/arbre/images/tronc.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/arbre/images/tronc.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/arbre/images/valider.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/arbre/images/valider.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/arbre/images/vide.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/arbre/images/vide.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/arbre/images/arbre.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/arbre/images/arbre.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/arbre/images/feuille_droite.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/arbre/images/feuille_droite.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/arbre/images/fleche_droite.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/arbre/images/fleche_droite.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/arbre/images/puce.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/arbre/images/puce.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/arbre/images/feuille_gauche.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/arbre/images/feuille_gauche.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/arbre/images/haut.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/arbre/images/haut.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/arbre/images/racine.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/arbre/images/racine.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/arbre/images/fleche_gauche.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/arbre/images/fleche_gauche.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/arbre/images/barre_blanche.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/arbre/images/barre_blanche.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/arbre/images/feuille2.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/arbre/images/feuille2.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/arbre/images/branche_droite.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/arbre/images/branche_droite.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/arbre/tailles.php3 |
---|
New file |
0,0 → 1,45 |
<? |
/* ***************************** classe arbre *********************************** |
* class permettant la creation d'un arbre, elle est fonctionnelle en tant que module |
* de gsite (www.gsite.org). |
* L'arbre peut servir de representation graphique de donnees statistiques. |
* Copyright 2001 Tela Botanica |
* Auteurs : Daniel Mathieu, Nicolas Touillaud, Alexandre Granier |
* Cette bibliothèque est libre, vous pouvez la redistribuer et/ou la modifier |
* selon les termes de la Licence Publique Générale GNU publiée par la |
* Free Software Foundation. |
* Cette bibliothèque est distribuée car potentiellement utile, mais SANS |
* AUCUNE GARANTIE, ni explicite ni implicite, y compris les garanties de |
* commercialisation ou d'adaptation dans un but spécifique. |
* |
************************************************************************************/ |
//l'ecran |
//$xres=698; //doit etre divisible par 2 sinon bug d'alignement |
$innerTableWidth = 600; |
$xres=$innerTableWidth-10; |
$yres=600; |
//les images |
$yfait= 50; //la hauteur du "sommet" |
$xfait= 1; |
$xtronc= 36; //doit etre divisible par 2 sinon bug d'alignement |
$ytronc= 559; |
$xbranche= 200; |
$ybranche= 64; |
$xracine= 191; |
$yracine= 61; |
$xfeuille= 50; |
$yfeuille= 45; |
$xtextedroite=10; |
$ytextedroite=15; |
$xtextegauche=10; |
$ytextegauche=10; |
$yposnom=12; |
$xpuce=10; |
$ypuce=10; |
$taille_mini=60; |
$nhi_xsommet=191; |
$nhi_ysommet=61; |
?> |
/branches/v1.0-menes/api/syndication_rss/syndication_rss.php |
---|
New file |
0,0 → 1,128 |
<?php |
/*vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +------------------------------------------------------------------------------------------------------+ |
// | PHP version 4.1 | |
// +------------------------------------------------------------------------------------------------------+ |
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) | |
// +------------------------------------------------------------------------------------------------------+ |
// | This library is free software; you can redistribute it and/or | |
// | modify it under the terms of the GNU Lesser General Public | |
// | License as published by the Free Software Foundation; either | |
// | version 2.1 of the License, or (at your option) any later version. | |
// | | |
// | This library 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 | |
// | Lesser General Public License for more details. | |
// | | |
// | You should have received a copy of the GNU Lesser General Public | |
// | License along with this library; if not, write to the Free Software | |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
// +------------------------------------------------------------------------------------------------------+ |
// CVS : $Id$ |
/** |
* |
* Fonctions du module rss de papyrus |
* |
* |
*@package syndication_rss |
//Auteur original : |
*@author Alexandre Granier <alexandre@tela-botanica.org> |
*@author Florian Schmitt <florian@ecole-et-nature.org> |
//Autres auteurs : |
*@copyright Tela-Botanica 2000-2007 |
*@version $Revision$ |
// +------------------------------------------------------------------------------------------------------+ |
*/ |
define('MAGPIE_DIR', GEN_CHEMIN_API.'syndication_rss/magpierss/'); |
define('MAGPIE_CACHE_DIR', MAGPIE_DIR.'tmp/magpie_cache'); |
define('OUVRIR_LIEN_RSS_NOUVELLE_FENETRE', 1); |
define('FORMAT_DATE', 'jma'); |
require_once(MAGPIE_DIR.'rss_fetch.inc'); |
function voir_rss($titre='', $url='', $nb=0, $nouvelle_fenetre=OUVRIR_LIEN_RSS_NOUVELLE_FENETRE, $formatdate=FORMAT_DATE, $template = "") { |
$res= ''; |
if ( $url!='' ) { |
$rss = fetch_rss( $url ); |
if ($template != "") { |
$i = 0 ; |
foreach ($rss->items as $item) { |
// Le test suivant pour savoir s il faut reduire l excendent de description |
// Si {all} est present dans le template on ne reduit pas |
if (preg_match ('/{all}/', $template)) { |
$template = str_replace('{all}', '', $template); |
$all = true ; |
} else { |
$all = false; |
} |
if (strlen($item['description']) > 200 && !$all) { |
$item['description'] = substr ($item['description'] , 0, 300).'... <a href="'.$item['link'].'">Lire la suite</a>'; |
} |
if (!isset($item['pubdate'])) $item['pubdate'] = date('dmY'); |
// Le code ci-apres est pour rattraper les dates du type 01012005 parsees par magpie |
// lorsque les flux donne des dates au format iso |
if (preg_match('/^([0-3][0-9])([0-1][0-9])([0-9][0-9][0-9][0-9])$/', $item['pubdate'], $match)) { |
$item['pubdate'] = $match[3].'-'.$match[2].'-'.$match[1]; |
//echo $item['pubdate']; |
} |
$res .= str_replace ('{num}', ++$i, |
str_replace ('{item}', '<a href="'.$item['link'].'" target="_top">'.$item['title'].'</a>', |
str_replace ('{date}', strftime('%d.%m.%Y',strtotime($item['pubdate'])), |
str_replace ('{description}', $item['description'], $template)))) ; |
$res .= "\n"; |
if ($i > $nb) break; |
} |
return $res ; |
} |
if ( $titre=='' ) {$res .= '<h2>'.$rss->channel['title'].'</h2>'."\n";} |
elseif ( $titre!='0' ) {$res .= '<h2>'.$titre.'</h2>'."\n";} |
$res .= '<ul class="liste_rss">'."\n"; |
$i=0; |
$nb_item=count($rss->items); |
if (($nb==0)or($nb_item<=$nb)) { |
foreach ($rss->items as $item) { |
$href = $item['link']; |
$title = $item['title']; |
$res .= '<li class="titre_rss">'."\n"; |
if (isset($item['pubdate'])) $date=$item['pubdate']; |
elseif ((!isset($item['pubdate']))and(isset($item['date_timestamp']))) $date=$item['date_timestamp']; |
else $formatdate=''; |
if ($formatdate=='jm') {$res .= strftime('%d.%m',strtotime($date)).': ';} |
if ($formatdate=='jma') {$res .= strftime('%d.%m.%Y',strtotime($date)).': ';} |
if ($formatdate=='jmh') {$res .= strftime('%d.%m %H:%M',strtotime($date)).': ';} |
if ($formatdate=='jmah') {$res .= strftime('%d.%m.%Y %H:%M',strtotime($date)).': ';} |
$res .= '<a class="lien_rss" href="'.$href; |
if ($nouvelle_fenetre==1) $res .= '" onclick="window.open(this.href); return false;'; |
$res .= '">'.$title.'</a></li>'."\n"; |
} |
} |
else { |
$i=0; |
foreach ($rss->items as $item) { |
$href = $item['link']; |
$title = $item['title']; |
$res .= '<li class="titre_rss">'."\n"; |
if (isset($item['pubdate'])) $date=$item['pubdate']; |
elseif ((!isset($item['pubdate']))and(isset($item['date_timestamp']))) $date=$item['date_timestamp']; |
else $formatdate=''; |
if ($formatdate=='jm') {$res .= strftime('%d.%m',strtotime($date)).': ';} |
if ($formatdate=='jma') {$res .= strftime('%d.%m.%Y',strtotime($date)).': ';} |
if ($formatdate=='jmh') {$res .= strftime('%d.%m %H:%M',strtotime($date)).': ';} |
if ($formatdate=='jmah') {$res .= strftime('%d.%m.%Y %H:%M',strtotime($date)).': ';} |
$res .= '<a class="lien_rss" href="'.$href; |
if ($nouvelle_fenetre==1) $res .= '" onclick="window.open(this.href); return false;'; |
$res .= '">'.$title.'</a></li>'."\n"; |
$i++; |
if ($i>=$nb) break; |
} |
} |
$res .= '</ul>'."\n"; |
} |
//echo '<pre>'.var_dump($rss->items).'</pre><br /><br />'; |
return $res; |
} |
?> |
/branches/v1.0-menes/api/syndication_rss/magpierss/extlib/Snoopy.class.inc |
---|
New file |
0,0 → 1,900 |
<?php |
/************************************************* |
Snoopy - the PHP net client |
Author: Monte Ohrt <monte@ispi.net> |
Copyright (c): 1999-2000 ispi, all rights reserved |
Version: 1.0 |
* This library is free software; you can redistribute it and/or |
* modify it under the terms of the GNU Lesser General Public |
* License as published by the Free Software Foundation; either |
* version 2.1 of the License, or (at your option) any later version. |
* |
* This library 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 |
* Lesser General Public License for more details. |
* |
* You should have received a copy of the GNU Lesser General Public |
* License along with this library; if not, write to the Free Software |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
You may contact the author of Snoopy by e-mail at: |
monte@ispi.net |
Or, write to: |
Monte Ohrt |
CTO, ispi |
237 S. 70th suite 220 |
Lincoln, NE 68510 |
The latest version of Snoopy can be obtained from: |
http://snoopy.sourceforge.com |
*************************************************/ |
class Snoopy |
{ |
/**** Public variables ****/ |
/* user definable vars */ |
var $host = "www.php.net"; // host name we are connecting to |
var $port = 80; // port we are connecting to |
var $proxy_host = ""; // proxy host to use |
var $proxy_port = ""; // proxy port to use |
var $agent = "Snoopy v1.0"; // agent we masquerade as |
var $referer = ""; // referer info to pass |
var $cookies = array(); // array of cookies to pass |
// $cookies["username"]="joe"; |
var $rawheaders = array(); // array of raw headers to send |
// $rawheaders["Content-type"]="text/html"; |
var $maxredirs = 5; // http redirection depth maximum. 0 = disallow |
var $lastredirectaddr = ""; // contains address of last redirected address |
var $offsiteok = true; // allows redirection off-site |
var $maxframes = 0; // frame content depth maximum. 0 = disallow |
var $expandlinks = true; // expand links to fully qualified URLs. |
// this only applies to fetchlinks() |
// or submitlinks() |
var $passcookies = true; // pass set cookies back through redirects |
// NOTE: this currently does not respect |
// dates, domains or paths. |
var $user = ""; // user for http authentication |
var $pass = ""; // password for http authentication |
// http accept types |
var $accept = "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*"; |
var $results = ""; // where the content is put |
var $error = ""; // error messages sent here |
var $response_code = ""; // response code returned from server |
var $headers = array(); // headers returned from server sent here |
var $maxlength = 500000; // max return data length (body) |
var $read_timeout = 0; // timeout on read operations, in seconds |
// supported only since PHP 4 Beta 4 |
// set to 0 to disallow timeouts |
var $timed_out = false; // if a read operation timed out |
var $status = 0; // http request status |
var $curl_path = "/usr/bin/curl"; |
// Snoopy will use cURL for fetching |
// SSL content if a full system path to |
// the cURL binary is supplied here. |
// set to false if you do not have |
// cURL installed. See http://curl.haxx.se |
// for details on installing cURL. |
// Snoopy does *not* use the cURL |
// library functions built into php, |
// as these functions are not stable |
// as of this Snoopy release. |
// send Accept-encoding: gzip? |
var $use_gzip = true; |
/**** Private variables ****/ |
var $_maxlinelen = 4096; // max line length (headers) |
var $_httpmethod = "GET"; // default http request method |
var $_httpversion = "HTTP/1.0"; // default http request version |
var $_submit_method = "POST"; // default submit method |
var $_submit_type = "application/x-www-form-urlencoded"; // default submit type |
var $_mime_boundary = ""; // MIME boundary for multipart/form-data submit type |
var $_redirectaddr = false; // will be set if page fetched is a redirect |
var $_redirectdepth = 0; // increments on an http redirect |
var $_frameurls = array(); // frame src urls |
var $_framedepth = 0; // increments on frame depth |
var $_isproxy = false; // set if using a proxy server |
var $_fp_timeout = 30; // timeout for socket connection |
/*======================================================================*\ |
Function: fetch |
Purpose: fetch the contents of a web page |
(and possibly other protocols in the |
future like ftp, nntp, gopher, etc.) |
Input: $URI the location of the page to fetch |
Output: $this->results the output text from the fetch |
\*======================================================================*/ |
function fetch($URI) |
{ |
//preg_match("|^([^:]+)://([^:/]+)(:[\d]+)*(.*)|",$URI,$URI_PARTS); |
$URI_PARTS = parse_url($URI); |
if (!empty($URI_PARTS["user"])) |
$this->user = $URI_PARTS["user"]; |
if (!empty($URI_PARTS["pass"])) |
$this->pass = $URI_PARTS["pass"]; |
switch($URI_PARTS["scheme"]) |
{ |
case "http": |
$this->host = $URI_PARTS["host"]; |
if(!empty($URI_PARTS["port"])) |
$this->port = $URI_PARTS["port"]; |
if($this->_connect($fp)) |
{ |
if($this->_isproxy) |
{ |
// using proxy, send entire URI |
$this->_httprequest($URI,$fp,$URI,$this->_httpmethod); |
} |
else |
{ |
$path = $URI_PARTS["path"].(isset($URI_PARTS["query"]) ? "?".$URI_PARTS["query"] : ""); |
// no proxy, send only the path |
$this->_httprequest($path, $fp, $URI, $this->_httpmethod); |
} |
$this->_disconnect($fp); |
if($this->_redirectaddr) |
{ |
/* url was redirected, check if we've hit the max depth */ |
if($this->maxredirs > $this->_redirectdepth) |
{ |
// only follow redirect if it's on this site, or offsiteok is true |
if(preg_match("|^http://".preg_quote($this->host)."|i",$this->_redirectaddr) || $this->offsiteok) |
{ |
/* follow the redirect */ |
$this->_redirectdepth++; |
$this->lastredirectaddr=$this->_redirectaddr; |
$this->fetch($this->_redirectaddr); |
} |
} |
} |
if($this->_framedepth < $this->maxframes && count($this->_frameurls) > 0) |
{ |
$frameurls = $this->_frameurls; |
$this->_frameurls = array(); |
while(list(,$frameurl) = each($frameurls)) |
{ |
if($this->_framedepth < $this->maxframes) |
{ |
$this->fetch($frameurl); |
$this->_framedepth++; |
} |
else |
break; |
} |
} |
} |
else |
{ |
return false; |
} |
return true; |
break; |
case "https": |
if(!$this->curl_path || (!is_executable($this->curl_path))) { |
$this->error = "Bad curl ($this->curl_path), can't fetch HTTPS \n"; |
return false; |
} |
$this->host = $URI_PARTS["host"]; |
if(!empty($URI_PARTS["port"])) |
$this->port = $URI_PARTS["port"]; |
if($this->_isproxy) |
{ |
// using proxy, send entire URI |
$this->_httpsrequest($URI,$URI,$this->_httpmethod); |
} |
else |
{ |
$path = $URI_PARTS["path"].($URI_PARTS["query"] ? "?".$URI_PARTS["query"] : ""); |
// no proxy, send only the path |
$this->_httpsrequest($path, $URI, $this->_httpmethod); |
} |
if($this->_redirectaddr) |
{ |
/* url was redirected, check if we've hit the max depth */ |
if($this->maxredirs > $this->_redirectdepth) |
{ |
// only follow redirect if it's on this site, or offsiteok is true |
if(preg_match("|^http://".preg_quote($this->host)."|i",$this->_redirectaddr) || $this->offsiteok) |
{ |
/* follow the redirect */ |
$this->_redirectdepth++; |
$this->lastredirectaddr=$this->_redirectaddr; |
$this->fetch($this->_redirectaddr); |
} |
} |
} |
if($this->_framedepth < $this->maxframes && count($this->_frameurls) > 0) |
{ |
$frameurls = $this->_frameurls; |
$this->_frameurls = array(); |
while(list(,$frameurl) = each($frameurls)) |
{ |
if($this->_framedepth < $this->maxframes) |
{ |
$this->fetch($frameurl); |
$this->_framedepth++; |
} |
else |
break; |
} |
} |
return true; |
break; |
default: |
// not a valid protocol |
$this->error = 'Invalid protocol "'.$URI_PARTS["scheme"].'"\n'; |
return false; |
break; |
} |
return true; |
} |
/*======================================================================*\ |
Private functions |
\*======================================================================*/ |
/*======================================================================*\ |
Function: _striplinks |
Purpose: strip the hyperlinks from an html document |
Input: $document document to strip. |
Output: $match an array of the links |
\*======================================================================*/ |
function _striplinks($document) |
{ |
preg_match_all("'<\s*a\s+.*href\s*=\s* # find <a href= |
([\"\'])? # find single or double quote |
(?(1) (.*?)\\1 | ([^\s\>]+)) # if quote found, match up to next matching |
# quote, otherwise match up to next space |
'isx",$document,$links); |
// catenate the non-empty matches from the conditional subpattern |
while(list($key,$val) = each($links[2])) |
{ |
if(!empty($val)) |
$match[] = $val; |
} |
while(list($key,$val) = each($links[3])) |
{ |
if(!empty($val)) |
$match[] = $val; |
} |
// return the links |
return $match; |
} |
/*======================================================================*\ |
Function: _stripform |
Purpose: strip the form elements from an html document |
Input: $document document to strip. |
Output: $match an array of the links |
\*======================================================================*/ |
function _stripform($document) |
{ |
preg_match_all("'<\/?(FORM|INPUT|SELECT|TEXTAREA|(OPTION))[^<>]*>(?(2)(.*(?=<\/?(option|select)[^<>]*>[\r\n]*)|(?=[\r\n]*))|(?=[\r\n]*))'Usi",$document,$elements); |
// catenate the matches |
$match = implode("\r\n",$elements[0]); |
// return the links |
return $match; |
} |
/*======================================================================*\ |
Function: _striptext |
Purpose: strip the text from an html document |
Input: $document document to strip. |
Output: $text the resulting text |
\*======================================================================*/ |
function _striptext($document) |
{ |
// I didn't use preg eval (//e) since that is only available in PHP 4.0. |
// so, list your entities one by one here. I included some of the |
// more common ones. |
$search = array("'<script[^>]*?>.*?</script>'si", // strip out javascript |
"'<[\/\!]*?[^<>]*?>'si", // strip out html tags |
"'([\r\n])[\s]+'", // strip out white space |
"'&(quote|#34);'i", // replace html entities |
"'&(amp|#38);'i", |
"'&(lt|#60);'i", |
"'&(gt|#62);'i", |
"'&(nbsp|#160);'i", |
"'&(iexcl|#161);'i", |
"'&(cent|#162);'i", |
"'&(pound|#163);'i", |
"'&(copy|#169);'i" |
); |
$replace = array( "", |
"", |
"\\1", |
"\"", |
"&", |
"<", |
">", |
" ", |
chr(161), |
chr(162), |
chr(163), |
chr(169)); |
$text = preg_replace($search,$replace,$document); |
return $text; |
} |
/*======================================================================*\ |
Function: _expandlinks |
Purpose: expand each link into a fully qualified URL |
Input: $links the links to qualify |
$URI the full URI to get the base from |
Output: $expandedLinks the expanded links |
\*======================================================================*/ |
function _expandlinks($links,$URI) |
{ |
preg_match("/^[^\?]+/",$URI,$match); |
$match = preg_replace("|/[^\/\.]+\.[^\/\.]+$|","",$match[0]); |
$search = array( "|^http://".preg_quote($this->host)."|i", |
"|^(?!http://)(\/)?(?!mailto:)|i", |
"|/\./|", |
"|/[^\/]+/\.\./|" |
); |
$replace = array( "", |
$match."/", |
"/", |
"/" |
); |
$expandedLinks = preg_replace($search,$replace,$links); |
return $expandedLinks; |
} |
/*======================================================================*\ |
Function: _httprequest |
Purpose: go get the http data from the server |
Input: $url the url to fetch |
$fp the current open file pointer |
$URI the full URI |
$body body contents to send if any (POST) |
Output: |
\*======================================================================*/ |
function _httprequest($url,$fp,$URI,$http_method,$content_type="",$body="") |
{ |
if($this->passcookies && $this->_redirectaddr) |
$this->setcookies(); |
$URI_PARTS = parse_url($URI); |
if(empty($url)) |
$url = "/"; |
$headers = $http_method." ".$url." ".$this->_httpversion."\r\n"; |
if(!empty($this->agent)) |
$headers .= "User-Agent: ".$this->agent."\r\n"; |
if(!empty($this->host) && !isset($this->rawheaders['Host'])) |
$headers .= "Host: ".$this->host."\r\n"; |
if(!empty($this->accept)) |
$headers .= "Accept: ".$this->accept."\r\n"; |
if($this->use_gzip) { |
// make sure PHP was built with --with-zlib |
// and we can handle gzipp'ed data |
if ( function_exists('gzinflate') ) { |
$headers .= "Accept-encoding: gzip\r\n"; |
} |
else { |
trigger_error( |
"use_gzip is on, but PHP was built without zlib support.". |
" Requesting file(s) without gzip encoding.", |
E_USER_NOTICE); |
} |
} |
if(!empty($this->referer)) |
$headers .= "Referer: ".$this->referer."\r\n"; |
if(!empty($this->cookies)) |
{ |
if(!is_array($this->cookies)) |
$this->cookies = (array)$this->cookies; |
reset($this->cookies); |
if ( count($this->cookies) > 0 ) { |
$cookie_headers .= 'Cookie: '; |
foreach ( $this->cookies as $cookieKey => $cookieVal ) { |
$cookie_headers .= $cookieKey."=".urlencode($cookieVal)."; "; |
} |
$headers .= substr($cookie_headers,0,-2) . "\r\n"; |
} |
} |
if(!empty($this->rawheaders)) |
{ |
if(!is_array($this->rawheaders)) |
$this->rawheaders = (array)$this->rawheaders; |
while(list($headerKey,$headerVal) = each($this->rawheaders)) |
$headers .= $headerKey.": ".$headerVal."\r\n"; |
} |
if(!empty($content_type)) { |
$headers .= "Content-type: $content_type"; |
if ($content_type == "multipart/form-data") |
$headers .= "; boundary=".$this->_mime_boundary; |
$headers .= "\r\n"; |
} |
if(!empty($body)) |
$headers .= "Content-length: ".strlen($body)."\r\n"; |
if(!empty($this->user) || !empty($this->pass)) |
$headers .= "Authorization: BASIC ".base64_encode($this->user.":".$this->pass)."\r\n"; |
$headers .= "\r\n"; |
// set the read timeout if needed |
if ($this->read_timeout > 0) |
socket_set_timeout($fp, $this->read_timeout); |
$this->timed_out = false; |
fwrite($fp,$headers.$body,strlen($headers.$body)); |
$this->_redirectaddr = false; |
unset($this->headers); |
// content was returned gzip encoded? |
$is_gzipped = false; |
while($currentHeader = fgets($fp,$this->_maxlinelen)) |
{ |
if ($this->read_timeout > 0 && $this->_check_timeout($fp)) |
{ |
$this->status=-100; |
return false; |
} |
// if($currentHeader == "\r\n") |
if(preg_match("/^\r?\n$/", $currentHeader) ) |
break; |
// if a header begins with Location: or URI:, set the redirect |
if(preg_match("/^(Location:|URI:)/i",$currentHeader)) |
{ |
// get URL portion of the redirect |
preg_match("/^(Location:|URI:)\s+(.*)/",chop($currentHeader),$matches); |
// look for :// in the Location header to see if hostname is included |
if(!preg_match("|\:\/\/|",$matches[2])) |
{ |
// no host in the path, so prepend |
$this->_redirectaddr = $URI_PARTS["scheme"]."://".$this->host.":".$this->port; |
// eliminate double slash |
if(!preg_match("|^/|",$matches[2])) |
$this->_redirectaddr .= "/".$matches[2]; |
else |
$this->_redirectaddr .= $matches[2]; |
} |
else |
$this->_redirectaddr = $matches[2]; |
} |
if(preg_match("|^HTTP/|",$currentHeader)) |
{ |
if(preg_match("|^HTTP/[^\s]*\s(.*?)\s|",$currentHeader, $status)) |
{ |
$this->status= $status[1]; |
} |
$this->response_code = $currentHeader; |
} |
if (preg_match("/Content-Encoding: gzip/", $currentHeader) ) { |
$is_gzipped = true; |
} |
$this->headers[] = $currentHeader; |
} |
# $results = fread($fp, $this->maxlength); |
$results = ""; |
while ( $data = fread($fp, $this->maxlength) ) { |
$results .= $data; |
if ( |
strlen($results) > $this->maxlength ) { |
break; |
} |
} |
// gunzip |
if ( $is_gzipped ) { |
// per http://www.php.net/manual/en/function.gzencode.php |
$results = substr($results, 10); |
$results = gzinflate($results); |
} |
if ($this->read_timeout > 0 && $this->_check_timeout($fp)) |
{ |
$this->status=-100; |
return false; |
} |
// check if there is a a redirect meta tag |
if(preg_match("'<meta[\s]*http-equiv[^>]*?content[\s]*=[\s]*[\"\']?\d+;[\s]+URL[\s]*=[\s]*([^\"\']*?)[\"\']?>'i",$results,$match)) |
{ |
$this->_redirectaddr = $this->_expandlinks($match[1],$URI); |
} |
// have we hit our frame depth and is there frame src to fetch? |
if(($this->_framedepth < $this->maxframes) && preg_match_all("'<frame\s+.*src[\s]*=[\'\"]?([^\'\"\>]+)'i",$results,$match)) |
{ |
$this->results[] = $results; |
for($x=0; $x<count($match[1]); $x++) |
$this->_frameurls[] = $this->_expandlinks($match[1][$x],$URI_PARTS["scheme"]."://".$this->host); |
} |
// have we already fetched framed content? |
elseif(is_array($this->results)) |
$this->results[] = $results; |
// no framed content |
else |
$this->results = $results; |
return true; |
} |
/*======================================================================*\ |
Function: _httpsrequest |
Purpose: go get the https data from the server using curl |
Input: $url the url to fetch |
$URI the full URI |
$body body contents to send if any (POST) |
Output: |
\*======================================================================*/ |
function _httpsrequest($url,$URI,$http_method,$content_type="",$body="") |
{ |
if($this->passcookies && $this->_redirectaddr) |
$this->setcookies(); |
$headers = array(); |
$URI_PARTS = parse_url($URI); |
if(empty($url)) |
$url = "/"; |
// GET ... header not needed for curl |
//$headers[] = $http_method." ".$url." ".$this->_httpversion; |
if(!empty($this->agent)) |
$headers[] = "User-Agent: ".$this->agent; |
if(!empty($this->host)) |
$headers[] = "Host: ".$this->host; |
if(!empty($this->accept)) |
$headers[] = "Accept: ".$this->accept; |
if(!empty($this->referer)) |
$headers[] = "Referer: ".$this->referer; |
if(!empty($this->cookies)) |
{ |
if(!is_array($this->cookies)) |
$this->cookies = (array)$this->cookies; |
reset($this->cookies); |
if ( count($this->cookies) > 0 ) { |
$cookie_str = 'Cookie: '; |
foreach ( $this->cookies as $cookieKey => $cookieVal ) { |
$cookie_str .= $cookieKey."=".urlencode($cookieVal)."; "; |
} |
$headers[] = substr($cookie_str,0,-2); |
} |
} |
if(!empty($this->rawheaders)) |
{ |
if(!is_array($this->rawheaders)) |
$this->rawheaders = (array)$this->rawheaders; |
while(list($headerKey,$headerVal) = each($this->rawheaders)) |
$headers[] = $headerKey.": ".$headerVal; |
} |
if(!empty($content_type)) { |
if ($content_type == "multipart/form-data") |
$headers[] = "Content-type: $content_type; boundary=".$this->_mime_boundary; |
else |
$headers[] = "Content-type: $content_type"; |
} |
if(!empty($body)) |
$headers[] = "Content-length: ".strlen($body); |
if(!empty($this->user) || !empty($this->pass)) |
$headers[] = "Authorization: BASIC ".base64_encode($this->user.":".$this->pass); |
for($curr_header = 0; $curr_header < count($headers); $curr_header++) { |
$cmdline_params .= " -H \"".$headers[$curr_header]."\""; |
} |
if(!empty($body)) |
$cmdline_params .= " -d \"$body\""; |
if($this->read_timeout > 0) |
$cmdline_params .= " -m ".$this->read_timeout; |
$headerfile = uniqid(time()); |
# accept self-signed certs |
$cmdline_params .= " -k"; |
exec($this->curl_path." -D \"/tmp/$headerfile\"".escapeshellcmd($cmdline_params)." ".escapeshellcmd($URI),$results,$return); |
if($return) |
{ |
$this->error = "Error: cURL could not retrieve the document, error $return."; |
return false; |
} |
$results = implode("\r\n",$results); |
$result_headers = file("/tmp/$headerfile"); |
$this->_redirectaddr = false; |
unset($this->headers); |
for($currentHeader = 0; $currentHeader < count($result_headers); $currentHeader++) |
{ |
// if a header begins with Location: or URI:, set the redirect |
if(preg_match("/^(Location: |URI: )/i",$result_headers[$currentHeader])) |
{ |
// get URL portion of the redirect |
preg_match("/^(Location: |URI:)(.*)/",chop($result_headers[$currentHeader]),$matches); |
// look for :// in the Location header to see if hostname is included |
if(!preg_match("|\:\/\/|",$matches[2])) |
{ |
// no host in the path, so prepend |
$this->_redirectaddr = $URI_PARTS["scheme"]."://".$this->host.":".$this->port; |
// eliminate double slash |
if(!preg_match("|^/|",$matches[2])) |
$this->_redirectaddr .= "/".$matches[2]; |
else |
$this->_redirectaddr .= $matches[2]; |
} |
else |
$this->_redirectaddr = $matches[2]; |
} |
if(preg_match("|^HTTP/|",$result_headers[$currentHeader])) |
{ |
$this->response_code = $result_headers[$currentHeader]; |
if(preg_match("|^HTTP/[^\s]*\s(.*?)\s|",$this->response_code, $match)) |
{ |
$this->status= $match[1]; |
} |
} |
$this->headers[] = $result_headers[$currentHeader]; |
} |
// check if there is a a redirect meta tag |
if(preg_match("'<meta[\s]*http-equiv[^>]*?content[\s]*=[\s]*[\"\']?\d+;[\s]+URL[\s]*=[\s]*([^\"\']*?)[\"\']?>'i",$results,$match)) |
{ |
$this->_redirectaddr = $this->_expandlinks($match[1],$URI); |
} |
// have we hit our frame depth and is there frame src to fetch? |
if(($this->_framedepth < $this->maxframes) && preg_match_all("'<frame\s+.*src[\s]*=[\'\"]?([^\'\"\>]+)'i",$results,$match)) |
{ |
$this->results[] = $results; |
for($x=0; $x<count($match[1]); $x++) |
$this->_frameurls[] = $this->_expandlinks($match[1][$x],$URI_PARTS["scheme"]."://".$this->host); |
} |
// have we already fetched framed content? |
elseif(is_array($this->results)) |
$this->results[] = $results; |
// no framed content |
else |
$this->results = $results; |
unlink("/tmp/$headerfile"); |
return true; |
} |
/*======================================================================*\ |
Function: setcookies() |
Purpose: set cookies for a redirection |
\*======================================================================*/ |
function setcookies() |
{ |
for($x=0; $x<count($this->headers); $x++) |
{ |
if(preg_match("/^set-cookie:[\s]+([^=]+)=([^;]+)/i", $this->headers[$x],$match)) |
$this->cookies[$match[1]] = $match[2]; |
} |
} |
/*======================================================================*\ |
Function: _check_timeout |
Purpose: checks whether timeout has occurred |
Input: $fp file pointer |
\*======================================================================*/ |
function _check_timeout($fp) |
{ |
if ($this->read_timeout > 0) { |
$fp_status = socket_get_status($fp); |
if ($fp_status["timed_out"]) { |
$this->timed_out = true; |
return true; |
} |
} |
return false; |
} |
/*======================================================================*\ |
Function: _connect |
Purpose: make a socket connection |
Input: $fp file pointer |
\*======================================================================*/ |
function _connect(&$fp) |
{ |
if(!empty($this->proxy_host) && !empty($this->proxy_port)) |
{ |
$this->_isproxy = true; |
$host = $this->proxy_host; |
$port = $this->proxy_port; |
} |
else |
{ |
$host = $this->host; |
$port = $this->port; |
} |
$this->status = 0; |
if($fp = fsockopen( |
$host, |
$port, |
$errno, |
$errstr, |
$this->_fp_timeout |
)) |
{ |
// socket connection succeeded |
return true; |
} |
else |
{ |
// socket connection failed |
$this->status = $errno; |
switch($errno) |
{ |
case -3: |
$this->error="socket creation failed (-3)"; |
case -4: |
$this->error="dns lookup failure (-4)"; |
case -5: |
$this->error="connection refused or timed out (-5)"; |
default: |
$this->error="connection failed (".$errno.")"; |
} |
return false; |
} |
} |
/*======================================================================*\ |
Function: _disconnect |
Purpose: disconnect a socket connection |
Input: $fp file pointer |
\*======================================================================*/ |
function _disconnect($fp) |
{ |
return(fclose($fp)); |
} |
/*======================================================================*\ |
Function: _prepare_post_body |
Purpose: Prepare post body according to encoding type |
Input: $formvars - form variables |
$formfiles - form upload files |
Output: post body |
\*======================================================================*/ |
function _prepare_post_body($formvars, $formfiles) |
{ |
settype($formvars, "array"); |
settype($formfiles, "array"); |
if (count($formvars) == 0 && count($formfiles) == 0) |
return; |
switch ($this->_submit_type) { |
case "application/x-www-form-urlencoded": |
reset($formvars); |
while(list($key,$val) = each($formvars)) { |
if (is_array($val) || is_object($val)) { |
while (list($cur_key, $cur_val) = each($val)) { |
$postdata .= urlencode($key)."[]=".urlencode($cur_val)."&"; |
} |
} else |
$postdata .= urlencode($key)."=".urlencode($val)."&"; |
} |
break; |
case "multipart/form-data": |
$this->_mime_boundary = "Snoopy".md5(uniqid(microtime())); |
reset($formvars); |
while(list($key,$val) = each($formvars)) { |
if (is_array($val) || is_object($val)) { |
while (list($cur_key, $cur_val) = each($val)) { |
$postdata .= "--".$this->_mime_boundary."\r\n"; |
$postdata .= "Content-Disposition: form-data; name=\"$key\[\]\"\r\n\r\n"; |
$postdata .= "$cur_val\r\n"; |
} |
} else { |
$postdata .= "--".$this->_mime_boundary."\r\n"; |
$postdata .= "Content-Disposition: form-data; name=\"$key\"\r\n\r\n"; |
$postdata .= "$val\r\n"; |
} |
} |
reset($formfiles); |
while (list($field_name, $file_names) = each($formfiles)) { |
settype($file_names, "array"); |
while (list(, $file_name) = each($file_names)) { |
if (!is_readable($file_name)) continue; |
$fp = fopen($file_name, "r"); |
$file_content = fread($fp, filesize($file_name)); |
fclose($fp); |
$base_name = basename($file_name); |
$postdata .= "--".$this->_mime_boundary."\r\n"; |
$postdata .= "Content-Disposition: form-data; name=\"$field_name\"; filename=\"$base_name\"\r\n\r\n"; |
$postdata .= "$file_content\r\n"; |
} |
} |
$postdata .= "--".$this->_mime_boundary."--\r\n"; |
break; |
} |
return $postdata; |
} |
} |
?> |
/branches/v1.0-menes/api/syndication_rss/magpierss/rss_fetch.inc |
---|
New file |
0,0 → 1,458 |
<?php |
/* |
* Project: MagpieRSS: a simple RSS integration tool |
* File: rss_fetch.inc, a simple functional interface |
to fetching and parsing RSS files, via the |
function fetch_rss() |
* Author: Kellan Elliott-McCrea <kellan@protest.net> |
* License: GPL |
* |
* The lastest version of MagpieRSS can be obtained from: |
* http://magpierss.sourceforge.net |
* |
* For questions, help, comments, discussion, etc., please join the |
* Magpie mailing list: |
* magpierss-general@lists.sourceforge.net |
* |
*/ |
// Setup MAGPIE_DIR for use on hosts that don't include |
// the current path in include_path. |
// with thanks to rajiv and smarty |
if (!defined('DIR_SEP')) { |
define('DIR_SEP', DIRECTORY_SEPARATOR); |
} |
if (!defined('MAGPIE_DIR')) { |
define('MAGPIE_DIR', dirname(__FILE__) . DIR_SEP); |
} |
require_once( MAGPIE_DIR . 'rss_parse.inc' ); |
require_once( MAGPIE_DIR . 'rss_cache.inc' ); |
// for including 3rd party libraries |
define('MAGPIE_EXTLIB', MAGPIE_DIR . 'extlib' . DIR_SEP); |
require_once( MAGPIE_EXTLIB . 'Snoopy.class.inc'); |
/* |
* CONSTANTS - redefine these in your script to change the |
* behaviour of fetch_rss() currently, most options effect the cache |
* |
* MAGPIE_CACHE_ON - Should Magpie cache parsed RSS objects? |
* For me a built in cache was essential to creating a "PHP-like" |
* feel to Magpie, see rss_cache.inc for rationale |
* |
* |
* MAGPIE_CACHE_DIR - Where should Magpie cache parsed RSS objects? |
* This should be a location that the webserver can write to. If this |
* directory does not already exist Mapie will try to be smart and create |
* it. This will often fail for permissions reasons. |
* |
* |
* MAGPIE_CACHE_AGE - How long to store cached RSS objects? In seconds. |
* |
* |
* MAGPIE_CACHE_FRESH_ONLY - If remote fetch fails, throw error |
* instead of returning stale object? |
* |
* MAGPIE_DEBUG - Display debugging notices? |
* |
*/ |
/*=======================================================================*\ |
Function: fetch_rss: |
Purpose: return RSS object for the give url |
maintain the cache |
Input: url of RSS file |
Output: parsed RSS object (see rss_parse.inc) |
NOTES ON CACHEING: |
If caching is on (MAGPIE_CACHE_ON) fetch_rss will first check the cache. |
NOTES ON RETRIEVING REMOTE FILES: |
If conditional gets are on (MAGPIE_CONDITIONAL_GET_ON) fetch_rss will |
return a cached object, and touch the cache object upon recieving a |
304. |
NOTES ON FAILED REQUESTS: |
If there is an HTTP error while fetching an RSS object, the cached |
version will be return, if it exists (and if MAGPIE_CACHE_FRESH_ONLY is off) |
\*=======================================================================*/ |
define('MAGPIE_VERSION', '0.72'); |
$MAGPIE_ERROR = ""; |
function fetch_rss ($url) { |
// initialize constants |
init(); |
if ( !isset($url) ) { |
error("fetch_rss called without a url"); |
return false; |
} |
// if cache is disabled |
if ( !MAGPIE_CACHE_ON ) { |
// fetch file, and parse it |
$resp = _fetch_remote_file( $url ); |
if ( is_success( $resp->status ) ) { |
return _response_to_rss( $resp ); |
} |
else { |
error("Failed to fetch $url and cache is off"); |
return false; |
} |
} |
// else cache is ON |
else { |
// Flow |
// 1. check cache |
// 2. if there is a hit, make sure its fresh |
// 3. if cached obj fails freshness check, fetch remote |
// 4. if remote fails, return stale object, or error |
$cache = new RSSCache( MAGPIE_CACHE_DIR, MAGPIE_CACHE_AGE ); |
if (MAGPIE_DEBUG and $cache->ERROR) { |
debug($cache->ERROR, E_USER_WARNING); |
} |
$cache_status = 0; // response of check_cache |
$request_headers = array(); // HTTP headers to send with fetch |
$rss = 0; // parsed RSS object |
$errormsg = 0; // errors, if any |
// store parsed XML by desired output encoding |
// as character munging happens at parse time |
$cache_key = $url . MAGPIE_OUTPUT_ENCODING; |
if (!$cache->ERROR) { |
// return cache HIT, MISS, or STALE |
$cache_status = $cache->check_cache( $cache_key); |
} |
// if object cached, and cache is fresh, return cached obj |
if ( $cache_status == 'HIT' ) { |
$rss = $cache->get( $cache_key ); |
if ( isset($rss) and $rss ) { |
// should be cache age |
$rss->from_cache = 1; |
if ( MAGPIE_DEBUG > 1) { |
debug("MagpieRSS: Cache HIT", E_USER_NOTICE); |
} |
return $rss; |
} |
} |
// else attempt a conditional get |
// setup headers |
if ( $cache_status == 'STALE' ) { |
$rss = $cache->get( $cache_key ); |
if ( $rss and $rss->etag and $rss->last_modified ) { |
$request_headers['If-None-Match'] = $rss->etag; |
$request_headers['If-Last-Modified'] = $rss->last_modified; |
} |
} |
$resp = _fetch_remote_file( $url, $request_headers ); |
if (isset($resp) and $resp) { |
if ($resp->status == '304' ) { |
// we have the most current copy |
if ( MAGPIE_DEBUG > 1) { |
debug("Got 304 for $url"); |
} |
// reset cache on 304 (at minutillo insistent prodding) |
$cache->set($cache_key, $rss); |
return $rss; |
} |
elseif ( is_success( $resp->status ) ) { |
$rss = _response_to_rss( $resp ); |
if ( $rss ) { |
if (MAGPIE_DEBUG > 1) { |
debug("Fetch successful"); |
} |
// add object to cache |
$cache->set( $cache_key, $rss ); |
return $rss; |
} |
} |
else { |
$errormsg = "Failed to fetch $url "; |
if ( $resp->status == '-100' ) { |
$errormsg .= "(Request timed out after " . MAGPIE_FETCH_TIME_OUT . " seconds)"; |
} |
elseif ( $resp->error ) { |
# compensate for Snoopy's annoying habbit to tacking |
# on '\n' |
$http_error = substr($resp->error, 0, -2); |
$errormsg .= "(HTTP Error: $http_error)"; |
} |
else { |
$errormsg .= "(HTTP Response: " . $resp->response_code .')'; |
} |
} |
} |
else { |
$errormsg = "Unable to retrieve RSS file for unknown reasons."; |
} |
// else fetch failed |
// attempt to return cached object |
if ($rss) { |
if ( MAGPIE_DEBUG ) { |
debug("Returning STALE object for $url"); |
} |
return $rss; |
} |
// else we totally failed |
error( $errormsg ); |
return false; |
} // end if ( !MAGPIE_CACHE_ON ) { |
} // end fetch_rss() |
/*=======================================================================*\ |
Function: error |
Purpose: set MAGPIE_ERROR, and trigger error |
\*=======================================================================*/ |
function error ($errormsg, $lvl=E_USER_WARNING) { |
global $MAGPIE_ERROR; |
// append PHP's error message if track_errors enabled |
if ( isset($php_errormsg) ) { |
$errormsg .= " ($php_errormsg)"; |
} |
if ( $errormsg ) { |
$errormsg = "MagpieRSS: $errormsg"; |
$MAGPIE_ERROR = $errormsg; |
trigger_error( $errormsg, $lvl); |
} |
} |
function debug ($debugmsg, $lvl=E_USER_NOTICE) { |
trigger_error("MagpieRSS [debug] $debugmsg", $lvl); |
} |
/*=======================================================================*\ |
Function: magpie_error |
Purpose: accessor for the magpie error variable |
\*=======================================================================*/ |
function magpie_error ($errormsg="") { |
global $MAGPIE_ERROR; |
if ( isset($errormsg) and $errormsg ) { |
$MAGPIE_ERROR = $errormsg; |
} |
return $MAGPIE_ERROR; |
} |
/*=======================================================================*\ |
Function: _fetch_remote_file |
Purpose: retrieve an arbitrary remote file |
Input: url of the remote file |
headers to send along with the request (optional) |
Output: an HTTP response object (see Snoopy.class.inc) |
\*=======================================================================*/ |
function _fetch_remote_file ($url, $headers = "" ) { |
// Snoopy is an HTTP client in PHP |
$client = new Snoopy(); |
$client->agent = MAGPIE_USER_AGENT; |
$client->read_timeout = MAGPIE_FETCH_TIME_OUT; |
$client->use_gzip = MAGPIE_USE_GZIP; |
if (is_array($headers) ) { |
$client->rawheaders = $headers; |
} |
@$client->fetch($url); |
return $client; |
} |
/*=======================================================================*\ |
Function: _response_to_rss |
Purpose: parse an HTTP response object into an RSS object |
Input: an HTTP response object (see Snoopy) |
Output: parsed RSS object (see rss_parse) |
\*=======================================================================*/ |
function _response_to_rss ($resp) { |
$rss = new MagpieRSS( $resp->results, MAGPIE_OUTPUT_ENCODING, MAGPIE_INPUT_ENCODING, MAGPIE_DETECT_ENCODING ); |
// if RSS parsed successfully |
if ( $rss and !$rss->ERROR) { |
// find Etag, and Last-Modified |
foreach($resp->headers as $h) { |
// 2003-03-02 - Nicola Asuni (www.tecnick.com) - fixed bug "Undefined offset: 1" |
if (strpos($h, ": ")) { |
list($field, $val) = explode(": ", $h, 2); |
} |
else { |
$field = $h; |
$val = ""; |
} |
if ( $field == 'ETag' ) { |
$rss->etag = $val; |
} |
if ( $field == 'Last-Modified' ) { |
$rss->last_modified = $val; |
} |
} |
return $rss; |
} // else construct error message |
else { |
$errormsg = "Failed to parse RSS file."; |
if ($rss) { |
$errormsg .= " (" . $rss->ERROR . ")"; |
} |
error($errormsg); |
return false; |
} // end if ($rss and !$rss->error) |
} |
/*=======================================================================*\ |
Function: init |
Purpose: setup constants with default values |
check for user overrides |
\*=======================================================================*/ |
function init () { |
if ( defined('MAGPIE_INITALIZED') ) { |
return; |
} |
else { |
define('MAGPIE_INITALIZED', true); |
} |
if ( !defined('MAGPIE_CACHE_ON') ) { |
define('MAGPIE_CACHE_ON', false); |
} |
if ( !defined('MAGPIE_CACHE_DIR') ) { |
define('MAGPIE_CACHE_DIR', './cache'); |
} |
if ( !defined('MAGPIE_CACHE_AGE') ) { |
define('MAGPIE_CACHE_AGE', 60*60); // one hour |
} |
if ( !defined('MAGPIE_CACHE_FRESH_ONLY') ) { |
define('MAGPIE_CACHE_FRESH_ONLY', false); |
} |
if ( !defined('MAGPIE_OUTPUT_ENCODING') ) { |
define('MAGPIE_OUTPUT_ENCODING', 'ISO-8859-1'); |
} |
if ( !defined('MAGPIE_INPUT_ENCODING') ) { |
define('MAGPIE_INPUT_ENCODING', null); |
} |
if ( !defined('MAGPIE_DETECT_ENCODING') ) { |
define('MAGPIE_DETECT_ENCODING', true); |
} |
if ( !defined('MAGPIE_DEBUG') ) { |
define('MAGPIE_DEBUG', 0); |
} |
if ( !defined('MAGPIE_USER_AGENT') ) { |
$ua = 'MagpieRSS/'. MAGPIE_VERSION . ' (+http://magpierss.sf.net'; |
if ( MAGPIE_CACHE_ON ) { |
$ua = $ua . ')'; |
} |
else { |
$ua = $ua . '; No cache)'; |
} |
define('MAGPIE_USER_AGENT', $ua); |
} |
if ( !defined('MAGPIE_FETCH_TIME_OUT') ) { |
define('MAGPIE_FETCH_TIME_OUT', 5); // 5 second timeout |
} |
// use gzip encoding to fetch rss files if supported? |
if ( !defined('MAGPIE_USE_GZIP') ) { |
define('MAGPIE_USE_GZIP', true); |
} |
} |
// NOTE: the following code should really be in Snoopy, or at least |
// somewhere other then rss_fetch! |
/*=======================================================================*\ |
HTTP STATUS CODE PREDICATES |
These functions attempt to classify an HTTP status code |
based on RFC 2616 and RFC 2518. |
All of them take an HTTP status code as input, and return true or false |
All this code is adapted from LWP's HTTP::Status. |
\*=======================================================================*/ |
/*=======================================================================*\ |
Function: is_info |
Purpose: return true if Informational status code |
\*=======================================================================*/ |
function is_info ($sc) { |
return $sc >= 100 && $sc < 200; |
} |
/*=======================================================================*\ |
Function: is_success |
Purpose: return true if Successful status code |
\*=======================================================================*/ |
function is_success ($sc) { |
return $sc >= 200 && $sc < 300; |
} |
/*=======================================================================*\ |
Function: is_redirect |
Purpose: return true if Redirection status code |
\*=======================================================================*/ |
function is_redirect ($sc) { |
return $sc >= 300 && $sc < 400; |
} |
/*=======================================================================*\ |
Function: is_error |
Purpose: return true if Error status code |
\*=======================================================================*/ |
function is_error ($sc) { |
return $sc >= 400 && $sc < 600; |
} |
/*=======================================================================*\ |
Function: is_client_error |
Purpose: return true if Error status code, and its a client error |
\*=======================================================================*/ |
function is_client_error ($sc) { |
return $sc >= 400 && $sc < 500; |
} |
/*=======================================================================*\ |
Function: is_client_error |
Purpose: return true if Error status code, and its a server error |
\*=======================================================================*/ |
function is_server_error ($sc) { |
return $sc >= 500 && $sc < 600; |
} |
?> |
/branches/v1.0-menes/api/syndication_rss/magpierss/rss_parse.inc |
---|
New file |
0,0 → 1,605 |
<?php |
/** |
* Project: MagpieRSS: a simple RSS integration tool |
* File: rss_parse.inc - parse an RSS or Atom feed |
* return as a simple object. |
* |
* Handles RSS 0.9x, RSS 2.0, RSS 1.0, and Atom 0.3 |
* |
* The lastest version of MagpieRSS can be obtained from: |
* http://magpierss.sourceforge.net |
* |
* For questions, help, comments, discussion, etc., please join the |
* Magpie mailing list: |
* magpierss-general@lists.sourceforge.net |
* |
* @author Kellan Elliott-McCrea <kellan@protest.net> |
* @version 0.7a |
* @license GPL |
* |
*/ |
define('RSS', 'RSS'); |
define('ATOM', 'Atom'); |
require_once (MAGPIE_DIR . 'rss_utils.inc'); |
/** |
* Hybrid parser, and object, takes RSS as a string and returns a simple object. |
* |
* see: rss_fetch.inc for a simpler interface with integrated caching support |
* |
*/ |
class MagpieRSS { |
var $parser; |
var $current_item = array(); // item currently being parsed |
var $items = array(); // collection of parsed items |
var $channel = array(); // hash of channel fields |
var $textinput = array(); |
var $image = array(); |
var $feed_type; |
var $feed_version; |
var $encoding = ''; // output encoding of parsed rss |
var $_source_encoding = ''; // only set if we have to parse xml prolog |
var $ERROR = ""; |
var $WARNING = ""; |
// define some constants |
var $_CONTENT_CONSTRUCTS = array('content', 'summary', 'info', 'title', 'tagline', 'copyright'); |
var $_KNOWN_ENCODINGS = array('UTF-8', 'US-ASCII', 'ISO-8859-1'); |
// parser variables, useless if you're not a parser, treat as private |
var $stack = array(); // parser stack |
var $inchannel = false; |
var $initem = false; |
var $incontent = false; // if in Atom <content mode="xml"> field |
var $intextinput = false; |
var $inimage = false; |
var $current_namespace = false; |
/** |
* Set up XML parser, parse source, and return populated RSS object.. |
* |
* @param string $source string containing the RSS to be parsed |
* |
* NOTE: Probably a good idea to leave the encoding options alone unless |
* you know what you're doing as PHP's character set support is |
* a little weird. |
* |
* NOTE: A lot of this is unnecessary but harmless with PHP5 |
* |
* |
* @param string $output_encoding output the parsed RSS in this character |
* set defaults to ISO-8859-1 as this is PHP's |
* default. |
* |
* NOTE: might be changed to UTF-8 in future |
* versions. |
* |
* @param string $input_encoding the character set of the incoming RSS source. |
* Leave blank and Magpie will try to figure it |
* out. |
* |
* |
* @param bool $detect_encoding if false Magpie won't attempt to detect |
* source encoding. (caveat emptor) |
* |
*/ |
function MagpieRSS ($source, $output_encoding='ISO-8859-1', |
$input_encoding=null, $detect_encoding=true) |
{ |
# if PHP xml isn't compiled in, die |
# |
if (!function_exists('xml_parser_create')) { |
$this->error( "Failed to load PHP's XML Extension. " . |
"http://www.php.net/manual/en/ref.xml.php", |
E_USER_ERROR ); |
} |
list($parser, $source) = $this->create_parser($source, |
$output_encoding, $input_encoding, $detect_encoding); |
if (!is_resource($parser)) { |
$this->error( "Failed to create an instance of PHP's XML parser. " . |
"http://www.php.net/manual/en/ref.xml.php", |
E_USER_ERROR ); |
} |
$this->parser = $parser; |
# pass in parser, and a reference to this object |
# setup handlers |
# |
xml_set_object( $this->parser, $this ); |
xml_set_element_handler($this->parser, |
'feed_start_element', 'feed_end_element' ); |
xml_set_character_data_handler( $this->parser, 'feed_cdata' ); |
$status = xml_parse( $this->parser, $source ); |
if (! $status ) { |
$errorcode = xml_get_error_code( $this->parser ); |
if ( $errorcode != XML_ERROR_NONE ) { |
$xml_error = xml_error_string( $errorcode ); |
$error_line = xml_get_current_line_number($this->parser); |
$error_col = xml_get_current_column_number($this->parser); |
$errormsg = "$xml_error at line $error_line, column $error_col"; |
$this->error( $errormsg ); |
} |
} |
xml_parser_free( $this->parser ); |
$this->normalize(); |
} |
function feed_start_element($p, $element, &$attrs) { |
$el = $element = strtolower($element); |
$attrs = array_change_key_case($attrs, CASE_LOWER); |
// check for a namespace, and split if found |
$ns = false; |
if ( strpos( $element, ':' ) ) { |
list($ns, $el) = split( ':', $element, 2); |
} |
if ( $ns and $ns != 'rdf' ) { |
$this->current_namespace = $ns; |
} |
# if feed type isn't set, then this is first element of feed |
# identify feed from root element |
# |
if (!isset($this->feed_type) ) { |
if ( $el == 'rdf' ) { |
$this->feed_type = RSS; |
$this->feed_version = '1.0'; |
} |
elseif ( $el == 'rss' ) { |
$this->feed_type = RSS; |
$this->feed_version = $attrs['version']; |
} |
elseif ( $el == 'feed' ) { |
$this->feed_type = ATOM; |
$this->feed_version = $attrs['version']; |
$this->inchannel = true; |
} |
return; |
} |
if ( $el == 'channel' ) |
{ |
$this->inchannel = true; |
} |
elseif ($el == 'item' or $el == 'entry' ) |
{ |
$this->initem = true; |
if ( isset($attrs['rdf:about']) ) { |
$this->current_item['about'] = $attrs['rdf:about']; |
} |
} |
// if we're in the default namespace of an RSS feed, |
// record textinput or image fields |
elseif ( |
$this->feed_type == RSS and |
$this->current_namespace == '' and |
$el == 'textinput' ) |
{ |
$this->intextinput = true; |
} |
elseif ( |
$this->feed_type == RSS and |
$this->current_namespace == '' and |
$el == 'image' ) |
{ |
$this->inimage = true; |
} |
# handle atom content constructs |
elseif ( $this->feed_type == ATOM and in_array($el, $this->_CONTENT_CONSTRUCTS) ) |
{ |
// avoid clashing w/ RSS mod_content |
if ($el == 'content' ) { |
$el = 'atom_content'; |
} |
$this->incontent = $el; |
} |
// if inside an Atom content construct (e.g. content or summary) field treat tags as text |
elseif ($this->feed_type == ATOM and $this->incontent ) |
{ |
// if tags are inlined, then flatten |
$attrs_str = join(' ', |
array_map('map_attrs', |
array_keys($attrs), |
array_values($attrs) ) ); |
$this->append_content( "<$element $attrs_str>" ); |
array_unshift( $this->stack, $el ); |
} |
// Atom support many links per containging element. |
// Magpie treats link elements of type rel='alternate' |
// as being equivalent to RSS's simple link element. |
// |
elseif ($this->feed_type == ATOM and $el == 'link' ) |
{ |
if ( isset($attrs['rel']) and $attrs['rel'] == 'alternate' ) |
{ |
$link_el = 'link'; |
} |
else { |
$link_el = 'link_' . $attrs['rel']; |
} |
$this->append($link_el, $attrs['href']); |
} |
// set stack[0] to current element |
else { |
array_unshift($this->stack, $el); |
} |
} |
function feed_cdata ($p, $text) { |
if ($this->feed_type == ATOM and $this->incontent) |
{ |
$this->append_content( $text ); |
} |
else { |
$current_el = join('_', array_reverse($this->stack)); |
$this->append($current_el, $text); |
} |
} |
function feed_end_element ($p, $el) { |
$el = strtolower($el); |
if ( $el == 'item' or $el == 'entry' ) |
{ |
$this->items[] = $this->current_item; |
$this->current_item = array(); |
$this->initem = false; |
} |
elseif ($this->feed_type == RSS and $this->current_namespace == '' and $el == 'textinput' ) |
{ |
$this->intextinput = false; |
} |
elseif ($this->feed_type == RSS and $this->current_namespace == '' and $el == 'image' ) |
{ |
$this->inimage = false; |
} |
elseif ($this->feed_type == ATOM and in_array($el, $this->_CONTENT_CONSTRUCTS) ) |
{ |
$this->incontent = false; |
} |
elseif ($el == 'channel' or $el == 'feed' ) |
{ |
$this->inchannel = false; |
} |
elseif ($this->feed_type == ATOM and $this->incontent ) { |
// balance tags properly |
// note: i don't think this is actually neccessary |
if ( $this->stack[0] == $el ) |
{ |
$this->append_content("</$el>"); |
} |
else { |
$this->append_content("<$el />"); |
} |
array_shift( $this->stack ); |
} |
else { |
array_shift( $this->stack ); |
} |
$this->current_namespace = false; |
} |
function concat (&$str1, $str2="") { |
if (!isset($str1) ) { |
$str1=""; |
} |
$str1 .= $str2; |
} |
function append_content($text) { |
if ( $this->initem ) { |
$this->concat( $this->current_item[ $this->incontent ], $text ); |
} |
elseif ( $this->inchannel ) { |
$this->concat( $this->channel[ $this->incontent ], $text ); |
} |
} |
// smart append - field and namespace aware |
function append($el, $text) { |
if (!$el) { |
return; |
} |
if ( $this->current_namespace ) |
{ |
if ( $this->initem ) { |
$this->concat( |
$this->current_item[ $this->current_namespace ][ $el ], $text); |
} |
elseif ($this->inchannel) { |
$this->concat( |
$this->channel[ $this->current_namespace][ $el ], $text ); |
} |
elseif ($this->intextinput) { |
$this->concat( |
$this->textinput[ $this->current_namespace][ $el ], $text ); |
} |
elseif ($this->inimage) { |
$this->concat( |
$this->image[ $this->current_namespace ][ $el ], $text ); |
} |
} |
else { |
if ( $this->initem ) { |
$this->concat( |
$this->current_item[ $el ], $text); |
} |
elseif ($this->intextinput) { |
$this->concat( |
$this->textinput[ $el ], $text ); |
} |
elseif ($this->inimage) { |
$this->concat( |
$this->image[ $el ], $text ); |
} |
elseif ($this->inchannel) { |
$this->concat( |
$this->channel[ $el ], $text ); |
} |
} |
} |
function normalize () { |
// if atom populate rss fields |
if ( $this->is_atom() ) { |
$this->channel['description'] = $this->channel['tagline']; |
for ( $i = 0; $i < count($this->items); $i++) { |
$item = $this->items[$i]; |
if ( isset($item['summary']) ) |
$item['description'] = $item['summary']; |
if ( isset($item['atom_content'])) |
$item['content']['encoded'] = $item['atom_content']; |
$atom_date = (isset($item['issued']) ) ? $item['issued'] : $item['modified']; |
if ( $atom_date ) { |
$epoch = @parse_w3cdtf($atom_date); |
if ($epoch and $epoch > 0) { |
$item['date_timestamp'] = $epoch; |
} |
} |
$this->items[$i] = $item; |
} |
} |
elseif ( $this->is_rss() ) { |
$this->channel['tagline'] = $this->channel['description']; |
for ( $i = 0; $i < count($this->items); $i++) { |
$item = $this->items[$i]; |
if ( isset($item['description'])) |
$item['summary'] = $item['description']; |
if ( isset($item['content']['encoded'] ) ) |
$item['atom_content'] = $item['content']['encoded']; |
if ( $this->is_rss() == '1.0' and isset($item['dc']['date']) ) { |
$epoch = @parse_w3cdtf($item['dc']['date']); |
if ($epoch and $epoch > 0) { |
$item['date_timestamp'] = $epoch; |
} |
} |
elseif ( isset($item['pubdate']) ) { |
$epoch = @strtotime($item['pubdate']); |
if ($epoch > 0) { |
$item['date_timestamp'] = $epoch; |
} |
} |
$this->items[$i] = $item; |
} |
} |
} |
function is_rss () { |
if ( $this->feed_type == RSS ) { |
return $this->feed_version; |
} |
else { |
return false; |
} |
} |
function is_atom() { |
if ( $this->feed_type == ATOM ) { |
return $this->feed_version; |
} |
else { |
return false; |
} |
} |
/** |
* return XML parser, and possibly re-encoded source |
* |
*/ |
function create_parser($source, $out_enc, $in_enc, $detect) { |
if ( substr(phpversion(),0,1) == 5) { |
$parser = $this->php5_create_parser($in_enc, $detect); |
} |
else { |
list($parser, $source) = $this->php4_create_parser($source, $in_enc, $detect); |
} |
if ($out_enc) { |
$this->encoding = $out_enc; |
xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, $out_enc); |
} |
return array($parser, $source); |
} |
/** |
* Instantiate an XML parser under PHP5 |
* |
* PHP5 will do a fine job of detecting input encoding |
* if passed an empty string as the encoding. |
* |
* All hail libxml2! |
* |
*/ |
function php5_create_parser($in_enc, $detect) { |
// by default php5 does a fine job of detecting input encodings |
if(!$detect && $in_enc) { |
return xml_parser_create($in_enc); |
} |
else { |
return xml_parser_create(''); |
} |
} |
/** |
* Instaniate an XML parser under PHP4 |
* |
* Unfortunately PHP4's support for character encodings |
* and especially XML and character encodings sucks. As |
* long as the documents you parse only contain characters |
* from the ISO-8859-1 character set (a superset of ASCII, |
* and a subset of UTF-8) you're fine. However once you |
* step out of that comfy little world things get mad, bad, |
* and dangerous to know. |
* |
* The following code is based on SJM's work with FoF |
* @see http://minutillo.com/steve/weblog/2004/6/17/php-xml-and-character-encodings-a-tale-of-sadness-rage-and-data-loss |
* |
*/ |
function php4_create_parser($source, $in_enc, $detect) { |
if ( !$detect ) { |
return array(xml_parser_create($in_enc), $source); |
} |
if (!$in_enc) { |
if (preg_match('/<?xml.*encoding=[\'"](.*?)[\'"].*?>/m', $source, $m)) { |
$in_enc = strtoupper($m[1]); |
$this->source_encoding = $in_enc; |
} |
else { |
$in_enc = 'UTF-8'; |
} |
} |
if ($this->known_encoding($in_enc)) { |
return array(xml_parser_create($in_enc), $source); |
} |
// the dectected encoding is not one of the simple encodings PHP knows |
// attempt to use the iconv extension to |
// cast the XML to a known encoding |
// @see http://php.net/iconv |
if (function_exists('iconv')) { |
$encoded_source = iconv($in_enc,'UTF-8', $source); |
if ($encoded_source) { |
return array(xml_parser_create('UTF-8'), $encoded_source); |
} |
} |
// iconv didn't work, try mb_convert_encoding |
// @see http://php.net/mbstring |
if(function_exists('mb_convert_encoding')) { |
$encoded_source = mb_convert_encoding($source, 'UTF-8', $in_enc ); |
if ($encoded_source) { |
return array(xml_parser_create('UTF-8'), $encoded_source); |
} |
} |
// else |
$this->error("Feed is in an unsupported character encoding. ($in_enc) " . |
"You may see strange artifacts, and mangled characters.", |
E_USER_NOTICE); |
return array(xml_parser_create(), $source); |
} |
function known_encoding($enc) { |
$enc = strtoupper($enc); |
if ( in_array($enc, $this->_KNOWN_ENCODINGS) ) { |
return $enc; |
} |
else { |
return false; |
} |
} |
function error ($errormsg, $lvl=E_USER_WARNING) { |
// append PHP's error message if track_errors enabled |
if ( isset($php_errormsg) ) { |
$errormsg .= " ($php_errormsg)"; |
} |
if ( MAGPIE_DEBUG ) { |
trigger_error( $errormsg, $lvl); |
} |
else { |
error_log( $errormsg, 0); |
} |
$notices = E_USER_NOTICE|E_NOTICE; |
if ( $lvl&$notices ) { |
$this->WARNING = $errormsg; |
} else { |
$this->ERROR = $errormsg; |
} |
} |
} // end class RSS |
function map_attrs($k, $v) { |
return "$k=\"$v\""; |
} |
// patch to support medieval versions of PHP4.1.x, |
// courtesy, Ryan Currie, ryan@digibliss.com |
if (!function_exists('array_change_key_case')) { |
define("CASE_UPPER",1); |
define("CASE_LOWER",0); |
function array_change_key_case($array,$case=CASE_LOWER) { |
if ($case=CASE_LOWER) $cmd=strtolower; |
elseif ($case=CASE_UPPER) $cmd=strtoupper; |
foreach($array as $key=>$value) { |
$output[$cmd($key)]=$value; |
} |
return $output; |
} |
} |
?> |
/branches/v1.0-menes/api/syndication_rss/magpierss/rss_utils.inc |
---|
New file |
0,0 → 1,67 |
<?php |
/* |
* Project: MagpieRSS: a simple RSS integration tool |
* File: rss_utils.inc, utility methods for working with RSS |
* Author: Kellan Elliott-McCrea <kellan@protest.net> |
* Version: 0.51 |
* License: GPL |
* |
* The lastest version of MagpieRSS can be obtained from: |
* http://magpierss.sourceforge.net |
* |
* For questions, help, comments, discussion, etc., please join the |
* Magpie mailing list: |
* magpierss-general@lists.sourceforge.net |
*/ |
/*======================================================================*\ |
Function: parse_w3cdtf |
Purpose: parse a W3CDTF date into unix epoch |
NOTE: http://www.w3.org/TR/NOTE-datetime |
\*======================================================================*/ |
function parse_w3cdtf ( $date_str ) { |
# regex to match wc3dtf |
$pat = "/(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2})(:(\d{2}))?(?:([-+])(\d{2}):?(\d{2})|(Z))?/"; |
if ( preg_match( $pat, $date_str, $match ) ) { |
list( $year, $month, $day, $hours, $minutes, $seconds) = |
array( $match[1], $match[2], $match[3], $match[4], $match[5], $match[6]); |
# calc epoch for current date assuming GMT |
$epoch = gmmktime( $hours, $minutes, $seconds, $month, $day, $year); |
$offset = 0; |
if ( $match[10] == 'Z' ) { |
# zulu time, aka GMT |
} |
else { |
list( $tz_mod, $tz_hour, $tz_min ) = |
array( $match[8], $match[9], $match[10]); |
# zero out the variables |
if ( ! $tz_hour ) { $tz_hour = 0; } |
if ( ! $tz_min ) { $tz_min = 0; } |
$offset_secs = (($tz_hour*60)+$tz_min)*60; |
# is timezone ahead of GMT? then subtract offset |
# |
if ( $tz_mod == '+' ) { |
$offset_secs = $offset_secs * -1; |
} |
$offset = $offset_secs; |
} |
$epoch = $epoch + $offset; |
return $epoch; |
} |
else { |
return -1; |
} |
} |
?> |
/branches/v1.0-menes/api/syndication_rss/magpierss/rss_cache.inc |
---|
New file |
0,0 → 1,200 |
<?php |
/* |
* Project: MagpieRSS: a simple RSS integration tool |
* File: rss_cache.inc, a simple, rolling(no GC), cache |
* for RSS objects, keyed on URL. |
* Author: Kellan Elliott-McCrea <kellan@protest.net> |
* Version: 0.51 |
* License: GPL |
* |
* The lastest version of MagpieRSS can be obtained from: |
* http://magpierss.sourceforge.net |
* |
* For questions, help, comments, discussion, etc., please join the |
* Magpie mailing list: |
* http://lists.sourceforge.net/lists/listinfo/magpierss-general |
* |
*/ |
class RSSCache { |
var $BASE_CACHE = './cache'; // where the cache files are stored |
var $MAX_AGE = 3600; // when are files stale, default one hour |
var $ERROR = ""; // accumulate error messages |
function RSSCache ($base='', $age='') { |
if ( $base ) { |
$this->BASE_CACHE = $base; |
} |
if ( $age ) { |
$this->MAX_AGE = $age; |
} |
// attempt to make the cache directory |
if ( ! file_exists( $this->BASE_CACHE ) ) { |
$status = @mkdir( $this->BASE_CACHE, 0755 ); |
// if make failed |
if ( ! $status ) { |
$this->error( |
"Cache couldn't make dir '" . $this->BASE_CACHE . "'." |
); |
} |
} |
} |
/*=======================================================================*\ |
Function: set |
Purpose: add an item to the cache, keyed on url |
Input: url from wich the rss file was fetched |
Output: true on sucess |
\*=======================================================================*/ |
function set ($url, $rss) { |
$this->ERROR = ""; |
$cache_file = $this->file_name( $url ); |
$fp = @fopen( $cache_file, 'w' ); |
if ( ! $fp ) { |
$this->error( |
"Cache unable to open file for writing: $cache_file" |
); |
return 0; |
} |
$data = $this->serialize( $rss ); |
fwrite( $fp, $data ); |
fclose( $fp ); |
return $cache_file; |
} |
/*=======================================================================*\ |
Function: get |
Purpose: fetch an item from the cache |
Input: url from wich the rss file was fetched |
Output: cached object on HIT, false on MISS |
\*=======================================================================*/ |
function get ($url) { |
$this->ERROR = ""; |
$cache_file = $this->file_name( $url ); |
if ( ! file_exists( $cache_file ) ) { |
$this->debug( |
"Cache doesn't contain: $url (cache file: $cache_file)" |
); |
return 0; |
} |
$fp = @fopen($cache_file, 'r'); |
if ( ! $fp ) { |
$this->error( |
"Failed to open cache file for reading: $cache_file" |
); |
return 0; |
} |
if ($filesize = filesize($cache_file) ) { |
$data = fread( $fp, filesize($cache_file) ); |
$rss = $this->unserialize( $data ); |
return $rss; |
} |
return 0; |
} |
/*=======================================================================*\ |
Function: check_cache |
Purpose: check a url for membership in the cache |
and whether the object is older then MAX_AGE (ie. STALE) |
Input: url from wich the rss file was fetched |
Output: cached object on HIT, false on MISS |
\*=======================================================================*/ |
function check_cache ( $url ) { |
$this->ERROR = ""; |
$filename = $this->file_name( $url ); |
if ( file_exists( $filename ) ) { |
// find how long ago the file was added to the cache |
// and whether that is longer then MAX_AGE |
$mtime = filemtime( $filename ); |
$age = time() - $mtime; |
if ( $this->MAX_AGE > $age ) { |
// object exists and is current |
return 'HIT'; |
} |
else { |
// object exists but is old |
return 'STALE'; |
} |
} |
else { |
// object does not exist |
return 'MISS'; |
} |
} |
function cache_age( $cache_key ) { |
$filename = $this->file_name( $url ); |
if ( file_exists( $filename ) ) { |
$mtime = filemtime( $filename ); |
$age = time() - $mtime; |
return $age; |
} |
else { |
return -1; |
} |
} |
/*=======================================================================*\ |
Function: serialize |
\*=======================================================================*/ |
function serialize ( $rss ) { |
return serialize( $rss ); |
} |
/*=======================================================================*\ |
Function: unserialize |
\*=======================================================================*/ |
function unserialize ( $data ) { |
return unserialize( $data ); |
} |
/*=======================================================================*\ |
Function: file_name |
Purpose: map url to location in cache |
Input: url from wich the rss file was fetched |
Output: a file name |
\*=======================================================================*/ |
function file_name ($url) { |
$filename = md5( $url ); |
return join( DIRECTORY_SEPARATOR, array( $this->BASE_CACHE, $filename ) ); |
} |
/*=======================================================================*\ |
Function: error |
Purpose: register error |
\*=======================================================================*/ |
function error ($errormsg, $lvl=E_USER_WARNING) { |
// append PHP's error message if track_errors enabled |
if ( isset($php_errormsg) ) { |
$errormsg .= " ($php_errormsg)"; |
} |
$this->ERROR = $errormsg; |
if ( MAGPIE_DEBUG ) { |
trigger_error( $errormsg, $lvl); |
} |
else { |
error_log( $errormsg, 0); |
} |
} |
function debug ($debugmsg, $lvl=E_USER_NOTICE) { |
if ( MAGPIE_DEBUG ) { |
$this->error("MagpieRSS [debug] $debugmsg", $lvl); |
} |
} |
} |
?> |
/branches/v1.0-menes/api/debogage/BOG_sql.fonct.php |
---|
New file |
0,0 → 1,105 |
<?php |
//vim: set expandtab tabstop=4 shiftwidth=4: |
// +------------------------------------------------------------------------------------------------------+ |
// | PHP version 4.1 | |
// +------------------------------------------------------------------------------------------------------+ |
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) | |
// +------------------------------------------------------------------------------------------------------+ |
// | | |
// | This library is free software; you can redistribute it and/or | |
// | modify it under the terms of the GNU Lesser General Public | |
// | License as published by the Free Software Foundation; either | |
// | version 2.1 of the License, or (at your option) any later version. | |
// | | |
// | This library 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 | |
// | Lesser General Public License for more details. | |
// | | |
// | You should have received a copy of the GNU Lesser General Public | |
// | License along with this library; if not, write to the Free Software | |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
// | | |
// +------------------------------------------------------------------------------------------------------+ |
// CVS : $Id: BOG_sql.fonct.php,v 1.2 2005-02-28 11:14:45 jpm Exp $ |
/** |
*Paquetage : BOG - bibliothèque de fonctions de débogage. |
* |
* Ce paquetage contient des fonctions de débogage pour différent besoin: |
* - erreur de requête |
* |
*@package Debogage |
//Auteur original : |
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
//Autres auteurs : |
*@author Alexandre GRANIER <alex@tela-botanica.org> |
*@author Laurent COUDOUNEAU <lc@gsite.org> |
*@copyright Tela-Botanica 2000-2004 |
*@version $Revision: 1.2 $ $Date: 2005-02-28 11:14:45 $ |
// +------------------------------------------------------------------------------------------------------+ |
*/ |
// +-------------------------------------------------------------------------+ |
// | Liste des fonctions | |
// +-------------------------------------------------------------------------+ |
/**Fonction BOG_afficherErreurSql() - Permet d'afficher un message d'erreur sql complet. |
* |
* Cette fonction permet d'afficher un ensemble de données suite à une erreur de reqête sql |
* permettant de trouver plus rapidement la source de l'erreur. |
* |
* @param string le nom du fichier d'où provient la requête erronée (utiliser __FILE__ lors de l'apple de cette fonction). |
* @param integer le numéro de la ligne de la requête (utiliser __LINE__ lors de l'apple de cette fonction). |
* @param string le message d'erreur fourni par le programmeur. |
* @param string la requête sql erronée. |
* @param string un éventuel commentaire complémentaire |
* |
* @return string l'ensemble des messages d'erreur et des informations collectées. |
*/ |
function BOG_afficherErreurSql ($nom_fichier_courant, $numero_ligne_courante, $message_erreur, $requete = '', $autre = '') |
{ |
$retour_erreur = "\n"; |
$retour_erreur .= '<div id="zone_erreur">'."\n"; |
$retour_erreur .= '<h1 > ERREUR SQL </h1><br />'."\n"; |
$retour_erreur .= '<p>'."\n"; |
$retour_erreur .= '<span class="champ_intitule" > Fichier : </span> '; |
$retour_erreur .= '<span class="champ_valeur" > '.$nom_fichier_courant.'</span><br />'."\n"; |
$retour_erreur .= '<span class="champ_intitule" > Ligne n° : </span> '; |
$retour_erreur .= '<span class="champ_valeur" > '.$numero_ligne_courante.'</span><br />'."\n"; |
$retour_erreur .= '<span class="champ_intitule" > Message erreur : </span> '; |
$retour_erreur .= '<span class="champ_valeur" > '.$message_erreur.'</span><br />'."\n"; |
if ($requete != '') { |
$retour_erreur .= '<span class="champ_intitule" > Requete : </span> '; |
$retour_erreur .= '<span class="champ_valeur" > '.$requete.' </span><br />'."\n"; |
} |
if ($autre != '') { |
$retour_erreur .= '<span class="champ_intitule" > Autres infos : </span> '; |
$retour_erreur .= '<span class="champ_valeur" > '.$autre.' </span><br />'."\n"; |
} |
$retour_erreur .= '</p>'."\n"; |
$retour_erreur .= '</div>'."\n"; |
return $retour_erreur; |
} |
/* +--Fin du code ---------------------------------------------------------------------------------------+ |
* $Log: not supported by cvs2svn $ |
* Revision 1.1 2004/06/15 10:13:07 jpm |
* Intégration dans Papyrus. |
* |
* Revision 1.4 2004/04/21 07:49:31 jpm |
* Modification des commentaires. |
* |
* Revision 1.3 2004/03/22 16:23:29 jpm |
* Correction point-virgule en trop. |
* |
* Revision 1.2 2004/03/22 12:17:06 jpm |
* Utilisation de class et id CSS à la place des attributs styles. |
* |
* |
* +--Fin du code ----------------------------------------------------------------------------------------+ |
*/ |
?> |
/branches/v1.0-menes/api/debogage/BOG_Gestionnaire_Erreur.class.php |
---|
New file |
0,0 → 1,218 |
<?php |
/*vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +------------------------------------------------------------------------------------------------------+ |
// | PHP version 4.3 | |
// +------------------------------------------------------------------------------------------------------+ |
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) | |
// +------------------------------------------------------------------------------------------------------+ |
// | This file is part of Papyrus. | |
// | | |
// | 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: BOG_Gestionnaire_Erreur.class.php,v 1.5 2005-09-20 20:25:39 ddelon Exp $ |
/** |
* Classe permettant de créer un gestionnaire d'erreur PHP |
* |
* La classe permet de créer un gestionnaire d'erreur PHP et de le configurer. |
* |
*@package Debogage |
//Auteur original : |
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
//Autres auteurs : |
*@author Aucun |
*@copyright Tela-Botanica 2000-2004 |
*@version $Revision: 1.5 $ $Date: 2005-09-20 20:25:39 $ |
// +------------------------------------------------------------------------------------------------------+ |
*/ |
// +------------------------------------------------------------------------------------------------------+ |
// | ENTETE du PROGRAMME | |
// +------------------------------------------------------------------------------------------------------+ |
// +------------------------------------------------------------------------------------------------------+ |
// | CORPS du PROGRAMME | |
// +------------------------------------------------------------------------------------------------------+ |
class BOG_Gestionnaire_Erreur { |
// Attributs |
var $tab_erreurs = array(); |
var $erreur_txt_tete = ''; |
var $erreur_txt_pied = ''; |
var $bln_contexte = false; |
var $langue = 'fr'; |
var $aso_trad = array( 'niveau'=> 'Niveau d\'erreur : ', 'fichier' => 'Nom du fichier : ', |
'ligne' => 'N° de ligne : ', 'contexte' => 'Contexte d\'erreur : '); |
var $class = 'erreur'; |
var $active = 1; |
// Constructeur |
function BOG_Gestionnaire_Erreur($bln_contexte, $class = '', $langue = 'fr', $txt_tete = '', $txt_pied = '', $aso_trad = array()) |
{ |
$this->ecrireContexte($bln_contexte); |
$this->ecrireLangue($langue); |
$this->ecrireTxtTete($txt_tete); |
$this->ecrireTxtPied($txt_pied); |
if (count($aso_trad) != 0) { |
$this->ecrireTraduction($aso_trad); |
} |
if (! empty($class)) { |
$this->ecrireClass($class); |
} |
set_error_handler(array(&$this, 'gererErreur')); |
} |
// Accesseurs |
function setActive($active) |
{ |
$this->active=$active; |
} |
function ecrireErreur($aso_erreur) |
{ |
array_push($this->tab_erreurs, $aso_erreur); |
} |
function lireTableauErreurs() |
{ |
return $this->tab_erreurs; |
} |
function lireTxtTete() |
{ |
return $this->erreur_txt_tete; |
} |
function ecrireTxtTete($txt_tete) |
{ |
$this->erreur_txt_tete = $txt_tete; |
} |
function lireTxtPied() |
{ |
return $this->erreur_txt_pied; |
} |
function ecrireTxtPied($txt_pied) |
{ |
$this->erreur_txt_pied = $txt_pied; |
} |
function lireContexte() |
{ |
return $this->bln_contexte; |
} |
function ecrireContexte($bln) |
{ |
$this->bln_contexte = $bln; |
} |
function lireTraduction($cle) |
{ |
return $this->aso_trad[$cle]; |
} |
function ecrireTraduction($tab_trad) |
{ |
$aso_trad['niveau'] = $tab_trad[0]; |
$aso_trad['fichier'] = $tab_trad[1]; |
$aso_trad['ligne'] = $tab_trad[2]; |
$aso_trad['contexte'] = $tab_trad[3]; |
$this->aso_trad = $aso_trad; |
} |
function lireClass() |
{ |
return $this->class; |
} |
function ecrireClass($class) |
{ |
$this->class = $class; |
} |
function lireLangue() |
{ |
return $this->langue; |
} |
function ecrireLangue($langue) |
{ |
$this->langue = $langue; |
} |
// Méthode |
function gererErreur($niveau, $message, $fichier, $ligne, $contexte) |
{ |
if ($this->active) { |
// Ouais bof le test, mais php5 renvoie vraiment trop de message d'erreur sur Deprecated ... et |
// ca concerne essentiellement les classes pear ! |
if (!defined('E_STRICT')) { |
define("E_STRICT", 2048); |
} |
if ($niveau < E_STRICT) { |
$aso_erreur = array(); |
$aso_erreur['niveau'] = $niveau; |
$aso_erreur['message'] = $message; |
$aso_erreur['fichier'] = $fichier; |
$aso_erreur['ligne'] = $ligne; |
if ($this->lireContexte()) { |
$aso_erreur['contexte'] = $contexte; |
} |
$this->ecrireErreur($aso_erreur); |
} |
} |
} |
function retournerErreurs() |
{ |
$retour = ''; |
foreach($this->lireTableauErreurs() as $aso_erreur) { |
$retour .= '<p class="'.$this->lireClass().'">'."\n"; |
$retour .= '<strong>'.$this->lireTxtTete().$aso_erreur['message'].$this->lireTxtPied().'</strong><br />'."\n"; |
$retour .= '<strong>'.$this->lireTraduction('niveau').'</strong>'.$aso_erreur['niveau'].'<br />'."\n"; |
$retour .= '<strong>'.$this->lireTraduction('fichier').'</strong>'.$aso_erreur['fichier'].'<br />'."\n"; |
$retour .= '<strong>'.$this->lireTraduction('ligne').'</strong>'.$aso_erreur['ligne'].'<br />'."\n"; |
if ($this->lireContexte()) { |
$retour .= '<pre>'."\n"; |
$retour .= '<stong>'.$this->lireTraduction('contexte').'</stong>'.print_r($aso_erreur['contexte'], true)."\n"; |
$retour .= '</pre>'."\n"; |
} |
$retour .= '</p>'."\n"; |
} |
return $retour; |
} |
} |
// +------------------------------------------------------------------------------------------------------+ |
// | PIED du PROGRAMME | |
// +------------------------------------------------------------------------------------------------------+ |
/* +--Fin du code ----------------------------------------------------------------------------------------+ |
* |
* $Log: not supported by cvs2svn $ |
* Revision 1.4 2005/09/20 17:01:22 ddelon |
* php5 et bugs divers |
* |
* Revision 1.3 2004/11/29 15:56:23 jpm |
* Correction bogue. |
* |
* Revision 1.2 2004/11/29 15:54:16 jpm |
* Changement de nom de variable et légère correction. |
* |
* Revision 1.1 2004/11/15 17:12:46 jpm |
* Classe de gestion d'erreur pour PHP 4.3 |
* |
* |
* +-- Fin du code ----------------------------------------------------------------------------------------+ |
*/ |
?> |
/branches/v1.0-menes/api/debogage/BOG_chrono.fonct.php |
---|
New file |
0,0 → 1,129 |
<?php |
/*vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +------------------------------------------------------------------------------------------------------+ |
// | PHP version 4.1 | |
// +------------------------------------------------------------------------------------------------------+ |
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) | |
// +------------------------------------------------------------------------------------------------------+ |
// | This library is free software; you can redistribute it and/or | |
// | modify it under the terms of the GNU Lesser General Public | |
// | License as published by the Free Software Foundation; either | |
// | version 2.1 of the License, or (at your option) any later version. | |
// | | |
// | This library 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 | |
// | Lesser General Public License for more details. | |
// | | |
// | You should have received a copy of the GNU Lesser General Public | |
// | License along with this library; if not, write to the Free Software | |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
// +------------------------------------------------------------------------------------------------------+ |
// CVS : $Id: BOG_chrono.fonct.php,v 1.3 2005-02-28 11:14:45 jpm Exp $ |
/** |
* Bibliothèque de fonctions permettant de mesure le temps d'execution d'un script. |
* |
* Contient des fonctions permettant d'évaluer un script. |
* |
*@package Debogage |
//Auteur original : |
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
//Autres auteurs : |
*@author Aucun |
*@copyright Tela-Botanica 2000-2004 |
*@version $Revision: 1.3 $ $Date: 2005-02-28 11:14:45 $ |
// +------------------------------------------------------------------------------------------------------+ |
*/ |
// +------------------------------------------------------------------------------------------------------+ |
// | LISTE de FONCTIONS | |
// +------------------------------------------------------------------------------------------------------+ |
/**Fonction BOG_afficherChrono() - Permet d'afficher les temps d'éxécution de différentes parties d'un script. |
* |
* Cette fonction permet d'afficher un ensemble de mesure de temps prises à différents endroits d'un script. |
* Ces mesures sont affichées au sein d'un tableau XHTML dont on peut controler l'indentation des balises. |
* Pour un site en production, il suffit d'ajouter un style #chrono {display:none;} dans la css. De cette façon, |
* le tableau ne s'affichera pas. Le webmaster lui pourra rajouter sa propre feuille de style affichant le tableau. |
* Le développeur initial de cette fonction est Loic d'Anterroches. Elle a été modifiée par Jean-Pascal Milcent. |
* Elle utilise une variable gobale : $_CHRONO_ |
* |
* @author Loic d'Anterroches |
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
* @param int l'indentation de base pour le code html du tableau. |
* @param int le pas d'indentation pour le code html du tableau. |
* @return string la chaine XHTML de mesure des temps. |
*/ |
function BOG_afficherChrono($indentation_origine = 8, $indentation = 4) |
{ |
$sortie = str_repeat(' ', $indentation_origine). |
'<table id="chrono" lang="fr" summary="Résultat du chronométrage du programme affichant la page actuelle.">'."\n"; |
$sortie .= str_repeat(' ', ($indentation_origine + ($indentation * 1))). |
'<caption>Chronométrage</caption>'."\n"; |
$sortie .= str_repeat(' ', ($indentation_origine + ($indentation * 1))). |
'<thead>'."\n"; |
$sortie .= str_repeat(' ', ($indentation_origine + ($indentation * 2))). |
'<tr><th>Action</th><th>Temps écoulé (en s.)</th><th>Cumul du temps écoulé (en s.)</th></tr>'."\n"; |
$sortie .= str_repeat(' ', ($indentation_origine + ($indentation * 1))). |
'</thead>'."\n"; |
$tbody = str_repeat(' ', ($indentation_origine + ($indentation * 1))). |
'<tbody>'."\n"; |
$total_tps_ecoule = 0; |
// Récupération de la première mesure |
list($usec, $sec) = explode(' ', $GLOBALS['_CHRONO_']['depart']); |
// Ce temps correspond à tps_fin |
$tps_fin = ((float)$usec + (float)$sec); |
foreach ($GLOBALS['_CHRONO_'] as $cle => $valeur) { |
list($usec, $sec) = explode(' ',$valeur); |
$tps_debut = ((float)$usec + (float)$sec); |
$tps_ecoule = abs($tps_fin - $tps_debut); |
$total_tps_ecoule += $tps_ecoule; |
$tbody .= str_repeat(' ', ($indentation_origine + ($indentation * 2))). |
'<tr>'. |
'<th>'.$cle.'</th>'. |
'<td>'.number_format($tps_ecoule,3).'</td>'. |
'<td>'.number_format($total_tps_ecoule,3).'</td>'. |
'</tr>'."\n"; |
$tps_fin = $tps_debut; |
} |
$tbody .= str_repeat(' ', ($indentation_origine + ($indentation * 1))). |
'</tbody>'."\n"; |
$sortie .= str_repeat(' ', ($indentation_origine + ($indentation * 1))). |
'<tfoot>'."\n"; |
$sortie .= str_repeat(' ', ($indentation_origine + ($indentation * 2))). |
'<tr>'. |
'<th>'.'Total du temps écoulé (en s.)'.'</th>'. |
'<td colspan="2">'.number_format($total_tps_ecoule,3).'</td>'. |
'</tr>'."\n"; |
$sortie .= str_repeat(' ', ($indentation_origine + ($indentation * 1))). |
'</tfoot>'."\n"; |
$sortie .= $tbody; |
$sortie .= str_repeat(' ', $indentation_origine). |
'</table>'."\n"; |
return $sortie; |
} |
/* +--Fin du code ----------------------------------------------------------------------------------------+ |
* |
* $Log: not supported by cvs2svn $ |
* Revision 1.2 2004/11/29 15:54:16 jpm |
* Changement de nom de variable et légère correction. |
* |
* Revision 1.1 2004/06/15 10:13:07 jpm |
* Intégration dans Papyrus. |
* |
* Revision 1.2 2004/04/22 09:01:55 jpm |
* Ajout de l'attribut lang au tableau. |
* |
* Revision 1.1 2004/04/21 07:49:13 jpm |
* Ajout d'une bibliothèque de fonction pour le chronométrage des scripts. |
* |
* |
* +-- Fin du code ----------------------------------------------------------------------------------------+ |
*/ |
?> |
/branches/v1.0-menes/api/sql/SQL_manipulation.fonct.php |
---|
New file |
0,0 → 1,76 |
<?php |
/*vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +------------------------------------------------------------------------------------------------------+ |
// | PHP version 4.1 | |
// +------------------------------------------------------------------------------------------------------+ |
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) | |
// +------------------------------------------------------------------------------------------------------+ |
// | This library is free software; you can redistribute it and/or | |
// | modify it under the terms of the GNU Lesser General Public | |
// | License as published by the Free Software Foundation; either | |
// | version 2.1 of the License, or (at your option) any later version. | |
// | | |
// | This library 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 | |
// | Lesser General Public License for more details. | |
// | | |
// | You should have received a copy of the GNU Lesser General Public | |
// | License along with this library; if not, write to the Free Software | |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
// +------------------------------------------------------------------------------------------------------+ |
// CVS : $Id: SQL_manipulation.fonct.php,v 1.2 2004-10-21 15:17:19 alex Exp $ |
/** |
* Bibliothèque de fonctions liées au SQL |
* |
* Contient des fonctions permettant d'automatiser certaine requête SQL. |
* |
*@package SQL |
//Auteur original : |
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
//Autres auteurs : |
*@author Aucun |
*@copyright Tela-Botanica 2000-2004 |
*@version $Revision: 1.2 $ $Date: 2004-10-21 15:17:19 $ |
// +------------------------------------------------------------------------------------------------------+ |
*/ |
// +------------------------------------------------------------------------------------------------------+ |
// | LISTE de FONCTIONS | |
// +------------------------------------------------------------------------------------------------------+ |
/** Fonction SQL_obtenirNouveauId()- Retourne le prochain identifiant numérique libre d'une table. |
* |
* On passe en paramètre le nom de la table, le nom du champ cotnenant la clé et l'objet PEAR DB |
* |
* @param mixed handler de connexion |
* @param string Nom de la table |
* @param string Nom du champ identifiant. |
* @return mixed la nouvelle valeur de clé pouvant être utilisé ou false en cas d'erreur sql. |
*/ |
function SQL_obtenirNouveauId(&$db, $table, $colonne_identifiant) |
{ |
$requete = 'SELECT MAX('.$colonne_identifiant.') AS maxi FROM '.$table; |
$resultat = $db->query($requete); |
if (DB::isError($resultat) || $resultat->numRows() > 1) { |
return false; |
} |
$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT); |
return $ligne->maxi + 1; |
} |
/* +--Fin du code ----------------------------------------------------------------------------------------+ |
* |
* $Log: not supported by cvs2svn $ |
* Revision 1.1 2004/06/15 10:13:26 jpm |
* Intégration dans Papyrus. |
* |
* Revision 1.1 2004/04/28 11:38:54 jpm |
* Ajout d'un fichier de fonctions de manipulation sql. |
* |
* |
* +-- Fin du code ----------------------------------------------------------------------------------------+ |
*/ |
?> |
/branches/v1.0-menes/api/html/HTML_TableFragmenteur.php |
---|
New file |
0,0 → 1,110 |
<?php |
/*vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +------------------------------------------------------------------------------------------------------+ |
// | PHP version 4.1 | |
// +------------------------------------------------------------------------------------------------------+ |
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) | |
// +------------------------------------------------------------------------------------------------------+ |
// | This library 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.1 of the License, or (at your option) any later version. | |
// | | |
// | This library 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 library; if not, write to the Free Software | |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
// +------------------------------------------------------------------------------------------------------+ |
// CVS : $Id: HTML_TableFragmenteur.php,v 1.2 2006-04-28 12:41:26 florian Exp $ |
/** |
* Classe qui permet de créer des tables de résultat divisé en page |
* |
* |
*@package projet |
//Auteur original : |
*@author Alexandre Granier <alexandre@tela-botanica.org> |
//Autres auteurs : |
*@author Aucun |
*@copyright Tela-Botanica 2000-2004 |
*@version $Revision: 1.2 $ |
// +------------------------------------------------------------------------------------------------------+ |
*/ |
// +------------------------------------------------------------------------------------------------------+ |
// | ENTETE du PROGRAMME | |
// +------------------------------------------------------------------------------------------------------+ |
include_once PAP_CHEMIN_API_PEAR.'HTML/Table.php' ; |
/** |
* class HTML_Liste |
* |
*/ |
class HTML_TableFragmenteur extends HTML_Table |
{ |
/*** Attributes: ***/ |
/** |
* |
* @access protected |
*/ |
var $pager; |
/** |
* |
* @access private |
*/ |
var $_utilise_pager; |
/** |
* |
* |
* @param bool utilise_pager Si l'on souhaite que les résultats soient divisés en page, on passe true. |
* @return HTML_Liste |
* @access public |
*/ |
function HTML_Liste( $utilise_pager = false) |
{ |
HTML_Table::HTML_Table() ; |
$this->_utilise_pager = $utilise_pager ; |
} // end of member function HTML_Liste |
/** |
* |
* |
* @param Array label_entete Un tableau contenant les labels pour l'entête de la liste. |
* @return void |
* @access public |
*/ |
function construireEntete( $label_entete ) |
{ |
$this->addRow ($label_entete, '', 'TH') ; |
} // end of member function construitEntete |
/** |
* |
* |
* @param Array label_liste Un tableau à double dimension contenant les valeurs de la liste. du type |
* 0 =>'label', 'label2', |
* 1 => ... |
* @return void |
* @access public |
*/ |
function construireListe( $label_liste ) |
{ |
for ($i = 0; $i < count ($label_liste) ; $i++) { |
$this->addRow ($label_liste[$i]) ; |
//var_dump ($label_liste[$i]) ; |
} |
} |
} // end of HTML_Liste |
?> |
/branches/v1.0-menes/api/text/wiki_papyrus/Parse/Inclure.php |
---|
New file |
0,0 → 1,52 |
<?php |
// $Id: Inclure.php,v 1.1 2004-11-26 12:13:28 jpm Exp $ |
/** |
* |
* This class implements a Text_Wiki_Parse to find source text marked as |
* an Interwiki link. See the regex for a detailed explanation of the |
* text matching procedure; e.g., "InterWikiName:PageName". |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Inclure extends Text_Wiki_Parse { |
var $regex = '/\{\{inclure page="([A-Za-z0-9_]+)"(?: interwiki="([A-Za-z0-9_]+)"|)\}\}/'; |
/** |
* |
* Generates a replacement for the matched standalone interwiki text. |
* Token options are: |
* |
* 'site' => The key name for the Text_Wiki interwiki array map, |
* usually the name of the interwiki site. |
* |
* 'page' => The page on the target interwiki to link to. |
* |
* 'text' => The text to display as the link. |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return A delimited token to be used as a placeholder in |
* the source text, plus any text priot to the match. |
* |
*/ |
function process(&$matches) |
{ |
$options = array( |
'page' => $matches[1], |
'site' => $matches[2], |
'text' => $matches[0] |
); |
return $this->wiki->addToken($this->rule, $options); |
} |
} |
?> |
/branches/v1.0-menes/api/text/wiki_papyrus/Parse/Categorie.php |
---|
New file |
0,0 → 1,45 |
<?php |
// $Id: Categorie.php,v 1.2 2005-05-27 13:41:24 jpm Exp $ |
/** |
* |
* This class implements a Text_Wiki_Parse to find source text marked as |
* an Interwiki link. See the regex for a detailed explanation of the |
* text matching procedure; e.g., "InterWikiName:PageName". |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Categorie extends Text_Wiki_Parse { |
var $regex = '/\{\{Categorie mots="(.+?)"\}\}/'; |
/** |
* |
* Remplace l'action par une liste des pages contenant les mots clés choisis |
* Les options sont: |
* |
* 'mots' => les mots clés séparés par des virgules |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return A delimited token to be used as a placeholder in |
* the source text, plus any text priot to the match. |
* |
*/ |
function process(&$matches) |
{ |
$options = array( |
'mots' => $matches[1] |
); |
return $this->wiki->addToken($this->rule, $options); |
} |
} |
?> |
/branches/v1.0-menes/api/text/wiki_papyrus/Parse/Syndication.php |
---|
New file |
0,0 → 1,51 |
<?php |
// $Id: Syndication.php,v 1.7 2006-11-21 13:35:19 jp_milcent Exp $ |
/** |
* |
* This class implements a Text_Wiki_Parse to find source text marked as |
* an Interwiki link. See the regex for a detailed explanation of the |
* text matching procedure; e.g., "InterWikiName:PageName". |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Syndication extends Text_Wiki_Parse { |
var $regex = '/\{\{Syndication titre="([^"]+)" url="([^"]+)"( nb=(?:"|)\d+(?:"|))?( nouvellefenetre=(?:"|)(?:0|1)(?:"|))?( formatdate="[^"]+")?( template="[^"]+")?\}\}/'; |
/** |
* |
* Remplace l'action par une liste des dernières pages modifièes |
* Les options sont: |
* |
* 'site' => le code alphanumérique du ou des sites que l'on veut afficher |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return A delimited token to be used as a placeholder in |
* the source text, plus any text priot to the match. |
* |
*/ |
function process(&$matches) |
{ |
// Gestion des paramêtres obligatoires |
$options = array('titre' => $matches[1], 'url' => $matches[2]); |
// Gestion des paramêtres optionnels |
$tab_param_optionel = array('nb', 'nouvellefenetre', 'formatdate', 'template'); |
for ($i = 3; $i < count($matches); $i++) { |
$tab_param = explode('=', $matches[$i]); |
$options[trim($tab_param[0])] = str_replace('"', '', $tab_param[1]); |
} |
return $this->wiki->addToken($this->rule, $options); |
} |
} |
?> |
/branches/v1.0-menes/api/text/wiki_papyrus/Parse/Motcles.php |
---|
New file |
0,0 → 1,65 |
<?php |
// $Id: Motcles.php,v 1.4 2005-07-08 15:14:51 alexandre_tb Exp $ |
/** |
* |
* This class implements a Text_Wiki_Parse to find source text marked as |
* an Interwiki link. See the regex for a detailed explanation of the |
* text matching procedure; e.g., "InterWikiName:PageName". |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Motcles extends Text_Wiki_Parse { |
var $regex = '/\{\{MotCles mots="(.+?)"(?: condition="(ET|OU|et|ou)"|)(?: categorie="(.+?)"|)(?: condition="(ET|OU|et|ou)"|)(?: ordre="(ASC|DESC|asc|desc)"|)\}\}/'; |
/** |
* |
* Remplace l'action par une liste des pages contenant les mots clés choisis |
* Les options sont: |
* |
* 'mots' => les mots clés séparés par des virgules |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return A delimited token to be used as a placeholder in |
* the source text, plus any text priot to the match. |
* |
*/ |
function process(&$matches) |
{ |
$options = array( |
'mots' => $matches[1], |
'condition' => $matches[2], |
'categorie' => $matches[3], |
'condition2' => $matches[4], |
'ordre' => $matches[5] |
); |
// Les conditions étant écrites en français, ce qui suit les traduit, "et" devient "AND" etc. |
if (isset($options['condition'])) { |
if ($options['condition'] == 'ET' || $options['condition'] == 'et') { |
$options['condition'] = 'AND'; |
} elseif ($options['condition'] == 'OU' || $options['condition'] == 'ou') { |
$options['condition'] = 'OR'; |
} |
} |
if (isset($options['condition2'])) { |
if ($options['condition2'] == 'ET' || $options['condition2'] == 'et') { |
$options['condition2'] = 'AND'; |
} elseif ($options['condition2'] == 'OU' || $options['condition2'] == 'ou') { |
$options['condition2'] = 'OR'; |
} |
} |
return $this->wiki->addToken($this->rule, $options); |
} |
} |
?> |
/branches/v1.0-menes/api/text/wiki_papyrus/Parse/Lien.php |
---|
New file |
0,0 → 1,48 |
<?php |
// $Id: Lien.php,v 1.2 2006-05-10 19:21:47 ddelon Exp $ |
/** |
* |
* This class implements a Text_Wiki_Parse to find source text marked as |
* an Interwiki link. See the regex for a detailed explanation of the |
* text matching procedure; e.g., "InterWikiName:PageName". |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Lien extends Text_Wiki_Parse { |
var $regex = '/\{\{Lien ((?:menu)|(?:site))="((?:\w+)|(?:\d+))" (?:(?:titre)="(.*)")* *\}\}/'; |
/** |
* |
* Remplace l'action par une liste des dernières pages modifiées |
* Les options sont: |
* |
* 'site' => le code alphanumérique du ou des sites que l'on veut afficher |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return A delimited token to be used as a placeholder in |
* the source text, plus any text priot to the match. |
* |
*/ |
function process(&$matches) |
{ |
if (!isset($matches[3])) $matches[3]=''; |
$options = array( |
'niveau' => $matches[1], |
'identifiant' => $matches[2], |
'titre' => $matches[3] |
); |
return $this->wiki->addToken($this->rule, $options); |
} |
} |
?> |
/branches/v1.0-menes/api/text/wiki_papyrus/Parse/Redirection.php |
---|
New file |
0,0 → 1,46 |
<?php |
// $Id: Redirection.php,v 1.1 2005-09-23 13:58:07 ddelon Exp $ |
/** |
* |
* This class implements a Text_Wiki_Parse to find source text marked as |
* an Interwiki link. See the regex for a detailed explanation of the |
* text matching procedure; e.g., "InterWikiName:PageName". |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Redirection extends Text_Wiki_Parse { |
var $regex = '/\{\{Redirection url="(.+?)"\}\}/'; |
/** |
* |
* Remplace l'action par une liste des pages contenant les mots clés choisis |
* Les options sont: |
* |
* 'mots' => les mots clés séparés par des virgules |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return A delimited token to be used as a placeholder in |
* the source text, plus any text priot to the match. |
* |
*/ |
function process(&$matches) |
{ |
$options = array( |
'url' => $matches[1] |
); |
return $this->wiki->addToken($this->rule, $options); |
} |
} |
?> |
/branches/v1.0-menes/api/text/wiki_papyrus/Parse/Plan.php |
---|
New file |
0,0 → 1,51 |
<?php |
// $Id: Plan.php,v 1.2 2005-05-25 14:05:31 jpm Exp $ |
/** |
* |
* This class implements a Text_Wiki_Parse to find source text marked as |
* an Interwiki link. See the regex for a detailed explanation of the |
* text matching procedure; e.g., "InterWikiName:PageName". |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Plan extends Text_Wiki_Parse { |
var $regex = '/\{\{Plan site="((?i:[,-]|\w|\s)+)"(?: permalien="(oui|non)"|)\}\}/'; |
/** |
* |
* Remplace l'action par une liste des dernières pages modifiées |
* Les options sont: |
* |
* 'site' => le code alphanumérique du ou des sites que l'on veut afficher |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return A delimited token to be used as a placeholder in |
* the source text, plus any text priot to the match. |
* |
*/ |
function process(&$matches) |
{ |
if (isset($matches[2]) && $matches[2] == 'oui') { |
$matches[2] = true; |
} else { |
$matches[2] = false; |
} |
$options = array( |
'site' => $matches[1], |
'permalien' => $matches[2] |
); |
return $this->wiki->addToken($this->rule, $options); |
} |
} |
?> |
/branches/v1.0-menes/api/text/wiki_papyrus/Parse/Nouveaute.php |
---|
New file |
0,0 → 1,48 |
<?php |
// $Id: Nouveaute.php,v 1.2 2005-07-08 15:16:54 alexandre_tb Exp $ |
/** |
* |
* This class implements a Text_Wiki_Parse to find source text marked as |
* an Interwiki link. See the regex for a detailed explanation of the |
* text matching procedure; e.g., "InterWikiName:PageName". |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Nouveaute extends Text_Wiki_Parse { |
var $regex = '/\{\{Nouveaute nombre="([1-9][0-9]*)"(?: categorie="(.+?)"|)(?: type="(mineure|majeure)"|)(?: site="((?i:[,-]|\w|\s)+)"|)\}\}/'; |
/** |
* |
* Remplace l'action par une liste des dernières pages modifiées |
* Les options sont: |
* |
* 'nombre' => le nombre de dernière page modifiée que l'on veut afficher |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return A delimited token to be used as a placeholder in |
* the source text, plus any text priot to the match. |
* |
*/ |
function process(&$matches) |
{ |
$options = array( |
'nombre' => $matches[1], |
'categorie' => $matches[2], |
'type' => $matches[3], |
'site' => $matches[4] |
); |
return $this->wiki->addToken($this->rule, $options); |
} |
} |
?> |
/branches/v1.0-menes/api/text/wiki_papyrus/Papyrus.class.php |
---|
New file |
0,0 → 1,319 |
<?php |
/*vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +------------------------------------------------------------------------------------------------------+ |
// | PHP version 4.3 | |
// +------------------------------------------------------------------------------------------------------+ |
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) | |
// +------------------------------------------------------------------------------------------------------+ |
// | This file is part of Papyrus. | |
// | | |
// | 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: Papyrus.class.php,v 1.8 2006-05-10 16:02:49 ddelon Exp $ |
/** |
* Classe configurant le formatage pour Papyrus. |
* |
* Ce fichier contient une classe configurant les règles de formatage de Papyrus. |
* Nécessite que l'application appelant ce fichier est précédement inclu le fichier de Pear: |
* 'Text/Wiki.php'; |
* |
*@package Text_Wiki |
*@subpackage Papyrus |
//Auteur original : |
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
//Autres auteurs : |
*@author Aucun |
*@copyright Tela-Botanica 2000-2004 |
*@version $Revision: 1.8 $ $Date: 2006-05-10 16:02:49 $ |
// +------------------------------------------------------------------------------------------------------+ |
*/ |
// +------------------------------------------------------------------------------------------------------+ |
// | ENTETE du PROGRAMME | |
// +------------------------------------------------------------------------------------------------------+ |
// +------------------------------------------------------------------------------------------------------+ |
// | CORPS du PROGRAMME | |
// +------------------------------------------------------------------------------------------------------+ |
/** |
* |
* Parse structured wiki text and render into arbitrary formats such as XHTML. |
* |
* Cette classe fille permet de configurer les régles de formatage pour Papyrus. |
* Généralement nous avons à faire à des actions. |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* @package Text_Wiki |
* @version 0.23.1 |
* @license LGPL |
*/ |
class Text_Papyrus extends Text_Wiki { |
/** |
* |
* Liste de règles par défaut du format Papyrs dans leur ordre d'application au texte |
* à transformer. |
* |
* @access public |
* |
* @var array |
* |
*/ |
var $rules = array( |
'Inclure', // Action Inclure |
'Motcles', // Action Motcles |
'Categorie', // Action Categorie |
'Nouveaute', // Action Nouveaute |
'Plan', // Action Plan |
'Lien', // Action Lien |
'Syndication', // Action Syndication |
'Redirection' // Action Redirection |
); |
/** |
* |
* The list of rules to not-apply to the source text. |
* |
* @access public |
* |
* @var array |
* |
*/ |
var $disable = array(); |
/** |
* |
* The delimiter for token numbers of parsed elements in source text. |
* |
* @access public |
* |
* @var string |
* |
*/ |
var $delim = 12; |
function Text_Papyrus($rules = null) |
{ |
//Text_Wiki::Text_Wiki(); |
if (is_array($rules)) { |
$this->rules = $rules; |
} |
// Nous devons sortir les fichiers de Text_Wiki du dépot Pear car la fonction file_exists de PHP utilisée dans |
// la méthode findfile de Text_Wiki renvoie false. |
$this->addPath('parse', $this->fixPath(dirname(__FILE__)) .'../../pear/Text/Wiki/Parse/'); |
$this->addPath('render', $this->fixPath(dirname(__FILE__)) .'../../pear/Text/Wiki/Render/'); |
// Pour les règles spécifiques à Papyrus: |
$this->addPath('parse', $this->fixPath(dirname(__FILE__)) . 'Parse/'); |
$this->addPath('render', $this->fixPath(dirname(__FILE__)) . 'Render/'); |
} |
/** |
* |
* Renders tokens back into the source text, based on the requested format. |
* |
* @access public |
* |
* @param string $format The target output format, typically 'xhtml'. |
* If a rule does not support a given format, the output from that |
* rule is rule-specific. |
* |
* @return string The transformed wiki text. |
* |
*/ |
function render($format = 'Xhtml') |
{ |
// the rendering method we're going to use from each rule |
$format = ucwords(strtolower($format)); |
// the eventual output text |
$output = ''; |
// when passing through the parsed source text, keep track of when |
// we are in a delimited section |
$in_delim = false; |
// when in a delimited section, capture the token key number |
$key = ''; |
// load the format object |
$this->loadFormatObj($format); |
// pre-rendering activity |
if (isset($this->formatObj[$format]) && is_object($this->formatObj[$format])) { |
$output .= $this->formatObj[$format]->pre(); |
} |
// load the render objects |
foreach (array_keys($this->parseObj) as $rule) { |
$this->loadRenderObj($format, $rule); |
} |
// pass through the parsed source text character by character |
$k = strlen($this->source); |
for ($i = 0; $i < $k; $i++) { |
// the current character |
$char = $this->source{$i}; |
// are alredy in a delimited section? |
if ($in_delim) { |
// yes; are we ending the section? |
if ($char == chr($this->delim)) { |
// yes, get the replacement text for the delimited |
// token number and unset the flag. |
$key = (int)$key; |
$rule = null; |
if (isset($this->tokens[$key][0])) { |
$rule = $this->tokens[$key][0]; |
} |
$opts = null; |
if (isset($this->tokens[$key][1])) { |
$opts = $this->tokens[$key][1]; |
} |
if (isset($this->renderObj[$rule]) && is_object($this->renderObj[$rule])) { |
$output .= $this->renderObj[$rule]->token($opts); |
} |
$in_delim = false; |
} else { |
// no, add to the dlimited token key number |
$key .= $char; |
} |
} else { |
// not currently in a delimited section. |
// are we starting into a delimited section? |
if ($char == chr($this->delim)) { |
// yes, reset the previous key and |
// set the flag. |
$key = ''; |
$in_delim = true; |
} else { |
// no, add to the output as-is |
$output .= $char; |
} |
} |
} |
// post-rendering activity |
if (isset($this->formatObj[$format]) && is_object($this->formatObj[$format])) { |
$output .= $this->formatObj[$format]->post(); |
} |
// return the rendered source text. |
return $output; |
} |
/** |
* |
* Add a token to the Text_Wiki tokens array, and return a delimited |
* token number. |
* |
* @access public |
* |
* @param array $options An associative array of options for the new |
* token array element. The keys and values are specific to the |
* rule, and may or may not be common to other rule options. Typical |
* options keys are 'text' and 'type' but may include others. |
* |
* @param boolean $id_only If true, return only the token number, not |
* a delimited token string. |
* |
* @return string|int By default, return the number of the |
* newly-created token array element with a delimiter prefix and |
* suffix; however, if $id_only is set to true, return only the token |
* number (no delimiters). |
* |
*/ |
function addToken($rule, $options = array(), $id_only = false) |
{ |
// increment the token ID number. note that if you parse |
// multiple times with the same Text_Wiki object, the ID number |
// will not reset to zero. |
static $id; |
if (! isset($id)) { |
$id = 0; |
} else { |
$id ++; |
} |
// force the options to be an array |
settype($options, 'array'); |
// add the token |
$this->tokens[$id] = array( |
0 => $rule, |
1 => $options |
); |
// return a value |
if ($id_only) { |
// return the last token number |
return $id; |
} else { |
// return the token number with delimiters |
return chr($this->delim) . $id . chr($this->delim); |
} |
} |
} |
// +------------------------------------------------------------------------------------------------------+ |
// | PIED du PROGRAMME | |
// +------------------------------------------------------------------------------------------------------+ |
/* +--Fin du code ----------------------------------------------------------------------------------------+ |
* |
* $Log: not supported by cvs2svn $ |
* Revision 1.7 2005/09/23 13:58:07 ddelon |
* Php5, Projet et Redirection |
* |
* Revision 1.6 2005/04/18 16:41:53 jpm |
* Ajout des actions Plan et Syndication. |
* |
* Revision 1.5 2005/04/14 16:35:42 jpm |
* Ajout de nouvelles actions pour Papyrus XHTML. |
* |
* Revision 1.4 2005/01/20 19:39:39 jpm |
* Correction bogue du à la fonction file_exists qui renvoie false pour les fichiers présent dans le dossier Pear /usr/local/lib/php/. |
* |
* Revision 1.3 2004/12/07 12:17:37 jpm |
* Correction message d'erreur. |
* |
* Revision 1.2 2004/11/26 12:13:03 jpm |
* Correction de résidu... |
* |
* Revision 1.1 2004/11/26 12:11:49 jpm |
* Ajout des action Papyrus à Text_Wiki. |
* |
* Revision 1.2 2004/11/25 15:36:41 jpm |
* Suppression régle Delimiter car problème avec les délimitations de fin de ligne. |
* |
* Revision 1.1 2004/11/23 17:25:38 jpm |
* Début classe PEAR WIKI pour la syntaxe Wikini. |
* |
* |
* +-- Fin du code ----------------------------------------------------------------------------------------+ |
*/ |
?> |
/branches/v1.0-menes/api/text/wiki_papyrus/Render/Xhtml/Plan.php |
---|
New file |
0,0 → 1,95 |
<?php |
class Text_Wiki_Render_Xhtml_Plan extends Text_Wiki_Render { |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
// Initialisation des variables |
$bdd =& $GLOBALS['_GEN_commun']['pear_db']; |
$sortie = ''; |
$sites = $options['site']; |
// Récupération de l'affichage ou pas des raccourcis |
if (isset($options['permalien'])) { |
$permalien = $options['permalien']; |
} |
$tab_site = array_map('trim', explode(',', $sites)); |
foreach ($tab_site as $cle => $site) { |
if (count($tab_site) > 1) { |
$aso_site = GEN_lireInfoSitePrincipalCodeAlpha($bdd, $site, DB_FETCHMODE_ASSOC); |
if (!empty($aso_site['gs_titre'])) { |
$titre = $aso_site['gs_titre']; |
} else { |
$titre = $aso_site['gs_nom']; |
} |
$url_site =& new Pap_URL(); |
$url_site->setUrlType('SITE'); |
$url_site->setId($aso_site['gs_id_site']); |
$sortie .= '<h2><a href="'.$url_site->getUrl().'">'.htmlentities($titre).'</a></h2>'."\n"; |
} |
$sortie .= '<ul class="plan_site_'.$site.'" >'."\n"; |
$aso_menus = GEN_retournerTableauMenusSiteCodeAlpha($bdd, $site); |
$sortie .= $this->parserTableauMenus($aso_menus, $permalien); |
$sortie .= '</ul>'."\n"; |
} |
return $sortie; |
} |
function parserTableauMenus($aso_menus, $permalien) |
{ |
$sortie = ''; |
// Création de l'url |
foreach ($aso_menus as $menu_id => $menu_valeur) { |
if ( $menu_valeur['gm_date_fin_validite'] == '' |
|| $menu_valeur['gm_date_fin_validite'] == '0000-00-00 00:00:00' |
|| strtotime($menu_valeur['gm_date_fin_validite']) > time()) { |
$sortie .= '<li>'; |
// Création de l'url |
$une_url =& new Pap_URL('http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']); |
$une_url->setId($menu_id); |
// Construction de l'attribut title |
$title = ''; |
if (!empty($menu_valeur['gm_titre'])) { |
$title = ' title="'.htmlentities($menu_valeur['gm_titre']).'"'; |
} elseif (!empty($menu_valeur['gm_titre_alternatif'])) { |
$title = ' title="'.htmlentities($menu_valeur['gm_titre_alternatif']).'"'; |
} |
// Construction du lien |
$sortie .= '<a href="'.$une_url->getURL().'"'.$title.'>'.htmlentities($menu_valeur['gm_nom']).'</a>'; |
// Nous affichons ou pas le permalien |
if ($permalien) { |
$une_url->setPermalien(true); |
$sortie .= ' <span class="plan_permalien">'.'('.$une_url->getURL().')'.'</span>'; |
$une_url->setPermalien(false); |
} |
// Nous ajoutons les sous-menus s'il y en a. |
$retour = $this->parserTableauMenus($menu_valeur['sous_menus'], $permalien); |
if ($retour != '') { |
$sortie .= "\n".'<ul>'."\n".$retour."\n".'</ul>'."\n"; |
} |
$sortie .= '</li>'."\n"; |
} |
} |
return $sortie; |
} |
} |
?> |
/branches/v1.0-menes/api/text/wiki_papyrus/Render/Xhtml/Nouveaute.php |
---|
New file |
0,0 → 1,164 |
<?php |
class Text_Wiki_Render_Xhtml_Nouveaute extends Text_Wiki_Render { |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
// Initialisation des variables |
$sortie = ''; |
$type = ''; |
$site = ''; |
$nombre = $options['nombre']; |
// Récupération du type |
if (isset($options['type'])) { |
$type = $options['type']; |
} |
// Récupération du site |
if (isset($options['site'])) { |
$site = $options['site']; |
} |
// Récupération de la catégorie |
if (isset($options['categorie'])) { |
$categorie = $options['categorie']; |
} |
$aso_info_menu = GEN_lireInfoMenuContenuDate($GLOBALS['_GEN_commun']['pear_db'], $type, $site, $categorie); |
// Formatage des infos en XHTML |
$sortie .= '<ul class="page_liste">'."\n"; |
$i = 0; |
foreach ($aso_info_menu as $menu_id => $un_menu) { |
if ($i == $nombre) { |
break; |
} |
// Création de l'url |
$une_url =& new Pap_URL(); |
$une_url->setId($menu_id); |
// Début affichage d'une entrée de la liste des pages modifiées |
if ($un_menu->gmc_ce_type_modification = 1) { |
$type_modif = 'mineure'; |
} elseif ($un_menu->gmc_ce_type_modification = 2) { |
$type_modif = 'majeure'; |
} |
$sortie .= '<li class="page_modification_'.$type_modif.'">'."\n"; |
// Affichage du titre |
$sortie .= '<h2 class="page_titre"><a href="'.$une_url->getURL().'">'; |
if (!empty($un_menu->gm_titre)) { |
$sortie .= $un_menu->gm_titre; |
} elseif (!empty($un_menu->gm_titre_alternatif)) { |
$sortie .= $un_menu->gm_titre_alternatif; |
} else { |
$sortie .= $un_menu->gm_nom; |
} |
$sortie .= '</a></h2>'."\n".'<dl>'."\n"; |
// Affichage de l'auteur(s) |
if (!empty($un_menu->gm_auteur)) { |
$sortie .= '<dt class="page_auteur"> Auteur(s) : '.'</dt>'."\n"; |
$sortie .= '<dd>'.$un_menu->gm_auteur.'</dd>'."\n"; |
} |
// Affichage des contributeur(s) |
if (!empty($un_menu->gm_contributeur)) { |
$sortie .= '<dt class="page_contributeur"> Contributeur(s) : '.'</dt>'."\n"; |
$sortie .= '<dd>'.$un_menu->gm_contributeur.'</dd>'."\n"; |
} |
// Affichage de la date de la modification de la page |
$sortie .= '<dt class="page_modification_date"> '.'Modifié le : '.'</dt>'."\n"; |
$sortie .= '<dd>'."\n"; |
if (($jour = date('d', strtotime($un_menu->gmc_date_modification)) ) != 0 ) { |
$sortie .= '<span class="page_modification_jour"> '.$jour.'</span>'."\n"; |
} |
if (($mois = $this->_traduireMois(date('m', strtotime($un_menu->gmc_date_modification))) ) != '' ) { |
$sortie .= '<span class="page_modification_mois"> '.$mois.'</span>'."\n"; |
} |
if (($annee = date('Y', strtotime($un_menu->gmc_date_modification)) ) != 0 ) { |
$sortie .= '<span class="page_modification_annee"> '.$annee.'</span>'."\n"; |
} |
$sortie .= '<span class="page_separateur_date_heure"> - </span>'."\n"; |
// Affichage de l'horaire de la modification de la page |
if (($heure = date('G', strtotime($un_menu->gmc_date_modification)) ) != 0 ) { |
$sortie .= '<span class="page_modification_heure">'.$heure.'</span>'; |
$sortie .= '<span class="page_separateur_heure">:</span>'; |
$minute = date('i', strtotime($un_menu->gmc_date_modification)); |
$sortie .= '<span class="page_modification_minute">'.$minute.'</span>'."\n"; |
/* |
if (($seconde = date('s', strtotime($un_menu->gm_date_creation)) ) != 0 ) { |
$sortie .= '<span class="page_separateur_heure">:</span>'; |
$sortie .= '<span class="page_creation_seconde">'.$seconde.'</span>'; |
} |
*/ |
} |
$sortie .= '</dd>'."\n"; |
// Affichage de la description |
if (!empty($un_menu->gm_description_libre)) { |
$sortie .= '<dt class="page_description"> Description : '.'</dt>'."\n"; |
$sortie .= '<dd>'.$un_menu->gm_description_libre.'</dd>'."\n"; |
} |
// Affichage du résumé de la modification |
if (!empty($un_menu->gmc_resume_modification)) { |
$sortie .= '<dt class="page_resumer_modification_'.$type_modif.'"> Résumer modification : '.'</dt>'."\n"; |
$sortie .= '<dd>'.$un_menu->gmc_resume_modification.'</dd>'."\n"; |
} |
$sortie .= '</dl>'."\n"; |
$sortie .= '</li>'."\n"; |
$i++; |
} |
$sortie .= '</ul>'."\n"; |
return $sortie; |
} |
function _traduireMois($mois_numerique) |
{ |
switch ($mois_numerique) { |
case '01' : |
return 'janvier'; |
case '02' : |
return 'février'; |
case '03' : |
return 'mars'; |
case '04' : |
return 'avril'; |
case '05' : |
return 'mai'; |
case '06' : |
return 'juin'; |
case '07' : |
return 'juillet'; |
case '08' : |
return 'août'; |
case '09' : |
return 'septembre'; |
case '10' : |
return 'octobre'; |
case '11' : |
return 'novembre'; |
case '12' : |
return 'décembre'; |
default: |
return ''; |
} |
} |
} |
?> |
/branches/v1.0-menes/api/text/wiki_papyrus/Render/Xhtml/Inclure.php |
---|
New file |
0,0 → 1,69 |
<?php |
class Text_Wiki_Render_Xhtml_Inclure extends Text_Wiki_Render { |
var $conf = array( |
'sites' => array( |
'Wikipedia' => array('preg' => '/<!-- start content -->(.*)<!-- end content -->/Umsi', 'url' => 'http://fr.wikipedia.org/wiki/%s'), |
'Wikipedia_fr' => array('preg' => '/<!-- start content -->(.*)<!-- end content -->/Umsi', 'url' => 'http://fr.wikipedia.org/wiki/%s'), |
'Wikipedia_en' => array('preg' => '/<!-- start content -->(.*)<!-- end content -->/Umsi', 'url' => 'http://en.wikipedia.org/wiki/%s'), |
'Wikini_eFlore' => array('preg' => '/<div class="page">(.*)<\/div>.*<div class="commentsheader">/Umsi', 'url' => 'http://wiki.tela-botanica.org/eflore/wakka.php?wiki=%s') |
), |
'css' => null, |
'encodage' => 'iso-8859-15' |
); |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
$site = $options['site']; |
$page = $options['page']; |
$text = $options['text']; |
$css = $this->formatConf(' class="%s"', 'css'); |
if (isset($this->conf['sites'][$site])) { |
$href = $this->conf['sites'][$site]['url']; |
} else { |
return $text; |
} |
// old form where page is at end, |
// or new form with %s placeholder for sprintf()? |
if (strpos($href, '%s') === false) { |
// use the old form |
$href = $href . $page; |
} else { |
// use the new form |
$href = sprintf($href, $page); |
} |
$output = ''; |
$contenu = file_get_contents($href); |
$tab_matches=''; |
preg_match($this->conf['sites'][$site]['preg'], $contenu, $tab_matches); |
$tab_encodage=''; |
preg_match('/<meta +http-equiv="Content-Type" +content="text\/html; *charset=(.+)"\/>/Ui', $contenu, $tab_encodage); |
if (preg_match('/^(?:iso-8859-1|iso-8859-15)$/i', $this->conf['encodage']) && preg_match('/utf-8/i', $tab_encodage[1])) { |
$output = utf8_decode($tab_matches[1]); |
} else { |
$output = $tab_matches[1]; |
} |
return $output; |
} |
} |
?> |
/branches/v1.0-menes/api/text/wiki_papyrus/Render/Xhtml/Categorie.php |
---|
New file |
0,0 → 1,116 |
<?php |
class Text_Wiki_Render_Xhtml_Categorie extends Text_Wiki_Render { |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
// Initialisation des variables |
$sortie = ''; |
if (isset($options['mots'])) { |
$mots = $options['mots']; |
} else { |
return '<p>'.' Aucune catégorie passé en paramêtre! '.'</p>'; |
} |
// Récupération des infos |
$tab_mots = explode(',', $mots); |
for ($i = 0; $i < count($tab_mots); $i++) { |
// Suppression des espaces, tabulations... en début et fin de chaine |
$tab_mots[$i] = trim($tab_mots[$i]); |
} |
$aso_info_menu = GEN_lireInfoMenuCategorie($GLOBALS['_GEN_commun']['pear_db'], $tab_mots); |
// Formatage des infos en XHTML |
$sortie .= '<ul class="page_liste">'."\n"; |
foreach ($aso_info_menu as $id_menu => $un_menu) { |
// Création de l'url |
$une_url =& new Pap_URL(); |
$une_url->setId($id_menu); |
$sortie .= '<li>'."\n"; |
// Affichage de l'auteur(s) |
$sortie .= '<span class="page_auteur"> '.$un_menu->gm_auteur.'</span>'; |
$sortie .= '<span class="page_separateur_auteur"> - </span>'; |
// Affichage du titre |
$sortie .= '<a href="'.$une_url->getURL().'">'; |
$sortie .= '<span class="page_titre"> '.$un_menu->gm_titre.'</span>'; |
$sortie .= '</a>'; |
$sortie .= '<span class="page_separateur_titre"> - </span>'; |
// Affichage de l'horaire de la création de la page |
if (($heure = date('G', strtotime($un_menu->gm_date_creation)) ) != 0 ) { |
$sortie .= '<span class="page_creation_heure">'.$heure.'</span>'; |
$sortie .= '<span class="page_separateur_heure">:</span>'; |
$minute = date('i', strtotime($un_menu->gm_date_creation)); |
$sortie .= '<span class="page_creation_minute">'.$minute.'</span>'; |
if (($seconde = date('s', strtotime($un_menu->gm_date_creation)) ) != 0 ) { |
$sortie .= '<span class="page_separateur_heure">:</span>'; |
$sortie .= '<span class="page_creation_seconde">'.$seconde.'</span>'; |
} |
} |
$sortie .= '<span class="page_separateur_date_heure"> - </span>'."\n"; |
// Affichage de la date de la création de la page |
if (($jour = date('d', strtotime($un_menu->gm_date_creation)) ) != 0 ) { |
$sortie .= '<span class="page_creation_jour"> '.$jour.'</span>'; |
} |
if (($mois = $this->_traduireMois(date('m', strtotime($un_menu->gm_date_creation))) ) != '' ) { |
$sortie .= '<span class="page_creation_mois"> '.$mois.'</span>'; |
} |
if (($annee = date('Y', strtotime($un_menu->gm_date_creation)) ) != 0 ) { |
$sortie .= '<span class="page_creation_annee"> '.$annee.'</span>'; |
} |
$sortie .= '</li>'."\n"; |
} |
$sortie .= '</ul>'."\n"; |
return $sortie; |
} |
function _traduireMois($mois_numerique) |
{ |
switch ($mois_numerique) { |
case '01' : |
return 'janvier'; |
case '02' : |
return 'février'; |
case '03' : |
return 'mars'; |
case '04' : |
return 'avril'; |
case '05' : |
return 'mai'; |
case '06' : |
return 'juin'; |
case '07' : |
return 'juillet'; |
case '08' : |
return 'août'; |
case '09' : |
return 'septembre'; |
case '10' : |
return 'octobre'; |
case '11' : |
return 'novembre'; |
case '12' : |
return 'décembre'; |
default: |
return ''; |
} |
} |
} |
?> |
/branches/v1.0-menes/api/text/wiki_papyrus/Render/Xhtml/Syndication.php |
---|
New file |
0,0 → 1,41 |
<?php |
require_once GEN_CHEMIN_API.'syndication_rss/syndication_rss.php'; |
class Text_Wiki_Render_Xhtml_Syndication extends Text_Wiki_Render { |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
// Initialisation des variables |
$sortie = ''; |
$titre = $options['titre']; |
$urls = $options['url']; |
$tab_param_optionel = array('nb', 'nouvellefenetre', 'formatdate', 'template'); |
foreach ($tab_param_optionel as $val) { |
if (isset($options[$val])) { |
$options[$val] = $options[$val]; |
} else { |
$options[$val] = null; |
} |
} |
$tab_url = array_map('trim', explode(',', $urls)); |
foreach ($tab_url as $cle => $url) { |
$url = str_replace('&', '&', $url) ; |
$sortie .= voir_rss($titre, $url, $options['nb'], $options['nouvellefenetre'], $options['formatdate'], $options['template']); |
} |
return $sortie; |
} |
} |
?> |
/branches/v1.0-menes/api/text/wiki_papyrus/Render/Xhtml/Motcles.php |
---|
New file |
0,0 → 1,138 |
<?php |
class Text_Wiki_Render_Xhtml_Motcles extends Text_Wiki_Render { |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
// Initialisation des variables |
$sortie = ''; |
if (isset($options['mots'])) { |
$mots = $options['mots']; |
} else { |
return '<p>'.' Aucun mot-clés passé en paramêtre! '.'</p>'; |
} |
$condition = 'OR'; |
if (isset($options['condition'])) { |
$condition = $options['condition']; |
} |
$condition2 = 'OR'; |
if (isset($options['condition2'])) { |
$condition2 = $options['condition2']; |
} |
$ordre = 'ASC'; |
if (isset($options['ordre'])) { |
$ordre = $options['ordre']; |
} |
if (isset($options['categorie'])) { |
$categorie = $options['categorie'] ; |
} |
// Récupération des infos sur les mots |
$tab_mots = explode(',', $mots); |
for ($i = 0; $i < count($tab_mots); $i++) { |
// Suppression des espaces, tabulations... en début et fin de chaine |
$tab_mots[$i] = trim($tab_mots[$i]); |
} |
// Récupération des infos sur les catégories |
$tab_cat = explode(',', $categorie) ; |
for ($i = 0; $i < count($tab_cat); $i++) { |
// Suppression des espaces, tabulations... en début et fin de chaine |
$tab_cat[$i] = trim($tab_cat[$i]); |
} |
$aso_info_menu = GEN_lireInfoMenuMeta($GLOBALS['_GEN_commun']['pear_db'], $tab_mots, $tab_cat, $condition, $condition2, $ordre); |
// Formatage des infos en XHTML |
$sortie .= '<ul class="page_liste">'."\n"; |
foreach ($aso_info_menu as $id_menu => $un_menu) { |
// Création de l'url |
$une_url =& new Pap_URL(); |
$une_url->setId($id_menu); |
$sortie .= '<li>'."\n"; |
// Affichage de l'auteur(s) |
$sortie .= '<span class="page_auteur"> '.$un_menu->gm_auteur.'</span>'."\n"; |
$sortie .= '<span class="page_separateur_auteur"> - </span>'."\n"; |
// Affichage du titre |
$sortie .= '<a href="'.$une_url->getURL().'">'; |
$sortie .= '<span class="page_titre"> '.$un_menu->gm_titre.'</span>'; |
$sortie .= '</a>'."\n"; |
$sortie .= '<span class="page_separateur_titre"> - </span>'."\n"; |
// Affichage de l'horaire de la création de la page |
if (($heure = date('G', strtotime($un_menu->gm_date_creation)) ) != 0 ) { |
$sortie .= '<span class="page_creation_heure">'.$heure.'</span>'; |
$sortie .= '<span class="page_separateur_heure">:</span>'; |
$minute = date('i', strtotime($un_menu->gm_date_creation)); |
$sortie .= '<span class="page_creation_minute">'.$minute.'</span>'; |
if (($seconde = date('s', strtotime($un_menu->gm_date_creation)) ) != 0 ) { |
$sortie .= '<span class="page_separateur_heure">:</span>'; |
$sortie .= '<span class="page_creation_seconde">'.$seconde.'</span>'; |
} |
} |
$sortie .= "\n".'<span class="page_separateur_date_heure"> - </span>'."\n"; |
// Affichage de la date de la création de la page |
if (($jour = date('d', strtotime($un_menu->gm_date_creation)) ) != 0 ) { |
$sortie .= '<span class="page_creation_jour"> '.$jour.'</span>'."\n"; |
} |
if (($mois = $this->_traduireMois(date('m', strtotime($un_menu->gm_date_creation))) ) != '' ) { |
$sortie .= '<span class="page_creation_mois"> '.$mois.'</span>'."\n"; |
} |
if (($annee = date('Y', strtotime($un_menu->gm_date_creation)) ) != 0 ) { |
$sortie .= '<span class="page_creation_annee"> '.$annee.'</span>'."\n"; |
} |
$sortie .= '</li>'."\n"; |
} |
$sortie .= '</ul>'."\n"; |
return $sortie; |
} |
function _traduireMois($mois_numerique) |
{ |
switch ($mois_numerique) { |
case '01' : |
return 'janvier'; |
case '02' : |
return 'février'; |
case '03' : |
return 'mars'; |
case '04' : |
return 'avril'; |
case '05' : |
return 'mai'; |
case '06' : |
return 'juin'; |
case '07' : |
return 'juillet'; |
case '08' : |
return 'août'; |
case '09' : |
return 'septembre'; |
case '10' : |
return 'octobre'; |
case '11' : |
return 'novembre'; |
case '12' : |
return 'décembre'; |
default: |
return ''; |
} |
} |
} |
?> |
/branches/v1.0-menes/api/text/wiki_papyrus/Render/Xhtml/Lien.php |
---|
New file |
0,0 → 1,143 |
<?php |
class Text_Wiki_Render_Xhtml_Lien extends Text_Wiki_Render { |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
// Initialisation des variables |
$sortie = ''; |
$niveau = $options['niveau']; |
$identifiant = $options['identifiant']; |
$titre = $options['titre']; |
$bdd =& $GLOBALS['_GEN_commun']['pear_db']; |
$id_langue = $GLOBALS['_GEN_commun']['i18n']; //identifiant de la langue choisie |
if (isset($id_langue) && ($id_langue!='')) { |
$langue_url=$id_langue; |
} else { |
$langue_url=GEN_I18N_ID_DEFAUT; |
} |
$une_url =& new Pap_URL('http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']); |
$nom=''; |
if ($niveau=="site") { |
$requete = 'SELECT distinct * '. |
'FROM gen_site '; |
if (is_numeric($identifiant)) { |
$requete .= 'WHERE gs_code_num = '.$identifiant.' '; |
$une_url->addQueryString(GEN_URL_CLE_SITE, $identifiant); |
} |
$resultat = $bdd->query($requete); |
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : ''; |
$aso_site = $resultat->fetchRow(DB_FETCHMODE_ASSOC); |
$resultat->free(); |
$requete_traduction = 'SELECT * '. |
'FROM gen_site_relation, gen_site '. |
'WHERE gs_id_site = gsr_id_site_02 ' . |
'AND '.$identifiant.' = gs_code_num '. |
'AND gsr_id_valeur = 1 '.// 1 = "avoir traduction" |
'AND gs_ce_i18n = "'.$langue_url.'" '; |
$resultat_traduction = $bdd->query($requete_traduction); |
(DB::isError($resultat_traduction)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_traduction->getMessage(), $requete_traduction)) |
: ''; |
if ( $resultat_traduction->numRows() > 0 ) { |
$aso_site=$resultat_traduction->fetchRow(DB_FETCHMODE_ASSOC); |
} |
if ($titre=='') { |
if (!empty($aso_site['gs_nom'])) { |
$titre = $aso_site['gs_nom']; |
} else { |
$titre = $aso_site['gs_titre']; |
} |
} |
} |
// Menu |
else { |
$requete = 'SELECT distinct * '. |
'FROM gen_menu '; |
if (is_numeric($identifiant)) { |
$requete .= 'WHERE gm_code_num = '.$identifiant.' '; |
$une_url->addQueryString(GEN_URL_CLE_MENU, $identifiant); |
} |
$resultat = $bdd->query($requete); |
(DB::isError($resultat)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage(), $requete)) : ''; |
$aso_menu = $resultat->fetchRow(DB_FETCHMODE_ASSOC); |
$resultat->free(); |
$requete_traduction = 'SELECT * '. |
'FROM gen_menu_relation, gen_menu '. |
'WHERE '.$identifiant.' = gm_code_num ' . |
'AND gmr_id_menu_02 = gm_id_menu '. |
'AND gmr_id_valeur = 2 '.// 2 = "avoir traduction" |
'AND gm_ce_i18n = "'.$langue_url.'" '; |
$resultat_traduction = $bdd->query($requete_traduction); |
(DB::isError($resultat_traduction)) ? die(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_traduction->getMessage(), $requete_traduction)) |
: ''; |
if ($resultat_traduction->numRows() > 0) { |
$aso_menu=$resultat_traduction->fetchRow(DB_FETCHMODE_ASSOC); |
} |
if ($titre=='') { |
if (!empty($aso_menu['gm_nom'])) { |
$titre = $aso_menu['gm_nom']; |
} |
elseif (!empty($menu_valeur['gm_titre'])) { |
$titre = $aso_menu['gm_titre']; |
} |
} |
} |
if ($langue_url != GEN_I18N_ID_DEFAUT) { |
$une_url->addQueryString(GEN_URL_CLE_I18N, $langue_url); |
} |
// Construction du lien |
$sortie = '<a href="'.$une_url->getURL().'">'.htmlentities($titre).'</a>'; |
return $sortie; |
} |
} |
?> |
/branches/v1.0-menes/api/text/wiki_papyrus/Render/Xhtml/Redirection.php |
---|
New file |
0,0 → 1,27 |
<?php |
class Text_Wiki_Render_Xhtml_Redirection extends Text_Wiki_Render { |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
// Initialisation des variables |
$sortie = ''; |
$url = $options['url']; |
$url=ereg_replace('&','&',$url); |
header("Location: $url"); |
exit; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/PEAR.php |
---|
New file |
0,0 → 1,1055 |
<?php |
// |
// +--------------------------------------------------------------------+ |
// | PEAR, the PHP Extension and Application Repository | |
// +--------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +--------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available through the world-wide-web at the following url: | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +--------------------------------------------------------------------+ |
// | Authors: Sterling Hughes <sterling@php.net> | |
// | Stig Bakken <ssb@php.net> | |
// | Tomas V.V.Cox <cox@idecnet.com> | |
// +--------------------------------------------------------------------+ |
// |
// $Id: PEAR.php,v 1.1 2005-03-30 08:50:19 jpm Exp $ |
// |
define('PEAR_ERROR_RETURN', 1); |
define('PEAR_ERROR_PRINT', 2); |
define('PEAR_ERROR_TRIGGER', 4); |
define('PEAR_ERROR_DIE', 8); |
define('PEAR_ERROR_CALLBACK', 16); |
/** |
* WARNING: obsolete |
* @deprecated |
*/ |
define('PEAR_ERROR_EXCEPTION', 32); |
define('PEAR_ZE2', (function_exists('version_compare') && |
version_compare(zend_version(), "2-dev", "ge"))); |
if (substr(PHP_OS, 0, 3) == 'WIN') { |
define('OS_WINDOWS', true); |
define('OS_UNIX', false); |
define('PEAR_OS', 'Windows'); |
} else { |
define('OS_WINDOWS', false); |
define('OS_UNIX', true); |
define('PEAR_OS', 'Unix'); // blatant assumption |
} |
// instant backwards compatibility |
if (!defined('PATH_SEPARATOR')) { |
if (OS_WINDOWS) { |
define('PATH_SEPARATOR', ';'); |
} else { |
define('PATH_SEPARATOR', ':'); |
} |
} |
$GLOBALS['_PEAR_default_error_mode'] = PEAR_ERROR_RETURN; |
$GLOBALS['_PEAR_default_error_options'] = E_USER_NOTICE; |
$GLOBALS['_PEAR_destructor_object_list'] = array(); |
$GLOBALS['_PEAR_shutdown_funcs'] = array(); |
$GLOBALS['_PEAR_error_handler_stack'] = array(); |
@ini_set('track_errors', true); |
/** |
* Base class for other PEAR classes. Provides rudimentary |
* emulation of destructors. |
* |
* If you want a destructor in your class, inherit PEAR and make a |
* destructor method called _yourclassname (same name as the |
* constructor, but with a "_" prefix). Also, in your constructor you |
* have to call the PEAR constructor: $this->PEAR();. |
* The destructor method will be called without parameters. Note that |
* at in some SAPI implementations (such as Apache), any output during |
* the request shutdown (in which destructors are called) seems to be |
* discarded. If you need to get any debug information from your |
* destructor, use error_log(), syslog() or something similar. |
* |
* IMPORTANT! To use the emulated destructors you need to create the |
* objects by reference: $obj =& new PEAR_child; |
* |
* @since PHP 4.0.2 |
* @author Stig Bakken <ssb@php.net> |
* @see http://pear.php.net/manual/ |
*/ |
class PEAR |
{ |
// {{{ properties |
/** |
* Whether to enable internal debug messages. |
* |
* @var bool |
* @access private |
*/ |
var $_debug = false; |
/** |
* Default error mode for this object. |
* |
* @var int |
* @access private |
*/ |
var $_default_error_mode = null; |
/** |
* Default error options used for this object when error mode |
* is PEAR_ERROR_TRIGGER. |
* |
* @var int |
* @access private |
*/ |
var $_default_error_options = null; |
/** |
* Default error handler (callback) for this object, if error mode is |
* PEAR_ERROR_CALLBACK. |
* |
* @var string |
* @access private |
*/ |
var $_default_error_handler = ''; |
/** |
* Which class to use for error objects. |
* |
* @var string |
* @access private |
*/ |
var $_error_class = 'PEAR_Error'; |
/** |
* An array of expected errors. |
* |
* @var array |
* @access private |
*/ |
var $_expected_errors = array(); |
// }}} |
// {{{ constructor |
/** |
* Constructor. Registers this object in |
* $_PEAR_destructor_object_list for destructor emulation if a |
* destructor object exists. |
* |
* @param string $error_class (optional) which class to use for |
* error objects, defaults to PEAR_Error. |
* @access public |
* @return void |
*/ |
function PEAR($error_class = null) |
{ |
$classname = strtolower(get_class($this)); |
if ($this->_debug) { |
print "PEAR constructor called, class=$classname\n"; |
} |
if ($error_class !== null) { |
$this->_error_class = $error_class; |
} |
while ($classname && strcasecmp($classname, "pear")) { |
$destructor = "_$classname"; |
if (method_exists($this, $destructor)) { |
global $_PEAR_destructor_object_list; |
$_PEAR_destructor_object_list[] = &$this; |
if (!isset($GLOBALS['_PEAR_SHUTDOWN_REGISTERED'])) { |
register_shutdown_function("_PEAR_call_destructors"); |
$GLOBALS['_PEAR_SHUTDOWN_REGISTERED'] = true; |
} |
break; |
} else { |
$classname = get_parent_class($classname); |
} |
} |
} |
// }}} |
// {{{ destructor |
/** |
* Destructor (the emulated type of...). Does nothing right now, |
* but is included for forward compatibility, so subclass |
* destructors should always call it. |
* |
* See the note in the class desciption about output from |
* destructors. |
* |
* @access public |
* @return void |
*/ |
function _PEAR() { |
if ($this->_debug) { |
printf("PEAR destructor called, class=%s\n", strtolower(get_class($this))); |
} |
} |
// }}} |
// {{{ getStaticProperty() |
/** |
* If you have a class that's mostly/entirely static, and you need static |
* properties, you can use this method to simulate them. Eg. in your method(s) |
* do this: $myVar = &PEAR::getStaticProperty('myclass', 'myVar'); |
* You MUST use a reference, or they will not persist! |
* |
* @access public |
* @param string $class The calling classname, to prevent clashes |
* @param string $var The variable to retrieve. |
* @return mixed A reference to the variable. If not set it will be |
* auto initialised to NULL. |
*/ |
function &getStaticProperty($class, $var) |
{ |
static $properties; |
return $properties[$class][$var]; |
} |
// }}} |
// {{{ registerShutdownFunc() |
/** |
* Use this function to register a shutdown method for static |
* classes. |
* |
* @access public |
* @param mixed $func The function name (or array of class/method) to call |
* @param mixed $args The arguments to pass to the function |
* @return void |
*/ |
function registerShutdownFunc($func, $args = array()) |
{ |
$GLOBALS['_PEAR_shutdown_funcs'][] = array($func, $args); |
} |
// }}} |
// {{{ isError() |
/** |
* Tell whether a value is a PEAR error. |
* |
* @param mixed $data the value to test |
* @param int $code if $data is an error object, return true |
* only if $code is a string and |
* $obj->getMessage() == $code or |
* $code is an integer and $obj->getCode() == $code |
* @access public |
* @return bool true if parameter is an error |
*/ |
function isError($data, $code = null) |
{ |
if (is_a($data, 'PEAR_Error')) { |
if (is_null($code)) { |
return true; |
} elseif (is_string($code)) { |
return $data->getMessage() == $code; |
} else { |
return $data->getCode() == $code; |
} |
} |
return false; |
} |
// }}} |
// {{{ setErrorHandling() |
/** |
* Sets how errors generated by this object should be handled. |
* Can be invoked both in objects and statically. If called |
* statically, setErrorHandling sets the default behaviour for all |
* PEAR objects. If called in an object, setErrorHandling sets |
* the default behaviour for that object. |
* |
* @param int $mode |
* One of PEAR_ERROR_RETURN, PEAR_ERROR_PRINT, |
* PEAR_ERROR_TRIGGER, PEAR_ERROR_DIE, |
* PEAR_ERROR_CALLBACK or PEAR_ERROR_EXCEPTION. |
* |
* @param mixed $options |
* When $mode is PEAR_ERROR_TRIGGER, this is the error level (one |
* of E_USER_NOTICE, E_USER_WARNING or E_USER_ERROR). |
* |
* When $mode is PEAR_ERROR_CALLBACK, this parameter is expected |
* to be the callback function or method. A callback |
* function is a string with the name of the function, a |
* callback method is an array of two elements: the element |
* at index 0 is the object, and the element at index 1 is |
* the name of the method to call in the object. |
* |
* When $mode is PEAR_ERROR_PRINT or PEAR_ERROR_DIE, this is |
* a printf format string used when printing the error |
* message. |
* |
* @access public |
* @return void |
* @see PEAR_ERROR_RETURN |
* @see PEAR_ERROR_PRINT |
* @see PEAR_ERROR_TRIGGER |
* @see PEAR_ERROR_DIE |
* @see PEAR_ERROR_CALLBACK |
* @see PEAR_ERROR_EXCEPTION |
* |
* @since PHP 4.0.5 |
*/ |
function setErrorHandling($mode = null, $options = null) |
{ |
if (isset($this) && is_a($this, 'PEAR')) { |
$setmode = &$this->_default_error_mode; |
$setoptions = &$this->_default_error_options; |
} else { |
$setmode = &$GLOBALS['_PEAR_default_error_mode']; |
$setoptions = &$GLOBALS['_PEAR_default_error_options']; |
} |
switch ($mode) { |
case PEAR_ERROR_EXCEPTION: |
case PEAR_ERROR_RETURN: |
case PEAR_ERROR_PRINT: |
case PEAR_ERROR_TRIGGER: |
case PEAR_ERROR_DIE: |
case null: |
$setmode = $mode; |
$setoptions = $options; |
break; |
case PEAR_ERROR_CALLBACK: |
$setmode = $mode; |
// class/object method callback |
if (is_callable($options)) { |
$setoptions = $options; |
} else { |
trigger_error("invalid error callback", E_USER_WARNING); |
} |
break; |
default: |
trigger_error("invalid error mode", E_USER_WARNING); |
break; |
} |
} |
// }}} |
// {{{ expectError() |
/** |
* This method is used to tell which errors you expect to get. |
* Expected errors are always returned with error mode |
* PEAR_ERROR_RETURN. Expected error codes are stored in a stack, |
* and this method pushes a new element onto it. The list of |
* expected errors are in effect until they are popped off the |
* stack with the popExpect() method. |
* |
* Note that this method can not be called statically |
* |
* @param mixed $code a single error code or an array of error codes to expect |
* |
* @return int the new depth of the "expected errors" stack |
* @access public |
*/ |
function expectError($code = '*') |
{ |
if (is_array($code)) { |
array_push($this->_expected_errors, $code); |
} else { |
array_push($this->_expected_errors, array($code)); |
} |
return sizeof($this->_expected_errors); |
} |
// }}} |
// {{{ popExpect() |
/** |
* This method pops one element off the expected error codes |
* stack. |
* |
* @return array the list of error codes that were popped |
*/ |
function popExpect() |
{ |
return array_pop($this->_expected_errors); |
} |
// }}} |
// {{{ _checkDelExpect() |
/** |
* This method checks unsets an error code if available |
* |
* @param mixed error code |
* @return bool true if the error code was unset, false otherwise |
* @access private |
* @since PHP 4.3.0 |
*/ |
function _checkDelExpect($error_code) |
{ |
$deleted = false; |
foreach ($this->_expected_errors AS $key => $error_array) { |
if (in_array($error_code, $error_array)) { |
unset($this->_expected_errors[$key][array_search($error_code, $error_array)]); |
$deleted = true; |
} |
// clean up empty arrays |
if (0 == count($this->_expected_errors[$key])) { |
unset($this->_expected_errors[$key]); |
} |
} |
return $deleted; |
} |
// }}} |
// {{{ delExpect() |
/** |
* This method deletes all occurences of the specified element from |
* the expected error codes stack. |
* |
* @param mixed $error_code error code that should be deleted |
* @return mixed list of error codes that were deleted or error |
* @access public |
* @since PHP 4.3.0 |
*/ |
function delExpect($error_code) |
{ |
$deleted = false; |
if ((is_array($error_code) && (0 != count($error_code)))) { |
// $error_code is a non-empty array here; |
// we walk through it trying to unset all |
// values |
foreach($error_code as $key => $error) { |
if ($this->_checkDelExpect($error)) { |
$deleted = true; |
} else { |
$deleted = false; |
} |
} |
return $deleted ? true : PEAR::raiseError("The expected error you submitted does not exist"); // IMPROVE ME |
} elseif (!empty($error_code)) { |
// $error_code comes alone, trying to unset it |
if ($this->_checkDelExpect($error_code)) { |
return true; |
} else { |
return PEAR::raiseError("The expected error you submitted does not exist"); // IMPROVE ME |
} |
} else { |
// $error_code is empty |
return PEAR::raiseError("The expected error you submitted is empty"); // IMPROVE ME |
} |
} |
// }}} |
// {{{ raiseError() |
/** |
* This method is a wrapper that returns an instance of the |
* configured error class with this object's default error |
* handling applied. If the $mode and $options parameters are not |
* specified, the object's defaults are used. |
* |
* @param mixed $message a text error message or a PEAR error object |
* |
* @param int $code a numeric error code (it is up to your class |
* to define these if you want to use codes) |
* |
* @param int $mode One of PEAR_ERROR_RETURN, PEAR_ERROR_PRINT, |
* PEAR_ERROR_TRIGGER, PEAR_ERROR_DIE, |
* PEAR_ERROR_CALLBACK, PEAR_ERROR_EXCEPTION. |
* |
* @param mixed $options If $mode is PEAR_ERROR_TRIGGER, this parameter |
* specifies the PHP-internal error level (one of |
* E_USER_NOTICE, E_USER_WARNING or E_USER_ERROR). |
* If $mode is PEAR_ERROR_CALLBACK, this |
* parameter specifies the callback function or |
* method. In other error modes this parameter |
* is ignored. |
* |
* @param string $userinfo If you need to pass along for example debug |
* information, this parameter is meant for that. |
* |
* @param string $error_class The returned error object will be |
* instantiated from this class, if specified. |
* |
* @param bool $skipmsg If true, raiseError will only pass error codes, |
* the error message parameter will be dropped. |
* |
* @access public |
* @return object a PEAR error object |
* @see PEAR::setErrorHandling |
* @since PHP 4.0.5 |
*/ |
function raiseError($message = null, |
$code = null, |
$mode = null, |
$options = null, |
$userinfo = null, |
$error_class = null, |
$skipmsg = false) |
{ |
// The error is yet a PEAR error object |
if (is_object($message)) { |
$code = $message->getCode(); |
$userinfo = $message->getUserInfo(); |
$error_class = $message->getType(); |
$message->error_message_prefix = ''; |
$message = $message->getMessage(); |
} |
if (isset($this) && isset($this->_expected_errors) && sizeof($this->_expected_errors) > 0 && sizeof($exp = end($this->_expected_errors))) { |
if ($exp[0] == "*" || |
(is_int(reset($exp)) && in_array($code, $exp)) || |
(is_string(reset($exp)) && in_array($message, $exp))) { |
$mode = PEAR_ERROR_RETURN; |
} |
} |
// No mode given, try global ones |
if ($mode === null) { |
// Class error handler |
if (isset($this) && isset($this->_default_error_mode)) { |
$mode = $this->_default_error_mode; |
$options = $this->_default_error_options; |
// Global error handler |
} elseif (isset($GLOBALS['_PEAR_default_error_mode'])) { |
$mode = $GLOBALS['_PEAR_default_error_mode']; |
$options = $GLOBALS['_PEAR_default_error_options']; |
} |
} |
if ($error_class !== null) { |
$ec = $error_class; |
} elseif (isset($this) && isset($this->_error_class)) { |
$ec = $this->_error_class; |
} else { |
$ec = 'PEAR_Error'; |
} |
if ($skipmsg) { |
return new $ec($code, $mode, $options, $userinfo); |
} else { |
return new $ec($message, $code, $mode, $options, $userinfo); |
} |
} |
// }}} |
// {{{ throwError() |
/** |
* Simpler form of raiseError with fewer options. In most cases |
* message, code and userinfo are enough. |
* |
* @param string $message |
* |
*/ |
function throwError($message = null, |
$code = null, |
$userinfo = null) |
{ |
if (isset($this) && is_a($this, 'PEAR')) { |
return $this->raiseError($message, $code, null, null, $userinfo); |
} else { |
return PEAR::raiseError($message, $code, null, null, $userinfo); |
} |
} |
// }}} |
function staticPushErrorHandling($mode, $options = null) |
{ |
$stack = &$GLOBALS['_PEAR_error_handler_stack']; |
$def_mode = &$GLOBALS['_PEAR_default_error_mode']; |
$def_options = &$GLOBALS['_PEAR_default_error_options']; |
$stack[] = array($def_mode, $def_options); |
switch ($mode) { |
case PEAR_ERROR_EXCEPTION: |
case PEAR_ERROR_RETURN: |
case PEAR_ERROR_PRINT: |
case PEAR_ERROR_TRIGGER: |
case PEAR_ERROR_DIE: |
case null: |
$def_mode = $mode; |
$def_options = $options; |
break; |
case PEAR_ERROR_CALLBACK: |
$def_mode = $mode; |
// class/object method callback |
if (is_callable($options)) { |
$def_options = $options; |
} else { |
trigger_error("invalid error callback", E_USER_WARNING); |
} |
break; |
default: |
trigger_error("invalid error mode", E_USER_WARNING); |
break; |
} |
$stack[] = array($mode, $options); |
return true; |
} |
function staticPopErrorHandling() |
{ |
$stack = &$GLOBALS['_PEAR_error_handler_stack']; |
$setmode = &$GLOBALS['_PEAR_default_error_mode']; |
$setoptions = &$GLOBALS['_PEAR_default_error_options']; |
array_pop($stack); |
list($mode, $options) = $stack[sizeof($stack) - 1]; |
array_pop($stack); |
switch ($mode) { |
case PEAR_ERROR_EXCEPTION: |
case PEAR_ERROR_RETURN: |
case PEAR_ERROR_PRINT: |
case PEAR_ERROR_TRIGGER: |
case PEAR_ERROR_DIE: |
case null: |
$setmode = $mode; |
$setoptions = $options; |
break; |
case PEAR_ERROR_CALLBACK: |
$setmode = $mode; |
// class/object method callback |
if (is_callable($options)) { |
$setoptions = $options; |
} else { |
trigger_error("invalid error callback", E_USER_WARNING); |
} |
break; |
default: |
trigger_error("invalid error mode", E_USER_WARNING); |
break; |
} |
return true; |
} |
// {{{ pushErrorHandling() |
/** |
* Push a new error handler on top of the error handler options stack. With this |
* you can easily override the actual error handler for some code and restore |
* it later with popErrorHandling. |
* |
* @param mixed $mode (same as setErrorHandling) |
* @param mixed $options (same as setErrorHandling) |
* |
* @return bool Always true |
* |
* @see PEAR::setErrorHandling |
*/ |
function pushErrorHandling($mode, $options = null) |
{ |
$stack = &$GLOBALS['_PEAR_error_handler_stack']; |
if (isset($this) && is_a($this, 'PEAR')) { |
$def_mode = &$this->_default_error_mode; |
$def_options = &$this->_default_error_options; |
} else { |
$def_mode = &$GLOBALS['_PEAR_default_error_mode']; |
$def_options = &$GLOBALS['_PEAR_default_error_options']; |
} |
$stack[] = array($def_mode, $def_options); |
if (isset($this) && is_a($this, 'PEAR')) { |
$this->setErrorHandling($mode, $options); |
} else { |
PEAR::setErrorHandling($mode, $options); |
} |
$stack[] = array($mode, $options); |
return true; |
} |
// }}} |
// {{{ popErrorHandling() |
/** |
* Pop the last error handler used |
* |
* @return bool Always true |
* |
* @see PEAR::pushErrorHandling |
*/ |
function popErrorHandling() |
{ |
$stack = &$GLOBALS['_PEAR_error_handler_stack']; |
array_pop($stack); |
list($mode, $options) = $stack[sizeof($stack) - 1]; |
array_pop($stack); |
if (isset($this) && is_a($this, 'PEAR')) { |
$this->setErrorHandling($mode, $options); |
} else { |
PEAR::setErrorHandling($mode, $options); |
} |
return true; |
} |
// }}} |
// {{{ loadExtension() |
/** |
* OS independant PHP extension load. Remember to take care |
* on the correct extension name for case sensitive OSes. |
* |
* @param string $ext The extension name |
* @return bool Success or not on the dl() call |
*/ |
function loadExtension($ext) |
{ |
if (!extension_loaded($ext)) { |
// if either returns true dl() will produce a FATAL error, stop that |
if ((ini_get('enable_dl') != 1) || (ini_get('safe_mode') == 1)) { |
return false; |
} |
if (OS_WINDOWS) { |
$suffix = '.dll'; |
} elseif (PHP_OS == 'HP-UX') { |
$suffix = '.sl'; |
} elseif (PHP_OS == 'AIX') { |
$suffix = '.a'; |
} elseif (PHP_OS == 'OSX') { |
$suffix = '.bundle'; |
} else { |
$suffix = '.so'; |
} |
return @dl('php_'.$ext.$suffix) || @dl($ext.$suffix); |
} |
return true; |
} |
// }}} |
} |
// {{{ _PEAR_call_destructors() |
function _PEAR_call_destructors() |
{ |
global $_PEAR_destructor_object_list; |
if (is_array($_PEAR_destructor_object_list) && |
sizeof($_PEAR_destructor_object_list)) |
{ |
reset($_PEAR_destructor_object_list); |
if (@PEAR::getStaticProperty('PEAR', 'destructlifo')) { |
$_PEAR_destructor_object_list = array_reverse($_PEAR_destructor_object_list); |
} |
while (list($k, $objref) = each($_PEAR_destructor_object_list)) { |
$classname = get_class($objref); |
while ($classname) { |
$destructor = "_$classname"; |
if (method_exists($objref, $destructor)) { |
$objref->$destructor(); |
break; |
} else { |
$classname = get_parent_class($classname); |
} |
} |
} |
// Empty the object list to ensure that destructors are |
// not called more than once. |
$_PEAR_destructor_object_list = array(); |
} |
// Now call the shutdown functions |
if (is_array($GLOBALS['_PEAR_shutdown_funcs']) AND !empty($GLOBALS['_PEAR_shutdown_funcs'])) { |
foreach ($GLOBALS['_PEAR_shutdown_funcs'] as $value) { |
call_user_func_array($value[0], $value[1]); |
} |
} |
} |
// }}} |
class PEAR_Error |
{ |
// {{{ properties |
var $error_message_prefix = ''; |
var $mode = PEAR_ERROR_RETURN; |
var $level = E_USER_NOTICE; |
var $code = -1; |
var $message = ''; |
var $userinfo = ''; |
var $backtrace = null; |
// }}} |
// {{{ constructor |
/** |
* PEAR_Error constructor |
* |
* @param string $message message |
* |
* @param int $code (optional) error code |
* |
* @param int $mode (optional) error mode, one of: PEAR_ERROR_RETURN, |
* PEAR_ERROR_PRINT, PEAR_ERROR_DIE, PEAR_ERROR_TRIGGER, |
* PEAR_ERROR_CALLBACK or PEAR_ERROR_EXCEPTION |
* |
* @param mixed $options (optional) error level, _OR_ in the case of |
* PEAR_ERROR_CALLBACK, the callback function or object/method |
* tuple. |
* |
* @param string $userinfo (optional) additional user/debug info |
* |
* @access public |
* |
*/ |
function PEAR_Error($message = 'unknown error', $code = null, |
$mode = null, $options = null, $userinfo = null) |
{ |
if ($mode === null) { |
$mode = PEAR_ERROR_RETURN; |
} |
$this->message = $message; |
$this->code = $code; |
$this->mode = $mode; |
$this->userinfo = $userinfo; |
if (function_exists("debug_backtrace")) { |
if (@!PEAR::getStaticProperty('PEAR_Error', 'skiptrace')) { |
$this->backtrace = debug_backtrace(); |
} |
} |
if ($mode & PEAR_ERROR_CALLBACK) { |
$this->level = E_USER_NOTICE; |
$this->callback = $options; |
} else { |
if ($options === null) { |
$options = E_USER_NOTICE; |
} |
$this->level = $options; |
$this->callback = null; |
} |
if ($this->mode & PEAR_ERROR_PRINT) { |
if (is_null($options) || is_int($options)) { |
$format = "%s"; |
} else { |
$format = $options; |
} |
printf($format, $this->getMessage()); |
} |
if ($this->mode & PEAR_ERROR_TRIGGER) { |
trigger_error($this->getMessage(), $this->level); |
} |
if ($this->mode & PEAR_ERROR_DIE) { |
$msg = $this->getMessage(); |
if (is_null($options) || is_int($options)) { |
$format = "%s"; |
if (substr($msg, -1) != "\n") { |
$msg .= "\n"; |
} |
} else { |
$format = $options; |
} |
die(sprintf($format, $msg)); |
} |
if ($this->mode & PEAR_ERROR_CALLBACK) { |
if (is_callable($this->callback)) { |
call_user_func($this->callback, $this); |
} |
} |
if ($this->mode & PEAR_ERROR_EXCEPTION) { |
trigger_error("PEAR_ERROR_EXCEPTION is obsolete, use class PEAR_ErrorStack for exceptions", E_USER_WARNING); |
eval('$e = new Exception($this->message, $this->code);$e->PEAR_Error = $this;throw($e);'); |
} |
} |
// }}} |
// {{{ getMode() |
/** |
* Get the error mode from an error object. |
* |
* @return int error mode |
* @access public |
*/ |
function getMode() { |
return $this->mode; |
} |
// }}} |
// {{{ getCallback() |
/** |
* Get the callback function/method from an error object. |
* |
* @return mixed callback function or object/method array |
* @access public |
*/ |
function getCallback() { |
return $this->callback; |
} |
// }}} |
// {{{ getMessage() |
/** |
* Get the error message from an error object. |
* |
* @return string full error message |
* @access public |
*/ |
function getMessage() |
{ |
return ($this->error_message_prefix . $this->message); |
} |
// }}} |
// {{{ getCode() |
/** |
* Get error code from an error object |
* |
* @return int error code |
* @access public |
*/ |
function getCode() |
{ |
return $this->code; |
} |
// }}} |
// {{{ getType() |
/** |
* Get the name of this error/exception. |
* |
* @return string error/exception name (type) |
* @access public |
*/ |
function getType() |
{ |
return get_class($this); |
} |
// }}} |
// {{{ getUserInfo() |
/** |
* Get additional user-supplied information. |
* |
* @return string user-supplied information |
* @access public |
*/ |
function getUserInfo() |
{ |
return $this->userinfo; |
} |
// }}} |
// {{{ getDebugInfo() |
/** |
* Get additional debug information supplied by the application. |
* |
* @return string debug information |
* @access public |
*/ |
function getDebugInfo() |
{ |
return $this->getUserInfo(); |
} |
// }}} |
// {{{ getBacktrace() |
/** |
* Get the call backtrace from where the error was generated. |
* Supported with PHP 4.3.0 or newer. |
* |
* @param int $frame (optional) what frame to fetch |
* @return array Backtrace, or NULL if not available. |
* @access public |
*/ |
function getBacktrace($frame = null) |
{ |
if ($frame === null) { |
return $this->backtrace; |
} |
return $this->backtrace[$frame]; |
} |
// }}} |
// {{{ addUserInfo() |
function addUserInfo($info) |
{ |
if (empty($this->userinfo)) { |
$this->userinfo = $info; |
} else { |
$this->userinfo .= " ** $info"; |
} |
} |
// }}} |
// {{{ toString() |
/** |
* Make a string representation of this object. |
* |
* @return string a string with an object summary |
* @access public |
*/ |
function toString() { |
$modes = array(); |
$levels = array(E_USER_NOTICE => 'notice', |
E_USER_WARNING => 'warning', |
E_USER_ERROR => 'error'); |
if ($this->mode & PEAR_ERROR_CALLBACK) { |
if (is_array($this->callback)) { |
$callback = (is_object($this->callback[0]) ? |
strtolower(get_class($this->callback[0])) : |
$this->callback[0]) . '::' . |
$this->callback[1]; |
} else { |
$callback = $this->callback; |
} |
return sprintf('[%s: message="%s" code=%d mode=callback '. |
'callback=%s prefix="%s" info="%s"]', |
strtolower(get_class($this)), $this->message, $this->code, |
$callback, $this->error_message_prefix, |
$this->userinfo); |
} |
if ($this->mode & PEAR_ERROR_PRINT) { |
$modes[] = 'print'; |
} |
if ($this->mode & PEAR_ERROR_TRIGGER) { |
$modes[] = 'trigger'; |
} |
if ($this->mode & PEAR_ERROR_DIE) { |
$modes[] = 'die'; |
} |
if ($this->mode & PEAR_ERROR_RETURN) { |
$modes[] = 'return'; |
} |
return sprintf('[%s: message="%s" code=%d mode=%s level=%s '. |
'prefix="%s" info="%s"]', |
strtolower(get_class($this)), $this->message, $this->code, |
implode("|", $modes), $levels[$this->level], |
$this->error_message_prefix, |
$this->userinfo); |
} |
// }}} |
} |
/* |
* Local Variables: |
* mode: php |
* tab-width: 4 |
* c-basic-offset: 4 |
* End: |
*/ |
?> |
/branches/v1.0-menes/api/pear/Pager/Common.php |
---|
New file |
0,0 → 1,1502 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ |
/** |
* Contains the Pager_Common class |
* |
* PHP versions 4 and 5 |
* |
* LICENSE: 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 FREEBSD PROJECT OR CONTRIBUTORS 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. |
* |
* @category HTML |
* @package Pager |
* @author Lorenzo Alberton <l dot alberton at quipo dot it> |
* @author Richard Heyes <richard@phpguru.org> |
* @copyright 2003-2006 Lorenzo Alberton, Richard Heyes |
* @license http://www.debian.org/misc/bsd.license BSD License (3 Clause) |
* @version CVS: $Id$ |
* @link http://pear.php.net/package/Pager |
*/ |
/** |
* Two constants used to guess the path- and file-name of the page |
* when the user doesn't set any other value |
*/ |
if (substr($_SERVER['PHP_SELF'], -1) == '/') { |
define('CURRENT_FILENAME', ''); |
define('CURRENT_PATHNAME', 'http://'.$_SERVER['HTTP_HOST'].str_replace('\\', '/', $_SERVER['PHP_SELF'])); |
} else { |
define('CURRENT_FILENAME', preg_replace('/(.*)\?.*/', '\\1', basename($_SERVER['PHP_SELF']))); |
define('CURRENT_PATHNAME', str_replace('\\', '/', dirname($_SERVER['PHP_SELF']))); |
} |
/** |
* Error codes |
*/ |
define('PAGER_OK', 0); |
define('ERROR_PAGER', -1); |
define('ERROR_PAGER_INVALID', -2); |
define('ERROR_PAGER_INVALID_PLACEHOLDER', -3); |
define('ERROR_PAGER_INVALID_USAGE', -4); |
define('ERROR_PAGER_NOT_IMPLEMENTED', -5); |
/** |
* Pager_Common - Common base class for [Sliding|Jumping] Window Pager |
* Extend this class to write a custom paging class |
* |
* @category HTML |
* @package Pager |
* @author Lorenzo Alberton <l dot alberton at quipo dot it> |
* @author Richard Heyes <richard@phpguru.org> |
* @copyright 2003-2005 Lorenzo Alberton, Richard Heyes |
* @license http://www.php.net/license/3_0.txt PHP License 3.0 |
* @link http://pear.php.net/package/Pager |
*/ |
class Pager_Common |
{ |
// {{{ class vars |
/** |
* @var integer number of items |
* @access private |
*/ |
var $_totalItems; |
/** |
* @var integer number of items per page |
* @access private |
*/ |
var $_perPage = 10; |
/** |
* @var integer number of page links for each window |
* @access private |
*/ |
var $_delta = 10; |
/** |
* @var integer current page number |
* @access private |
*/ |
var $_currentPage = 1; |
/** |
* @var integer total pages number |
* @access private |
*/ |
var $_totalPages = 1; |
/** |
* @var string CSS class for links |
* @access private |
*/ |
var $_linkClass = ''; |
/** |
* @var string wrapper for CSS class name |
* @access private |
*/ |
var $_classString = ''; |
/** |
* @var string path name |
* @access private |
*/ |
var $_path = CURRENT_PATHNAME; |
/** |
* @var string file name |
* @access private |
*/ |
var $_fileName = CURRENT_FILENAME; |
/** |
* @var boolean If false, don't override the fileName option. Use at your own risk. |
* @access private |
*/ |
var $_fixFileName = true; |
/** |
* @var boolean you have to use FALSE with mod_rewrite |
* @access private |
*/ |
var $_append = true; |
/** |
* @var string specifies which HTTP method to use |
* @access private |
*/ |
var $_httpMethod = 'GET'; |
/** |
* @var string specifies which HTML form to use |
* @access private |
*/ |
var $_formID = ''; |
/** |
* @var boolean whether or not to import submitted data |
* @access private |
*/ |
var $_importQuery = true; |
/** |
* @var string name of the querystring var for pageID |
* @access private |
*/ |
var $_urlVar = 'pageID'; |
/** |
* @var array data to pass through the link |
* @access private |
*/ |
var $_linkData = array(); |
/** |
* @var array additional URL vars |
* @access private |
*/ |
var $_extraVars = array(); |
/** |
* @var array URL vars to ignore |
* @access private |
*/ |
var $_excludeVars = array(); |
/** |
* @var boolean TRUE => expanded mode (for Pager_Sliding) |
* @access private |
*/ |
var $_expanded = true; |
/** |
* @var boolean TRUE => show accesskey attribute on <a> tags |
* @access private |
*/ |
var $_accesskey = false; |
/** |
* @var string extra attributes for the <a> tag |
* @access private |
*/ |
var $_attributes = ''; |
/** |
* @var string alt text for "first page" (use "%d" placeholder for page number) |
* @access private |
*/ |
var $_altFirst = 'first page'; |
/** |
* @var string alt text for "previous page" |
* @access private |
*/ |
var $_altPrev = 'previous page'; |
/** |
* @var string alt text for "next page" |
* @access private |
*/ |
var $_altNext = 'next page'; |
/** |
* @var string alt text for "last page" (use "%d" placeholder for page number) |
* @access private |
*/ |
var $_altLast = 'last page'; |
/** |
* @var string alt text for "page" |
* @access private |
*/ |
var $_altPage = 'page'; |
/** |
* @var string image/text to use as "prev" link |
* @access private |
*/ |
var $_prevImg = '<< Back'; |
/** |
* @var string image/text to use as "next" link |
* @access private |
*/ |
var $_nextImg = 'Next >>'; |
/** |
* @var string link separator |
* @access private |
*/ |
var $_separator = ''; |
/** |
* @var integer number of spaces before separator |
* @access private |
*/ |
var $_spacesBeforeSeparator = 0; |
/** |
* @var integer number of spaces after separator |
* @access private |
*/ |
var $_spacesAfterSeparator = 1; |
/** |
* @var string CSS class name for current page link |
* @access private |
*/ |
var $_curPageLinkClassName = ''; |
/** |
* @var string Text before current page link |
* @access private |
*/ |
var $_curPageSpanPre = ''; |
/** |
* @var string Text after current page link |
* @access private |
*/ |
var $_curPageSpanPost = ''; |
/** |
* @var string Text before first page link |
* @access private |
*/ |
var $_firstPagePre = '['; |
/** |
* @var string Text to be used for first page link |
* @access private |
*/ |
var $_firstPageText = ''; |
/** |
* @var string Text after first page link |
* @access private |
*/ |
var $_firstPagePost = ']'; |
/** |
* @var string Text before last page link |
* @access private |
*/ |
var $_lastPagePre = '['; |
/** |
* @var string Text to be used for last page link |
* @access private |
*/ |
var $_lastPageText = ''; |
/** |
* @var string Text after last page link |
* @access private |
*/ |
var $_lastPagePost = ']'; |
/** |
* @var string Will contain the HTML code for the spaces |
* @access private |
*/ |
var $_spacesBefore = ''; |
/** |
* @var string Will contain the HTML code for the spaces |
* @access private |
*/ |
var $_spacesAfter = ''; |
/** |
* @var string $_firstLinkTitle |
* @access private |
*/ |
var $_firstLinkTitle = 'first page'; |
/** |
* @var string $_nextLinkTitle |
* @access private |
*/ |
var $_nextLinkTitle = 'next page'; |
/** |
* @var string $_prevLinkTitle |
* @access private |
*/ |
var $_prevLinkTitle = 'previous page'; |
/** |
* @var string $_lastLinkTitle |
* @access private |
*/ |
var $_lastLinkTitle = 'last page'; |
/** |
* @var string Text to be used for the 'show all' option in the select box |
* @access private |
*/ |
var $_showAllText = ''; |
/** |
* @var array data to be paged |
* @access private |
*/ |
var $_itemData = null; |
/** |
* @var boolean If TRUE and there's only one page, links aren't shown |
* @access private |
*/ |
var $_clearIfVoid = true; |
/** |
* @var boolean Use session for storing the number of items per page |
* @access private |
*/ |
var $_useSessions = false; |
/** |
* @var boolean Close the session when finished reading/writing data |
* @access private |
*/ |
var $_closeSession = false; |
/** |
* @var string name of the session var for number of items per page |
* @access private |
*/ |
var $_sessionVar = 'setPerPage'; |
/** |
* Pear error mode (when raiseError is called) |
* (see PEAR doc) |
* |
* @var int $_pearErrorMode |
* @access private |
*/ |
var $_pearErrorMode = null; |
// }}} |
// {{{ public vars |
/** |
* @var string Complete set of links |
* @access public |
*/ |
var $links = ''; |
/** |
* @var string Complete set of link tags |
* @access public |
*/ |
var $linkTags = ''; |
/** |
* @var array Array with a key => value pair representing |
* page# => bool value (true if key==currentPageNumber). |
* can be used for extreme customization. |
* @access public |
*/ |
var $range = array(); |
/** |
* @var array list of available options (safety check) |
* @access private |
*/ |
var $_allowed_options = array( |
'totalItems', |
'perPage', |
'delta', |
'linkClass', |
'path', |
'fileName', |
'fixFileName', |
'append', |
'httpMethod', |
'formID', |
'importQuery', |
'urlVar', |
'altFirst', |
'altPrev', |
'altNext', |
'altLast', |
'altPage', |
'prevImg', |
'nextImg', |
'expanded', |
'accesskey', |
'attributes', |
'separator', |
'spacesBeforeSeparator', |
'spacesAfterSeparator', |
'curPageLinkClassName', |
'curPageSpanPre', |
'curPageSpanPost', |
'firstPagePre', |
'firstPageText', |
'firstPagePost', |
'lastPagePre', |
'lastPageText', |
'lastPagePost', |
'firstLinkTitle', |
'nextLinkTitle', |
'prevLinkTitle', |
'lastLinkTitle', |
'showAllText', |
'itemData', |
'clearIfVoid', |
'useSessions', |
'closeSession', |
'sessionVar', |
'pearErrorMode', |
'extraVars', |
'excludeVars', |
'currentPage', |
); |
// }}} |
// {{{ build() |
/** |
* Generate or refresh the links and paged data after a call to setOptions() |
* |
* @access public |
*/ |
function build() |
{ |
$msg = '<b>PEAR::Pager Error:</b>' |
.' function "build()" not implemented.'; |
return $this->raiseError($msg, ERROR_PAGER_NOT_IMPLEMENTED); |
} |
// }}} |
// {{{ getPageData() |
/** |
* Returns an array of current pages data |
* |
* @param $pageID Desired page ID (optional) |
* @return array Page data |
* @access public |
*/ |
function getPageData($pageID = null) |
{ |
$pageID = empty($pageID) ? $this->_currentPage : $pageID; |
if (!isset($this->_pageData)) { |
$this->_generatePageData(); |
} |
if (!empty($this->_pageData[$pageID])) { |
return $this->_pageData[$pageID]; |
} |
return array(); |
} |
// }}} |
// {{{ getPageIdByOffset() |
/** |
* Returns pageID for given offset |
* |
* @param $index Offset to get pageID for |
* @return int PageID for given offset |
*/ |
function getPageIdByOffset($index) |
{ |
$msg = '<b>PEAR::Pager Error:</b>' |
.' function "getPageIdByOffset()" not implemented.'; |
return $this->raiseError($msg, ERROR_PAGER_NOT_IMPLEMENTED); |
} |
// }}} |
// {{{ getOffsetByPageId() |
/** |
* Returns offsets for given pageID. Eg, if you |
* pass it pageID one and your perPage limit is 10 |
* it will return (1, 10). PageID of 2 would |
* give you (11, 20). |
* |
* @param integer PageID to get offsets for |
* @return array First and last offsets |
* @access public |
*/ |
function getOffsetByPageId($pageid = null) |
{ |
$pageid = isset($pageid) ? $pageid : $this->_currentPage; |
if (!isset($this->_pageData)) { |
$this->_generatePageData(); |
} |
if (isset($this->_pageData[$pageid]) || is_null($this->_itemData)) { |
return array( |
max(($this->_perPage * ($pageid - 1)) + 1, 1), |
min($this->_totalItems, $this->_perPage * $pageid) |
); |
} else { |
return array(0, 0); |
} |
} |
// }}} |
// {{{ getPageRangeByPageId() |
/** |
* @param integer PageID to get offsets for |
* @return array First and last offsets |
*/ |
function getPageRangeByPageId($pageID) |
{ |
$msg = '<b>PEAR::Pager Error:</b>' |
.' function "getPageRangeByPageId()" not implemented.'; |
return $this->raiseError($msg, ERROR_PAGER_NOT_IMPLEMENTED); |
} |
// }}} |
// {{{ getLinks() |
/** |
* Returns back/next/first/last and page links, |
* both as ordered and associative array. |
* |
* NB: in original PEAR::Pager this method accepted two parameters, |
* $back_html and $next_html. Now the only parameter accepted is |
* an integer ($pageID), since the html text for prev/next links can |
* be set in the factory. If a second parameter is provided, then |
* the method act as it previously did. This hack was done to mantain |
* backward compatibility only. |
* |
* @param integer $pageID Optional pageID. If specified, links |
* for that page are provided instead of current one. [ADDED IN NEW PAGER VERSION] |
* @param string $next_html HTML to put inside the next link [deprecated: use the factory instead] |
* @return array back/next/first/last and page links |
*/ |
function getLinks($pageID=null, $next_html='') |
{ |
$msg = '<b>PEAR::Pager Error:</b>' |
.' function "getLinks()" not implemented.'; |
return $this->raiseError($msg, ERROR_PAGER_NOT_IMPLEMENTED); |
} |
// }}} |
// {{{ getCurrentPageID() |
/** |
* Returns ID of current page |
* |
* @return integer ID of current page |
*/ |
function getCurrentPageID() |
{ |
return $this->_currentPage; |
} |
// }}} |
// {{{ getNextPageID() |
/** |
* Returns next page ID. If current page is last page |
* this function returns FALSE |
* |
* @return mixed Next page ID |
*/ |
function getNextPageID() |
{ |
return ($this->getCurrentPageID() == $this->numPages() ? false : $this->getCurrentPageID() + 1); |
} |
// }}} |
// {{{ getPreviousPageID() |
/** |
* Returns previous page ID. If current page is first page |
* this function returns FALSE |
* |
* @return mixed Previous pages' ID |
*/ |
function getPreviousPageID() |
{ |
return $this->isFirstPage() ? false : $this->getCurrentPageID() - 1; |
} |
// }}} |
// {{{ numItems() |
/** |
* Returns number of items |
* |
* @return int Number of items |
*/ |
function numItems() |
{ |
return $this->_totalItems; |
} |
// }}} |
// {{{ numPages() |
/** |
* Returns number of pages |
* |
* @return int Number of pages |
*/ |
function numPages() |
{ |
return (int)$this->_totalPages; |
} |
// }}} |
// {{{ isFirstPage() |
/** |
* Returns whether current page is first page |
* |
* @return bool First page or not |
*/ |
function isFirstPage() |
{ |
return ($this->_currentPage < 2); |
} |
// }}} |
// {{{ isLastPage() |
/** |
* Returns whether current page is last page |
* |
* @return bool Last page or not |
*/ |
function isLastPage() |
{ |
return ($this->_currentPage == $this->_totalPages); |
} |
// }}} |
// {{{ isLastPageComplete() |
/** |
* Returns whether last page is complete |
* |
* @return bool Last age complete or not |
*/ |
function isLastPageComplete() |
{ |
return !($this->_totalItems % $this->_perPage); |
} |
// }}} |
// {{{ _generatePageData() |
/** |
* Calculates all page data |
* @access private |
*/ |
function _generatePageData() |
{ |
// Been supplied an array of data? |
if (!is_null($this->_itemData)) { |
$this->_totalItems = count($this->_itemData); |
} |
$this->_totalPages = ceil((float)$this->_totalItems / (float)$this->_perPage); |
$i = 1; |
if (!empty($this->_itemData)) { |
foreach ($this->_itemData as $key => $value) { |
$this->_pageData[$i][$key] = $value; |
if (count($this->_pageData[$i]) >= $this->_perPage) { |
$i++; |
} |
} |
} else { |
$this->_pageData = array(); |
} |
//prevent URL modification |
$this->_currentPage = min($this->_currentPage, $this->_totalPages); |
} |
// }}} |
// {{{ _renderLink() |
/** |
* Renders a link using the appropriate method |
* |
* @param altText Alternative text for this link (title property) |
* @param linkText Text contained by this link |
* @return string The link in string form |
* @access private |
*/ |
function _renderLink($altText, $linkText) |
{ |
if ($this->_httpMethod == 'GET') { |
if ($this->_append) { |
$href = '?' . $this->_http_build_query_wrapper($this->_linkData); |
} else { |
$href = str_replace('%d', $this->_linkData[$this->_urlVar], $this->_fileName); |
} |
return sprintf('<a href="%s"%s%s%s title="%s">%s</a>', |
htmlentities($this->_url . $href), |
empty($this->_classString) ? '' : ' '.$this->_classString, |
empty($this->_attributes) ? '' : ' '.$this->_attributes, |
empty($this->_accesskey) ? '' : ' accesskey="'.$this->_linkData[$this->_urlVar].'"', |
$altText, |
$linkText |
); |
} elseif ($this->_httpMethod == 'POST') { |
return sprintf("<a href='javascript:void(0)' onclick='%s'%s%s%s title='%s'>%s</a>", |
$this->_generateFormOnClick($this->_url, $this->_linkData), |
empty($this->_classString) ? '' : ' '.$this->_classString, |
empty($this->_attributes) ? '' : ' '.$this->_attributes, |
empty($this->_accesskey) ? '' : ' accesskey=\''.$this->_linkData[$this->_urlVar].'\'', |
$altText, |
$linkText |
); |
} |
return ''; |
} |
// }}} |
// {{{ _generateFormOnClick() |
/** |
* Mimics http_build_query() behavior in the way the data |
* in $data will appear when it makes it back to the server. |
* For example: |
* $arr = array('array' => array(array('hello', 'world'), |
* 'things' => array('stuff', 'junk')); |
* http_build_query($arr) |
* and _generateFormOnClick('foo.php', $arr) |
* will yield |
* $_REQUEST['array'][0][0] === 'hello' |
* $_REQUEST['array'][0][1] === 'world' |
* $_REQUEST['array']['things'][0] === 'stuff' |
* $_REQUEST['array']['things'][1] === 'junk' |
* |
* However, instead of generating a query string, it generates |
* Javascript to create and submit a form. |
* |
* @param string $formAction where the form should be submitted |
* @param array $data the associative array of names and values |
* @return string A string of javascript that generates a form and submits it |
* @access private |
*/ |
function _generateFormOnClick($formAction, $data) |
{ |
// Check we have an array to work with |
if (!is_array($data)) { |
trigger_error( |
'_generateForm() Parameter 1 expected to be Array or Object. Incorrect value given.', |
E_USER_WARNING |
); |
return false; |
} |
if (!empty($this->_formID)) { |
$str = 'var form = document.getElementById("'.$this->_formID.'"); var input = ""; '; |
} else { |
$str = 'var form = document.createElement("form"); var input = ""; '; |
} |
// We /shouldn't/ need to escape the URL ... |
$str .= sprintf('form.action = "%s"; ', htmlentities($formAction)); |
$str .= sprintf('form.method = "%s"; ', $this->_httpMethod); |
foreach ($data as $key => $val) { |
$str .= $this->_generateFormOnClickHelper($val, $key); |
} |
if (empty($this->_formID)) { |
$str .= 'document.getElementsByTagName("body")[0].appendChild(form);'; |
} |
$str .= 'form.submit(); return false;'; |
return $str; |
} |
// }}} |
// {{{ _generateFormOnClickHelper |
/** |
* This is used by _generateFormOnClick(). |
* Recursively processes the arrays, objects, and literal values. |
* |
* @param data Data that should be rendered |
* @param prev The name so far |
* @return string A string of Javascript that creates form inputs |
* representing the data |
* @access private |
*/ |
function _generateFormOnClickHelper($data, $prev = '') |
{ |
$str = ''; |
if (is_array($data) || is_object($data)) { |
// foreach key/visible member |
foreach ((array)$data as $key => $val) { |
// append [$key] to prev |
$tempKey = sprintf('%s[%s]', $prev, $key); |
$str .= $this->_generateFormOnClickHelper($val, $tempKey); |
} |
} else { // must be a literal value |
// escape newlines and carriage returns |
$search = array("\n", "\r"); |
$replace = array('\n', '\n'); |
$escapedData = str_replace($search, $replace, $data); |
// am I forgetting any dangerous whitespace? |
// would a regex be faster? |
// if it's already encoded, don't encode it again |
if (!$this->_isEncoded($escapedData)) { |
$escapedData = urlencode($escapedData); |
} |
$escapedData = htmlentities($escapedData, ENT_QUOTES, 'UTF-8'); |
$str .= 'input = document.createElement("input"); '; |
$str .= 'input.type = "hidden"; '; |
$str .= sprintf('input.name = "%s"; ', $prev); |
$str .= sprintf('input.value = "%s"; ', $escapedData); |
$str .= 'form.appendChild(input); '; |
} |
return $str; |
} |
// }}} |
// {{{ _getLinksData() |
/** |
* Returns the correct link for the back/pages/next links |
* |
* @return array Data |
* @access private |
*/ |
function _getLinksData() |
{ |
$qs = array(); |
if ($this->_importQuery) { |
if ($this->_httpMethod == 'POST') { |
$qs = $_POST; |
} elseif ($this->_httpMethod == 'GET') { |
$qs = $_GET; |
} |
} |
if (count($this->_extraVars)){ |
$this->_recursive_urldecode($this->_extraVars); |
} |
$qs = array_merge($qs, $this->_extraVars); |
foreach ($this->_excludeVars as $exclude) { |
if (array_key_exists($exclude, $qs)) { |
unset($qs[$exclude]); |
} |
} |
if (count($qs) && get_magic_quotes_gpc()){ |
$this->_recursive_stripslashes($qs); |
} |
return $qs; |
} |
// }}} |
// {{{ _recursive_stripslashes() |
/** |
* Helper method |
* @param mixed $var |
* @access private |
*/ |
function _recursive_stripslashes(&$var) |
{ |
if (is_array($var)) { |
foreach (array_keys($var) as $k) { |
$this->_recursive_stripslashes($var[$k]); |
} |
} else { |
$var = stripslashes($var); |
} |
} |
// }}} |
// {{{ _recursive_urldecode() |
/** |
* Helper method |
* @param mixed $var |
* @access private |
*/ |
function _recursive_urldecode(&$var) |
{ |
if (is_array($var)) { |
foreach (array_keys($var) as $k) { |
$this->_recursive_urldecode($var[$k]); |
} |
} else { |
$trans_tbl = array_flip(get_html_translation_table(HTML_ENTITIES)); |
$var = strtr($var, $trans_tbl); |
} |
} |
// }}} |
// {{{ _getBackLink() |
/** |
* Returns back link |
* |
* @param $url URL to use in the link [deprecated: use the factory instead] |
* @param $link HTML to use as the link [deprecated: use the factory instead] |
* @return string The link |
* @access private |
*/ |
function _getBackLink($url='', $link='') |
{ |
//legacy settings... the preferred way to set an option |
//now is passing it to the factory |
if (!empty($url)) { |
$this->_path = $url; |
} |
if (!empty($link)) { |
$this->_prevImg = $link; |
} |
$back = ''; |
if ($this->_currentPage > 1) { |
$this->_linkData[$this->_urlVar] = $this->getPreviousPageID(); |
$back = $this->_renderLink($this->_altPrev, $this->_prevImg) |
. $this->_spacesBefore . $this->_spacesAfter; |
} |
return $back; |
} |
// }}} |
// {{{ _getPageLinks() |
/** |
* Returns pages link |
* |
* @param $url URL to use in the link [deprecated: use the factory instead] |
* @return string Links |
* @access private |
*/ |
function _getPageLinks($url='') |
{ |
$msg = '<b>PEAR::Pager Error:</b>' |
.' function "_getPageLinks()" not implemented.'; |
return $this->raiseError($msg, ERROR_PAGER_NOT_IMPLEMENTED); |
} |
// }}} |
// {{{ _getNextLink() |
/** |
* Returns next link |
* |
* @param $url URL to use in the link [deprecated: use the factory instead] |
* @param $link HTML to use as the link [deprecated: use the factory instead] |
* @return string The link |
* @access private |
*/ |
function _getNextLink($url='', $link='') |
{ |
//legacy settings... the preferred way to set an option |
//now is passing it to the factory |
if (!empty($url)) { |
$this->_path = $url; |
} |
if (!empty($link)) { |
$this->_nextImg = $link; |
} |
$next = ''; |
if ($this->_currentPage < $this->_totalPages) { |
$this->_linkData[$this->_urlVar] = $this->getNextPageID(); |
$next = $this->_spacesAfter |
. $this->_renderLink($this->_altNext, $this->_nextImg) |
. $this->_spacesBefore . $this->_spacesAfter; |
} |
return $next; |
} |
// }}} |
// {{{ _getFirstLinkTag() |
/** |
* @return string |
* @access private |
*/ |
function _getFirstLinkTag() |
{ |
if ($this->isFirstPage() || ($this->_httpMethod != 'GET')) { |
return ''; |
} |
return sprintf('<link rel="first" href="%s" title="%s" />'."\n", |
$this->_getLinkTagUrl(1), |
$this->_firstLinkTitle |
); |
} |
// }}} |
// {{{ _getPrevLinkTag() |
/** |
* Returns previous link tag |
* |
* @return string the link tag |
* @access private |
*/ |
function _getPrevLinkTag() |
{ |
if ($this->isFirstPage() || ($this->_httpMethod != 'GET')) { |
return ''; |
} |
return sprintf('<link rel="previous" href="%s" title="%s" />'."\n", |
$this->_getLinkTagUrl($this->getPreviousPageID()), |
$this->_prevLinkTitle |
); |
} |
// }}} |
// {{{ _getNextLinkTag() |
/** |
* Returns next link tag |
* |
* @return string the link tag |
* @access private |
*/ |
function _getNextLinkTag() |
{ |
if ($this->isLastPage() || ($this->_httpMethod != 'GET')) { |
return ''; |
} |
return sprintf('<link rel="next" href="%s" title="%s" />'."\n", |
$this->_getLinkTagUrl($this->getNextPageID()), |
$this->_nextLinkTitle |
); |
} |
// }}} |
// {{{ _getLastLinkTag() |
/** |
* @return string the link tag |
* @access private |
*/ |
function _getLastLinkTag() |
{ |
if ($this->isLastPage() || ($this->_httpMethod != 'GET')) { |
return ''; |
} |
return sprintf('<link rel="last" href="%s" title="%s" />'."\n", |
$this->_getLinkTagUrl($this->_totalPages), |
$this->_lastLinkTitle |
); |
} |
// }}} |
// {{{ _getLinkTagUrl() |
/** |
* Helper method |
* @return string the link tag url |
* @access private |
*/ |
function _getLinkTagUrl($pageID) |
{ |
$this->_linkData[$this->_urlVar] = $pageID; |
if ($this->_append) { |
$href = '?' . $this->_http_build_query_wrapper($this->_linkData); |
} else { |
$href = str_replace('%d', $this->_linkData[$this->_urlVar], $this->_fileName); |
} |
return htmlentities($this->_url . $href); |
} |
// }}} |
// {{{ getPerPageSelectBox() |
/** |
* Returns a string with a XHTML SELECT menu, |
* useful for letting the user choose how many items per page should be |
* displayed. If parameter useSessions is TRUE, this value is stored in |
* a session var. The string isn't echoed right now so you can use it |
* with template engines. |
* |
* @param integer $start |
* @param integer $end |
* @param integer $step |
* @param boolean $showAllData If true, perPage is set equal to totalItems. |
* @param array (or string $optionText for BC reasons) |
* - 'optionText': text to show in each option. |
* Use '%d' where you want to see the number of pages selected. |
* - 'attributes': (html attributes) Tag attributes or |
* HTML attributes (id="foo" pairs), will be inserted in the |
* <select> tag |
* @return string xhtml select box |
* @access public |
*/ |
function getPerPageSelectBox($start=5, $end=30, $step=5, $showAllData=false, $extraParams=array()) |
{ |
require_once 'Pager/HtmlWidgets.php'; |
$widget =& new Pager_HtmlWidgets($this); |
return $widget->getPerPageSelectBox($start, $end, $step, $showAllData, $extraParams); |
} |
// }}} |
// {{{ getPageSelectBox() |
/** |
* Returns a string with a XHTML SELECT menu with the page numbers, |
* useful as an alternative to the links |
* |
* @param array - 'optionText': text to show in each option. |
* Use '%d' where you want to see the number of pages selected. |
* - 'autoSubmit': if TRUE, add some js code to submit the |
* form on the onChange event |
* @param string $extraAttributes (html attributes) Tag attributes or |
* HTML attributes (id="foo" pairs), will be inserted in the |
* <select> tag |
* @return string xhtml select box |
* @access public |
*/ |
function getPageSelectBox($params = array(), $extraAttributes = '') |
{ |
require_once 'Pager/HtmlWidgets.php'; |
$widget =& new Pager_HtmlWidgets($this); |
return $widget->getPageSelectBox($params, $extraAttributes); |
} |
// }}} |
// {{{ _printFirstPage() |
/** |
* Print [1] |
* |
* @return string String with link to 1st page, |
* or empty string if this is the 1st page. |
* @access private |
*/ |
function _printFirstPage() |
{ |
if ($this->isFirstPage()) { |
return ''; |
} |
$this->_linkData[$this->_urlVar] = 1; |
return $this->_renderLink( |
str_replace('%d', 1, $this->_altFirst), |
$this->_firstPagePre . $this->_firstPageText . $this->_firstPagePost |
) . $this->_spacesBefore . $this->_spacesAfter; |
} |
// }}} |
// {{{ _printLastPage() |
/** |
* Print [numPages()] |
* |
* @return string String with link to last page, |
* or empty string if this is the 1st page. |
* @access private |
*/ |
function _printLastPage() |
{ |
if ($this->isLastPage()) { |
return ''; |
} |
$this->_linkData[$this->_urlVar] = $this->_totalPages; |
return $this->_renderLink( |
str_replace('%d', $this->_totalPages, $this->_altLast), |
$this->_lastPagePre . $this->_lastPageText . $this->_lastPagePost |
); |
} |
// }}} |
// {{{ _setFirstLastText() |
/** |
* sets the private _firstPageText, _lastPageText variables |
* based on whether they were set in the options |
* |
* @access private |
*/ |
function _setFirstLastText() |
{ |
if ($this->_firstPageText == '') { |
$this->_firstPageText = '1'; |
} |
if ($this->_lastPageText == '') { |
$this->_lastPageText = $this->_totalPages; |
} |
} |
// }}} |
// {{{ _http_build_query_wrapper() |
/** |
* This is a slightly modified version of the http_build_query() function; |
* it heavily borrows code from PHP_Compat's http_build_query(). |
* The main change is the usage of htmlentities instead of urlencode, |
* since it's too aggressive |
* |
* @author Stephan Schmidt <schst@php.net> |
* @author Aidan Lister <aidan@php.net> |
* @author Lorenzo Alberton <l dot alberton at quipo dot it> |
* @param array $data |
* @return string |
* @access private |
*/ |
function _http_build_query_wrapper($data) |
{ |
$data = (array)$data; |
if (empty($data)) { |
return ''; |
} |
$separator = ini_get('arg_separator.output'); |
if ($separator == '&') { |
$separator = '&'; //the string is escaped by htmlentities anyway... |
} |
$tmp = array (); |
foreach ($data as $key => $val) { |
if (is_scalar($val)) { |
//array_push($tmp, $key.'='.$val); |
$val = urlencode($val); |
array_push($tmp, $key .'='. str_replace('%2F', '/', $val)); |
continue; |
} |
// If the value is an array, recursively parse it |
if (is_array($val)) { |
array_push($tmp, $this->__http_build_query($val, htmlentities($key))); |
continue; |
} |
} |
return implode($separator, $tmp); |
} |
// }}} |
// {{{ __http_build_query() |
/** |
* Helper function |
* @author Stephan Schmidt <schst@php.net> |
* @author Aidan Lister <aidan@php.net> |
* @access private |
*/ |
function __http_build_query($array, $name) |
{ |
$tmp = array (); |
foreach ($array as $key => $value) { |
if (is_array($value)) { |
//array_push($tmp, $this->__http_build_query($value, sprintf('%s[%s]', $name, $key))); |
array_push($tmp, $this->__http_build_query($value, $name.'%5B'.$key.'%5D')); |
} elseif (is_scalar($value)) { |
//array_push($tmp, sprintf('%s[%s]=%s', $name, htmlentities($key), htmlentities($value))); |
array_push($tmp, $name.'%5B'.htmlentities($key).'%5D='.htmlentities($value)); |
} elseif (is_object($value)) { |
//array_push($tmp, $this->__http_build_query(get_object_vars($value), sprintf('%s[%s]', $name, $key))); |
array_push($tmp, $this->__http_build_query(get_object_vars($value), $name.'%5B'.$key.'%5D')); |
} |
} |
return implode(ini_get('arg_separator.output'), $tmp); |
} |
// }}} |
// {{{ _isEncoded() |
/** |
* Helper function |
* Check if a string is an encoded multibyte string |
* @param string $string |
* @return boolean |
* @access private |
*/ |
function _isEncoded($string) |
{ |
$hexchar = '&#[\dA-Fx]{2,};'; |
return preg_match("/^(\s|($hexchar))*$/Uims", $string) ? true : false; |
} |
// }}} |
// {{{ raiseError() |
/** |
* conditionally includes PEAR base class and raise an error |
* |
* @param string $msg Error message |
* @param int $code Error code |
* @access private |
*/ |
function raiseError($msg, $code) |
{ |
include_once 'PEAR.php'; |
if (empty($this->_pearErrorMode)) { |
$this->_pearErrorMode = PEAR_ERROR_RETURN; |
} |
return PEAR::raiseError($msg, $code, $this->_pearErrorMode); |
} |
// }}} |
// {{{ setOptions() |
/** |
* Set and sanitize options |
* |
* @param mixed $options An associative array of option names and |
* their values. |
* @return integer error code (PAGER_OK on success) |
* @access public |
*/ |
function setOptions($options) |
{ |
foreach ($options as $key => $value) { |
if (in_array($key, $this->_allowed_options) && (!is_null($value))) { |
$this->{'_' . $key} = $value; |
} |
} |
//autodetect http method |
if (!isset($options['httpMethod']) |
&& !isset($_GET[$this->_urlVar]) |
&& isset($_POST[$this->_urlVar]) |
) { |
$this->_httpMethod = 'POST'; |
} else { |
$this->_httpMethod = strtoupper($this->_httpMethod); |
} |
$this->_fileName = ltrim($this->_fileName, '/'); //strip leading slash |
$this->_path = rtrim($this->_path, '/'); //strip trailing slash |
if ($this->_append) { |
if ($this->_fixFileName) { |
$this->_fileName = CURRENT_FILENAME; //avoid possible user error; |
} |
$this->_url = $this->_path.'/'.$this->_fileName; |
} else { |
$this->_url = $this->_path; |
if (strncasecmp($this->_fileName, 'javascript', 10) != 0) { |
$this->_url .= '/'; |
} |
if (!strstr($this->_fileName, '%d')) { |
trigger_error($this->errorMessage(ERROR_PAGER_INVALID_USAGE), E_USER_WARNING); |
} |
} |
$this->_classString = ''; |
if (strlen($this->_linkClass)) { |
$this->_classString = 'class="'.$this->_linkClass.'"'; |
} |
if (strlen($this->_curPageLinkClassName)) { |
$this->_curPageSpanPre = '<span class="'.$this->_curPageLinkClassName.'">'; |
$this->_curPageSpanPost = '</span>'; |
} |
$this->_perPage = max($this->_perPage, 1); //avoid possible user errors |
if ($this->_useSessions && !isset($_SESSION)) { |
session_start(); |
} |
if (!empty($_REQUEST[$this->_sessionVar])) { |
$this->_perPage = max(1, (int)$_REQUEST[$this->_sessionVar]); |
if ($this->_useSessions) { |
$_SESSION[$this->_sessionVar] = $this->_perPage; |
} |
} |
if (!empty($_SESSION[$this->_sessionVar])) { |
$this->_perPage = $_SESSION[$this->_sessionVar]; |
} |
if ($this->_closeSession) { |
session_write_close(); |
} |
$this->_spacesBefore = str_repeat(' ', $this->_spacesBeforeSeparator); |
$this->_spacesAfter = str_repeat(' ', $this->_spacesAfterSeparator); |
if (isset($_REQUEST[$this->_urlVar]) && empty($options['currentPage'])) { |
$this->_currentPage = (int)$_REQUEST[$this->_urlVar]; |
} |
$this->_currentPage = max($this->_currentPage, 1); |
$this->_linkData = $this->_getLinksData(); |
return PAGER_OK; |
} |
// }}} |
// {{{ getOption() |
/** |
* Return the current value of a given option |
* |
* @param string option name |
* @return mixed option value |
*/ |
function getOption($name) |
{ |
if (!in_array($name, $this->_allowed_options)) { |
$msg = '<b>PEAR::Pager Error:</b>' |
.' invalid option: '.$name; |
return $this->raiseError($msg, ERROR_PAGER_INVALID); |
} |
return $this->{'_' . $name}; |
} |
// }}} |
// {{{ getOptions() |
/** |
* Return an array with all the current pager options |
* |
* @return array list of all the pager options |
*/ |
function getOptions() |
{ |
$options = array(); |
foreach ($this->_allowed_options as $option) { |
$options[$option] = $this->{'_' . $option}; |
} |
return $options; |
} |
// }}} |
// {{{ errorMessage() |
/** |
* Return a textual error message for a PAGER error code |
* |
* @param int $code error code |
* @return string error message |
* @access public |
*/ |
function errorMessage($code) |
{ |
static $errorMessages; |
if (!isset($errorMessages)) { |
$errorMessages = array( |
ERROR_PAGER => 'unknown error', |
ERROR_PAGER_INVALID => 'invalid', |
ERROR_PAGER_INVALID_PLACEHOLDER => 'invalid format - use "%d" as placeholder.', |
ERROR_PAGER_INVALID_USAGE => 'if $options[\'append\'] is set to false, ' |
.' $options[\'fileName\'] MUST contain the "%d" placeholder.', |
ERROR_PAGER_NOT_IMPLEMENTED => 'not implemented' |
); |
} |
return '<b>PEAR::Pager error:</b> '. (isset($errorMessages[$code]) ? |
$errorMessages[$code] : $errorMessages[ERROR_PAGER]); |
} |
// }}} |
} |
?> |
/branches/v1.0-menes/api/pear/Pager/examples/example.php |
---|
New file |
0,0 → 1,78 |
<?php |
require_once 'Pager/Pager.php'; |
//create dummy array of data |
$myData = array(); |
for ($i=0; $i<200; $i++) { |
$myData[] = $i; |
} |
$params = array( |
'itemData' => $myData, |
'perPage' => 10, |
'delta' => 8, // for 'Jumping'-style a lower number is better |
'append' => true, |
//'separator' => ' | ', |
'clearIfVoid' => false, |
'urlVar' => 'entrant', |
'useSessions' => true, |
'closeSession' => true, |
//'mode' => 'Sliding', //try switching modes |
'mode' => 'Jumping', |
); |
$pager = & Pager::factory($params); |
$page_data = $pager->getPageData(); |
$links = $pager->getLinks(); |
$selectBox = $pager->getPerPageSelectBox(); |
?> |
<html> |
<head> |
<title>new PEAR::Pager example</title> |
</head> |
<body> |
<table border="1" width="500" summary="example 1"> |
<tr> |
<td colspan="3" align="center"> |
<?php echo $links['all']; ?> |
</td> |
</tr> |
<tr> |
<td colspan="3"> |
<pre><?php print_r($page_data); ?></pre> |
</td> |
</tr> |
</table> |
<h4>Results from methods:</h4> |
<pre> |
getCurrentPageID()...: <?php var_dump($pager->getCurrentPageID()); ?> |
getNextPageID()......: <?php var_dump($pager->getNextPageID()); ?> |
getPreviousPageID()..: <?php var_dump($pager->getPreviousPageID()); ?> |
numItems()...........: <?php var_dump($pager->numItems()); ?> |
numPages()...........: <?php var_dump($pager->numPages()); ?> |
isFirstPage()........: <?php var_dump($pager->isFirstPage()); ?> |
isLastPage().........: <?php var_dump($pager->isLastPage()); ?> |
isLastPageComplete().: <?php var_dump($pager->isLastPageComplete()); ?> |
$pager->range........: <?php var_dump($pager->range); ?> |
</pre> |
<hr /> |
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="GET"> |
Select how many items per page should be shown:<br /> |
<?php echo $selectBox; ?> |
<input type="submit" value="submit" /> |
</form> |
<hr /> |
</body> |
</html> |
/branches/v1.0-menes/api/pear/Pager/examples/Pager_Wrapper.php |
---|
New file |
0,0 → 1,339 |
<?php |
// CVS: $Id$ |
// |
// Pager_Wrapper |
// ------------- |
// |
// Ready-to-use wrappers for paging the result of a query, |
// when fetching the whole resultset is NOT an option. |
// This is a performance- and memory-savvy method |
// to use PEAR::Pager with a database. |
// With this approach, the network load can be |
// consistently smaller than with PEAR::DB_Pager. |
// |
// The following wrappers are provided: one for each PEAR |
// db abstraction layer (DB, MDB and MDB2), one for |
// PEAR::DB_DataObject, and one for the PHP Eclipse library |
// |
// |
// SAMPLE USAGE |
// ------------ |
// |
// $query = 'SELECT this, that FROM mytable'; |
// require_once 'Pager_Wrapper.php'; //this file |
// $pagerOptions = array( |
// 'mode' => 'Sliding', |
// 'delta' => 2, |
// 'perPage' => 15, |
// ); |
// $paged_data = Pager_Wrapper_MDB2($db, $query, $pagerOptions); |
// //$paged_data['data']; //paged data |
// //$paged_data['links']; //xhtml links for page navigation |
// //$paged_data['page_numbers']; //array('current', 'total'); |
// |
/** |
* Helper method - Rewrite the query into a "SELECT COUNT(*)" query. |
* @param string $sql query |
* @return string rewritten query OR false if the query can't be rewritten |
* @access private |
*/ |
function rewriteCountQuery($sql) |
{ |
if (preg_match('/^\s*SELECT\s+\bDISTINCT\b/is', $sql) || preg_match('/\s+GROUP\s+BY\s+/is', $sql)) { |
return false; |
} |
$open_parenthesis = '(?:\()'; |
$close_parenthesis = '(?:\))'; |
$subquery_in_select = $open_parenthesis.'.*\bFROM\b.*'.$close_parenthesis; |
$pattern = '/(?:.*'.$subquery_in_select.'.*)\bFROM\b\s+/Uims'; |
if (preg_match($pattern, $sql)) { |
return false; |
} |
$subquery_with_limit_order = $open_parenthesis.'.*\b(LIMIT|ORDER)\b.*'.$close_parenthesis; |
$pattern = '/.*\bFROM\b.*(?:.*'.$subquery_with_limit_order.'.*).*/Uims'; |
if (preg_match($pattern, $sql)) { |
return false; |
} |
$queryCount = preg_replace('/(?:.*)\bFROM\b\s+/Uims', 'SELECT COUNT(*) FROM ', $sql, 1); |
list($queryCount, ) = preg_split('/\s+ORDER\s+BY\s+/is', $queryCount); |
list($queryCount, ) = preg_split('/\bLIMIT\b/is', $queryCount); |
return trim($queryCount); |
} |
/** |
* @param object PEAR::DB instance |
* @param string db query |
* @param array PEAR::Pager options |
* @param boolean Disable pagination (get all results) |
* @param integer fetch mode constant |
* @param mixed parameters for query placeholders |
* If you use placeholders for table names or column names, please |
* count the # of items returned by the query and pass it as an option: |
* $pager_options['totalItems'] = count_records('some query'); |
* @return array with links and paged data |
*/ |
function Pager_Wrapper_DB(&$db, $query, $pager_options = array(), $disabled = false, $fetchMode = DB_FETCHMODE_ASSOC, $dbparams = null) |
{ |
if (!array_key_exists('totalItems', $pager_options)) { |
// be smart and try to guess the total number of records |
if ($countQuery = rewriteCountQuery($query)) { |
$totalItems = $db->getOne($countQuery, $dbparams); |
if (PEAR::isError($totalItems)) { |
return $totalItems; |
} |
} else { |
$res =& $db->query($query, $dbparams); |
if (PEAR::isError($res)) { |
return $res; |
} |
$totalItems = (int)$res->numRows(); |
$res->free(); |
} |
$pager_options['totalItems'] = $totalItems; |
} |
require_once 'Pager/Pager.php'; |
$pager = Pager::factory($pager_options); |
$page = array(); |
$page['totalItems'] = $pager_options['totalItems']; |
$page['links'] = $pager->links; |
$page['page_numbers'] = array( |
'current' => $pager->getCurrentPageID(), |
'total' => $pager->numPages() |
); |
list($page['from'], $page['to']) = $pager->getOffsetByPageId(); |
$res = ($disabled) |
? $db->limitQuery($query, 0, $totalItems, $dbparams) |
: $db->limitQuery($query, $page['from']-1, $pager_options['perPage'], $dbparams); |
if (PEAR::isError($res)) { |
return $res; |
} |
$page['data'] = array(); |
while ($res->fetchInto($row, $fetchMode)) { |
$page['data'][] = $row; |
} |
if ($disabled) { |
$page['links'] = ''; |
$page['page_numbers'] = array( |
'current' => 1, |
'total' => 1 |
); |
} |
return $page; |
} |
/** |
* @param object PEAR::MDB instance |
* @param string db query |
* @param array PEAR::Pager options |
* @param boolean Disable pagination (get all results) |
* @param integer fetch mode constant |
* @return array with links and paged data |
*/ |
function Pager_Wrapper_MDB(&$db, $query, $pager_options = array(), $disabled = false, $fetchMode = MDB_FETCHMODE_ASSOC) |
{ |
if (!array_key_exists('totalItems', $pager_options)) { |
//be smart and try to guess the total number of records |
if ($countQuery = rewriteCountQuery($query)) { |
$totalItems = $db->queryOne($countQuery); |
if (PEAR::isError($totalItems)) { |
return $totalItems; |
} |
} else { |
$res = $db->query($query); |
if (PEAR::isError($res)) { |
return $res; |
} |
$totalItems = (int)$db->numRows($res); |
$db->freeResult($res); |
} |
$pager_options['totalItems'] = $totalItems; |
} |
require_once 'Pager/Pager.php'; |
$pager = Pager::factory($pager_options); |
$page = array(); |
$page['totalItems'] = $pager_options['totalItems']; |
$page['links'] = $pager->links; |
$page['page_numbers'] = array( |
'current' => $pager->getCurrentPageID(), |
'total' => $pager->numPages() |
); |
list($page['from'], $page['to']) = $pager->getOffsetByPageId(); |
$res = ($disabled) |
? $db->limitQuery($query, null, 0, $totalItems) |
: $db->limitQuery($query, null, $page['from']-1, $pager_options['perPage']); |
if (PEAR::isError($res)) { |
return $res; |
} |
$page['data'] = array(); |
while ($row = $db->fetchInto($res, $fetchMode)) { |
$page['data'][] = $row; |
} |
if ($disabled) { |
$page['links'] = ''; |
$page['page_numbers'] = array( |
'current' => 1, |
'total' => 1 |
); |
} |
return $page; |
} |
/** |
* @param object PEAR::MDB2 instance |
* @param string db query |
* @param array PEAR::Pager options |
* @param boolean Disable pagination (get all results) |
* @param integer fetch mode constant |
* @return array with links and paged data |
*/ |
function Pager_Wrapper_MDB2(&$db, $query, $pager_options = array(), $disabled = false, $fetchMode = MDB2_FETCHMODE_ASSOC) |
{ |
if (!array_key_exists('totalItems', $pager_options)) { |
//be smart and try to guess the total number of records |
if ($countQuery = rewriteCountQuery($query)) { |
$totalItems = $db->queryOne($countQuery); |
if (PEAR::isError($totalItems)) { |
return $totalItems; |
} |
} else { |
//GROUP BY => fetch the whole resultset and count the rows returned |
$res =& $db->queryCol($query); |
if (PEAR::isError($res)) { |
return $res; |
} |
$totalItems = count($res); |
} |
$pager_options['totalItems'] = $totalItems; |
} |
require_once 'Pager/Pager.php'; |
$pager = Pager::factory($pager_options); |
$page = array(); |
$page['links'] = $pager->links; |
$page['totalItems'] = $pager_options['totalItems']; |
$page['page_numbers'] = array( |
'current' => $pager->getCurrentPageID(), |
'total' => $pager->numPages() |
); |
list($page['from'], $page['to']) = $pager->getOffsetByPageId(); |
$page['limit'] = $page['to'] - $page['from'] +1; |
if (!$disabled) { |
$db->setLimit($pager_options['perPage'], $page['from']-1); |
} |
$page['data'] = $db->queryAll($query, null, $fetchMode); |
if (PEAR::isError($page['data'])) { |
return $page['data']; |
} |
if ($disabled) { |
$page['links'] = ''; |
$page['page_numbers'] = array( |
'current' => 1, |
'total' => 1 |
); |
} |
return $page; |
} |
/** |
* @param object PEAR::DataObject instance |
* @param array PEAR::Pager options |
* @param boolean Disable pagination (get all results) |
* @return array with links and paged data |
* @author Massimiliano Arione <garak@studenti.it> |
*/ |
function Pager_Wrapper_DBDO(&$db, $pager_options = array(), $disabled = false) |
{ |
if (!array_key_exists('totalItems', $pager_options)) { |
$totalItems = $db->count(); |
$pager_options['totalItems'] = $totalItems; |
} |
require_once 'Pager/Pager.php'; |
$pager = Pager::factory($pager_options); |
$page = array(); |
$page['links'] = $pager->links; |
$page['totalItems'] = $pager_options['totalItems']; |
$page['page_numbers'] = array( |
'current' => $pager->getCurrentPageID(), |
'total' => $pager->numPages() |
); |
list($page['from'], $page['to']) = $pager->getOffsetByPageId(); |
$page['limit'] = $page['to'] - $page['from'] + 1; |
if (!$disabled) { |
$db->limit($page['from'] - 1, $pager_options['perPage']); |
} |
$db->find(); |
while ($db->fetch()) { |
$db->getLinks(); |
$page['data'][] = $db->toArray('%s', true); |
} |
return $page; |
} |
/** |
* @param object PHP Eclipse instance |
* @param string db query |
* @param array PEAR::Pager options |
* @param boolean Disable pagination (get all results) |
* @return array with links and paged data |
* @author Matte Edens <matte@arubanetworks.com> |
* @see http://sourceforge.net/projects/eclipselib/ |
*/ |
function Pager_Wrapper_Eclipse(&$db, $query, $pager_options = array(), $disabled = false) |
{ |
if (!$disabled) { |
require_once(ECLIPSE_ROOT . 'PagedQuery.php'); |
$query =& new PagedQuery($db->query($query), $pager_options['perPage']); |
$totalrows = $query->getRowCount(); |
$numpages = $query->getPageCount(); |
$whichpage = isset($_GET[$pager_options['urlVar']]) ? (int)$_GET[$pager_options['urlVar']] - 1 : 0; |
if ($whichpage >= $numpages) { |
$whichpage = $numpages - 1; |
} |
$result = $query->getPage($whichpage); |
} else { |
$result = $db->query($query); |
$totalrows = $result->getRowCount(); |
$numpages = 1; |
} |
if (!$result->isSuccess()) { |
return PEAR::raiseError($result->getErrorMessage()); |
} |
if (!array_key_exists('totalItems', $pager_options)) { |
$pager_options['totalItems'] = $totalrows; |
} |
$page = array(); |
require_once(ECLIPSE_ROOT . 'QueryIterator.php'); |
for ($it =& new QueryIterator($result); $it->isValid(); $it->next()) { |
$page['data'][] =& $it->getCurrent(); |
} |
require_once 'Pager/Pager.php'; |
$pager = Pager::factory($pager_options); |
$page['links'] = $pager->links; |
$page['totalItems'] = $pager_options['totalItems']; |
$page['page_numbers'] = array( |
'current' => $pager->getCurrentPageID(), |
'total' => $numpages |
); |
$page['perPageSelectBox'] = $pager->getperpageselectbox(); |
list($page['from'], $page['to']) = $pager->getOffsetByPageId(); |
$page['limit'] = $page['to'] - $page['from'] +1; |
if ($disabled) { |
$page['links'] = ''; |
$page['page_numbers'] = array( |
'current' => 1, |
'total' => 1 |
); |
} |
return $page; |
} |
?> |
/branches/v1.0-menes/api/pear/Pager/Jumping.php |
---|
New file |
0,0 → 1,280 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ |
/** |
* Contains the Pager_Jumping class |
* |
* PHP versions 4 and 5 |
* |
* LICENSE: 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 FREEBSD PROJECT OR CONTRIBUTORS 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. |
* |
* @category HTML |
* @package Pager |
* @author Lorenzo Alberton <l dot alberton at quipo dot it> |
* @author Richard Heyes <richard@phpguru.org>, |
* @copyright 2003-2006 Lorenzo Alberton, Richard Heyes |
* @license http://www.debian.org/misc/bsd.license BSD License (3 Clause) |
* @version CVS: $Id$ |
* @link http://pear.php.net/package/Pager |
*/ |
/** |
* require PEAR::Pager_Common base class |
*/ |
require_once 'Pager/Common.php'; |
/** |
* Pager_Jumping - Generic data paging class ("jumping window" style) |
* Handles paging a set of data. For usage see the example.php provided. |
* |
* @category HTML |
* @package Pager |
* @author Lorenzo Alberton <l dot alberton at quipo dot it> |
* @author Richard Heyes <richard@phpguru.org>, |
* @copyright 2003-2005 Lorenzo Alberton, Richard Heyes |
* @license http://www.php.net/license/3_0.txt PHP License 3.0 |
* @link http://pear.php.net/package/Pager |
*/ |
class Pager_Jumping extends Pager_Common |
{ |
// {{{ Pager_Jumping() |
/** |
* Constructor |
* |
* @param array $options An associative array of option names |
* and their values |
* @access public |
*/ |
function Pager_Jumping($options = array()) |
{ |
$err = $this->setOptions($options); |
if ($err !== PAGER_OK) { |
return $this->raiseError($this->errorMessage($err), $err); |
} |
$this->build(); |
} |
// }}} |
// {{{ build() |
/** |
* Generate or refresh the links and paged data after a call to setOptions() |
* |
* @access public |
*/ |
function build() |
{ |
//reset |
$this->_pageData = array(); |
$this->links = ''; |
$this->_generatePageData(); |
$this->_setFirstLastText(); |
$this->links .= $this->_getBackLink(); |
$this->links .= $this->_getPageLinks(); |
$this->links .= $this->_getNextLink(); |
$this->linkTags .= $this->_getFirstLinkTag(); |
$this->linkTags .= $this->_getPrevLinkTag(); |
$this->linkTags .= $this->_getNextLinkTag(); |
$this->linkTags .= $this->_getLastLinkTag(); |
} |
// }}} |
// {{{ getPageIdByOffset() |
/** |
* Returns pageID for given offset |
* |
* @param $index Offset to get pageID for |
* @return int PageID for given offset |
*/ |
function getPageIdByOffset($index) |
{ |
if (!isset($this->_pageData)) { |
$this->_generatePageData(); |
} |
if (($index % $this->_perPage) > 0) { |
$pageID = ceil((float)$index / (float)$this->_perPage); |
} else { |
$pageID = $index / $this->_perPage; |
} |
return $pageID; |
} |
// }}} |
// {{{ getPageRangeByPageId() |
/** |
* Given a PageId, it returns the limits of the range of pages displayed. |
* While getOffsetByPageId() returns the offset of the data within the |
* current page, this method returns the offsets of the page numbers interval. |
* E.g., if you have pageId=3 and delta=10, it will return (1, 10). |
* PageID of 8 would give you (1, 10) as well, because 1 <= 8 <= 10. |
* PageID of 11 would give you (11, 20). |
* If the method is called without parameter, pageID is set to currentPage#. |
* |
* @param integer PageID to get offsets for |
* @return array First and last offsets |
* @access public |
*/ |
function getPageRangeByPageId($pageid = null) |
{ |
$pageid = isset($pageid) ? (int)$pageid : $this->_currentPage; |
if (isset($this->_pageData[$pageid]) || is_null($this->_itemData)) { |
// I'm sure I'm missing something here, but this formula works |
// so I'm using it until I find something simpler. |
$start = ((($pageid + (($this->_delta - ($pageid % $this->_delta))) % $this->_delta) / $this->_delta) - 1) * $this->_delta +1; |
return array( |
max($start, 1), |
min($start+$this->_delta-1, $this->_totalPages) |
); |
} else { |
return array(0, 0); |
} |
} |
// }}} |
// {{{ getLinks() |
/** |
* Returns back/next/first/last and page links, |
* both as ordered and associative array. |
* |
* NB: in original PEAR::Pager this method accepted two parameters, |
* $back_html and $next_html. Now the only parameter accepted is |
* an integer ($pageID), since the html text for prev/next links can |
* be set in the constructor. If a second parameter is provided, then |
* the method act as it previously did. This hack's only purpose is to |
* mantain backward compatibility. |
* |
* @param integer $pageID Optional pageID. If specified, links |
* for that page are provided instead of current one. |
* [ADDED IN NEW PAGER VERSION] |
* @param string $next_html HTML to put inside the next link |
* [deprecated: use the constructor instead] |
* @return array Back/pages/next links |
*/ |
function getLinks($pageID=null, $next_html='') |
{ |
//BC hack |
if (!empty($next_html)) { |
$back_html = $pageID; |
$pageID = null; |
} else { |
$back_html = ''; |
} |
if (!is_null($pageID)) { |
$_sav = $this->_currentPage; |
$this->_currentPage = $pageID; |
$this->links = ''; |
if ($this->_totalPages > $this->_delta) { |
$this->links .= $this->_printFirstPage(); |
} |
$this->links .= $this->_getBackLink('', $back_html); |
$this->links .= $this->_getPageLinks(); |
$this->links .= $this->_getNextLink('', $next_html); |
if ($this->_totalPages > $this->_delta) { |
$this->links .= $this->_printLastPage(); |
} |
} |
$back = str_replace(' ', '', $this->_getBackLink()); |
$next = str_replace(' ', '', $this->_getNextLink()); |
$pages = $this->_getPageLinks(); |
$first = $this->_printFirstPage(); |
$last = $this->_printLastPage(); |
$all = $this->links; |
$linkTags = $this->linkTags; |
if (!is_null($pageID)) { |
$this->_currentPage = $_sav; |
} |
return array( |
$back, |
$pages, |
trim($next), |
$first, |
$last, |
$all, |
$linkTags, |
'back' => $back, |
'pages' => $pages, |
'next' => $next, |
'first' => $first, |
'last' => $last, |
'all' => $all, |
'linktags' => $linkTags |
); |
} |
// }}} |
// {{{ _getPageLinks() |
/** |
* Returns pages link |
* |
* @param $url URL to use in the link |
* [deprecated: use the constructor instead] |
* @return string Links |
* @access private |
*/ |
function _getPageLinks($url = '') |
{ |
//legacy setting... the preferred way to set an option now |
//is adding it to the constuctor |
if (!empty($url)) { |
$this->_path = $url; |
} |
//If there's only one page, don't display links |
if ($this->_clearIfVoid && ($this->_totalPages < 2)) { |
return ''; |
} |
$links = ''; |
$limits = $this->getPageRangeByPageId($this->_currentPage); |
for ($i=$limits[0]; $i<=min($limits[1], $this->_totalPages); $i++) { |
if ($i != $this->_currentPage) { |
$this->range[$i] = false; |
$this->_linkData[$this->_urlVar] = $i; |
$links .= $this->_renderLink($this->_altPage.' '.$i, $i); |
} else { |
$this->range[$i] = true; |
$links .= $this->_curPageSpanPre . $i . $this->_curPageSpanPost; |
} |
$links .= $this->_spacesBefore |
. (($i != $this->_totalPages) ? $this->_separator.$this->_spacesAfter : ''); |
} |
return $links; |
} |
// }}} |
} |
?> |
/branches/v1.0-menes/api/pear/Pager/Sliding.php |
---|
New file |
0,0 → 1,324 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ |
/** |
* Contains the Pager_Sliding class |
* |
* PHP versions 4 and 5 |
* |
* LICENSE: 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 FREEBSD PROJECT OR CONTRIBUTORS 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. |
* |
* @category HTML |
* @package Pager |
* @author Lorenzo Alberton <l dot alberton at quipo dot it> |
* @copyright 2003-2006 Lorenzo Alberton |
* @license http://www.debian.org/misc/bsd.license BSD License (3 Clause) |
* @version CVS: $Id$ |
* @link http://pear.php.net/package/Pager |
*/ |
/** |
* require PEAR::Pager_Common base class |
*/ |
require_once 'Pager/Common.php'; |
/** |
* Pager_Sliding - Generic data paging class ("sliding window" style) |
* Usage examples can be found in the PEAR manual |
* |
* @category HTML |
* @package Pager |
* @author Lorenzo Alberton <l dot alberton at quipo dot it> |
* @copyright 2003-2005 Lorenzo Alberton |
* @license http://www.php.net/license/3_0.txt PHP License 3.0 |
* @link http://pear.php.net/package/Pager |
*/ |
class Pager_Sliding extends Pager_Common |
{ |
// {{{ Pager_Sliding() |
/** |
* Constructor |
* |
* @param array $options An associative array of option names |
* and their values |
* @access public |
*/ |
function Pager_Sliding($options = array()) |
{ |
//set default Pager_Sliding options |
$this->_delta = 2; |
$this->_prevImg = '«'; |
$this->_nextImg = '»'; |
$this->_separator = '|'; |
$this->_spacesBeforeSeparator = 3; |
$this->_spacesAfterSeparator = 3; |
$this->_curPageSpanPre = '<b><u>'; |
$this->_curPageSpanPost = '</u></b>'; |
//set custom options |
$err = $this->setOptions($options); |
if ($err !== PAGER_OK) { |
return $this->raiseError($this->errorMessage($err), $err); |
} |
$this->build(); |
} |
// }}} |
// {{{ build() |
/** |
* Generate or refresh the links and paged data after a call to setOptions() |
* |
* @access public |
*/ |
function build() |
{ |
//reset |
$this->_pageData = array(); |
$this->links = ''; |
$this->_generatePageData(); |
$this->_setFirstLastText(); |
if ($this->_totalPages > (2 * $this->_delta + 1)) { |
$this->links .= $this->_printFirstPage(); |
} |
$this->links .= $this->_getBackLink(); |
$this->links .= $this->_getPageLinks(); |
$this->links .= $this->_getNextLink(); |
$this->linkTags .= $this->_getFirstLinkTag(); |
$this->linkTags .= $this->_getPrevLinkTag(); |
$this->linkTags .= $this->_getNextLinkTag(); |
$this->linkTags .= $this->_getLastLinkTag(); |
if ($this->_totalPages > (2 * $this->_delta + 1)) { |
$this->links .= $this->_printLastPage(); |
} |
} |
// }}} |
// {{{ getPageIdByOffset() |
/** |
* "Overload" PEAR::Pager method. VOID. Not needed here... |
* @param integer $index Offset to get pageID for |
* @deprecated |
* @access public |
*/ |
function getPageIdByOffset($index=null) { } |
// }}} |
// {{{ getPageRangeByPageId() |
/** |
* Given a PageId, it returns the limits of the range of pages displayed. |
* While getOffsetByPageId() returns the offset of the data within the |
* current page, this method returns the offsets of the page numbers interval. |
* E.g., if you have pageId=5 and delta=2, it will return (3, 7). |
* PageID of 9 would give you (4, 8). |
* If the method is called without parameter, pageID is set to currentPage#. |
* |
* @param integer PageID to get offsets for |
* @return array First and last offsets |
* @access public |
*/ |
function getPageRangeByPageId($pageid = null) |
{ |
$pageid = isset($pageid) ? (int)$pageid : $this->_currentPage; |
if (!isset($this->_pageData)) { |
$this->_generatePageData(); |
} |
if (isset($this->_pageData[$pageid]) || is_null($this->_itemData)) { |
if ($this->_expanded) { |
$min_surplus = ($pageid <= $this->_delta) ? ($this->_delta - $pageid + 1) : 0; |
$max_surplus = ($pageid >= ($this->_totalPages - $this->_delta)) ? |
($pageid - ($this->_totalPages - $this->_delta)) : 0; |
} else { |
$min_surplus = $max_surplus = 0; |
} |
return array( |
max($pageid - $this->_delta - $max_surplus, 1), |
min($pageid + $this->_delta + $min_surplus, $this->_totalPages) |
); |
} |
return array(0, 0); |
} |
// }}} |
// {{{ getLinks() |
/** |
* Returns back/next/first/last and page links, |
* both as ordered and associative array. |
* |
* @param integer $pageID Optional pageID. If specified, links |
* for that page are provided instead of current one. |
* @return array back/pages/next/first/last/all links |
* @access public |
*/ |
function getLinks($pageID = null) |
{ |
if ($pageID != null) { |
$_sav = $this->_currentPage; |
$this->_currentPage = $pageID; |
$this->links = ''; |
if ($this->_totalPages > (2 * $this->_delta + 1)) { |
$this->links .= $this->_printFirstPage(); |
} |
$this->links .= $this->_getBackLink(); |
$this->links .= $this->_getPageLinks(); |
$this->links .= $this->_getNextLink(); |
if ($this->_totalPages > (2 * $this->_delta + 1)) { |
$this->links .= $this->_printLastPage(); |
} |
} |
$back = str_replace(' ', '', $this->_getBackLink()); |
$next = str_replace(' ', '', $this->_getNextLink()); |
$pages = $this->_getPageLinks(); |
$first = $this->_printFirstPage(); |
$last = $this->_printLastPage(); |
$all = $this->links; |
$linkTags = $this->linkTags; |
if ($pageID != null) { |
$this->_currentPage = $_sav; |
} |
return array( |
$back, |
$pages, |
trim($next), |
$first, |
$last, |
$all, |
$linkTags, |
'back' => $back, |
'pages' => $pages, |
'next' => $next, |
'first' => $first, |
'last' => $last, |
'all' => $all, |
'linktags' => $linkTags |
); |
} |
// }}} |
// {{{ _getPageLinks() |
/** |
* Returns pages link |
* |
* @return string Links |
* @access private |
*/ |
function _getPageLinks($url = '') |
{ |
//legacy setting... the preferred way to set an option now |
//is adding it to the constuctor |
if (!empty($url)) { |
$this->_path = $url; |
} |
//If there's only one page, don't display links |
if ($this->_clearIfVoid && ($this->_totalPages < 2)) { |
return ''; |
} |
$links = ''; |
if ($this->_totalPages > (2 * $this->_delta + 1)) { |
if ($this->_expanded) { |
if (($this->_totalPages - $this->_delta) <= $this->_currentPage) { |
$expansion_before = $this->_currentPage - ($this->_totalPages - $this->_delta); |
} else { |
$expansion_before = 0; |
} |
for ($i = $this->_currentPage - $this->_delta - $expansion_before; $expansion_before; $expansion_before--, $i++) { |
$print_separator_flag = ($i != $this->_currentPage + $this->_delta); // && ($i != $this->_totalPages - 1) |
$this->range[$i] = false; |
$this->_linkData[$this->_urlVar] = $i; |
$links .= $this->_renderLink($this->_altPage.' '.$i, $i) |
. $this->_spacesBefore |
. ($print_separator_flag ? $this->_separator.$this->_spacesAfter : ''); |
} |
} |
$expansion_after = 0; |
for ($i = $this->_currentPage - $this->_delta; ($i <= $this->_currentPage + $this->_delta) && ($i <= $this->_totalPages); $i++) { |
if ($i < 1) { |
++$expansion_after; |
continue; |
} |
// check when to print separator |
$print_separator_flag = (($i != $this->_currentPage + $this->_delta) && ($i != $this->_totalPages)); |
if ($i == $this->_currentPage) { |
$this->range[$i] = true; |
$links .= $this->_curPageSpanPre . $i . $this->_curPageSpanPost; |
} else { |
$this->range[$i] = false; |
$this->_linkData[$this->_urlVar] = $i; |
$links .= $this->_renderLink($this->_altPage.' '.$i, $i); |
} |
$links .= $this->_spacesBefore |
. ($print_separator_flag ? $this->_separator.$this->_spacesAfter : ''); |
} |
if ($this->_expanded && $expansion_after) { |
$links .= $this->_separator . $this->_spacesAfter; |
for ($i = $this->_currentPage + $this->_delta +1; $expansion_after; $expansion_after--, $i++) { |
$print_separator_flag = ($expansion_after != 1); |
$this->range[$i] = false; |
$this->_linkData[$this->_urlVar] = $i; |
$links .= $this->_renderLink($this->_altPage.' '.$i, $i) |
. $this->_spacesBefore |
. ($print_separator_flag ? $this->_separator.$this->_spacesAfter : ''); |
} |
} |
} else { |
//if $this->_totalPages <= (2*Delta+1) show them all |
for ($i=1; $i<=$this->_totalPages; $i++) { |
if ($i != $this->_currentPage) { |
$this->range[$i] = false; |
$this->_linkData[$this->_urlVar] = $i; |
$links .= $this->_renderLink($this->_altPage.' '.$i, $i); |
} else { |
$this->range[$i] = true; |
$links .= $this->_curPageSpanPre . $i . $this->_curPageSpanPost; |
} |
$links .= $this->_spacesBefore |
. (($i != $this->_totalPages) ? $this->_separator.$this->_spacesAfter : ''); |
} |
} |
return $links; |
} |
// }}} |
} |
?> |
/branches/v1.0-menes/api/pear/Pager/HtmlWidgets.php |
---|
New file |
0,0 → 1,217 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ |
/** |
* Contains the Pager_HtmlWidgets class |
* |
* PHP versions 4 and 5 |
* |
* LICENSE: 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 FREEBSD PROJECT OR CONTRIBUTORS 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. |
* |
* @category HTML |
* @package Pager |
* @author Lorenzo Alberton <l dot alberton at quipo dot it> |
* @copyright 2003-2006 Lorenzo Alberton |
* @license http://www.debian.org/misc/bsd.license BSD License (3 Clause) |
* @version CVS: $Id$ |
* @link http://pear.php.net/package/Pager |
*/ |
/** |
* Two constants used to guess the path- and file-name of the page |
* when the user doesn't set any other value |
*/ |
class Pager_HtmlWidgets |
{ |
var $pager = null; |
// {{{ constructor |
function Pager_HtmlWidgets(&$pager) |
{ |
$this->pager =& $pager; |
} |
// }}} |
// {{{ getPerPageSelectBox() |
/** |
* Returns a string with a XHTML SELECT menu, |
* useful for letting the user choose how many items per page should be |
* displayed. If parameter useSessions is TRUE, this value is stored in |
* a session var. The string isn't echoed right now so you can use it |
* with template engines. |
* |
* @param integer $start |
* @param integer $end |
* @param integer $step |
* @param boolean $showAllData If true, perPage is set equal to totalItems. |
* @param array (or string $optionText for BC reasons) |
* - 'optionText': text to show in each option. |
* Use '%d' where you want to see the number of pages selected. |
* - 'attributes': (html attributes) Tag attributes or |
* HTML attributes (id="foo" pairs), will be inserted in the |
* <select> tag |
* @return string xhtml select box |
* @access public |
*/ |
function getPerPageSelectBox($start=5, $end=30, $step=5, $showAllData=false, $extraParams=array()) |
{ |
// FIXME: needs POST support |
$optionText = '%d'; |
$attributes = ''; |
if (is_string($extraParams)) { |
//old behavior, BC maintained |
$optionText = $extraParams; |
} else { |
if (array_key_exists('optionText', $extraParams)) { |
$optionText = $extraParams['optionText']; |
} |
if (array_key_exists('attributes', $extraParams)) { |
$attributes = $extraParams['attributes']; |
} |
} |
if (!strstr($optionText, '%d')) { |
return $this->pager->raiseError( |
$this->pager->errorMessage(ERROR_PAGER_INVALID_PLACEHOLDER), |
ERROR_PAGER_INVALID_PLACEHOLDER |
); |
} |
$start = (int)$start; |
$end = (int)$end; |
$step = (int)$step; |
if (!empty($_SESSION[$this->pager->_sessionVar])) { |
$selected = (int)$_SESSION[$this->pager->_sessionVar]; |
} else { |
$selected = $this->pager->_perPage; |
} |
$tmp = '<select name="'.$this->pager->_sessionVar.'"'; |
if (!empty($attributes)) { |
$tmp .= ' '.$attributes; |
} |
$tmp .= '>'; |
for ($i=$start; $i<=$end; $i+=$step) { |
$tmp .= '<option value="'.$i.'"'; |
if ($i == $selected) { |
$tmp .= ' selected="selected"'; |
} |
$tmp .= '>'.sprintf($optionText, $i).'</option>'; |
} |
if ($showAllData && $end < $this->pager->_totalItems) { |
$tmp .= '<option value="'.$this->pager->_totalItems.'"'; |
if ($this->pager->_totalItems == $selected) { |
$tmp .= ' selected="selected"'; |
} |
$tmp .= '>'; |
if (empty($this->pager->_showAllText)) { |
$tmp .= str_replace('%d', $this->pager->_totalItems, $optionText); |
} else { |
$tmp .= $this->pager->_showAllText; |
} |
$tmp .= '</option>'; |
} |
$tmp .= '</select>'; |
return $tmp; |
} |
// }}} |
// {{{ getPageSelectBox() |
/** |
* Returns a string with a XHTML SELECT menu with the page numbers, |
* useful as an alternative to the links |
* |
* @param array - 'optionText': text to show in each option. |
* Use '%d' where you want to see the number of pages selected. |
* - 'autoSubmit': if TRUE, add some js code to submit the |
* form on the onChange event |
* @param string $extraAttributes (html attributes) Tag attributes or |
* HTML attributes (id="foo" pairs), will be inserted in the |
* <select> tag |
* @return string xhtml select box |
* @access public |
*/ |
function getPageSelectBox($params = array(), $extraAttributes = '') |
{ |
$optionText = '%d'; |
if (array_key_exists('optionText', $params)) { |
$optionText = $params['optionText']; |
} |
if (!strstr($optionText, '%d')) { |
return $this->pager->raiseError( |
$this->pager->errorMessage(ERROR_PAGER_INVALID_PLACEHOLDER), |
ERROR_PAGER_INVALID_PLACEHOLDER |
); |
} |
$tmp = '<select name="'.$this->pager->_urlVar.'"'; |
if (!empty($extraAttributes)) { |
$tmp .= ' '.$extraAttributes; |
} |
if (!empty($params['autoSubmit'])) { |
if ($this->pager->_httpMethod == 'GET') { |
$selector = '\' + '.'this.options[this.selectedIndex].value + \''; |
if ($this->pager->_append) { |
$href = '?' . $this->pager->_http_build_query_wrapper($this->pager->_linkData); |
$href = htmlentities($this->pager->_url). preg_replace( |
'/(&|&|\?)('.$this->pager->_urlVar.'=)(\d+)/', |
'\\1\\2'.$selector, |
htmlentities($href) |
); |
} else { |
$href = htmlentities($this->pager->_url . str_replace('%d', $selector, $this->pager->_fileName)); |
} |
$tmp .= ' onchange="document.location.href=\'' |
. $href .'\'' |
. '"'; |
} elseif ($this->pager->_httpMethod == 'POST') { |
$tmp .= " onchange='" |
. $this->pager->_generateFormOnClick($this->pager->_url, $this->pager->_linkData) |
. "'"; |
$tmp = preg_replace( |
'/(input\.name = \"'.$this->pager->_urlVar.'\"; input\.value =) \"(\d+)\";/', |
'\\1 this.options[this.selectedIndex].value;', |
$tmp |
); |
} |
} |
$tmp .= '>'; |
$start = 1; |
$end = $this->pager->numPages(); |
$selected = $this->pager->getCurrentPageID(); |
for ($i=$start; $i<=$end; $i++) { |
$tmp .= '<option value="'.$i.'"'; |
if ($i == $selected) { |
$tmp .= ' selected="selected"'; |
} |
$tmp .= '>'.sprintf($optionText, $i).'</option>'; |
} |
$tmp .= '</select>'; |
return $tmp; |
} |
// }}} |
} |
?> |
/branches/v1.0-menes/api/pear/Pager/tests/pager_jumping_test.php |
---|
New file |
0,0 → 1,83 |
<?php |
// $Id$ |
require_once 'simple_include.php'; |
require_once 'pager_include.php'; |
class TestOfPagerJumping extends UnitTestCase { |
var $pager; |
function TestOfPagerJumping($name='Test of Pager_Jumping') { |
$this->UnitTestCase($name); |
} |
function setUp() { |
$options = array( |
'itemData' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12), |
'perPage' => 5, |
'mode' => 'Jumping', |
'delta' => 2 |
); |
$this->pager = Pager::factory($options); |
} |
function tearDown() { |
unset($this->pager); |
} |
function testPageIdByOffset1() { |
$this->assertEqual(1, $this->pager->getPageIdByOffset(1)); |
} |
function testPageIdByOffset5() { |
$this->assertEqual(1, $this->pager->getPageIdByOffset(5)); |
} |
function testPageIdByOffset6() { |
$this->assertEqual(2, $this->pager->getPageIdByOffset(6)); |
} |
function testPageRangeByPageId1() { |
$this->assertEqual(array(1, 2), $this->pager->getPageRangeByPageId(1)); |
} |
function testPageRangeByPageId2() { |
$this->assertEqual(array(1, 2), $this->pager->getPageRangeByPageId(2)); |
} |
function testPageRangeByPageId3() { |
$this->assertEqual(array(3, 3), $this->pager->getPageRangeByPageId(3)); |
} |
function testPageRangeByPageId_outOfRange() { |
$this->assertEqual(array(0, 0), $this->pager->getPageRangeByPageId(20)); |
} |
function testGetPageData() { |
$this->assertEqual(array(0=>1, 1=>2, 2=>3, 3=>4, 4=>5), $this->pager->getPageData()); |
} |
function testGetPageData2() { |
$this->assertEqual(array(5=>6, 6=>7, 7=>8, 8=>9, 9=>10), $this->pager->getPageData(2)); |
} |
function testGetPageData_OutOfRange() { |
$this->assertEqual(false, $this->pager->getPageData(4)); |
} |
/** |
* Returns offsets for given pageID. Eg, if you pass pageID=5 and your |
* delta is 2, it will return 3 and 7. A pageID of 6 would give you 4 and 8 |
* If the method is called without parameter, pageID is set to currentPage#. |
* |
* Given a PageId, it returns the limits of the range of pages displayed. |
* While getOffsetByPageId() returns the offset of the data within the current |
* page, this method returns the offsets of the page numbers interval. |
* E.g., if you have perPage=10 and pageId=3, it will return you 1 and 10. |
* PageID of 8 would give you 1 and 10 as well, because 1 <= 8 <= 10. |
* PageID of 11 would give you 11 and 20. |
* |
* @param pageID PageID to get offsets for |
* @return array First and last offsets |
* @access public |
*/ |
/** |
* Given a PageId, it returns the limits of the range of pages displayed. |
* While getOffsetByPageId() returns the offset of the data within the |
* current page, this method returns the offsets of the page numbers interval. |
* E.g., if you have perPage=10 and pageId=3, it will return you 1 and 10. |
* PageID of 8 would give you 1 and 10 as well, because 1 <= 8 <= 10. |
* PageID of 11 would give you 11 and 20. |
* |
* @param pageID PageID to get offsets for |
* @return array First and last offsets |
* @access public |
*/ |
} |
?> |
/branches/v1.0-menes/api/pear/Pager/tests/pager_sliding_tests.php |
---|
New file |
0,0 → 1,21 |
<?php |
// $Id$ |
require_once 'simple_include.php'; |
require_once 'pager_include.php'; |
class PagerSlidingTests extends GroupTest { |
function PagerSlidingTests() { |
$this->GroupTest('Pager_Sliding Tests'); |
$this->addTestFile('pager_sliding_test.php'); |
$this->addTestFile('pager_sliding_notExpanded_test.php'); |
$this->addTestFile('pager_sliding_noData_test.php'); |
} |
} |
if (!defined('TEST_RUNNING')) { |
define('TEST_RUNNING', true); |
$test = &new PagerTests(); |
$test->run(new HtmlReporter()); |
} |
?> |
/branches/v1.0-menes/api/pear/Pager/tests/all_tests.php |
---|
New file |
0,0 → 1,25 |
<?php |
// $Id$ |
require_once 'simple_include.php'; |
require_once 'pager_include.php'; |
define('TEST_RUNNING', true); |
require_once './pager_tests.php'; |
require_once './pager_jumping_tests.php'; |
require_once './pager_sliding_tests.php'; |
class AllTests extends GroupTest { |
function AllTests() { |
$this->GroupTest('All PEAR::Pager Tests'); |
$this->AddTestCase(new PagerTests()); |
$this->AddTestCase(new PagerJumpingTests()); |
$this->AddTestCase(new PagerSlidingTests()); |
} |
} |
$test = &new AllTests(); |
$test->run(new HtmlReporter()); |
?> |
/branches/v1.0-menes/api/pear/Pager/tests/pager_test_xss.php |
---|
New file |
0,0 → 1,43 |
<?php |
// $Id$ |
//override url |
$_SERVER['PHP_SELF'] = '">test'; |
require_once 'simple_include.php'; |
require_once 'pager_include.php'; |
class TestOfPagerXSS extends UnitTestCase { |
var $pager; |
var $baseurl; |
function TestOfPagerXSS($name='Test of Pager - XSS attacks') { |
$this->UnitTestCase($name); |
} |
function setUp() { |
$options = array( |
'itemData' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), |
'perPage' => 5, |
); |
$this->pager = Pager::factory($options); |
$this->baseurl = substr($_SERVER['PHP_SELF'], 0, strrpos($_SERVER['PHP_SELF'], '/')); |
} |
function tearDown() { |
unset($this->pager); |
} |
function testXSS() { |
$options = array( |
'itemData' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), |
'perPage' => 5, |
'nextImg' => '»' |
); |
$this->pager = Pager::factory($options); |
$expected = ' <a href="./">test?pageID=2" title="next page">»</a> '; |
$this->assertEqual($expected, $this->pager->_getNextLink()); |
} |
} |
if (!defined('TEST_RUNNING')) { |
define('TEST_RUNNING', true); |
$test = &new TestOfPagerXSS(); |
$test->run(new HtmlReporter()); |
} |
?> |
/branches/v1.0-menes/api/pear/Pager/tests/simple_include.php |
---|
New file |
0,0 → 1,17 |
<?php |
// $Id$ |
// |
// This testsuite requires SimpleTest. |
// You can find it here: |
// http://www.lastcraft.com/simple_test.php |
// |
if (!defined('SIMPLE_TEST')) { |
define('SIMPLE_TEST', '../simpletest/'); |
} |
require_once(SIMPLE_TEST . 'unit_tester.php'); |
require_once(SIMPLE_TEST . 'reporter.php'); |
require_once(SIMPLE_TEST . 'mock_objects.php'); |
require_once(SIMPLE_TEST . 'web_tester.php'); |
require_once(SIMPLE_TEST . 'reporter.php'); |
?> |
/branches/v1.0-menes/api/pear/Pager/tests/pager_sliding_noData_test.php |
---|
New file |
0,0 → 1,30 |
<?php |
// $Id$ |
require_once 'simple_include.php'; |
require_once 'pager_include.php'; |
class TestOfPagerSlidingNoData extends UnitTestCase { |
var $pager; |
function TestOfPagerSlidingNoData($name='Test of Pager_Sliding - no data') { |
$this->UnitTestCase($name); |
} |
function setUp() { |
$options = array( |
'totalItems' => 0, |
'perPage' => 2, |
'mode' => 'Sliding', |
); |
$this->pager = Pager::factory($options); |
} |
function tearDown() { |
unset($this->pager); |
} |
function testOffsetByPageId() { |
$this->assertEqual(array(1, 0), $this->pager->getOffsetByPageId()); |
} |
function testPageIdByOffset() { |
$this->assertNull($this->pager->getPageIdByOffset()); |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Pager/tests/pager_wrapper_test.php |
---|
New file |
0,0 → 1,205 |
<?php |
// $Id$ |
require_once 'simple_include.php'; |
require_once 'pager_wrapper_include.php'; |
class TestOfPagerWrapper extends UnitTestCase |
{ |
function TestOfPagerWrapper($name='Test of Pager_Wrapper') { |
$this->UnitTestCase($name); |
} |
function setUp() { } |
function tearDown() { } |
/** |
* Basic tests for rewriteCountQuery() |
*/ |
function testRewriteCountQuery() { |
//test LIMIT |
$query = 'SELECT a, b, c, d FROM mytable WHERE a=1 AND c="g" LIMIT 2'; |
$expected = 'SELECT COUNT(*) FROM mytable WHERE a=1 AND c="g"'; |
$this->assertEqual($expected, rewriteCountQuery($query)); |
//test ORDER BY and quotes |
$query = 'SELECT a, b, c, d FROM mytable WHERE a=1 AND c="g" ORDER BY (a, b)'; |
$expected = 'SELECT COUNT(*) FROM mytable WHERE a=1 AND c="g"'; |
$this->assertEqual($expected, rewriteCountQuery($query)); |
//test CR/LF |
$query = 'SELECT a, b, c, d FROM mytable |
WHERE a=1 |
AND c="g" |
ORDER BY (a, b)'; |
$expected = 'SELECT COUNT(*) FROM mytable |
WHERE a=1 |
AND c="g"'; |
$this->assertEqual($expected, rewriteCountQuery($query)); |
//test GROUP BY |
$query = 'SELECT a, b, c, d FROM mytable WHERE a=1 GROUP BY c'; |
$this->assertFalse(rewriteCountQuery($query)); |
//test DISTINCT |
$query = 'SELECT DISTINCT a, b, c, d FROM mytable WHERE a=1 GROUP BY c'; |
$this->assertFalse(rewriteCountQuery($query)); |
//test MiXeD Keyword CaSe |
$query = 'SELECT a, b, c, d from mytable WHERE a=1 AND c="g"'; |
$expected = 'SELECT COUNT(*) FROM mytable WHERE a=1 AND c="g"'; |
$this->assertEqual($expected, rewriteCountQuery($query)); |
//test function speed... this query used to be very slow to parse |
$query = "SELECT i.item_id, |
ia.addition, |
u.username, |
i.date_created, |
i.start_date, |
i.expiry_date |
FROM item i, item_addition ia, item_type it, item_type_mapping itm, usr u, category c |
WHERE ia.item_type_mapping_id = itm.item_type_mapping_id |
AND i.updated_by_id = u.usr_id |
AND it.item_type_id = itm.item_type_id |
AND i.item_id = ia.item_id |
AND i.item_type_id = it.item_type_id |
AND itm.field_name = 'title' AND it.item_type_id = 2 AND i.category_id = 1 AND i.status = 4 |
AND i.category_id = c.category_id |
AND 0 NOT IN (COALESCE(c.perms, '-1')) |
ORDER BY i.last_updated DESC"; |
$expected = "SELECT COUNT(*) FROM item i, item_addition ia, item_type it, item_type_mapping itm, usr u, category c |
WHERE ia.item_type_mapping_id = itm.item_type_mapping_id |
AND i.updated_by_id = u.usr_id |
AND it.item_type_id = itm.item_type_id |
AND i.item_id = ia.item_id |
AND i.item_type_id = it.item_type_id |
AND itm.field_name = 'title' AND it.item_type_id = 2 AND i.category_id = 1 AND i.status = 4 |
AND i.category_id = c.category_id |
AND 0 NOT IN (COALESCE(c.perms, '-1'))"; |
$this->assertEqual($expected, rewriteCountQuery($query)); |
} |
/** |
* Test rewriteCountQuery() with queries having a subquery in the SELECT clause |
*/ |
function testRewriteCountQuery_SubqueriesInSelectClause() { |
$query = 'SELECT a, (SELECT a FROM b) AS b, c, d FROM mytable WHERE a=1 AND c="g" LIMIT 2'; |
$expected = 'SELECT COUNT(*) FROM mytable WHERE a=1 AND c="g"'; |
$this->assertFalse(rewriteCountQuery($query)); |
$query = 'SELECT a, (SELECT a FROM b) AS b, (SELECT c FROM c) AS c, d FROM mytable WHERE a=1 AND c="g" LIMIT 2'; |
//$expected = 'SELECT COUNT(*) FROM mytable WHERE a=1 AND c="g"'; |
$this->assertFalse(rewriteCountQuery($query)); |
$query = 'SELECT `id`, `ip`, ( |
SELECT TIMEDIFF(MAX(P.`time`), MIN(P.`time`)) |
FROM `przejscia` as P |
WHERE P.`id_wejscia`=W.`id` |
) as `czas` |
FROM `wejscia` as W |
WHERE W.id_domeny=? |
ORDER BY W.czas_wejscia DESC'; |
$expected = 'SELECT COUNT(*) |
FROM `wejscia` as W |
WHERE W.id_domeny=? |
ORDER BY W.czas_wejscia DESC'; |
$this->assertFalse(rewriteCountQuery($query)); |
} |
/** |
* Test rewriteCountQuery() with queries having a subquery in the FROM clause |
*/ |
function testRewriteCountQuery_SubqueriesInFromClause() { |
$query = 'SELECT a, b, c, d FROM (SELECT a, b, c, d FROM mytable WHERE a=1) AS tbl_alias WHERE a=1'; |
$expected = 'SELECT COUNT(*) FROM (SELECT a, b, c, d FROM mytable WHERE a=1) AS tbl_alias WHERE a=1'; |
$this->assertEqual($expected, rewriteCountQuery($query)); |
} |
/** |
* Test rewriteCountQuery() with queries having a subquery in the WHERE clause |
*/ |
function testRewriteCountQuery_SubqueriesInWhereClause() { |
//this one is not rewritten: subqueries with ORDER BY clauses might get truncated |
$query = 'SELECT Version.VersionId, Version.Identifier,News.* |
FROM VersionBroker |
JOIN ObjectType ON ObjectType.ObjectTypeId = VersionBroker.ObjectTypeId |
JOIN Version ON VersionBroker.Identifier = Version.Identifier |
JOIN News ON Version.ObjectId = News.NewsId |
WHERE Version.Status = \'Approved\' |
AND ObjectType.Name = \'News\' |
AND Version.ApprovedTS = ( |
SELECT SubV.ApprovedTS |
FROM Version SubV |
WHERE SubV.Identifier = VersionBroker.Identifier |
ORDER BY ApprovedTS DESC |
LIMIT 1) |
ORDER BY ApprovedTS DESC'; |
$expected = 'SELECT COUNT(*) |
FROM VersionBroker |
JOIN ObjectType ON ObjectType.ObjectTypeId = VersionBroker.ObjectTypeId |
JOIN Version ON VersionBroker.Identifier = Version.Identifier |
JOIN News ON Version.ObjectId = News.NewsId |
WHERE Version.Status = \'Approved\' |
AND ObjectType.Name = \'News\' |
AND Version.ApprovedTS = ( |
SELECT SubV.ApprovedTS |
FROM Version SubV |
WHERE SubV.Identifier = VersionBroker.Identifier |
ORDER BY ApprovedTS DESC |
LIMIT 1) |
ORDER BY ApprovedTS DESC'; |
//$this->assertEqual($expected, rewriteCountQuery($query)); |
$this->assertFalse(rewriteCountQuery($query)); |
//this one should pass... subquery without ORDER BY or LIMIT clause |
$query = 'SELECT Version.VersionId, Version.Identifier,News.* FROM VersionBroker JOIN |
ObjectType ON ObjectType.ObjectTypeId = VersionBroker.ObjectTypeId JOIN |
Version ON VersionBroker.Identifier = Version.Identifier JOIN News ON |
Version.ObjectId = News.NewsId WHERE Version.Status = \'Approved\' AND |
ObjectType.Name = \'News\' AND Version.ApprovedTS = ( SELECT SubV.ApprovedTS |
FROM Version SubV WHERE SubV.Identifier = VersionBroker.Identifier ) ORDER BY ApprovedTS DESC'; |
$expected = 'SELECT COUNT(*) FROM VersionBroker JOIN |
ObjectType ON ObjectType.ObjectTypeId = VersionBroker.ObjectTypeId JOIN |
Version ON VersionBroker.Identifier = Version.Identifier JOIN News ON |
Version.ObjectId = News.NewsId WHERE Version.Status = \'Approved\' AND |
ObjectType.Name = \'News\' AND Version.ApprovedTS = ( SELECT SubV.ApprovedTS |
FROM Version SubV WHERE SubV.Identifier = VersionBroker.Identifier )'; |
$this->assertEqual($expected, rewriteCountQuery($query)); |
} |
/** |
* Test rewriteCountQuery() with queries having keywords embedded in other words |
*/ |
function testRewriteCountQuery_EmbeddedKeywords() { |
$query = 'SELECT afieldFROM, b, c, d FROM mytable WHERE a=1 AND c="g"'; |
$expected = 'SELECT COUNT(*) FROM mytable WHERE a=1 AND c="g"'; |
$this->assertEqual($expected, rewriteCountQuery($query)); |
$query = 'SELECT FROMafield, b, c, d FROM mytable WHERE a=1 AND c="g"'; |
$expected = 'SELECT COUNT(*) FROM mytable WHERE a=1 AND c="g"'; |
$this->assertEqual($expected, rewriteCountQuery($query)); |
$query = 'SELECT afieldFROMaaa, b, c, d FROM mytable WHERE a=1 AND c="gLIMIT"'; |
$expected = 'SELECT COUNT(*) FROM mytable WHERE a=1 AND c="gLIMIT"'; |
$this->assertEqual($expected, rewriteCountQuery($query)); |
$query = 'SELECT DISTINCTaaa, b, c, d FROM mytable WHERE a=1 AND c="g"'; |
$expected = 'SELECT COUNT(*) FROM mytable WHERE a=1 AND c="g"'; |
$this->assertEqual($expected, rewriteCountQuery($query)); |
//this one fails... the regexp should NOT match keywords within quotes. |
//we need a full blown stack-based parser to catch this... |
$query = 'SELECT afieldFROMaaa, b, c, d FROM mytable WHERE a=1 AND c="g LIMIT a"'; |
$expected = 'SELECT COUNT(*) FROM mytable WHERE a=1 AND c="g LIMIT a"'; |
$this->assertEqual($expected, rewriteCountQuery($query)); |
} |
} |
if (!defined('TEST_RUNNING')) { |
define('TEST_RUNNING', true); |
$test = &new TestOfPagerWrapper(); |
$test->run(new HtmlReporter()); |
} |
?> |
/branches/v1.0-menes/api/pear/Pager/tests/pager_test.php |
---|
New file |
0,0 → 1,553 |
<?php |
// $Id$ |
require_once 'simple_include.php'; |
require_once 'pager_include.php'; |
class TestOfPager extends UnitTestCase { |
var $pager; |
var $baseurl; |
function TestOfPager($name='Test of Pager') { |
$this->UnitTestCase($name); |
} |
function setUp() { |
$options = array( |
'itemData' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), |
'perPage' => 5, |
); |
$this->pager = Pager::factory($options); |
$this->baseurl = substr($_SERVER['PHP_SELF'], 0, strrpos($_SERVER['PHP_SELF'], '/')); |
} |
function tearDown() { |
unset($this->pager); |
} |
function testCurrentPageID () { |
$this->assertEqual(1, $this->pager->getCurrentPageID()); |
} |
function testNextPageID () { |
$this->assertEqual(2, $this->pager->getNextPageID()); |
} |
function testPrevPageID () { |
$this->assertEqual(false, $this->pager->getPreviousPageID()); |
} |
function testNumItems () { |
$this->assertEqual(10, $this->pager->numItems()); |
} |
function testNumPages () { |
$this->assertEqual(2, $this->pager->numPages()); |
} |
function testFirstPage () { |
$this->assertEqual(true, $this->pager->isFirstPage()); |
} |
function testLastPage () { |
$this->assertEqual(false, $this->pager->isLastPage()); |
} |
function testLastPageComplete () { |
$this->assertEqual(true, $this->pager->isLastPageComplete()); |
} |
function testOffsetByPageId() { |
$this->assertEqual(array(1, 5), $this->pager->getOffsetByPageId(1)); |
$this->assertEqual(array(6, 10), $this->pager->getOffsetByPageId(2)); |
} |
function testOffsetByPageId_outOfRange() { |
$this->assertEqual(array(0, 0), $this->pager->getOffsetByPageId(20)); |
} |
function testGetPageData() { |
$this->assertEqual(array(0=>1, 1=>2, 2=>3, 3=>4, 4=>5), $this->pager->getPageData()); |
$this->assertEqual(array(5=>6, 6=>7, 7=>8, 8=>9, 9=>10), $this->pager->getPageData(2)); |
} |
function testGetPageData_OutOfRange() { |
$this->assertEqual(array(), $this->pager->getPageData(3)); |
} |
function testSelectBox() { |
$selectBox = '<select name="'.$this->pager->_sessionVar.'">'; |
$selectBox .= '<option value="5" selected="selected">5</option>'; |
$selectBox .= '<option value="10">10</option>'; |
$selectBox .= '<option value="15">15</option>'; |
$selectBox .= '</select>'; |
$this->assertEqual($selectBox, $this->pager->getPerPageSelectBox(5, 15, 5)); |
} |
function testSelectBoxWithString() { |
$selectBox = '<select name="'.$this->pager->_sessionVar.'">'; |
$selectBox .= '<option value="5" selected="selected">5 bugs</option>'; |
$selectBox .= '<option value="10">10 bugs</option>'; |
$selectBox .= '<option value="15">15 bugs</option>'; |
$selectBox .= '</select>'; |
$this->assertEqual($selectBox, $this->pager->getPerPageSelectBox(5, 15, 5, false, '%d bugs')); |
} |
function testSelectBoxWithShowAll() { |
$selectBox = '<select name="'.$this->pager->_sessionVar.'">'; |
$selectBox .= '<option value="3">3</option>'; |
$selectBox .= '<option value="4">4</option>'; |
$selectBox .= '<option value="5" selected="selected">5</option>'; |
$selectBox .= '<option value="6">6</option>'; |
$selectBox .= '<option value="10">10</option>'; |
$selectBox .= '</select>'; |
$this->assertEqual($selectBox, $this->pager->getPerPageSelectBox(3, 6, 1, true)); |
} |
function testSelectBoxWithShowAllAndText() { |
$this->pager->_showAllText = 'Show All'; |
$selectBox = '<select name="'.$this->pager->_sessionVar.'">'; |
$selectBox .= '<option value="3">3 bugs</option>'; |
$selectBox .= '<option value="4">4 bugs</option>'; |
$selectBox .= '<option value="5" selected="selected">5 bugs</option>'; |
$selectBox .= '<option value="6">6 bugs</option>'; |
$selectBox .= '<option value="10">Show All</option>'; |
$selectBox .= '</select>'; |
$this->assertEqual($selectBox, $this->pager->getPerPageSelectBox(3, 6, 1, true, '%d bugs')); |
} |
function testSelectBoxWithShowAllWithExtraAttribs() { |
$this->pager->_showAllText = 'Show All'; |
$selectBox = '<select name="'.$this->pager->_sessionVar.'" onmouseover="doSth">'; |
$selectBox .= '<option value="3">3 bugs</option>'; |
$selectBox .= '<option value="4">4 bugs</option>'; |
$selectBox .= '<option value="5" selected="selected">5 bugs</option>'; |
$selectBox .= '<option value="6">6 bugs</option>'; |
$selectBox .= '<option value="10">Show All</option>'; |
$selectBox .= '</select>'; |
$params = array('optionText' => '%d bugs', 'attributes' => 'onmouseover="doSth"'); |
$this->assertEqual($selectBox, $this->pager->getPerPageSelectBox(3, 6, 1, true, $params)); |
} |
function testSelectBoxInvalid() { |
$err = $this->pager->getPerPageSelectBox(5, 15, 5, false, '%s bugs'); |
$this->assertEqual(ERROR_PAGER_INVALID_PLACEHOLDER, $err->getCode()); |
} |
function testAppendInvalid() { |
$options = array( |
'totalItems' => 10, |
'append' => false, |
'fileName' => 'invalidFileName' |
); |
$err =& Pager::factory($options); //ERROR_PAGER_INVALID_USAGE |
$this->assertError(); |
} |
function testAppendValid() { |
$options = array( |
'totalItems' => 10, |
'append' => false, |
'fileName' => 'valid_%d_FileName' |
); |
$err =& Pager::factory($options); |
$this->assertNoErrors(); |
} |
function testEscapeEntities() { |
//encode special chars |
$options = array( |
'extraVars' => array( |
'request' => array('aRequest'), |
'escape' => 'äö%<>+', |
), |
'perPage' => 5, |
); |
$this->pager =& Pager::factory($options); |
//$expected = '?request[]=aRequest&escape=äö%<>+&pageID='; |
//$this->assertEqual($expected, $this->pager->_getLinksUrl()); |
$expected = 'request%5B0%5D=aRequest&escape=%E4%F6%25%3C%3E%2B'; |
$rendered = $this->pager->_renderLink('', ''); |
preg_match('/href="(.*)"/U', $rendered, $matches); |
$actual = str_replace($_SERVER['PHP_SELF'].'?', '', $matches[1]); |
$this->assertEqual($expected, $actual); |
//don't encode slashes |
$options = array( |
'extraVars' => array( |
'request' => 'cat/subcat', |
), |
'perPage' => 5, |
); |
$this->pager =& Pager::factory($options); |
//$expected = '?request=cat/subcat&pageID='; |
//$this->assertEqual($expected, $this->pager->_getLinksUrl()); |
$expected = '<a href="'.$_SERVER['PHP_SELF'].'?request=cat/subcat" title=""></a>'; |
$actual = $this->pager->_renderLink('', ''); |
$this->assertEqual($expected, $actual); |
} |
function testMultibyteStrings() { |
$options = array( |
'extraVars' => array( |
'test' => '测试', |
), |
'perPage' => 5, |
); |
$this->pager =& Pager::factory($options); |
//$expected = '<a href="'.$_SERVER['PHP_SELF'].'?test=测试" title=""></a>'; |
$rendered = $this->pager->_renderLink('', ''); |
preg_match('/href="(.*)"/U', $rendered, $matches); |
$actual = str_replace($_SERVER['PHP_SELF'].'?test=', '', $matches[1]); |
$this->assertEqual(urlencode($options['extraVars']['test']), $actual); |
} |
function testCurrentPage() { |
$options = array( |
'itemData' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), |
'perPage' => 2, |
'currentPage' => 2, |
); |
$this->pager =& Pager::factory($options); |
$this->assertEqual(3, $this->pager->getNextPageID()); |
$this->assertEqual(1, $this->pager->getPreviousPageID()); |
$this->assertEqual(2, $this->pager->_currentPage); |
} |
function testArrayExtraVars() { |
$arr = array( |
'apple', |
'orange', |
); |
$options = array( |
'itemData' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), |
'perPage' => 5, |
'extraVars' => array('arr' => $arr, 'no' => 'test'), |
); |
$this->pager =& Pager::factory($options); |
/* |
//old |
$expected = '?arr[0]=apple&arr[1]=orange&pageID='; |
$this->assertEqual($expected, $this->pager->_getLinksUrl()); |
*/ |
$expected = $options['extraVars']; |
$this->assertEqual($expected, $this->pager->_getLinksData()); |
$expected = '<a href="'.$_SERVER['PHP_SELF'].'?arr%5B0%5D=apple&arr%5B1%5D=orange&no=test&pageID=2" title=""></a>'; |
$actual = $this->pager->_renderLink('', ''); |
$this->assertEqual($expected, $actual); |
} |
function testExcludeVars() { |
$arr = array( |
'apple', |
'orange', |
); |
$options = array( |
'itemData' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), |
'perPage' => 5, |
'extraVars' => array('arr' => $arr, 'no' => 'test'), |
'excludeVars' => array('no'), |
); |
$this->pager =& Pager::factory($options); |
$expected = array( |
'arr' => array( |
0 => 'apple', |
1 => 'orange' |
), |
); |
$actual = $this->pager->_getLinksData(); |
$this->assertEqual($expected, $this->pager->_getLinksData()); |
$expected = '<a href="'.$_SERVER['PHP_SELF'].'?arr%5B0%5D=apple&arr%5B1%5D=orange&pageID=2" title=""></a>'; |
$actual = $this->pager->_renderLink('', ''); |
$this->assertEqual($expected, $actual); |
} |
function testArgSeparator() { |
$bkp_arg_separator = ini_get('arg_separator.output'); |
ini_set('arg_separator.output', '&'); |
$options = array( |
'itemData' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), |
'perPage' => 5, |
'extraVars' => array('apple' => 1), |
); |
$this->pager =& Pager::factory($options); |
$expected = '<a href="'.$_SERVER['PHP_SELF'].'?apple=1&pageID=2" title=""></a>'; |
$actual = $this->pager->_renderLink('', ''); |
$this->assertEqual($expected, $actual); |
ini_set('arg_separator.output', $bkp_arg_separator); |
} |
function testAttributes() { |
$options = array( |
'itemData' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), |
'perPage' => 5, |
'linkClass' => 'testclass', |
'attributes' => 'target="_blank"', |
); |
$this->pager =& Pager::factory($options); |
$expected = '<a href="'.$_SERVER['PHP_SELF'].'?pageID=2" class="testclass" target="_blank" title=""></a>'; |
$actual = $this->pager->_renderLink('', ''); |
$this->assertEqual($expected, $actual); |
} |
function testImportQuery() { |
//add some fake url vars |
$_GET['arr'] = array( |
'apple', |
'orange', |
); |
$options = array( |
'itemData' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), |
'perPage' => 5, |
'importQuery' => false, |
); |
$this->pager =& Pager::factory($options); |
$expected = array(); |
$actual = $this->pager->_getLinksData(); |
$this->assertEqual($expected, $this->pager->_getLinksData()); |
$expected = '<a href="'.$_SERVER['PHP_SELF'].'?pageID=2" title=""></a>'; |
$actual = $this->pager->_renderLink('', ''); |
$this->assertEqual($expected, $actual); |
//remove fake url vars |
unset($_GET['arr']); |
} |
function testGetNextLinkTag() { |
//append = true |
$expected = '<link rel="next" href="'.$_SERVER['PHP_SELF'].'?pageID=2" title="next page" />'."\n"; |
$this->assertEqual($expected, $this->pager->_getNextLinkTag()); |
//append = false |
$options = array( |
'itemData' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), |
'perPage' => 5, |
'currentPage' => 1, |
'append' => false, |
'fileName' => 'myfile.%d.php', |
); |
$this->pager = Pager::factory($options); |
$expected = '<link rel="next" href="'.$this->baseurl.'/myfile.2.php" title="next page" />'."\n"; |
$this->assertEqual($expected, $this->pager->_getNextLinkTag()); |
//test empty tag |
$options['currentPage'] = 2; |
$this->pager = Pager::factory($options); |
$this->assertEqual('', $this->pager->_getNextLinkTag()); |
} |
function testGetLastLinkTag() { |
//append = true |
$expected = '<link rel="last" href="'.$_SERVER['PHP_SELF'].'?pageID=2" title="last page" />'."\n"; |
$this->assertEqual($expected, $this->pager->_getLastLinkTag()); |
//append = false |
$options = array( |
'itemData' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), |
'perPage' => 5, |
'currentPage' => 1, |
'append' => false, |
'fileName' => 'myfile.%d.php', |
); |
$this->pager = Pager::factory($options); |
$expected = '<link rel="last" href="'.$this->baseurl.'/myfile.2.php" title="last page" />'."\n"; |
$this->assertEqual($expected, $this->pager->_getLastLinkTag()); |
//test empty tag |
$options['currentPage'] = 2; |
$this->pager = Pager::factory($options); |
$this->assertEqual('', $this->pager->_getLastLinkTag()); |
} |
function testGetFirstLinkTag() { |
//append = true |
$options = array( |
'itemData' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), |
'perPage' => 5, |
'currentPage' => 2, |
); |
$this->pager = Pager::factory($options); |
$expected = '<link rel="first" href="'.$_SERVER['PHP_SELF'].'?pageID=1" title="first page" />'."\n"; |
$this->assertEqual($expected, $this->pager->_getFirstLinkTag()); |
//append = false |
$options = array( |
'itemData' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), |
'perPage' => 5, |
'currentPage' => 2, |
'append' => false, |
'fileName' => 'myfile.%d.php', |
); |
$this->pager = Pager::factory($options); |
$expected = '<link rel="first" href="'.$this->baseurl.'/myfile.1.php" title="first page" />'."\n"; |
$this->assertEqual($expected, $this->pager->_getFirstLinkTag()); |
//test empty tag |
$options['currentPage'] = 1; |
$this->pager = Pager::factory($options); |
$this->assertEqual('', $this->pager->_getFirstLinkTag()); |
} |
function testGetPrevLinkTag() { |
//append = true |
$options = array( |
'itemData' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), |
'perPage' => 5, |
'currentPage' => 2, |
); |
$this->pager = Pager::factory($options); |
$expected = '<link rel="previous" href="'.$_SERVER['PHP_SELF'].'?pageID=1" title="previous page" />'."\n"; |
$this->assertEqual($expected, $this->pager->_getPrevLinkTag()); |
//append = false |
$options = array( |
'itemData' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), |
'perPage' => 5, |
'currentPage' => 2, |
'append' => false, |
'fileName' => 'myfile.%d.php', |
); |
$this->pager = Pager::factory($options); |
$expected = '<link rel="previous" href="'.$this->baseurl.'/myfile.1.php" title="previous page" />'."\n"; |
$this->assertEqual($expected, $this->pager->_getPrevLinkTag()); |
//test empty tag |
$options['currentPage'] = 1; |
$this->pager = Pager::factory($options); |
$this->assertEqual('', $this->pager->_getPrevLinkTag()); |
} |
function testPrintFirstPage() { |
$options = array( |
'itemData' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), |
'perPage' => 5, |
'currentPage' => 2, |
); |
$this->pager = Pager::factory($options); |
$expected = '<a href="' . $_SERVER['PHP_SELF'] . '?pageID=1" title="first page">[1]</a> '; |
$this->assertEqual($expected, $this->pager->_printFirstPage()); |
$this->pager->_firstPageText = 'FIRST'; |
$expected = '<a href="' . $_SERVER['PHP_SELF'] . '?pageID=1" title="first page">[FIRST]</a> '; |
$this->assertEqual($expected, $this->pager->_printFirstPage()); |
$options = array( |
'itemData' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), |
'perPage' => 5, |
'currentPage' => 2, |
'altFirst' => 'page %d', |
); |
$this->pager = Pager::factory($options); |
$expected = '<a href="' . $_SERVER['PHP_SELF'] . '?pageID=1" title="page 1">[1]</a> '; |
$this->assertEqual($expected, $this->pager->_printFirstPage()); |
} |
function testPrintLastPage() { |
$expected = '<a href="' . $_SERVER['PHP_SELF'] . '?pageID=2" title="last page">[2]</a>'; |
$this->assertEqual($expected, $this->pager->_printLastPage()); |
$this->pager->_lastPageText = 'LAST'; |
$expected = '<a href="' . $_SERVER['PHP_SELF'] . '?pageID=2" title="last page">[LAST]</a>'; |
$this->assertEqual($expected, $this->pager->_printLastPage()); |
$this->pager->_altLast = 'page %d'; |
$expected = '<a href="' . $_SERVER['PHP_SELF'] . '?pageID=2" title="page 2">[LAST]</a>'; |
$this->assertEqual($expected, $this->pager->_printLastPage()); |
} |
function testGetBackLink() { |
$img = '«'; |
$options = array( |
'itemData' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), |
'perPage' => 5, |
'currentPage' => 2, |
'prevImg' => $img, |
); |
$this->pager = Pager::factory($options); |
$expected = '<a href="' . $_SERVER['PHP_SELF'] . '?pageID=1" title="previous page">'.$img.'</a> '; |
$this->assertEqual($expected, $this->pager->_getBackLink()); |
} |
function testGetNexLink() { |
$img = '»'; |
$options = array( |
'itemData' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), |
'perPage' => 5, |
'currentPage' => 1, |
'nextImg' => $img, |
); |
$this->pager = Pager::factory($options); |
$expected = ' <a href="' . $_SERVER['PHP_SELF'] . '?pageID=2" title="next page">'.$img.'</a> '; |
$this->assertEqual($expected, $this->pager->_getNextLink()); |
} |
function testHttpMethodAutoDetect() { |
$_POST['pageID'] = 3; |
$options = array( |
'itemData' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), |
'perPage' => 5, |
); |
$this->pager = Pager::factory($options); |
$this->assertEqual('POST', $this->pager->_httpMethod); |
$options = array( |
'itemData' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), |
'perPage' => 5, |
'httpMethod' => 'GET', |
); |
$this->pager = Pager::factory($options); |
$this->assertEqual('GET', $this->pager->_httpMethod); |
unset($_POST['pageID']); |
$options = array( |
'itemData' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), |
'perPage' => 5, |
'httpMethod' => 'POST', |
); |
$this->pager = Pager::factory($options); |
$this->assertEqual('POST', $this->pager->_httpMethod); |
$options = array( |
'itemData' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), |
'perPage' => 5, |
); |
$this->pager = Pager::factory($options); |
$this->assertEqual('GET', $this->pager->_httpMethod); |
} |
function testAccesskey() { |
$options = array( |
'itemData' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), |
'perPage' => 5, |
'accesskey' => true, |
); |
$this->pager = Pager::factory($options); |
$this->assertWantedPattern('/accesskey="\d"/i', $this->pager->links); |
//var_dump($this->pager->links); |
} |
function testIsEncoded() { |
//var_dump(urlencode('안녕')); |
$test_strings_encoded = array( |
'encoded0' => '试', |
'encoded1' => '测试', |
'encoded2' => '안녕', |
'encoded3' => '안 녕', |
'encoded4' => '안 |
녕', |
); |
$test_strings_plain = array( |
'plain1' => '안녕', |
'plain2' => '더보기', |
// 'plain3' => '이젠 전화도 |
//로 걸면 무료', |
'plain4' => 'abcde', //not multibyte |
'plain5' => '&#abcfg;', //invalid hex-encoded char |
'plain5' => '안 nasty 녕', //mixed plain/encoded text |
); |
foreach ($test_strings_encoded as $string) { |
//echo '<hr />'.str_replace('&', '&', $string); |
$this->assertTrue($this->pager->_isEncoded($string)); |
} |
foreach ($test_strings_plain as $string) { |
$this->assertFalse($this->pager->_isEncoded($string)); |
} |
} |
function testGetOption() { |
$this->assertEqual(5, $this->pager->getOption('perPage')); |
$err = $this->pager->getOption('non_existent_option'); |
$this->assertEqual(ERROR_PAGER_INVALID, $err->getCode()); |
} |
function testGetOptions() { |
$options = $this->pager->getOptions(); |
$this->assertTrue(is_array($options)); |
$this->assertEqual(5, $options['perPage']); |
} |
function testSetOptionsAndBuild() { |
$options = array( |
'perPage' => 2, |
); |
$this->pager->setOptions($options); |
$this->pager->build(); |
$this->assertEqual(2, $this->pager->getOption('perPage')); |
$this->assertEqual(array(0=>1, 1=>2), $this->pager->getPageData()); |
$this->assertEqual(array(2=>3, 3=>4), $this->pager->getPageData(2)); |
$options = array( |
'currentPage' => 2, |
'append' => false, |
'fileName' => 'myfile.%d.php', |
); |
$this->pager->setOptions($options); |
$this->pager->build(); |
$expected = '<link rel="previous" href="'.$this->baseurl.'/myfile.1.php" title="previous page" />'."\n"; |
$this->assertEqual($expected, $this->pager->_getPrevLinkTag()); |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Pager/tests/pager_sliding_notExpanded_test.php |
---|
New file |
0,0 → 1,49 |
<?php |
// $Id$ |
require_once 'simple_include.php'; |
require_once 'pager_include.php'; |
class TestOfPagerSlidingNotExpanded extends UnitTestCase { |
var $pager; |
function TestOfPagerSlidingNotExpanded($name='Test of Pager_Sliding - expanded=false') { |
$this->UnitTestCase($name); |
} |
function setUp() { |
$options = array( |
'itemData' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21), |
'perPage' => 2, |
'mode' => 'Sliding', |
'expanded' => false |
); |
$this->pager = new Pager($options); |
} |
function tearDown() { |
unset($this->pager); |
} |
function testPageRangeByPageId1() { |
$this->assertEqual(array(1, 3), $this->pager->getPageRangeByPageId(1)); |
} |
function testPageRangeByPageId2() { |
$this->assertEqual(array(1, 4), $this->pager->getPageRangeByPageId(2)); |
} |
function testPageRangeByPageId3() { |
$this->assertEqual(array(1, 5), $this->pager->getPageRangeByPageId(3)); |
} |
function testPageRangeByPageId4() { |
$this->assertEqual(array(2, 6), $this->pager->getPageRangeByPageId(4)); |
} |
function testPageRangeByPageId9() { |
$this->assertEqual(array(7, 11), $this->pager->getPageRangeByPageId(9)); |
} |
function testPageRangeByPageId10() { |
$this->assertEqual(array(8, 11), $this->pager->getPageRangeByPageId(10)); |
} |
function testPageRangeByPageId11() { |
$this->assertEqual(array(9, 11), $this->pager->getPageRangeByPageId(11)); |
} |
function testPageRangeByPageId_outOfRange() { |
$this->assertEqual(array(0, 0), $this->pager->getPageRangeByPageId(20)); |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Pager/tests/pager_wrapper_include.php |
---|
New file |
0,0 → 1,5 |
<?php |
// $Id$ |
require_once 'Pager/Pager.php'; |
require_once 'Pager/Wrapper.php'; |
?> |
/branches/v1.0-menes/api/pear/Pager/tests/pager_include.php |
---|
New file |
0,0 → 1,4 |
<?php |
// $Id$ |
require_once 'Pager/Pager.php'; |
?> |
/branches/v1.0-menes/api/pear/Pager/tests/pager_post_test.php |
---|
New file |
0,0 → 1,67 |
<?php |
// $Id$ |
require_once 'simple_include.php'; |
require_once 'pager_include.php'; |
class TestOfPagerPOST extends WebTestCase { |
var $pager; |
var $baseurl; |
var $options = array(); |
function TestOfPagerPOST($name='Test of Pager with httpMethod="POST"') { |
$this->WebTestCase($name); |
} |
function setUp() { |
$this->options = array( |
'itemData' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), |
'perPage' => 1, |
'clearIfVoid' => false, |
'httpMethod' => 'POST', |
); |
//$this->pager = Pager::factory($this->options); |
$this->baseurl = 'http://'.$_SERVER['HTTP_HOST'].substr($_SERVER['PHP_SELF'], 0, strrpos($_SERVER['PHP_SELF'], '/')); |
} |
function tearDown() { |
unset($this->pager); |
} |
function testMultibyteEncoded() { |
$test_strings_encoded = array( |
'encoded1' => '测试', |
'encoded2' => '안녕', |
); |
$loaded = $this->get($this->baseurl.'/multibyte_post.php'); |
$this->assertTrue($loaded); |
$this->assertResponse(200); |
$this->assertTitle('Pager Test: page 1'); |
$this->assertNoLink('1'); |
$this->assertLink('2'); |
$this->assertLink('Next >>'); |
//$this->showSource(); |
foreach ($test_strings_encoded as $name => $value) { |
$this->assertWantedPattern('/'.$name.'.*'.preg_quote(str_replace('&', '&', $value)).'/Uims'); |
} |
} |
function testMultibytePlain() { |
$test_strings_plain = array( |
'plain1' => '안녕', |
'plain2' => '더보기', |
// 'plain3' => '이젠 전화도 |
//로 걸면 무료', |
); |
$loaded = $this->get($this->baseurl.'/multibyte_post.php'); |
$this->assertTrue($loaded); |
$this->assertResponse(200); |
$this->assertTitle('Pager Test: page 1'); |
$this->assertNoLink('1'); |
$this->assertLink('2'); |
$this->assertLink('Next >>'); |
//$this->showSource(); |
foreach ($test_strings_plain as $name => $value) { |
$this->assertWantedPattern('/'.$name.'.*'.preg_quote(urlencode($value)).'/Uims'); |
} |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Pager/tests/pager_sliding_test.php |
---|
New file |
0,0 → 1,56 |
<?php |
// $Id$ |
require_once 'simple_include.php'; |
require_once 'pager_include.php'; |
class TestOfPagerSliding extends UnitTestCase { |
var $pager; |
function TestOfPagerSliding($name='Test of Pager_Sliding') { |
$this->UnitTestCase($name); |
} |
function setUp() { |
$options = array( |
'itemData' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12), |
'perPage' => 2, |
'mode' => 'Sliding', |
); |
$this->pager = Pager::factory($options); |
} |
function tearDown() { |
unset($this->pager); |
} |
function testPageRangeByPageId1() { |
$this->assertEqual(array(1, 5), $this->pager->getPageRangeByPageId(1)); |
} |
function testPageRangeByPageId4() { |
$this->assertEqual(array(2, 6), $this->pager->getPageRangeByPageId(4)); |
} |
function testPageRangeByPageId_outOfRange() { |
$this->assertEqual(array(0, 0), $this->pager->getPageRangeByPageId(20)); |
} |
function testPageRangeByPageId2() { |
$this->assertEqual(array(2, 6), $this->pager->getPageRangeByPageId(4)); |
} |
function testGetPageData() { |
$this->assertEqual(array(0=>1, 1=>2), $this->pager->getPageData()); |
} |
function testGetPageData2() { |
$this->assertEqual(array(2=>3, 3=>4), $this->pager->getPageData(2)); |
} |
function testGetPageData_OutOfRange() { |
$this->assertEqual(false, $this->pager->getPageData(20)); |
} |
function testClearIfVoid() { |
$this->assertTrue(strlen($this->pager->links) > 0); |
$options = array( |
'itemData' => array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12), |
'perPage' => 20, |
'mode' => 'Sliding', |
); |
$this->pager = Pager::factory($options); |
$this->assertEqual('', $this->pager->links); |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Pager/tests/README |
---|
New file |
0,0 → 1,5 |
These tests require Simple Test: http://www.lastcraft.com/simple_test.php |
- edit the simple_include.php script and set your SimpleTest install dir; |
- edit the pager_include.php and pager_wrapper_include.php scripts to set |
your Pager directory. |
/branches/v1.0-menes/api/pear/Pager/tests/pager_jumping_tests.php |
---|
New file |
0,0 → 1,20 |
<?php |
// $Id$ |
require_once 'simple_include.php'; |
require_once 'pager_include.php'; |
class PagerJumpingTests extends GroupTest { |
function PagerJumpingTests() { |
$this->GroupTest('Pager_Jumping Tests'); |
$this->addTestFile('pager_jumping_test.php'); |
$this->addTestFile('pager_jumping_noData_test.php'); |
} |
} |
if (!defined('TEST_RUNNING')) { |
define('TEST_RUNNING', true); |
$test = &new PagerTests(); |
$test->run(new HtmlReporter()); |
} |
?> |
/branches/v1.0-menes/api/pear/Pager/tests/pager_jumping_noData_test.php |
---|
New file |
0,0 → 1,36 |
<?php |
// $Id$ |
require_once 'simple_include.php'; |
require_once 'pager_include.php'; |
class TestOfPagerJumpingNoData extends UnitTestCase { |
var $pager; |
function TestOfPagerJumpingNoData($name='Test of Pager_Jumping - no data') { |
$this->UnitTestCase($name); |
} |
function setUp() { |
$options = array( |
'totalItems' => 0, |
'perPage' => 2, |
'mode' => 'Jumping', |
); |
$this->pager = Pager::factory($options); |
} |
function tearDown() { |
unset($this->pager); |
} |
function testOffsetByPageId() { |
$this->assertEqual(array(1, 0), $this->pager->getOffsetByPageId()); |
} |
function testPageIdByOffset() { |
$this->assertEqual(false, $this->pager->getPageIdByOffset(0)); |
} |
function testPageIdByOffset2() { |
$this->assertEqual(1, $this->pager->getPageIdByOffset(1)); |
} |
function testPageIdByOffset3() { |
$this->assertEqual(1, $this->pager->getPageIdByOffset(2)); |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Pager/tests/pager_tests.php |
---|
New file |
0,0 → 1,20 |
<?php |
// $Id$ |
require_once 'simple_include.php'; |
require_once 'pager_include.php'; |
class PagerTests extends GroupTest { |
function PagerTests() { |
$this->GroupTest('Pager Tests'); |
$this->addTestFile('pager_test.php'); |
$this->addTestFile('pager_noData_test.php'); |
} |
} |
if (!defined('TEST_RUNNING')) { |
define('TEST_RUNNING', true); |
$test = &new PagerTests(); |
$test->run(new HtmlReporter()); |
} |
?> |
/branches/v1.0-menes/api/pear/Pager/tests/multibyte_post.php |
---|
New file |
0,0 → 1,48 |
<?php |
require_once 'Pager/Pager.php'; |
//create dummy array of data |
$myData = array(); |
for ($i=0; $i<200; $i++) { |
$myData[] = $i; |
} |
//set a string |
$test_strings_encoded = array( |
'encoded1' => '测试', |
'encoded2' => '안녕', |
); |
$test_strings_plain = array( |
'plain1' => '안녕', |
'plain2' => '더보기', |
// 'plain3' => '이젠 전화도 |
//로 걸면 무료', |
); |
$params = array( |
'itemData' => $myData, |
'perPage' => 10, |
'delta' => 2, |
'append' => true, |
'clearIfVoid' => false, |
'extraVars' => array_merge($test_strings_plain, $test_strings_encoded), |
'httpMethod' => 'POST', |
'path' => 'http://'.$_SERVER['HTTP_HOST'].substr($_SERVER['PHP_SELF'], 0, strrpos($_SERVER['PHP_SELF'], '/')), |
'fileName' => basename(__FILE__), |
); |
//var_dump($params['fileName']);exit; |
$pager = & Pager::factory($params); |
$page_data = $pager->getPageData(); |
?> |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 |
Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
<html xmlns="http://www.w3.org/1999/xhtml"> |
<head> |
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> |
<title>Pager Test: page <?php echo $pager->getCurrentPageID(); ?></title> |
</head> |
<body> |
<?php echo $pager->links; ?> |
<hr /> |
<pre><?php print_r($page_data); ?></pre> |
</body> |
</html> |
/branches/v1.0-menes/api/pear/Pager/tests/pager_noData_test.php |
---|
New file |
0,0 → 1,48 |
<?php |
// $Id$ |
require_once 'simple_include.php'; |
require_once 'pager_include.php'; |
class TestOfPagerNoData extends UnitTestCase { |
var $pager; |
function TestOfPagerNoData($name='Test of Pager - no data') { |
$this->UnitTestCase($name); |
} |
function setUp() { |
$options = array( |
'totalItems' => 0, |
'perPage' => 5, |
'mode' => 'Sliding', |
); |
$this->pager = Pager::factory($options); |
} |
function tearDown() { |
unset($this->pager); |
} |
function testCurrentPageID () { |
$this->assertEqual(0, $this->pager->getCurrentPageID()); |
} |
function testNextPageID () { |
$this->assertEqual(false, $this->pager->getNextPageID()); |
} |
function testPrevPageID () { |
$this->assertEqual(false, $this->pager->getPreviousPageID()); |
} |
function testNumItems () { |
$this->assertEqual(0, $this->pager->numItems()); |
} |
function testNumPages () { |
$this->assertEqual(0, $this->pager->numPages()); |
} |
function testFirstPage () { |
$this->assertEqual(true, $this->pager->isFirstPage()); |
} |
function testLastPage () { |
$this->assertEqual(true, $this->pager->isLastPage()); |
} |
function testLastPageComplete () { |
$this->assertEqual(true, $this->pager->isLastPageComplete()); |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Pager/tests/pager_post_tests.php |
---|
New file |
0,0 → 1,11 |
<?php |
// $Id$ |
require_once 'simple_include.php'; |
require_once 'pager_include.php'; |
$test = &new GroupTest('Pager POST tests'); |
$test->addTestFile('pager_post_test.php'); |
exit ($test->run(new HTMLReporter()) ? 0 : 1); |
?> |
/branches/v1.0-menes/api/pear/Pager/Pager.php |
---|
New file |
0,0 → 1,193 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ |
/** |
* Contains the Pager class |
* |
* PHP versions 4 and 5 |
* |
* LICENSE: 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 FREEBSD PROJECT OR CONTRIBUTORS 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. |
* |
* @category HTML |
* @package Pager |
* @author Lorenzo Alberton <l dot alberton at quipo dot it> |
* @author Richard Heyes <richard@phpguru.org> |
* @copyright 2003-2006 Lorenzo Alberton, Richard Heyes |
* @license http://www.debian.org/misc/bsd.license BSD License (3 Clause) |
* @version CVS: $Id$ |
* @link http://pear.php.net/package/Pager |
*/ |
/** |
* Pager - Wrapper class for [Sliding|Jumping]-window Pager |
* Usage examples can be found in the PEAR manual |
* |
* @category HTML |
* @package Pager |
* @author Lorenzo Alberton <l dot alberton at quipo dot it> |
* @author Richard Heyes <richard@phpguru.org>, |
* @copyright 2003-2005 Lorenzo Alberton, Richard Heyes |
* @license http://www.php.net/license/3_0.txt PHP License 3.0 |
* @link http://pear.php.net/package/Pager |
*/ |
class Pager |
{ |
// {{{ Pager() |
/** |
* Constructor |
* |
* ------------------------------------------------------------------------- |
* VALID options are (default values are set some lines before): |
* - mode (string): "Jumping" or "Sliding" -window - It determines |
* pager behaviour. See the manual for more details |
* - totalItems (int): # of items to page. |
* - perPage (int): # of items per page. |
* - delta (int): # of page #s to show before and after the current |
* one |
* - linkClass (string): name of CSS class used for link styling. |
* - append (bool): if true pageID is appended as GET value to the |
* URL - if false it is embedded in the URL |
* according to "fileName" specs |
* - httpMethod (string): Specifies the HTTP method to use. Valid values |
* are 'GET' or 'POST' |
* according to "fileName" specs |
* - importQuery (bool): if true (default behaviour), variables and |
* values are imported from the submitted data |
* (query string) and used in the generated links |
* otherwise they're ignored completely |
* - path (string): complete path to the page (without the page name) |
* - fileName (string): name of the page, with a %d if append=true |
* - urlVar (string): name of pageNumber URL var, for example "pageID" |
* - altPrev (string): alt text to display for prev page, on prev link. |
* - altNext (string): alt text to display for next page, on next link. |
* - altPage (string): alt text to display before the page number. |
* - prevImg (string): sth (it can be text such as "<< PREV" or an |
* <img/> as well...) to display instead of "<<". |
* - nextImg (string): same as prevImg, used for NEXT link, instead of |
* the default value, which is ">>". |
* - separator (string): what to use to separate numbers (can be an |
* <img/>, a comma, an hyphen, or whatever. |
* - spacesBeforeSeparator |
* (int): number of spaces before the separator. |
* - firstPagePre (string): |
* string used before first page number (can be an |
* <img/>, a "{", an empty string, or whatever. |
* - firstPageText (string): |
* string used in place of first page number |
* - firstPagePost (string): |
* string used after first page number (can be an |
* <img/>, a "}", an empty string, or whatever. |
* - lastPagePre (string): |
* similar to firstPagePre. |
* - lastPageText (string): |
* similar to firstPageText. |
* - lastPagePost (string): |
* similar to firstPagePost. |
* - spacesAfterSeparator |
* (int): number of spaces after the separator. |
* - firstLinkTitle (string): |
* string used as title in <link rel="first"> tag |
* - lastLinkTitle (string): |
* string used as title in <link rel="last"> tag |
* - prevLinkTitle (string): |
* string used as title in <link rel="prev"> tag |
* - nextLinkTitle (string): |
* string used as title in <link rel="next"> tag |
* - curPageLinkClassName |
* (string): name of CSS class used for current page link. |
* - clearIfVoid(bool): if there's only one page, don't display pager. |
* - extraVars (array): additional URL vars to be added to the querystring |
* - excludeVars (array): URL vars to be excluded in the querystring |
* - itemData (array): array of items to page. |
* - useSessions (bool): if true, number of items to display per page is |
* stored in the $_SESSION[$_sessionVar] var. |
* - closeSession (bool): if true, the session is closed just after R/W. |
* - sessionVar (string): name of the session var for perPage value. |
* A value != from default can be useful when |
* using more than one Pager istance in the page. |
* - pearErrorMode (constant): |
* PEAR_ERROR mode for raiseError(). |
* Default is PEAR_ERROR_RETURN. |
* ------------------------------------------------------------------------- |
* REQUIRED options are: |
* - fileName IF append==false (default is true) |
* - itemData OR totalItems (if itemData is set, totalItems is overwritten) |
* ------------------------------------------------------------------------- |
* |
* @param mixed $options An associative array of option names and |
* their values. |
* @access public |
*/ |
function Pager($options = array()) |
{ |
//this check evaluates to true on 5.0.0RC-dev, |
//so i'm using another one, for now... |
//if (version_compare(phpversion(), '5.0.0') == -1) { |
if (get_class($this) == 'pager') { //php4 lowers class names |
// assign factoried method to this for PHP 4 |
eval('$this = Pager::factory($options);'); |
} else { //php5 is case sensitive |
$msg = 'Pager constructor is deprecated.' |
.' You must use the "Pager::factory($params)" method' |
.' instead of "new Pager($params)"'; |
trigger_error($msg, E_USER_ERROR); |
} |
} |
// }}} |
// {{{ factory() |
/** |
* Return a pager based on $mode and $options |
* |
* @param array $options Optional parameters for the storage class |
* @return object Object Storage object |
* @static |
* @access public |
*/ |
function &factory($options = array()) |
{ |
$mode = (isset($options['mode']) ? ucfirst($options['mode']) : 'Jumping'); |
$classname = 'Pager_' . $mode; |
$classfile = 'Pager' . DIRECTORY_SEPARATOR . $mode . '.php'; |
// Attempt to include a custom version of the named class, but don't treat |
// a failure as fatal. The caller may have already included their own |
// version of the named class. |
if (!class_exists($classname)) { |
include_once $classfile; |
} |
// If the class exists, return a new instance of it. |
if (class_exists($classname)) { |
$pager =& new $classname($options); |
return $pager; |
} |
$null = null; |
return $null; |
} |
// }}} |
} |
?> |
/branches/v1.0-menes/api/pear/XML/Parser/Simple.php |
---|
New file |
0,0 → 1,297 |
<?php |
// |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Author: Stephan Schmidt <schst@php-tools.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: Simple.php,v 1.1 2005-04-18 16:13:31 jpm Exp $ |
/** |
* Simple XML parser class. |
* |
* This class is a simplified version of XML_Parser. |
* In most XML applications the real action is executed, |
* when a closing tag is found. |
* |
* XML_Parser_Simple allows you to just implement one callback |
* for each tag that will receive the tag with its attributes |
* and CData |
* |
* @category XML |
* @package XML_Parser |
* @author Stephan Schmidt <schst@php-tools.net> |
*/ |
/** |
* built on XML_Parser |
*/ |
require_once 'XML/Parser.php'; |
/** |
* Simple XML parser class. |
* |
* This class is a simplified version of XML_Parser. |
* In most XML applications the real action is executed, |
* when a closing tag is found. |
* |
* XML_Parser_Simple allows you to just implement one callback |
* for each tag that will receive the tag with its attributes |
* and CData. |
* |
* <code> |
* require_once '../Parser/Simple.php'; |
* |
* class myParser extends XML_Parser_Simple |
* { |
* function myParser() |
* { |
* $this->XML_Parser_Simple(); |
* } |
* |
* function handleElement($name, $attribs, $data) |
* { |
* printf('handle %s<br>', $name); |
* } |
* } |
* |
* $p = &new myParser(); |
* |
* $result = $p->setInputFile('myDoc.xml'); |
* $result = $p->parse(); |
* </code> |
* |
* @category XML |
* @package XML_Parser |
* @author Stephan Schmidt <schst@php-tools.net> |
*/ |
class XML_Parser_Simple extends XML_Parser |
{ |
/** |
* element stack |
* |
* @access private |
* @var array |
*/ |
var $_elStack = array(); |
/** |
* all character data |
* |
* @access private |
* @var array |
*/ |
var $_data = array(); |
/** |
* element depth |
* |
* @access private |
* @var integer |
*/ |
var $_depth = 0; |
/** |
* Mapping from expat handler function to class method. |
* |
* @var array |
*/ |
var $handler = array( |
'default_handler' => 'defaultHandler', |
'processing_instruction_handler' => 'piHandler', |
'unparsed_entity_decl_handler' => 'unparsedHandler', |
'notation_decl_handler' => 'notationHandler', |
'external_entity_ref_handler' => 'entityrefHandler' |
); |
/** |
* Creates an XML parser. |
* |
* This is needed for PHP4 compatibility, it will |
* call the constructor, when a new instance is created. |
* |
* @param string $srcenc source charset encoding, use NULL (default) to use |
* whatever the document specifies |
* @param string $mode how this parser object should work, "event" for |
* handleElement(), "func" to have it call functions |
* named after elements (handleElement_$name()) |
* @param string $tgenc a valid target encoding |
*/ |
function XML_Parser_Simple($srcenc = null, $mode = 'event', $tgtenc = null) |
{ |
$this->XML_Parser($srcenc, $mode, $tgtenc); |
} |
/** |
* inits the handlers |
* |
* @access private |
*/ |
function _initHandlers() |
{ |
if (!is_object($this->_handlerObj)) { |
$this->_handlerObj = &$this; |
} |
if ($this->mode != 'func' && $this->mode != 'event') { |
return $this->raiseError('Unsupported mode given', XML_PARSER_ERROR_UNSUPPORTED_MODE); |
} |
xml_set_object($this->parser, $this->_handlerObj); |
xml_set_element_handler($this->parser, array(&$this, 'startHandler'), array(&$this, 'endHandler')); |
xml_set_character_data_handler($this->parser, array(&$this, 'cdataHandler')); |
/** |
* set additional handlers for character data, entities, etc. |
*/ |
foreach ($this->handler as $xml_func => $method) { |
if (method_exists($this->_handlerObj, $method)) { |
$xml_func = 'xml_set_' . $xml_func; |
$xml_func($this->parser, $method); |
} |
} |
} |
/** |
* Reset the parser. |
* |
* This allows you to use one parser instance |
* to parse multiple XML documents. |
* |
* @access public |
* @return boolean|object true on success, PEAR_Error otherwise |
*/ |
function reset() |
{ |
$this->_elStack = array(); |
$this->_data = array(); |
$this->_depth = 0; |
$result = $this->_create(); |
if ($this->isError( $result )) { |
return $result; |
} |
return true; |
} |
/** |
* start handler |
* |
* Pushes attributes and tagname onto a stack |
* |
* @access private |
* @final |
* @param resource xml parser resource |
* @param string element name |
* @param array attributes |
*/ |
function startHandler($xp, $elem, &$attribs) |
{ |
array_push($this->_elStack, array( |
'name' => $elem, |
'attribs' => $attribs |
) |
); |
$this->_depth++; |
$this->_data[$this->_depth] = ''; |
} |
/** |
* end handler |
* |
* Pulls attributes and tagname from a stack |
* |
* @access private |
* @final |
* @param resource xml parser resource |
* @param string element name |
*/ |
function endHandler($xp, $elem) |
{ |
$el = array_pop($this->_elStack); |
$data = $this->_data[$this->_depth]; |
$this->_depth--; |
switch ($this->mode) { |
case 'event': |
$this->_handlerObj->handleElement($el['name'], $el['attribs'], $data); |
break; |
case 'func': |
$func = 'handleElement_' . $elem; |
if (strchr($func, '.')) { |
$func = str_replace('.', '_', $func); |
} |
if (method_exists($this->_handlerObj, $func)) { |
call_user_func(array(&$this->_handlerObj, $func), $el['name'], $el['attribs'], $data); |
} |
break; |
} |
} |
/** |
* handle character data |
* |
* @access private |
* @final |
* @param resource xml parser resource |
* @param string data |
*/ |
function cdataHandler($xp, $data) |
{ |
$this->_data[$this->_depth] .= $data; |
} |
/** |
* handle a tag |
* |
* Implement this in your parser |
* |
* @access public |
* @abstract |
* @param string element name |
* @param array attributes |
* @param string character data |
*/ |
function handleElement($name, $attribs, $data) |
{ |
} |
/** |
* get the current tag depth |
* |
* The root tag is in depth 0. |
* |
* @access public |
* @return integer |
*/ |
function getCurrentDepth() |
{ |
return $this->_depth; |
} |
/** |
* add some string to the current ddata. |
* |
* This is commonly needed, when a document is parsed recursively. |
* |
* @access public |
* @param string data to add |
* @return void |
*/ |
function addToData( $data ) |
{ |
$this->_data[$this->_depth] .= $data; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/XML/RSS.php |
---|
New file |
0,0 → 1,359 |
<?php |
// vim: set expandtab tabstop=4 shiftwidth=4 fdm=marker: |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2003 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.02 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Martin Jansen <mj@php.net> | |
// | | |
// +----------------------------------------------------------------------+ |
// |
// $Id: RSS.php,v 1.1 2005-04-18 16:13:31 jpm Exp $ |
// |
require_once 'XML/Parser.php'; |
/** |
* RSS parser class. |
* |
* This class is a parser for Resource Description Framework (RDF) Site |
* Summary (RSS) documents. For more information on RSS see the |
* website of the RSS working group (http://www.purl.org/rss/). |
* |
* @author Martin Jansen <mj@php.net> |
* @version $Revision: 1.1 $ |
* @access public |
*/ |
class XML_RSS extends XML_Parser |
{ |
// {{{ properties |
/** |
* @var string |
*/ |
var $insideTag = ''; |
/** |
* @var string |
*/ |
var $activeTag = ''; |
/** |
* @var array |
*/ |
var $channel = array(); |
/** |
* @var array |
*/ |
var $items = array(); |
/** |
* @var array |
*/ |
var $item = array(); |
/** |
* @var array |
*/ |
var $image = array(); |
/** |
* @var array |
*/ |
var $textinput = array(); |
/** |
* @var array |
*/ |
var $textinputs = array(); |
/** |
* @var array |
*/ |
var $parentTags = array('CHANNEL', 'ITEM', 'IMAGE', 'TEXTINPUT'); |
/** |
* @var array |
*/ |
var $channelTags = array('TITLE', 'LINK', 'DESCRIPTION', 'IMAGE', |
'ITEMS', 'TEXTINPUT'); |
/** |
* @var array |
*/ |
var $itemTags = array('TITLE', 'LINK', 'DESCRIPTION', 'PUBDATE'); |
/** |
* @var array |
*/ |
var $imageTags = array('TITLE', 'URL', 'LINK'); |
var $textinputTags = array('TITLE', 'DESCRIPTION', 'NAME', 'LINK'); |
/** |
* List of allowed module tags |
* |
* Currently Dublin Core Metadata and the blogChannel RSS module |
* are supported. |
* |
* @var array |
*/ |
var $moduleTags = array('DC:TITLE', 'DC:CREATOR', 'DC:SUBJECT', 'DC:DESCRIPTION', |
'DC:PUBLISHER', 'DC:CONTRIBUTOR', 'DC:DATE', 'DC:TYPE', |
'DC:FORMAT', 'DC:IDENTIFIER', 'DC:SOURCE', 'DC:LANGUAGE', |
'DC:RELATION', 'DC:COVERAGE', 'DC:RIGHTS', |
'BLOGCHANNEL:BLOGROLL', 'BLOGCHANNEL:MYSUBSCRIPTIONS', |
'BLOGCHANNEL:MYSUBSCRIPTIONS', 'BLOGCHANNEL:CHANGES'); |
// }}} |
// {{{ Constructor |
/** |
* Constructor |
* |
* @access public |
* @param mixed File pointer or name of the RDF file. |
* @return void |
*/ |
function XML_RSS($handle = '') |
{ |
$this->XML_Parser(); |
if (@is_resource($handle)) { |
$this->setInput($handle); |
} elseif ($handle != '') { |
$this->setInputFile($handle); |
} else { |
$this->raiseError('No filename passed.'); |
} |
} |
// }}} |
// {{{ startHandler() |
/** |
* Start element handler for XML parser |
* |
* @access private |
* @param object XML parser object |
* @param string XML element |
* @param array Attributes of XML tag |
* @return void |
*/ |
function startHandler($parser, $element, $attribs) |
{ |
switch ($element) { |
case 'CHANNEL': |
case 'ITEM': |
case 'IMAGE': |
case 'TEXTINPUT': |
$this->insideTag = $element; |
break; |
default: |
$this->activeTag = $element; |
} |
} |
// }}} |
// {{{ endHandler() |
/** |
* End element handler for XML parser |
* |
* If the end of <item>, <channel>, <image> or <textinput> |
* is reached, this function updates the structure array |
* $this->struct[] and adds the field "type" to this array, |
* that defines the type of the current field. |
* |
* @access private |
* @param object XML parser object |
* @param string |
* @return void |
*/ |
function endHandler($parser, $element) |
{ |
if ($element == $this->insideTag) { |
$this->insideTag = ''; |
$this->struct[] = array_merge(array('type' => strtolower($element)), |
$this->last); |
} |
if ($element == 'ITEM') { |
$this->items[] = $this->item; |
$this->item = ''; |
} |
if ($element == 'IMAGE') { |
$this->images[] = $this->image; |
$this->image = ''; |
} |
if ($element == 'TEXTINPUT') { |
$this->textinputs = $this->textinput; |
$this->textinput = ''; |
} |
$this->activeTag = ''; |
} |
// }}} |
// {{{ cdataHandler() |
/** |
* Handler for character data |
* |
* @access private |
* @param object XML parser object |
* @param string CDATA |
* @return void |
*/ |
function cdataHandler($parser, $cdata) |
{ |
if (in_array($this->insideTag, $this->parentTags)) { |
$tagName = strtolower($this->insideTag); |
$var = $this->{$tagName . 'Tags'}; |
if (in_array($this->activeTag, $var) || |
in_array($this->activeTag, $this->moduleTags)) { |
$this->_add($tagName, strtolower($this->activeTag), |
$cdata); |
} |
} |
} |
// }}} |
// {{{ defaultHandler() |
/** |
* Default handler for XML parser |
* |
* @access private |
* @param object XML parser object |
* @param string CDATA |
* @return void |
*/ |
function defaultHandler($parser, $cdata) |
{ |
return; |
} |
// }}} |
// {{{ _add() |
/** |
* Add element to internal result sets |
* |
* @access private |
* @param string Name of the result set |
* @param string Fieldname |
* @param string Value |
* @return void |
* @see cdataHandler |
*/ |
function _add($type, $field, $value) |
{ |
if (empty($this->{$type}) || empty($this->{$type}[$field])) { |
$this->{$type}[$field] = $value; |
} else { |
$this->{$type}[$field] .= $value; |
} |
$this->last = $this->{$type}; |
} |
// }}} |
// {{{ getStructure() |
/** |
* Get complete structure of RSS file |
* |
* @access public |
* @return array |
*/ |
function getStructure() |
{ |
return (array)$this->struct; |
} |
// }}} |
// {{{ getchannelInfo() |
/** |
* Get general information about current channel |
* |
* This function returns an array containing the information |
* that has been extracted from the <channel>-tag while parsing |
* the RSS file. |
* |
* @access public |
* @return array |
*/ |
function getChannelInfo() |
{ |
return (array)$this->channel; |
} |
// }}} |
// {{{ getItems() |
/** |
* Get items from RSS file |
* |
* This function returns an array containing the set of items |
* that are provided by the RSS file. |
* |
* @access public |
* @return array |
*/ |
function getItems() |
{ |
return (array)$this->items; |
} |
// }}} |
// {{{ getImages() |
/** |
* Get images from RSS file |
* |
* This function returns an array containing the set of images |
* that are provided by the RSS file. |
* |
* @access public |
* @return array |
*/ |
function getImages() |
{ |
return (array)$this->images; |
} |
// }}} |
// {{{ getTextinputs() |
/** |
* Get text input fields from RSS file |
* |
* @access public |
* @return array |
*/ |
function getTextinputs() |
{ |
return (array)$this->textinputs; |
} |
// }}} |
} |
?> |
/branches/v1.0-menes/api/pear/XML/Tree/Node.php |
---|
New file |
0,0 → 1,354 |
<?php |
// |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2002 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.02 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Bernd Römer <berndr@bonn.edu> | |
// | Sebastian Bergmann <sb@sebastian-bergmann.de> | |
// | Christian Kühn <ck@chkuehn.de> (escape xml entities) | |
// +----------------------------------------------------------------------+ |
// |
// $Id: Node.php,v 1.1 2005-04-18 16:13:31 jpm Exp $ |
// |
/** |
* PEAR::XML_Tree_Node |
* |
* @author Bernd Römer <berndr@bonn.edu> |
* @package XML_Tree |
* @version 1.0 16-Aug-2001 |
*/ |
class XML_Tree_Node { |
/** |
* Attributes of this node |
* |
* @var array |
*/ |
var $attributes; |
/** |
* Children of this node |
* |
* @var array |
*/ |
var $children; |
/** |
* Content |
* |
* @var string |
*/ |
var $content; |
/** |
* Name |
* |
* @var string |
*/ |
var $name; |
/** |
* Constructor |
* |
* @param string name |
* @param string content |
* @param array attributes |
*/ |
function XML_Tree_Node($name, $content = '', $attributes = array()) { |
$this->attributes = $attributes; |
$this->children = array(); |
$this->set_content($content); |
$this->name = $name; |
} |
/** |
* Adds a child node to this node. |
* |
* @param mixed child |
* @param string content |
* @param array attributes |
* @return object reference to new child node |
*/ |
function &addChild($child, $content = '', $attributes = array()) { |
$index = sizeof($this->children); |
if (is_object($child)) { |
if (strtolower(get_class($child)) == 'xml_tree_node') { |
$this->children[$index] = $child; |
} |
if (strtolower(get_class($child)) == 'xml_tree' && isset($child->root)) { |
$this->children[$index] = $child->root->get_element(); |
} |
} else { |
$this->children[$index] = new XML_Tree_Node($child, $content, $attributes); |
} |
return $this->children[$index]; |
} |
/** |
* @deprecated |
*/ |
function &add_child($child, $content = '', $attributes = array()) { |
return $this->addChild($child, $content, $attributes); |
} |
/** |
* clone node and all its children (recursive) |
* |
* @return object reference to the clone-node |
*/ |
function &clone() { |
$clone=new XML_Tree_Node($this->name,$this->content,$this->attributes); |
$max_child=count($this->children); |
for($i=0;$i<$max_child;$i++) { |
$clone->children[]=$this->children[$i]->clone(); |
} |
/* for future use.... |
// clone all other vars |
$temp=get_object_vars($this); |
foreach($temp as $varname => $value) |
if (!in_array($varname,array('name','content','attributes','children'))) |
$clone->$varname=$value; |
*/ |
return($clone); |
} |
/** |
* inserts child ($child) to a specified child-position ($pos) |
* |
* @return inserted node |
*/ |
function &insertChild($path,$pos,&$child, $content = '', $attributes = array()) { |
// direct insert of objects useing array_splice() faild :( |
array_splice($this->children,$pos,0,'dummy'); |
if (is_object($child)) { // child offered is not instanziated |
// insert a single node |
if (strtolower(get_class($child)) == 'xml_tree_node') { |
$this->children[$pos]=&$child; |
} |
// insert a tree i.e insert root-element |
if (strtolower(get_class($child)) == 'xml_tree' && isset($child->root)) { |
$this->children[$pos]=$child->root->get_element(); |
} |
} else { // child offered is not instanziated |
$this->children[$pos]=new XML_Tree_Node($child, $content, $attributes); |
} |
return($this); |
} |
/** |
* @deprecated |
*/ |
function &insert_child($path,$pos,&$child, $content = '', $attributes = array()) { |
return $this->insertChild($path,$pos,$child, $content, $attributes); |
} |
/** |
* removes child ($pos) |
* |
* @param integer pos position of child in children-list |
* |
* @return removed node |
*/ |
function &removeChild($pos) { |
// array_splice() instead of a simple unset() to maintain index-integrity |
return(array_splice($this->children,$pos,1)); |
} |
/** |
* @deprecated |
*/ |
function &remove_child($pos) { |
return $this->removeChild($pos); |
} |
/** |
* Returns text representation of this node. |
* |
* @return string xml |
*/ |
function &get() |
{ |
static $deep = -1; |
static $do_ident = true; |
$deep++; |
if ($this->name !== null) { |
$ident = str_repeat(' ', $deep); |
if ($do_ident) { |
$out = $ident . '<' . $this->name; |
} else { |
$out = '<' . $this->name; |
} |
foreach ($this->attributes as $name => $value) { |
$out .= ' ' . $name . '="' . $value . '"'; |
} |
$out .= '>' . $this->content; |
if (sizeof($this->children) > 0) { |
$out .= "\n"; |
foreach ($this->children as $child) { |
$out .= $child->get(); |
} |
} else { |
$ident = ''; |
} |
if ($do_ident) { |
$out .= $ident . '</' . $this->name . ">\n"; |
} else { |
$out .= '</' . $this->name . '>'; |
} |
$do_ident = true; |
} else { |
$out = $this->content; |
$do_ident = false; |
} |
$deep--; |
return $out; |
} |
/** |
* Gets an attribute by its name. |
* |
* @param string name |
* @return string attribute |
*/ |
function getAttribute($name) { |
return $this->attributes[strtolower($name)]; |
} |
/** |
* @deprecated |
*/ |
function get_attribute($name) { |
return $this->getAttribute($name); |
} |
/** |
* Gets an element by its 'path'. |
* |
* @param string path |
* @return object element |
*/ |
function &getElement($path) { |
if (sizeof($path) == 0) { |
return $this; |
} |
$next = array_shift($path); |
return $this->children[$next]->get_element($path); |
} |
/** |
* @deprecated |
*/ |
function &get_element($path) { |
return $this->getElement($path); |
} |
/** |
* Sets an attribute. |
* |
* @param string name |
* @param string value |
*/ |
function setAttribute($name, $value = '') { |
$this->attributes[strtolower($name)] = $value; |
} |
/** |
* @deprecated |
*/ |
function set_attribute($name, $value = '') { |
return $this->setAttribute($name, $value); |
} |
/** |
* Unsets an attribute. |
* |
* @param string name |
*/ |
function unsetAttribute($name) { |
unset($this->attributes[strtolower($name)]); |
} |
/** |
* @deprecated |
*/ |
function unset_attribute($name) { |
return $this->unsetAttribute($name); |
} |
/** |
* |
* |
*/ |
function setContent(&$content) |
{ |
$this->content = $this->_xml_entities($content); |
} |
function set_content(&$content) |
{ |
return $this->setContent($content); |
} |
/** |
* Escape XML entities. |
* |
* @param string xml |
* @return string xml |
* @access private |
*/ |
function _xml_entities($xml) { |
$xml = str_replace(array('ü', 'Ü', 'ö', |
'Ö', 'ä', 'Ä', |
'ß' |
), |
array('ü', 'Ü', 'ö', |
'Ö', 'ä', 'Ä', |
'ß' |
), |
$xml |
); |
$xml = preg_replace(array("/\&([a-z\d\#]+)\;/i", |
"/\&/", |
"/\#\|\|([a-z\d\#]+)\|\|\#/i", |
"/([^a-zA-Z\d\s\<\>\&\;\.\:\=\"\-\/\%\?\!\'\(\)\[\]\{\}\$\#\+\,\@_])/e" |
), |
array("#||\\1||#", |
"&", |
"&\\1;", |
"'&#'.ord('\\1').';'" |
), |
$xml |
); |
return $xml; |
} |
/** |
* Print text representation of XML tree. |
*/ |
function dump() { |
echo $this->get(); |
} |
} |
?> |
/branches/v1.0-menes/api/pear/XML/Parser.php |
---|
New file |
0,0 → 1,684 |
<?php |
// |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Author: Stig Bakken <ssb@fast.no> | |
// | Tomas V.V.Cox <cox@idecnet.com> | |
// | Stephan Schmidt <schst@php-tools.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: Parser.php,v 1.1 2005-04-18 16:13:31 jpm Exp $ |
/** |
* XML Parser class. |
* |
* This is an XML parser based on PHP's "xml" extension, |
* based on the bundled expat library. |
* |
* @category XML |
* @package XML_Parser |
* @author Stig Bakken <ssb@fast.no> |
* @author Tomas V.V.Cox <cox@idecnet.com> |
* @author Stephan Schmidt <schst@php-tools.net> |
*/ |
/** |
* uses PEAR's error handling |
*/ |
require_once 'PEAR.php'; |
/** |
* resource could not be created |
*/ |
define('XML_PARSER_ERROR_NO_RESOURCE', 200); |
/** |
* unsupported mode |
*/ |
define('XML_PARSER_ERROR_UNSUPPORTED_MODE', 201); |
/** |
* invalid encoding was given |
*/ |
define('XML_PARSER_ERROR_INVALID_ENCODING', 202); |
/** |
* specified file could not be read |
*/ |
define('XML_PARSER_ERROR_FILE_NOT_READABLE', 203); |
/** |
* invalid input |
*/ |
define('XML_PARSER_ERROR_INVALID_INPUT', 204); |
/** |
* remote file cannot be retrieved in safe mode |
*/ |
define('XML_PARSER_ERROR_REMOTE', 205); |
/** |
* XML Parser class. |
* |
* This is an XML parser based on PHP's "xml" extension, |
* based on the bundled expat library. |
* |
* Notes: |
* - It requires PHP 4.0.4pl1 or greater |
* - From revision 1.17, the function names used by the 'func' mode |
* are in the format "xmltag_$elem", for example: use "xmltag_name" |
* to handle the <name></name> tags of your xml file. |
* |
* @category XML |
* @package XML_Parser |
* @author Stig Bakken <ssb@fast.no> |
* @author Tomas V.V.Cox <cox@idecnet.com> |
* @author Stephan Schmidt <schst@php-tools.net> |
* @todo create XML_Parser_Namespace to parse documents with namespaces |
* @todo create XML_Parser_Pull |
* @todo Tests that need to be made: |
* - mixing character encodings |
* - a test using all expat handlers |
* - options (folding, output charset) |
* - different parsing modes |
*/ |
class XML_Parser extends PEAR |
{ |
// {{{ properties |
/** |
* XML parser handle |
* |
* @var resource |
* @see xml_parser_create() |
*/ |
var $parser; |
/** |
* File handle if parsing from a file |
* |
* @var resource |
*/ |
var $fp; |
/** |
* Whether to do case folding |
* |
* If set to true, all tag and attribute names will |
* be converted to UPPER CASE. |
* |
* @var boolean |
*/ |
var $folding = true; |
/** |
* Mode of operation, one of "event" or "func" |
* |
* @var string |
*/ |
var $mode; |
/** |
* Mapping from expat handler function to class method. |
* |
* @var array |
*/ |
var $handler = array( |
'character_data_handler' => 'cdataHandler', |
'default_handler' => 'defaultHandler', |
'processing_instruction_handler' => 'piHandler', |
'unparsed_entity_decl_handler' => 'unparsedHandler', |
'notation_decl_handler' => 'notationHandler', |
'external_entity_ref_handler' => 'entityrefHandler' |
); |
/** |
* source encoding |
* |
* @var string |
*/ |
var $srcenc; |
/** |
* target encoding |
* |
* @var string |
*/ |
var $tgtenc; |
/** |
* handler object |
* |
* @var object |
*/ |
var $_handlerObj; |
// }}} |
// {{{ constructor |
/** |
* Creates an XML parser. |
* |
* This is needed for PHP4 compatibility, it will |
* call the constructor, when a new instance is created. |
* |
* @param string $srcenc source charset encoding, use NULL (default) to use |
* whatever the document specifies |
* @param string $mode how this parser object should work, "event" for |
* startelement/endelement-type events, "func" |
* to have it call functions named after elements |
* @param string $tgenc a valid target encoding |
*/ |
function XML_Parser($srcenc = null, $mode = 'event', $tgtenc = null) |
{ |
XML_Parser::__construct($srcenc, $mode, $tgtenc); |
} |
// }}} |
/** |
* PHP5 constructor |
* |
* @param string $srcenc source charset encoding, use NULL (default) to use |
* whatever the document specifies |
* @param string $mode how this parser object should work, "event" for |
* startelement/endelement-type events, "func" |
* to have it call functions named after elements |
* @param string $tgenc a valid target encoding |
*/ |
function __construct($srcenc = null, $mode = 'event', $tgtenc = null) |
{ |
$this->PEAR('XML_Parser_Error'); |
$this->mode = $mode; |
$this->srcenc = $srcenc; |
$this->tgtenc = $tgtenc; |
} |
// }}} |
/** |
* Sets the mode of the parser. |
* |
* Possible modes are: |
* - func |
* - event |
* |
* You can set the mode using the second parameter |
* in the constructor. |
* |
* This method is only needed, when switching to a new |
* mode at a later point. |
* |
* @access public |
* @param string mode, either 'func' or 'event' |
* @return boolean|object true on success, PEAR_Error otherwise |
*/ |
function setMode($mode) |
{ |
if ($mode != 'func' && $mode != 'event') { |
$this->raiseError('Unsupported mode given', XML_PARSER_ERROR_UNSUPPORTED_MODE); |
} |
$this->mode = $mode; |
return true; |
} |
/** |
* Sets the object, that will handle the XML events |
* |
* This allows you to create a handler object independent of the |
* parser object that you are using and easily switch the underlying |
* parser. |
* |
* If no object will be set, XML_Parser assumes that you |
* extend this class and handle the events in $this. |
* |
* @access public |
* @param object object to handle the events |
* @return boolean will always return true |
* @since v1.2.0beta3 |
*/ |
function setHandlerObj(&$obj) |
{ |
$this->_handlerObj = &$obj; |
return true; |
} |
/** |
* Init the element handlers |
* |
* @access private |
*/ |
function _initHandlers() |
{ |
if (!is_resource($this->parser)) { |
return false; |
} |
if (!is_object($this->_handlerObj)) { |
$this->_handlerObj = &$this; |
} |
switch ($this->mode) { |
case 'func': |
xml_set_object($this->parser, $this->_handlerObj); |
xml_set_element_handler($this->parser, array(&$this, 'funcStartHandler'), array(&$this, 'funcEndHandler')); |
break; |
case 'event': |
xml_set_object($this->parser, $this->_handlerObj); |
xml_set_element_handler($this->parser, 'startHandler', 'endHandler'); |
break; |
default: |
return $this->raiseError('Unsupported mode given', XML_PARSER_ERROR_UNSUPPORTED_MODE); |
break; |
} |
/** |
* set additional handlers for character data, entities, etc. |
*/ |
foreach ($this->handler as $xml_func => $method) { |
if (method_exists($this->_handlerObj, $method)) { |
$xml_func = 'xml_set_' . $xml_func; |
$xml_func($this->parser, $method); |
} |
} |
} |
// {{{ _create() |
/** |
* create the XML parser resource |
* |
* Has been moved from the constructor to avoid |
* problems with object references. |
* |
* Furthermore it allows us returning an error |
* if something fails. |
* |
* @access private |
* @return boolean|object true on success, PEAR_Error otherwise |
* |
* @see xml_parser_create |
*/ |
function _create() |
{ |
if ($this->srcenc === null) { |
$xp = @xml_parser_create(); |
} else { |
$xp = @xml_parser_create($this->srcenc); |
} |
if (is_resource($xp)) { |
if ($this->tgtenc !== null) { |
if (!@xml_parser_set_option($xp, XML_OPTION_TARGET_ENCODING, |
$this->tgtenc)) { |
return $this->raiseError('invalid target encoding', XML_PARSER_ERROR_INVALID_ENCODING); |
} |
} |
$this->parser = $xp; |
$result = $this->_initHandlers($this->mode); |
if ($this->isError($result)) { |
return $result; |
} |
xml_parser_set_option($xp, XML_OPTION_CASE_FOLDING, $this->folding); |
return true; |
} |
return $this->raiseError('Unable to create XML parser resource.', XML_PARSER_ERROR_NO_RESOURCE); |
} |
// }}} |
// {{{ reset() |
/** |
* Reset the parser. |
* |
* This allows you to use one parser instance |
* to parse multiple XML documents. |
* |
* @access public |
* @return boolean|object true on success, PEAR_Error otherwise |
*/ |
function reset() |
{ |
$result = $this->_create(); |
if ($this->isError( $result )) { |
return $result; |
} |
return true; |
} |
// }}} |
// {{{ setInputFile() |
/** |
* Sets the input xml file to be parsed |
* |
* @param string Filename (full path) |
* @return resource fopen handle of the given file |
* @throws XML_Parser_Error |
* @see setInput(), setInputString(), parse() |
* @access public |
*/ |
function setInputFile($file) |
{ |
/** |
* check, if file is a remote file |
*/ |
if (eregi('^(http|ftp)://', substr($file, 0, 10))) { |
if (!ini_get('allow_url_fopen')) { |
return $this->raiseError('Remote files cannot be parsed, as safe mode is enabled.', XML_PARSER_ERROR_REMOTE); |
} |
} |
$fp = @fopen($file, 'rb'); |
if (is_resource($fp)) { |
$this->fp = $fp; |
return $fp; |
} |
return $this->raiseError('File could not be opened.', XML_PARSER_ERROR_FILE_NOT_READABLE); |
} |
// }}} |
// {{{ setInputString() |
/** |
* XML_Parser::setInputString() |
* |
* Sets the xml input from a string |
* |
* @param string $data a string containing the XML document |
* @return null |
**/ |
function setInputString($data) |
{ |
$this->fp = $data; |
return null; |
} |
// }}} |
// {{{ setInput() |
/** |
* Sets the file handle to use with parse(). |
* |
* You should use setInputFile() or setInputString() if you |
* pass a string |
* |
* @param mixed $fp Can be either a resource returned from fopen(), |
* a URL, a local filename or a string. |
* @access public |
* @see parse() |
* @uses setInputString(), setInputFile() |
*/ |
function setInput($fp) |
{ |
if (is_resource($fp)) { |
$this->fp = $fp; |
return true; |
} |
// see if it's an absolute URL (has a scheme at the beginning) |
elseif (eregi('^[a-z]+://', substr($fp, 0, 10))) { |
return $this->setInputFile($fp); |
} |
// see if it's a local file |
elseif (file_exists($fp)) { |
return $this->setInputFile($fp); |
} |
// it must be a string |
else { |
$this->fp = $fp; |
return true; |
} |
return $this->raiseError('Illegal input format', XML_PARSER_ERROR_INVALID_INPUT); |
} |
// }}} |
// {{{ parse() |
/** |
* Central parsing function. |
* |
* @return true|object PEAR error returns true on success, or a PEAR_Error otherwise |
* @access public |
*/ |
function parse() |
{ |
/** |
* reset the parser |
*/ |
$result = $this->reset(); |
if ($this->isError($result)) { |
return $result; |
} |
// if $this->fp was fopened previously |
if (is_resource($this->fp)) { |
while ($data = fread($this->fp, 4096)) { |
if (!$this->_parseString($data, feof($this->fp))) { |
$error = &$this->raiseError(); |
$this->free(); |
return $error; |
} |
} |
// otherwise, $this->fp must be a string |
} else { |
if (!$this->_parseString($this->fp, true)) { |
$error = &$this->raiseError(); |
$this->free(); |
return $error; |
} |
} |
$this->free(); |
return true; |
} |
/** |
* XML_Parser::_parseString() |
* |
* @param string $data |
* @param boolean $eof |
* @return bool |
* @access private |
* @see parseString() |
**/ |
function _parseString($data, $eof = false) |
{ |
return xml_parse($this->parser, $data, $eof); |
} |
// }}} |
// {{{ parseString() |
/** |
* XML_Parser::parseString() |
* |
* Parses a string. |
* |
* @param string $data XML data |
* @param boolean $eof If set and TRUE, data is the last piece of data sent in this parser |
* @throws XML_Parser_Error |
* @return Pear Error|true true on success or a PEAR Error |
* @see _parseString() |
*/ |
function parseString($data, $eof = false) |
{ |
if (!isset($this->parser) || !is_resource($this->parser)) { |
$this->reset(); |
} |
if (!$this->_parseString($data, $eof)) { |
$error = &$this->raiseError(); |
$this->free(); |
return $error; |
} |
if ($eof === true) { |
$this->free(); |
} |
return true; |
} |
/** |
* XML_Parser::free() |
* |
* Free the internal resources associated with the parser |
* |
* @return null |
**/ |
function free() |
{ |
if (isset($this->parser) && is_resource($this->parser)) { |
xml_parser_free($this->parser); |
unset( $this->parser ); |
} |
if (isset($this->fp) && is_resource($this->fp)) { |
fclose($this->fp); |
} |
unset($this->fp); |
return null; |
} |
/** |
* XML_Parser::raiseError() |
* |
* Throws a XML_Parser_Error |
* |
* @param string $msg the error message |
* @param integer $ecode the error message code |
* @return XML_Parser_Error |
**/ |
function raiseError($msg = null, $ecode = 0) |
{ |
$msg = !is_null($msg) ? $msg : $this->parser; |
$err = &new XML_Parser_Error($msg, $ecode); |
return parent::raiseError($err); |
} |
// }}} |
// {{{ funcStartHandler() |
function funcStartHandler($xp, $elem, $attribs) |
{ |
$func = 'xmltag_' . $elem; |
if (strchr($func, '.')) { |
$func = str_replace('.', '_', $func); |
} |
if (method_exists($this->_handlerObj, $func)) { |
call_user_func(array(&$this->_handlerObj, $func), $xp, $elem, $attribs); |
} elseif (method_exists($this->_handlerObj, 'xmltag')) { |
call_user_func(array(&$this->_handlerObj, 'xmltag'), $xp, $elem, $attribs); |
} |
} |
// }}} |
// {{{ funcEndHandler() |
function funcEndHandler($xp, $elem) |
{ |
$func = 'xmltag_' . $elem . '_'; |
if (strchr($func, '.')) { |
$func = str_replace('.', '_', $func); |
} |
if (method_exists($this->_handlerObj, $func)) { |
call_user_func(array(&$this->_handlerObj, $func), $xp, $elem); |
} elseif (method_exists($this->_handlerObj, 'xmltag_')) { |
call_user_func(array(&$this->_handlerObj, 'xmltag_'), $xp, $elem); |
} |
} |
// }}} |
// {{{ startHandler() |
/** |
* |
* @abstract |
*/ |
function startHandler($xp, $elem, &$attribs) |
{ |
return NULL; |
} |
// }}} |
// {{{ endHandler() |
/** |
* |
* @abstract |
*/ |
function endHandler($xp, $elem) |
{ |
return NULL; |
} |
// }}}me |
} |
/** |
* error class, replaces PEAR_Error |
* |
* An instance of this class will be returned |
* if an error occurs inside XML_Parser. |
* |
* There are three advantages over using the standard PEAR_Error: |
* - All messages will be prefixed |
* - check for XML_Parser error, using is_a( $error, 'XML_Parser_Error' ) |
* - messages can be generated from the xml_parser resource |
* |
* @package XML_Parser |
* @access public |
* @see PEAR_Error |
*/ |
class XML_Parser_Error extends PEAR_Error |
{ |
// {{{ properties |
/** |
* prefix for all messages |
* |
* @var string |
*/ |
var $error_message_prefix = 'XML_Parser: '; |
// }}} |
// {{{ constructor() |
/** |
* construct a new error instance |
* |
* You may either pass a message or an xml_parser resource as first |
* parameter. If a resource has been passed, the last error that |
* happened will be retrieved and returned. |
* |
* @access public |
* @param string|resource message or parser resource |
* @param integer error code |
* @param integer error handling |
* @param integer error level |
*/ |
function XML_Parser_Error($msgorparser = 'unknown error', $code = 0, $mode = PEAR_ERROR_RETURN, $level = E_USER_NOTICE) |
{ |
if (is_resource($msgorparser)) { |
$code = xml_get_error_code($msgorparser); |
$msgorparser = sprintf('%s at XML input line %d', |
xml_error_string($code), |
xml_get_current_line_number($msgorparser)); |
} |
$this->PEAR_Error($msgorparser, $code, $mode, $level); |
} |
// }}} |
} |
?> |
/branches/v1.0-menes/api/pear/XML/Tree.php |
---|
New file |
0,0 → 1,370 |
<?php |
// |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2002 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.02 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Bernd Römer <berndr@bonn.edu> | |
// | Sebastian Bergmann <sb@sebastian-bergmann.de> | |
// | Tomas V.V.Cox <cox@idecnet.com> (tree mapping from xml file)| |
// +----------------------------------------------------------------------+ |
// |
// $Id: Tree.php,v 1.1 2005-04-18 16:13:31 jpm Exp $ |
// |
require_once 'XML/Parser.php'; |
require_once 'XML/Tree/Node.php'; |
/** |
* PEAR::XML_Tree |
* |
* Purpose |
* |
* Allows for the building of XML data structures |
* using a tree representation, without the need |
* for an extension like DOMXML. |
* |
* Example |
* |
* $tree = new XML_Tree; |
* $root =& $tree->addRoot('root'); |
* $foo =& $root->addChild('foo'); |
* |
* header('Content-Type: text/xml'); |
* $tree->dump(); |
* |
* @author Bernd Römer <berndr@bonn.edu> |
* @package XML |
* @version $Version$ - 1.0 |
*/ |
class XML_Tree extends XML_Parser |
{ |
/** |
* File Handle |
* |
* @var ressource |
*/ |
var $file = NULL; |
/** |
* Filename |
* |
* @var string |
*/ |
var $filename = ''; |
/** |
* Namespace |
* |
* @var array |
*/ |
var $namespace = array(); |
/** |
* Root |
* |
* @var object XML_Tree_Node |
*/ |
var $root = NULL; |
/** |
* XML Version |
* |
* @var string |
*/ |
var $version = '1.0'; |
/** |
* Constructor |
* |
* @param string Filename |
* @param string XML Version |
*/ |
function XML_Tree($filename = '', $version = '1.0') { |
$this->filename = $filename; |
$this->version = $version; |
} |
/** |
* Add root node. |
* |
* @param string $name name of root element |
* @return object XML_Tree_Node reference to root node |
* |
* @access public |
*/ |
function &addRoot($name, $content = '', $attributes = array()) { |
$this->root = new XML_Tree_Node($name, $content, $attributes); |
return $this->root; |
} |
/** |
* @deprecated |
*/ |
function &add_root($name, $content = '', $attributes = array()) { |
return $this->addRoot($name, $content, $attributes); |
} |
/** |
* inserts a child/tree (child) into tree ($path,$pos) and |
* maintains namespace integrity |
* |
* @param array $path path to parent of child to remove |
* @param integer $pos position of child to be inserted in its parents children-list |
* @param mixed $child child-node (by XML_Tree,XML_Node or Name) |
* @param string $content content (text) for new node |
* @param array $attributes attribute-hash for new node |
* |
* @return object XML_Tree_Node inserted child (node) |
* @access public |
*/ |
function &insertChild($path,$pos,$child, $content = '', $attributes = array()) { |
// update namespace to maintain namespace integrity |
$count=count($path); |
foreach($this->namespace as $key => $val) { |
if ((array_slice($val,0,$count)==$path) && ($val[$count]>=$pos)) |
$this->namespace[$key][$count]++; |
} |
$parent=&$this->get_node_by_path($path); |
return($parent->insert_child($pos,$child,$content,$attributes)); |
} |
/** |
* @deprecated |
*/ |
function &insert_child($path,$pos,$child, $content = '', $attributes = array()) { |
return $this->insertChild($path, $child, $content, $attributes); |
} |
/* |
* removes a child ($path,$pos) from tree ($path,$pos) and |
* maintains namespace integrity |
* |
* @param array $path path to parent of child to remove |
* @param integer $pos position of child in parents children-list |
* |
* @return object XML_Tree_Node parent whichs child was removed |
* @access public |
*/ |
function &removeChild($path,$pos) { |
// update namespace to maintain namespace integrity |
$count=count($path); |
foreach($this->namespace as $key => $val) { |
if (array_slice($val,0,$count)==$path) { |
if ($val[$count]==$pos) { unset($this->namespace[$key]); break; } |
if ($val[$count]>$pos) |
$this->namespace[$key][$count]--; |
} |
} |
$parent=&$this->get_node_by_path($path); |
return($parent->remove_child($pos)); |
} |
/** |
* @deprecated |
*/ |
function &remove_child($path, $pos) { |
return $this->removeChild($path, $pos); |
} |
/* |
* Maps a xml file to a objects tree |
* |
* @return mixed The objects tree (XML_tree or an Pear error) |
* @access public |
*/ |
function &getTreeFromFile () |
{ |
$this->folding = false; |
$this->XML_Parser(null, 'event'); |
$err = $this->setInputFile($this->filename); |
if (PEAR::isError($err)) { |
return $err; |
} |
$this->cdata = null; |
$err = $this->parse(); |
if (PEAR::isError($err)) { |
return $err; |
} |
return $this->root; |
} |
function getTreeFromString($str) |
{ |
$this->folding = false; |
$this->XML_Parser(null, 'event'); |
$this->cdata = null; |
$err = $this->parseString($str); |
if (PEAR::isError($err)) { |
return $err; |
} |
return $this->root; |
} |
/** |
* Handler for the xml-data |
* |
* @param mixed $xp ignored |
* @param string $elem name of the element |
* @param array $attribs attributes for the generated node |
* |
* @access private |
*/ |
function startHandler($xp, $elem, &$attribs) |
{ |
// root elem |
if (!isset($this->i)) { |
$this->obj1 =& $this->add_root($elem, null, $attribs); |
$this->i = 2; |
} else { |
// mixed contents |
if (!empty($this->cdata)) { |
$parent_id = 'obj' . ($this->i - 1); |
$parent =& $this->$parent_id; |
$parent->children[] = &new XML_Tree_Node(null, $this->cdata); |
} |
$obj_id = 'obj' . $this->i++; |
$this->$obj_id = &new XML_Tree_Node($elem, null, $attribs); |
} |
$this->cdata = null; |
return null; |
} |
/** |
* Handler for the xml-data |
* |
* @param mixed $xp ignored |
* @param string $elem name of the element |
* |
* @access private |
*/ |
function endHandler($xp, $elem) |
{ |
$this->i--; |
if ($this->i > 1) { |
$obj_id = 'obj' . $this->i; |
// recover the node created in StartHandler |
$node =& $this->$obj_id; |
// mixed contents |
if (count($node->children) > 0) { |
if (trim($this->cdata)) { |
$node->children[] = &new XML_Tree_Node(null, $this->cdata); |
} |
} else { |
$node->set_content($this->cdata); |
} |
$parent_id = 'obj' . ($this->i - 1); |
$parent =& $this->$parent_id; |
// attach the node to its parent node children array |
$parent->children[] = $node; |
} |
$this->cdata = null; |
return null; |
} |
/* |
* The xml character data handler |
* |
* @param mixed $xp ignored |
* @param string $data PCDATA between tags |
* |
* @access private |
*/ |
function cdataHandler($xp, $data) |
{ |
if (trim($data)) { |
$this->cdata .= $data; |
} |
} |
/** |
* Get a copy of this tree. |
* |
* @return object XML_Tree |
* @access public |
*/ |
function clone() { |
$clone=new XML_Tree($this->filename,$this->version); |
$clone->root=$this->root->clone(); |
// clone all other vars |
$temp=get_object_vars($this); |
foreach($temp as $varname => $value) |
if (!in_array($varname,array('filename','version','root'))) |
$clone->$varname=$value; |
return($clone); |
} |
/** |
* Print text representation of XML tree. |
* |
* @access public |
*/ |
function dump() { |
echo $this->get(); |
} |
/** |
* Get text representation of XML tree. |
* |
* @return string XML |
* @access public |
*/ |
function &get() { |
$out = '<?xml version="' . $this->version . "\"?>\n"; |
$out .= $this->root->get(); |
return $out; |
} |
/** |
* Get current namespace. |
* |
* @param string $name namespace |
* @return string |
* |
* @access public |
*/ |
function &getName($name) { |
return $this->root->get_element($this->namespace[$name]); |
} |
/** |
* @deprecated |
*/ |
function &get_name($name) { |
return $this->getName($name); |
} |
/** |
* Register a namespace. |
* |
* @param string $name namespace |
* @param string $path path |
* |
* @access public |
*/ |
function registerName($name, $path) { |
$this->namespace[$name] = $path; |
} |
/** |
* @deprecated |
*/ |
function register_name($name, $path) { |
return $this->registerName($name, $path); |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Auth/Container.php |
---|
New file |
0,0 → 1,177 |
<?php |
// |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2003 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.02 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Martin Jansen <mj@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: Container.php,v 1.1 2005-03-30 08:50:33 jpm Exp $ |
// |
define("AUTH_METHOD_NOT_SUPPORTED", -4); |
/** |
* Storage class for fetching login data |
* |
* @author Martin Jansen <mj@php.net> |
* @package Auth |
*/ |
class Auth_Container |
{ |
/** |
* User that is currently selected from the storage container. |
* |
* @access public |
*/ |
var $activeUser = ""; |
// {{{ Constructor |
/** |
* Constructor |
* |
* Has to be overwritten by each storage class |
* |
* @access public |
*/ |
function Auth_Container() |
{ |
} |
// }}} |
// {{{ fetchData() |
/** |
* Fetch data from storage container |
* |
* Has to be overwritten by each storage class |
* |
* @access public |
*/ |
function fetchData() |
{ |
} |
// }}} |
// {{{ verifyPassword() |
/** |
* Crypt and verfiy the entered password |
* |
* @param string Entered password |
* @param string Password from the data container (usually this password |
* is already encrypted. |
* @param string Type of algorithm with which the password from |
* the container has been crypted. (md5, crypt etc.) |
* Defaults to "md5". |
* @return bool True, if the passwords match |
*/ |
function verifyPassword($password1, $password2, $cryptType = "md5") |
{ |
switch ($cryptType) { |
case "crypt" : |
return (($password2 == "**" . $password1) || |
(crypt($password1, $password2) == $password2) |
); |
break; |
case "none" : |
return ($password1 == $password2); |
break; |
case "md5" : |
return (md5($password1) == $password2); |
break; |
default : |
if (function_exists($cryptType)) { |
return ($cryptType($password1) == $password2); |
} |
else if (method_exists($this,$cryptType)) { |
return ($this->$cryptType($password1) == $password2); |
} else { |
return false; |
} |
break; |
} |
} |
// }}} |
// {{{ listUsers() |
/** |
* List all users that are available from the storage container |
*/ |
function listUsers() |
{ |
return AUTH_METHOD_NOT_SUPPORTED; |
} |
/** |
* Returns a user assoc array |
* |
* Containers which want should overide this |
* |
* @param string The username |
*/ |
function getUser($username) |
{ |
$users = $this->listUsers(); |
if($users === AUTH_METHOD_NOT_SUPPORTED){ |
return(AUTH_METHOD_NOT_SUPPORTED); |
} |
for($i=0;$c = count($users),$i<$c;$i++){ |
if($users[$i]['username'] == $username){ |
return($users[$i]); |
} |
} |
return(false); |
} |
// }}} |
// {{{ addUser() |
/** |
* Add a new user to the storage container |
* |
* @param string Username |
* @param string Password |
* @param array Additional information |
* |
* @return boolean |
*/ |
function addUser($username, $password, $additional=null) |
{ |
return AUTH_METHOD_NOT_SUPPORTED; |
} |
// }}} |
// {{{ removeUser() |
/** |
* Remove user from the storage container |
* |
* @param string Username |
*/ |
function removeUser($username) |
{ |
return AUTH_METHOD_NOT_SUPPORTED; |
} |
// }}} |
} |
?> |
/branches/v1.0-menes/api/pear/Auth/Container/MDB.php |
---|
New file |
0,0 → 1,392 |
<?php |
// |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.02 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Author: Lorenzo Alberton <l.alberton@quipo.it> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: MDB.php,v 1.1 2005-03-30 08:50:33 jpm Exp $ |
// |
require_once 'Auth/Container.php'; |
require_once 'MDB.php'; |
/** |
* Storage driver for fetching login data from a database |
* |
* This storage driver can use all databases which are supported |
* by the PEAR MDB abstraction layer to fetch login data. |
* |
* @author Lorenzo Alberton <l.alberton@quipo.it> |
* @package Auth |
* @version $Revision: 1.1 $ |
*/ |
class Auth_Container_MDB extends Auth_Container |
{ |
/** |
* Additional options for the storage container |
* @var array |
*/ |
var $options = array(); |
/** |
* DB object |
* @var object |
*/ |
var $db = null; |
var $dsn = ''; |
/** |
* User that is currently selected from the DB. |
* @var string |
*/ |
var $activeUser = ''; |
// {{{ Constructor |
/** |
* Constructor of the container class |
* |
* Initate connection to the database via PEAR::DB |
* |
* @param string Connection data or DB object |
* @return object Returns an error object if something went wrong |
*/ |
function Auth_Container_MDB($dsn) |
{ |
$this->_setDefaults(); |
if (is_array($dsn)) { |
$this->_parseOptions($dsn); |
if (empty($this->options['dsn'])) { |
PEAR::raiseError('No connection parameters specified!'); |
} |
} else { |
$this->options['dsn'] = $dsn; |
} |
} |
// }}} |
// {{{ _connect() |
/** |
* Connect to database by using the given DSN string |
* |
* @access private |
* @param string DSN string |
* @return mixed Object on error, otherwise bool |
*/ |
function _connect($dsn) |
{ |
if (is_string($dsn) || is_array($dsn)) { |
$this->db =& MDB::Connect($dsn); |
} elseif (get_parent_class($dsn) == "mdb_common") { |
$this->db = $dsn; |
} elseif (is_object($dsn) && MDB::isError($dsn)) { |
return PEAR::raiseError($dsn->getMessage(), $dsn->code); |
} else { |
return PEAR::raiseError('The given dsn was not valid in file ' . __FILE__ . ' at line ' . __LINE__, |
41, |
PEAR_ERROR_RETURN, |
null, |
null |
); |
} |
if (MDB::isError($this->db) || PEAR::isError($this->db)) { |
return PEAR::raiseError($this->db->getMessage(), $this->db->code); |
} else { |
return true; |
} |
} |
// }}} |
// {{{ _prepare() |
/** |
* Prepare database connection |
* |
* This function checks if we have already opened a connection to |
* the database. If that's not the case, a new connection is opened. |
* |
* @access private |
* @return mixed True or a DB error object. |
*/ |
function _prepare() |
{ |
return $this->_connect($this->options['dsn']); |
} |
// }}} |
// {{{ query() |
/** |
* Prepare query to the database |
* |
* This function checks if we have already opened a connection to |
* the database. If that's not the case, a new connection is opened. |
* After that the query is passed to the database. |
* |
* @access public |
* @param string Query string |
* @return mixed a MDB_result object or MDB_OK on success, a MDB |
* or PEAR error on failure |
*/ |
function query($query) |
{ |
$err = $this->_prepare(); |
if ($err !== true) { |
return $err; |
} |
return $this->db->query($query); |
} |
// }}} |
// {{{ _setDefaults() |
/** |
* Set some default options |
* |
* @access private |
* @return void |
*/ |
function _setDefaults() |
{ |
$this->options['table'] = 'auth'; |
$this->options['usernamecol'] = 'username'; |
$this->options['passwordcol'] = 'password'; |
$this->options['dsn'] = ''; |
$this->options['db_fields'] = ''; |
$this->options['cryptType'] = 'md5'; |
} |
// }}} |
// {{{ _parseOptions() |
/** |
* Parse options passed to the container class |
* |
* @access private |
* @param array |
*/ |
function _parseOptions($array) |
{ |
foreach ($array as $key => $value) { |
if (isset($this->options[$key])) { |
$this->options[$key] = $value; |
} |
} |
// Include additional fields if they exist |
if (!empty($this->options['db_fields'])) { |
if (is_array($this->options['db_fields'])) { |
$this->options['db_fields'] = join($this->options['db_fields'], ', '); |
} |
$this->options['db_fields'] = ', ' . $this->options['db_fields']; |
} |
} |
// }}} |
// {{{ fetchData() |
/** |
* Get user information from database |
* |
* This function uses the given username to fetch |
* the corresponding login data from the database |
* table. If an account that matches the passed username |
* and password is found, the function returns true. |
* Otherwise it returns false. |
* |
* @param string Username |
* @param string Password |
* @return mixed Error object or boolean |
*/ |
function fetchData($username, $password) |
{ |
// Prepare for a database query |
$err = $this->_prepare(); |
if ($err !== true) { |
return PEAR::raiseError($err->getMessage(), $err->getCode()); |
} |
// Find if db_fileds contains a *, i so assume all col are selected |
if (strstr($this->options['db_fields'], '*')) { |
$sql_from = '*'; |
} else{ |
$sql_from = $this->options['usernamecol'] . ', '. $this->options['passwordcol'] . $this->options['db_fields']; |
} |
$query = sprintf("SELECT %s FROM %s WHERE %s = %s", |
$sql_from, |
$this->options['table'], |
$this->options['usernamecol'], |
$this->db->getTextValue($username) |
); |
$res = $this->db->getRow($query, null, null, null, MDB_FETCHMODE_ASSOC); |
if (MDB::isError($res) || PEAR::isError($res)) { |
return PEAR::raiseError($res->getMessage(), $res->getCode()); |
} |
if (!is_array($res)) { |
$this->activeUser = ''; |
return false; |
} |
if ($this->verifyPassword(trim($password, "\r\n"), |
trim($res[$this->options['passwordcol']], "\r\n"), |
$this->options['cryptType'])) { |
// Store additional field values in the session |
foreach ($res as $key => $value) { |
if ($key == $this->options['passwordcol'] || |
$key == $this->options['usernamecol']) { |
continue; |
} |
// Use reference to the auth object if exists |
// This is because the auth session variable can change so a static call to setAuthData does not make sence |
if(is_object($this->_auth_obj)){ |
$this->_auth_obj->setAuthData($key, $value); |
} else { |
Auth::setAuthData($key, $value); |
} |
} |
return true; |
} |
$this->activeUser = $res[$this->options['usernamecol']]; |
return false; |
} |
// }}} |
// {{{ listUsers() |
function listUsers() |
{ |
$err = $this->_prepare(); |
if ($err !== true) { |
return PEAR::raiseError($err->getMessage(), $err->getCode()); |
} |
$retVal = array(); |
// Find if db_fileds contains a *, i so assume all col are selected |
if (strstr($this->options['db_fields'], '*')) { |
$sql_from = '*'; |
} else{ |
$sql_from = $this->options['db_fields']; |
} |
$query = sprintf('SELECT %s FROM %s', |
$sql_from, |
$this->options['table'] |
); |
$res = $this->db->getAll($query, null, null, null, MDB_FETCHMODE_ASSOC); |
if (MDB::isError($res)) { |
return PEAR::raiseError($res->getMessage(), $res->getCode()); |
} else { |
foreach ($res as $user) { |
$user['username'] = $user[$this->options['usernamecol']]; |
$retVal[] = $user; |
} |
} |
return $retVal; |
} |
// }}} |
// {{{ addUser() |
/** |
* Add user to the storage container |
* |
* @access public |
* @param string Username |
* @param string Password |
* @param mixed Additional information that are stored in the DB |
* |
* @return mixed True on success, otherwise error object |
*/ |
function addUser($username, $password, $additional = "") |
{ |
if (function_exists($this->options['cryptType'])) { |
$cryptFunction = $this->options['cryptType']; |
} else { |
$cryptFunction = 'md5'; |
} |
$additional_key = ''; |
$additional_value = ''; |
if (is_array($additional)) { |
foreach ($additional as $key => $value) { |
$additional_key .= ', ' . $key; |
$additional_value .= ', ' . $this->db->getTextValue($value); |
} |
} |
$query = sprintf("INSERT INTO %s (%s, %s%s) VALUES (%s, %s%s)", |
$this->options['table'], |
$this->options['usernamecol'], |
$this->options['passwordcol'], |
$additional_key, |
$this->db->getTextValue($username), |
$this->db->getTextValue($cryptFunction($password)), |
$additional_value |
); |
$res = $this->query($query); |
if (MDB::isError($res)) { |
return PEAR::raiseError($res->getMessage(), $res->code); |
} else { |
return true; |
} |
} |
// }}} |
// {{{ removeUser() |
/** |
* Remove user from the storage container |
* |
* @access public |
* @param string Username |
* |
* @return mixed True on success, otherwise error object |
*/ |
function removeUser($username) |
{ |
$query = sprintf("DELETE FROM %s WHERE %s = %s", |
$this->options['table'], |
$this->options['usernamecol'], |
$this->db->getTextValue($username) |
); |
$res = $this->query($query); |
if (MDB::isError($res)) { |
return PEAR::raiseError($res->getMessage(), $res->code); |
} else { |
return true; |
} |
} |
// }}} |
} |
?> |
/branches/v1.0-menes/api/pear/Auth/Container/SOAP.php |
---|
New file |
0,0 → 1,170 |
<?php |
// |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2002 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.02 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Bruno Pedro <bpedro@co.sapo.pt> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: SOAP.php,v 1.1 2005-03-30 08:50:33 jpm Exp $ |
// |
require_once "Auth/Container.php"; |
require_once "PEAR.php"; |
require_once 'SOAP/Client.php'; |
/** |
* Storage driver for fetching login data from SOAP |
* |
* This class takes one parameter (options), where |
* you specify the following fields: endpoint, namespace, |
* method, encoding, usernamefield and passwordfield. |
* |
* You can use specify features of your SOAP service |
* by providing its parameters in an associative manner by |
* using the '_features' array through the options parameter. |
* |
* The 'matchpassword' option should be set to false if your |
* webservice doesn't return (username,password) pairs, but |
* instead returns error when the login is invalid. |
* |
* Example usage: |
* |
* <?php |
* |
* ... |
* |
* $options = array ( |
* 'endpoint' => 'http://your.soap.service/endpoint', |
* 'namespace' => 'urn:/Your/Namespace', |
* 'method' => 'get', |
* 'encoding' => 'UTF-8', |
* 'usernamefield' => 'login', |
* 'passwordfield' => 'password', |
* 'matchpasswords' => false, |
* '_features' => array ( |
* 'example_feature' => 'example_value', |
* 'another_example' => '' |
* ) |
* ); |
* $auth = new Auth('SOAP', $options, 'loginFunction'); |
* $auth->start(); |
* |
* ... |
* |
* ?> |
* |
* @author Bruno Pedro <bpedro@co.sapo.pt> |
* @package Auth |
* @version $Revision: 1.1 $ |
*/ |
class Auth_Container_SOAP extends Auth_Container |
{ |
/** |
* Required options for the class |
* @var array |
* @access private |
*/ |
var $_requiredOptions = array('endpoint', 'namespace', 'method', 'encoding', 'usernamefield', 'passwordfield'); |
/** |
* Options for the class |
* @var array |
* @access private |
*/ |
var $_options = array(); |
/** |
* Optional SOAP features |
* @var array |
* @access private |
*/ |
var $_features = array(); |
/** |
* The SOAP response |
* @var array |
* @access public |
*/ |
var $soapResponse = array(); |
/** |
* Constructor of the container class |
* |
* @param $options, associative array with endpoint, namespace, method, |
* usernamefield, passwordfield and optional features |
*/ |
function Auth_Container_SOAP($options) |
{ |
$this->_options = $options; |
if (!isset($this->_options['matchpasswords'])) { |
$this->_options['matchpasswords'] = true; |
} |
if (!empty($this->_options['_features'])) { |
$this->_features = $this->_options['_features']; |
unset($this->_options['_features']); |
} |
} |
/** |
* Fetch data from SOAP service |
* |
* Requests the SOAP service for the given username/password |
* combination. |
* |
* @param string Username |
* @param string Password |
* @return mixed Returns the SOAP response or false if something went wrong |
*/ |
function fetchData($username, $password) |
{ |
// check if all required options are set |
if (array_intersect($this->_requiredOptions, array_keys($this->_options)) != $this->_requiredOptions) { |
return false; |
} else { |
// create a SOAP client and set encoding |
$soapClient = new SOAP_Client($this->_options['endpoint']); |
$soapClient->setEncoding($this->_options['encoding']); |
} |
// assign username and password fields |
$usernameField = new SOAP_Value($this->_options['usernamefield'],'string', $username); |
$passwordField = new SOAP_Value($this->_options['passwordfield'],'string', $password); |
$SOAPParams = array($usernameField, $passwordField); |
// assign optional features |
foreach ($this->_features as $fieldName => $fieldValue) { |
$SOAPParams[] = new SOAP_Value($fieldName, 'string', $fieldValue); |
} |
// make SOAP call |
$this->soapResponse = $soapClient->call( |
$this->_options['method'], |
$SOAPParams, |
array('namespace' => $this->_options['namespace']) |
); |
if (!PEAR::isError($this->soapResponse)) { |
if ($this->_options['matchpasswords']) { |
// check if passwords match |
if ($password == $this->soapResponse->{$this->_options['passwordfield']}) { |
return true; |
} else { |
return false; |
} |
} else { |
return true; |
} |
} else { |
return false; |
} |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Auth/Container/SMBPasswd.php |
---|
New file |
0,0 → 1,134 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2003 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.02 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Michael Bretterklieber <michael@bretterklieber.com> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: SMBPasswd.php,v 1.1 2005-03-30 08:50:33 jpm Exp $ |
// |
require_once "File/SMBPasswd.php"; |
require_once "Auth/Container.php"; |
require_once "PEAR.php"; |
/** |
* Storage driver for fetching login data from an SAMBA smbpasswd file. |
* |
* This storage container can handle SAMBA smbpasswd files. |
* |
* Example: |
* $a = new Auth("SMBPasswd", '/usr/local/private/smbpasswd'); |
* $a->start(); |
* if ($a->getAuth()) { |
* printf ("AUTH OK<br>\n"); |
* $a->logout(); |
* } |
* |
* @author Michael Bretterklieber <michael@bretterklieber.com> |
* @package Auth |
* @version $Revision: 1.1 $ |
*/ |
class Auth_Container_SMBPasswd extends Auth_Container |
{ |
/** |
* File_SMBPasswd object |
* @var object |
*/ |
var $pwfile; |
// {{{ Constructor |
/** |
* Constructor of the container class |
* |
* @param $filename string filename for a passwd type file |
* @return object Returns an error object if something went wrong |
*/ |
function Auth_Container_SMBPasswd($filename) |
{ |
$this->pwfile = new File_SMBPasswd($filename,0); |
if (!$this->pwfile->load()) { |
PEAR::raiseError("Error while reading file contents.", 41, PEAR_ERROR_DIE); |
return; |
} |
} |
// }}} |
// {{{ fetchData() |
/** |
* Get user information from pwfile |
* |
* @param string Username |
* @param string Password |
* @return boolean |
*/ |
function fetchData($username, $password) |
{ |
return $this->pwfile->verifyAccount($username, $password); |
} |
// }}} |
// {{{ listUsers() |
function listUsers() |
{ |
return $this->pwfile->getAccounts(); |
} |
// }}} |
// {{{ addUser() |
/** |
* Add a new user to the storage container |
* |
* @param string Username |
* @param string Password |
* @param array Additional information |
* |
* @return boolean |
*/ |
function addUser($username, $password, $additional = '') |
{ |
$res = $this->pwfile->addUser($user, $additional['userid'], $pass); |
if ($res === true) { |
return $this->pwfile->save(); |
} |
return $res; |
} |
// }}} |
// {{{ removeUser() |
/** |
* Remove user from the storage container |
* |
* @param string Username |
*/ |
function removeUser($username) |
{ |
$res = $this->pwfile->delUser($username); |
if ($res === true) { |
return $this->pwfile->save(); |
} |
return $res; |
} |
// }}} |
} |
?> |
/branches/v1.0-menes/api/pear/Auth/Container/DB.php |
---|
New file |
0,0 → 1,409 |
<?php |
// |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.02 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Martin Jansen <mj@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: DB.php,v 1.1 2005-03-30 08:50:33 jpm Exp $ |
// |
require_once 'Auth/Container.php'; |
require_once 'DB.php'; |
/** |
* Storage driver for fetching login data from a database |
* |
* This storage driver can use all databases which are supported |
* by the PEAR DB abstraction layer to fetch login data. |
* |
* @author Martin Jansen <mj@php.net> |
* @package Auth |
* @version $Revision: 1.1 $ |
*/ |
class Auth_Container_DB extends Auth_Container |
{ |
/** |
* Additional options for the storage container |
* @var array |
*/ |
var $options = array(); |
/** |
* DB object |
* @var object |
*/ |
var $db = null; |
var $dsn = ''; |
/** |
* User that is currently selected from the DB. |
* @var string |
*/ |
var $activeUser = ''; |
// {{{ Constructor |
/** |
* Constructor of the container class |
* |
* Initate connection to the database via PEAR::DB |
* |
* @param string Connection data or DB object |
* @return object Returns an error object if something went wrong |
*/ |
function Auth_Container_DB($dsn) |
{ |
$this->_setDefaults(); |
if (is_array($dsn)) { |
$this->_parseOptions($dsn); |
if (empty($this->options['dsn'])) { |
PEAR::raiseError('No connection parameters specified!'); |
} |
} else { |
$this->options['dsn'] = $dsn; |
} |
} |
// }}} |
// {{{ _connect() |
/** |
* Connect to database by using the given DSN string |
* |
* @access private |
* @param string DSN string |
* @return mixed Object on error, otherwise bool |
*/ |
function _connect($dsn) |
{ |
if (is_string($dsn) || is_array($dsn)) { |
$this->db = DB::Connect($dsn); |
} elseif (get_parent_class($dsn) == "db_common") { |
$this->db = $dsn; |
} elseif (DB::isError($dsn)) { |
return PEAR::raiseError($dsn->getMessage(), $dsn->getCode()); |
} else { |
return PEAR::raiseError('The given dsn was not valid in file ' . __FILE__ . ' at line ' . __LINE__, |
41, |
PEAR_ERROR_RETURN, |
null, |
null |
); |
} |
if (DB::isError($this->db) || PEAR::isError($this->db)) { |
return PEAR::raiseError($this->db->getMessage(), $this->db->getCode()); |
} else { |
return true; |
} |
} |
// }}} |
// {{{ _prepare() |
/** |
* Prepare database connection |
* |
* This function checks if we have already opened a connection to |
* the database. If that's not the case, a new connection is opened. |
* |
* @access private |
* @return mixed True or a DB error object. |
*/ |
function _prepare() |
{ |
if (!DB::isConnection($this->db)) { |
$res = $this->_connect($this->options['dsn']); |
if(DB::isError($res) || PEAR::isError($res)){ |
return $res; |
} |
} |
return true; |
} |
// }}} |
// {{{ query() |
/** |
* Prepare query to the database |
* |
* This function checks if we have already opened a connection to |
* the database. If that's not the case, a new connection is opened. |
* After that the query is passed to the database. |
* |
* @access public |
* @param string Query string |
* @return mixed a DB_result object or DB_OK on success, a DB |
* or PEAR error on failure |
*/ |
function query($query) |
{ |
$err = $this->_prepare(); |
if ($err !== true) { |
return $err; |
} |
return $this->db->query($query); |
} |
// }}} |
// {{{ _setDefaults() |
/** |
* Set some default options |
* |
* @access private |
* @return void |
*/ |
function _setDefaults() |
{ |
$this->options['table'] = 'auth'; |
$this->options['usernamecol'] = 'username'; |
$this->options['passwordcol'] = 'password'; |
$this->options['dsn'] = ''; |
$this->options['db_fields'] = ''; |
$this->options['cryptType'] = 'md5'; |
} |
// }}} |
// {{{ _parseOptions() |
/** |
* Parse options passed to the container class |
* |
* @access private |
* @param array |
*/ |
function _parseOptions($array) |
{ |
foreach ($array as $key => $value) { |
if (isset($this->options[$key])) { |
$this->options[$key] = $value; |
} |
} |
/* Include additional fields if they exist */ |
if(!empty($this->options['db_fields'])){ |
if(is_array($this->options['db_fields'])){ |
$this->options['db_fields'] = join($this->options['db_fields'], ', '); |
} |
$this->options['db_fields'] = ', '.$this->options['db_fields']; |
} |
} |
// }}} |
// {{{ fetchData() |
/** |
* Get user information from database |
* |
* This function uses the given username to fetch |
* the corresponding login data from the database |
* table. If an account that matches the passed username |
* and password is found, the function returns true. |
* Otherwise it returns false. |
* |
* @param string Username |
* @param string Password |
* @return mixed Error object or boolean |
*/ |
function fetchData($username, $password) |
{ |
// Prepare for a database query |
$err = $this->_prepare(); |
if ($err !== true) { |
return PEAR::raiseError($err->getMessage(), $err->getCode()); |
} |
// Find if db_fileds contains a *, i so assume all col are selected |
if(strstr($this->options['db_fields'], '*')){ |
$sql_from = "*"; |
} |
else{ |
$sql_from = $this->options['usernamecol'] . ", ".$this->options['passwordcol'].$this->options['db_fields']; |
} |
/** |
Old Style, removed to go around the oci8 |
problem |
See bug 206 |
http://pear.php.net/bugs/bug.php?id=206 |
$query = "SELECT ! FROM ! WHERE ! = ?"; |
$query_params = array( |
$sql_from, |
$this->options['table'], |
$this->options['usernamecol'], |
$username |
); |
*/ |
$query = "SELECT ".$sql_from. |
" FROM ".$this->options['table']. |
" WHERE ".$this->options['usernamecol']." = '".$this->db->quoteString($username)."'"; |
$res = $this->db->getRow($query, null, DB_FETCHMODE_ASSOC); |
if (DB::isError($res)) { |
return PEAR::raiseError($res->getMessage(), $res->getCode()); |
} |
if (!is_array($res)) { |
$this->activeUser = ''; |
return false; |
} |
if ($this->verifyPassword(trim($password, "\r\n"), |
trim($res[$this->options['passwordcol']], "\r\n"), |
$this->options['cryptType'])) { |
// Store additional field values in the session |
foreach ($res as $key => $value) { |
if ($key == $this->options['passwordcol'] || |
$key == $this->options['usernamecol']) { |
continue; |
} |
// Use reference to the auth object if exists |
// This is because the auth session variable can change so a static call to setAuthData does not make sence |
if(is_object($this->_auth_obj)){ |
$this->_auth_obj->setAuthData($key, $value); |
} else { |
Auth::setAuthData($key, $value); |
} |
} |
return true; |
} |
$this->activeUser = $res[$this->options['usernamecol']]; |
return false; |
} |
// }}} |
// {{{ listUsers() |
function listUsers() |
{ |
$err = $this->_prepare(); |
if ($err !== true) { |
return PEAR::raiseError($err->getMessage(), $err->getCode()); |
} |
$retVal = array(); |
// Find if db_fileds contains a *, i so assume all col are selected |
if(strstr($this->options['db_fields'], '*')){ |
$sql_from = "*"; |
} |
else{ |
$sql_from = $this->options['usernamecol'] . ", ".$this->options['passwordcol'].$this->options['db_fields']; |
} |
$query = sprintf("SELECT %s FROM %s", |
$sql_from, |
$this->options['table'] |
); |
$res = $this->db->getAll($query, null, DB_FETCHMODE_ASSOC); |
if (DB::isError($res)) { |
return PEAR::raiseError($res->getMessage(), $res->getCode()); |
} else { |
foreach ($res as $user) { |
$user['username'] = $user[$this->options['usernamecol']]; |
$retVal[] = $user; |
} |
} |
return $retVal; |
} |
// }}} |
// {{{ addUser() |
/** |
* Add user to the storage container |
* |
* @access public |
* @param string Username |
* @param string Password |
* @param mixed Additional information that are stored in the DB |
* |
* @return mixed True on success, otherwise error object |
*/ |
function addUser($username, $password, $additional = "") |
{ |
if (function_exists($this->options['cryptType'])) { |
$cryptFunction = $this->options['cryptType']; |
} else { |
$cryptFunction = 'md5'; |
} |
$additional_key = ''; |
$additional_value = ''; |
if (is_array($additional)) { |
foreach ($additional as $key => $value) { |
$additional_key .= ', ' . $key; |
$additional_value .= ", '" . $value . "'"; |
} |
} |
$query = sprintf("INSERT INTO %s (%s, %s%s) VALUES ('%s', '%s'%s)", |
$this->options['table'], |
$this->options['usernamecol'], |
$this->options['passwordcol'], |
$additional_key, |
$username, |
$cryptFunction($password), |
$additional_value |
); |
$res = $this->query($query); |
if (DB::isError($res)) { |
return PEAR::raiseError($res->getMessage(), $res->getCode()); |
} else { |
return true; |
} |
} |
// }}} |
// {{{ removeUser() |
/** |
* Remove user from the storage container |
* |
* @access public |
* @param string Username |
* |
* @return mixed True on success, otherwise error object |
*/ |
function removeUser($username) |
{ |
$query = sprintf("DELETE FROM %s WHERE %s = '%s'", |
$this->options['table'], |
$this->options['usernamecol'], |
$username |
); |
$res = $this->query($query); |
if (DB::isError($res)) { |
return PEAR::raiseError($res->getMessage(), $res->getCode()); |
} else { |
return true; |
} |
} |
// }}} |
} |
?> |
/branches/v1.0-menes/api/pear/Auth/Container/IMAP.php |
---|
New file |
0,0 → 1,170 |
<?php |
// |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2003 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.02 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Jeroen Houben <jeroen@terena.nl> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: IMAP.php,v 1.1 2005-03-30 08:50:33 jpm Exp $ |
// |
require_once "Auth/Container.php"; |
require_once "PEAR.php"; |
/** |
* Storage driver for fetching login data from an IMAP server |
* |
* This class is based on LDAP containers, but it very simple. |
* By default it connects to localhost:143 |
* The constructor will first check if the host:port combination is |
* actually reachable. This behaviour can be disabled. |
* It then tries to create an IMAP stream (without opening a mailbox) |
* If you wish to pass extended options to the connections, you may |
* do so by specifying protocol options. |
* |
* To use this storage containers, you have to use the |
* following syntax: |
* |
* <?php |
* ... |
* $params = array( |
* 'host' => 'mail.example.com', |
* 'port' => 143, |
* ); |
* $myAuth = new Auth('IMAP', $params); |
* .... |
* |
* By default we connect without any protocol options set. However, some |
* servers require you to connect with the notls or norsh options set. |
* To do this you need to add the following value to the params array: |
* 'baseDSN' => '/imap/notls/norsh' |
* |
* To connect to an SSL IMAP server: |
* 'baseDSN' => '/imap/ssl' |
* |
* To connect to an SSL IMAP server with a self-signed certificate: |
* 'baseDSN' => '/imap/ssl/novalidate-cert' |
* |
* Further options may be available and can be found on the php site at |
* http://www.php.net/manual/function.imap-open.php |
* |
*/ |
/* |
* |
* @author Jeroen Houben <jeroen@terena.nl>, Cipriano Groenendal <cipri@campai.nl> |
* @package Auth |
* @version $Revision: 1.1 $ |
*/ |
class Auth_Container_IMAP extends Auth_Container |
{ |
/** |
* Options for the class |
* @var array |
*/ |
var $options = array(); |
/** |
* Constructor of the container class |
* |
* @param $params, associative hash with host,port,basedn and userattr key |
* @param $params, associative array with host, port, baseDSN, checkServer key. |
* @return object Returns an error object if something went wrong |
*/ |
function Auth_Container_IMAP($params) |
{ |
if (!extension_loaded('imap')) { |
return PEAR::raiseError("Cannot use IMAP authentication, IMAP extension not loaded!", |
41, PEAR_ERROR_DIE); |
} |
$this->_setDefaults(); |
// set parameters (if any) |
if (is_array($params)) { |
$this->_parseOptions($params); |
} |
if ($this->options['checkServer']) { |
$this->_checkServer($this->options['timeout']); |
} |
return true; |
} |
/** |
* Set some default options |
* |
* @access private |
*/ |
function _setDefaults() |
{ |
$this->options['host'] = 'localhost'; |
$this->options['port'] = 143; |
$this->options['baseDSN'] = ''; |
$this->options['checkServer'] = true; |
$this->options['timeout'] = 20; |
} |
/** |
* Check if the given server and port are reachable |
* |
* @access private |
*/ |
function _checkServer() { |
$fp = @fsockopen ($this->options['host'], $this->options['port'], |
$errno, $errstr, $timeout); |
if (is_resource($fp)) { |
@fclose($fp); |
} else { |
$message = "Error connecting to IMAP server " |
. $this->options['host'] |
. ":" . $this->options['port']; |
return PEAR::raiseError($message, 41, PEAR_ERROR_DIE); |
} |
} |
/** |
* Parse options passed to the container class |
* |
* @access private |
* @param array |
*/ |
function _parseOptions($array) |
{ |
foreach ($array as $key => $value) { |
$this->options[$key] = $value; |
} |
} |
/** |
* Try to open a IMAP stream using $username / $password |
* |
* @param string Username |
* @param string Password |
* @return boolean |
*/ |
function fetchData($username, $password) |
{ |
$dsn = '{'.$this->options['host'].':'.$this->options['port'].$this->options['baseDSN'].'}'; |
$conn = @imap_open ($dsn, $username, $password, OP_HALFOPEN); |
if (is_resource($conn)){ |
$this->activeUser = $username; |
@imap_close($conn); |
return true; |
} else { |
$this->activeUser = ''; |
return false; |
} |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Auth/Container/RADIUS.php |
---|
New file |
0,0 → 1,154 |
<?php |
// |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2003 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.02 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Michael Bretterklieber <michael@bretterklieber.com> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: RADIUS.php,v 1.1 2005-03-30 08:50:33 jpm Exp $ |
// |
require_once "Auth/Container.php"; |
require_once "Auth/RADIUS.php"; |
/** |
* Storage driver for authenticating users against RADIUS servers. |
* |
* @author Michael Bretterklieber <michael@bretterklieber.com> |
* @access public |
* @version $Revision: 1.1 $ |
*/ |
class Auth_Container_RADIUS extends Auth_Container |
{ |
/** |
* Contains a RADIUS object |
* @var object |
*/ |
var $radius; |
/** |
* Contains the authentication type |
* @var string |
*/ |
var $authtype; |
/** |
* Constructor of the container class. |
* |
* $options can have these keys: |
* 'servers' an array containing an array: servername, port, |
* sharedsecret, timeout, maxtries |
* 'configfile' The filename of the configuration file |
* 'authtype' The type of authentication, one of: PAP, CHAP_MD5, |
* MSCHAPv1, MSCHAPv2, default is PAP |
* |
* @param $options associative array |
* @return object Returns an error object if something went wrong |
*/ |
function Auth_Container_RADIUS($options) |
{ |
$this->authtype = 'PAP'; |
if (isset($options['authtype'])) { |
$this->authtype = $options['authtype']; |
} |
$classname = 'Auth_RADIUS_' . $this->authtype; |
if (!class_exists($classname)) { |
PEAR::raiseError("Unknown Authtype, please use on of: PAP, CHAP_MD5, MSCHAPv1, MSCHAPv2!", |
41, PEAR_ERROR_DIE); |
} |
$this->radius = new $classname; |
if (isset($options['configfile'])) { |
$this->radius->setConfigfile($options['configfile']); |
} |
$servers = $options['servers']; |
if (is_array($servers)) { |
foreach ($servers as $server) { |
$servername = $server[0]; |
$port = isset($server[1]) ? $server[1] : 0; |
$sharedsecret = isset($server[2]) ? $server[2] : 'testing123'; |
$timeout = isset($server[3]) ? $server[3] : 3; |
$maxtries = isset($server[4]) ? $server[4] : 3; |
$this->radius->addServer($servername, $port, $sharedsecret, $timeout, $maxtries); |
} |
} |
if (!$this->radius->start()) { |
PEAR::raiseError($this->radius->getError(), 41, PEAR_ERROR_DIE); |
} |
} |
/** |
* Authenticate |
* |
* @param string Username |
* @param string Password |
* @return bool true on success, false on reject |
*/ |
function fetchData($username, $password, $challenge = null) |
{ |
switch($this->authtype) { |
case 'CHAP_MD5': |
case 'MSCHAPv1': |
if (isset($challenge)) { |
echo $password; |
$this->radius->challenge = $challenge; |
$this->radius->chapid = 1; |
$this->radius->response = pack('H*', $password); |
} else { |
require_once 'Crypt_CHAP/CHAP.php'; |
$classname = 'Crypt_' . $this->authtype; |
$crpt = new $classname; |
$crpt->password = $password; |
$this->radius->challenge = $crpt->challenge; |
$this->radius->chapid = $crpt->chapid; |
$this->radius->response = $crpt->challengeResponse(); |
break; |
} |
case 'MSCHAPv2': |
require_once 'Crypt_CHAP/CHAP.php'; |
$crpt = new Crypt_MSCHAPv2; |
$crpt->username = $username; |
$crpt->password = $password; |
$this->radius->challenge = $crpt->authChallenge; |
$this->radius->peerChallenge = $crpt->peerChallenge; |
$this->radius->chapid = $crpt->chapid; |
$this->radius->response = $crpt->challengeResponse(); |
break; |
default: |
$this->radius->password = $password; |
break; |
} |
$this->radius->username = $username; |
$this->radius->putAuthAttributes(); |
$result = $this->radius->send(); |
if (PEAR::isError($result)) { |
return false; |
} |
$this->radius->getAttributes(); |
// just for debugging |
// $this->radius->dumpAttributes(); |
return $result; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Auth/Container/vpopmail.php |
---|
New file |
0,0 → 1,66 |
<?PHP |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2003 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.02 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Author: Stanislav Grozev <tacho@orbitel.bg> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: vpopmail.php,v 1.1 2005-03-30 08:50:33 jpm Exp $ |
// |
require_once "Auth/Container.php"; |
/** |
* Storage driver for fetching login data from vpopmail |
* |
* @author Stanislav Grozev <tacho@orbitel.bg> |
* @package Auth |
* @version $Revision: 1.1 $ |
*/ |
class Auth_Container_vpopmail extends Auth_Container { |
// {{{ Constructor |
/** |
* Constructor of the container class |
* |
* @return integer Always returns 1. |
*/ |
function Auth_Container_vpopmail() |
{ |
return 1; |
} |
// }}} |
// {{{ fetchData() |
/** |
* Get user information from vpopmail |
* |
* @param string Username - has to be valid email address |
* @param string Password |
* @return boolean |
*/ |
function fetchData($username, $password) |
{ |
$userdata = array(); |
$userdata = preg_split("/@/", $username, 2); |
$result = @vpopmail_auth_user($userdata[0], $userdata[1], $password); |
return $result; |
} |
// }}} |
} |
?> |
/branches/v1.0-menes/api/pear/Auth/Container/File.php |
---|
New file |
0,0 → 1,200 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2003 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.02 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Stefan Ekman <stekman@sedata.org> | |
// | Martin Jansen <mj@php.net> | |
// | Mika Tuupola <tuupola@appelsiini.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: File.php,v 1.1 2005-03-30 08:50:33 jpm Exp $ |
// |
require_once "File/Passwd.php"; |
require_once "Auth/Container.php"; |
require_once "PEAR.php"; |
/** |
* Storage driver for fetching login data from an encrypted password file. |
* |
* This storage container can handle CVS pserver style passwd files. |
* |
* @author Stefan Ekman <stekman@sedata.org> |
* @author Michael Wallner <mike@php.net> |
* @package Auth |
* @version $Revision: 1.1 $ |
*/ |
class Auth_Container_File extends Auth_Container |
{ |
/** |
* Path to passwd file |
* |
* @var string |
*/ |
var $pwfile = ''; |
// {{{ Constructor |
/** |
* Constructor of the container class |
* |
* @param string $filename path to passwd file |
* @return object Auth_Container_File new Auth_Container_File object |
*/ |
function Auth_Container_File($filename) |
{ |
$this->pwfile = $filename; |
} |
// }}} |
// {{{ fetchData() |
/** |
* Authenticate an user |
* |
* @param string username |
* @param string password |
* @return mixed boolean|PEAR_Error |
*/ |
function fetchData($user, $pass) |
{ |
return File_Passwd::staticAuth('Cvs', $this->pwfile, $user, $pass); |
} |
// }}} |
// {{{ listUsers() |
/** |
* List all available users |
* |
* @return array |
*/ |
function listUsers() |
{ |
$pw_obj = &$this->_load(); |
if (PEAR::isError($pw_obj)) { |
return array(); |
} |
$users = $pw_obj->listUser(); |
if (!is_array($users)) { |
return array(); |
} |
foreach ($users as $key => $value) { |
$retVal[] = array("username" => $key, |
"password" => $value['passwd'], |
"cvsuser" => $value['system']); |
} |
return $retVal; |
} |
// }}} |
// {{{ addUser() |
/** |
* Add a new user to the storage container |
* |
* @param string username |
* @param string password |
* @param mixed CVS username |
* |
* @return boolean |
*/ |
function addUser($user, $pass, $additional='') |
{ |
$cvs = (string) (is_array($additional) && isset($additional['cvsuser'])) ? |
$additional['cvsuser'] : $additional; |
$pw_obj = &$this->_load(); |
if (PEAR::isError($pw_obj)) { |
return false; |
} |
$res = $pw_obj->addUser($user, $pass, $cvs); |
if(PEAR::isError($res)){ |
return false; |
} |
$res = $pw_obj->save(); |
if (PEAR::isError($res)) { |
return false; |
} |
return true; |
} |
// }}} |
// {{{ removeUser() |
/** |
* Remove user from the storage container |
* |
* @param string Username |
* @return boolean |
*/ |
function removeUser($user) |
{ |
$pw_obj = &$this->_load(); |
if (PEAR::isError($pw_obj)) { |
return false; |
} |
$res = $pw_obj->delUser($user); |
if(PEAR::isError($res)){ |
return false; |
} |
$res = $pw_obj->save(); |
if (PEAR::isError($res)) { |
return false; |
} |
return true; |
} |
// }}} |
// {{{ _load() |
/** |
* Load and initialize the File_Passwd object |
* |
* @return object File_Passwd_Cvs|PEAR_Error |
*/ |
function &_load() |
{ |
static $pw_obj; |
if (!isset($pw_obj)) { |
$pw_obj = File_Passwd::factory('Cvs'); |
if (PEAR::isError($pw_obj)) { |
return $pw_obj; |
} |
$pw_obj->setFile($this->pwfile); |
$res = $pw_obj->load(); |
if (PEAR::isError($res)) { |
return $res; |
} |
} |
return $pw_obj; |
} |
// }}} |
} |
?> |
/branches/v1.0-menes/api/pear/Auth/Container/LDAP.php |
---|
New file |
0,0 → 1,472 |
<?php |
// |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2003 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.02 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Jan Wagner <wagner@netsols.de> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: LDAP.php,v 1.1 2005-03-30 08:50:33 jpm Exp $ |
// |
require_once "Auth/Container.php"; |
require_once "PEAR.php"; |
/** |
* Storage driver for fetching login data from LDAP |
* |
* This class is heavily based on the DB and File containers. By default it |
* connects to localhost:389 and searches for uid=$username with the scope |
* "sub". If no search base is specified, it will try to determine it via |
* the namingContexts attribute. It takes its parameters in a hash, connects |
* to the ldap server, binds anonymously, searches for the user, and tries |
* to bind as the user with the supplied password. When a group was set, it |
* will look for group membership of the authenticated user. If all goes |
* well the authentication was successful. |
* |
* Parameters: |
* |
* host: localhost (default), ldap.netsols.de or 127.0.0.1 |
* port: 389 (default) or 636 or whereever your server runs |
* url: ldap://localhost:389/ |
* useful for ldaps://, works only with openldap2 ? |
* it will be preferred over host and port |
* binddn: If set, searching for user will be done after binding |
* as this user, if not set the bind will be anonymous. |
* This is reported to make the container work with MS |
* Active Directory, but should work with any server that |
* is configured this way. |
* This has to be a complete dn for now (basedn and |
* userdn will not be appended). |
* bindpw: The password to use for binding with binddn |
* scope: one, sub (default), or base |
* basedn: the base dn of your server |
* userdn: gets prepended to basedn when searching for user |
* userattr: the user attribute to search for (default: uid) |
* useroc: objectclass of user (for the search filter) |
* (default: posixAccount) |
* groupdn: gets prepended to basedn when searching for group |
* groupattr : the group attribute to search for (default: cn) |
* groupoc : objectclass of group (for the search filter) |
* (default: groupOfUniqueNames) |
* memberattr : the attribute of the group object where the user dn |
* may be found (default: uniqueMember) |
* memberisdn: whether the memberattr is the dn of the user (default) |
* or the value of userattr (usually uid) |
* group: the name of group to search for |
* debug: Enable/Disable debugging output (default: false) |
* |
* To use this storage container, you have to use the following syntax: |
* |
* <?php |
* ... |
* |
* $a = new Auth("LDAP", array( |
* 'host' => 'localhost', |
* 'port' => '389', |
* 'basedn' => 'o=netsols,c=de', |
* 'userattr' => 'uid' |
* 'binddn' => 'cn=admin,o=netsols,c=de', |
* 'bindpw' => 'password')); |
* |
* $a2 = new Auth('LDAP', array( |
* 'url' => 'ldaps://ldap.netsols.de', |
* 'basedn' => 'o=netsols,c=de', |
* 'scope' => 'one', |
* 'userdn' => 'ou=People', |
* 'groupdn' => 'ou=Groups', |
* 'groupoc' => 'posixGroup', |
* 'memberattr' => 'memberUid', |
* 'memberisdn' => false, |
* 'group' => 'admin' |
* )); |
* |
* $a3 = new Auth('LDAP', array( |
* 'host' => 'ad.netsols.de', |
* 'basedn' => 'dc=netsols,dc=de', |
* 'userdn' => 'ou=Users', |
* 'binddn' => 'cn=Jan Wagner,ou=Users,dc=netsols,dc=de', |
* 'bindpw' => '*******', |
* 'userattr' => 'samAccountName', |
* 'useroc' => 'user', |
* 'debug' => true |
* )); |
* |
* The parameter values have to correspond |
* to the ones for your LDAP server of course. |
* |
* When talking to a Microsoft ActiveDirectory server you have to |
* use 'samaccountname' as the 'userattr' and follow special rules |
* to translate the ActiveDirectory directory names into 'basedn'. |
* The 'basedn' for the default 'Users' folder on an ActiveDirectory |
* server for the ActiveDirectory Domain (which is not related to |
* its DNS name) "win2000.example.org" would be: |
* "CN=Users, DC=win2000, DC=example, DC=org' |
* where every component of the domain name becomes a DC attribute |
* of its own. If you want to use a custom users folder you have to |
* replace "CN=Users" with a sequence of "OU" attributes that specify |
* the path to your custom folder in reverse order. |
* So the ActiveDirectory folder |
* "win2000.example.org\Custom\Accounts" |
* would become |
* "OU=Accounts, OU=Custom, DC=win2000, DC=example, DC=org' |
* |
* It seems that binding anonymously to an Active Directory |
* is not allowed, so you have to set binddn and bindpw for |
* user searching, |
* |
* Example a3 shows a tested example for connenction to Windows 2000 |
* Active Directory |
* |
* @author Jan Wagner <wagner@netsols.de> |
* @package Auth |
* @version $Revision: 1.1 $ |
*/ |
class Auth_Container_LDAP extends Auth_Container |
{ |
/** |
* Options for the class |
* @var array |
*/ |
var $options = array(); |
/** |
* Connection ID of LDAP Link |
* @var string |
*/ |
var $conn_id = false; |
/** |
* LDAP search function to use |
* @var string |
*/ |
var $ldap_search_func; |
/** |
* Constructor of the container class |
* |
* @param $params, associative hash with host,port,basedn and userattr key |
* @return object Returns an error object if something went wrong |
*/ |
function Auth_Container_LDAP($params) |
{ |
$this->_setDefaults(); |
if (is_array($params)) { |
$this->_parseOptions($params); |
} |
} |
// }}} |
// {{{ _connect() |
/** |
* Connect to the LDAP server using the global options |
* |
* @access private |
* @return object Returns a PEAR error object if an error occurs. |
*/ |
function _connect() |
{ |
// connect |
if (isset($this->options['url']) && $this->options['url'] != '') { |
$this->_debug('Connecting with URL', __LINE__); |
$conn_params = array($this->options['url']); |
} else { |
$this->_debug('Connecting with host:port', __LINE__); |
$conn_params = array($this->options['host'], $this->options['port']); |
} |
if(($this->conn_id = @call_user_func_array('ldap_connect', $conn_params)) === false) { |
return PEAR::raiseError('Auth_Container_LDAP: Could not connect to server.', 41, PEAR_ERROR_DIE); |
} |
$this->_debug('Successfully connected to server', __LINE__); |
// try switchig to LDAPv3 |
$ver = 0; |
if(@ldap_get_option($this->conn_id, LDAP_OPT_PROTOCOL_VERSION, $ver) && $ver >= 2) { |
$this->_debug('Switching to LDAPv3', __LINE__); |
@ldap_set_option($this->conn_id, LDAP_OPT_PROTOCOL_VERSION, 3); |
} |
// bind with credentials or anonymously |
if($this->options['binddn'] && $this->options['bindpw']) { |
$this->_debug('Binding with credentials', __LINE__); |
$bind_params = array($this->conn_id, $this->options['binddn'], $this->options['bindpw']); |
} else { |
$this->_debug('Binding anonymously', __LINE__); |
$bind_params = array($this->conn_id); |
} |
// bind for searching |
if ((@call_user_func_array('ldap_bind', $bind_params)) == false) { |
$this->_debug(); |
$this->_disconnect(); |
return PEAR::raiseError("Auth_Container_LDAP: Could not bind to LDAP server.", 41, PEAR_ERROR_DIE); |
} |
$this->_debug('Binding was successful', __LINE__); |
} |
/** |
* Disconnects (unbinds) from ldap server |
* |
* @access private |
*/ |
function _disconnect() |
{ |
if($this->_isValidLink()) { |
$this->_debug('disconnecting from server'); |
@ldap_unbind($this->conn_id); |
} |
} |
/** |
* Tries to find Basedn via namingContext Attribute |
* |
* @access private |
*/ |
function _getBaseDN() |
{ |
if ($this->options['basedn'] == "" && $this->_isValidLink()) { |
$this->_debug("basedn not set, searching via namingContexts.", __LINE__); |
$result_id = @ldap_read($this->conn_id, "", "(objectclass=*)", array("namingContexts")); |
if (ldap_count_entries($this->conn_id, $result_id) == 1) { |
$this->_debug("got result for namingContexts", __LINE__); |
$entry_id = ldap_first_entry($this->conn_id, $result_id); |
$attrs = ldap_get_attributes($this->conn_id, $entry_id); |
$basedn = $attrs['namingContexts'][0]; |
if ($basedn != "") { |
$this->_debug("result for namingContexts was $basedn", __LINE__); |
$this->options['basedn'] = $basedn; |
} |
} |
ldap_free_result($result_id); |
} |
// if base ist still not set, raise error |
if ($this->options['basedn'] == "") { |
return PEAR::raiseError("Auth_Container_LDAP: LDAP search base not specified!", 41, PEAR_ERROR_DIE); |
} |
return true; |
} |
/** |
* determines whether there is a valid ldap conenction or not |
* |
* @accessd private |
* @return boolean |
*/ |
function _isValidLink() |
{ |
if(is_resource($this->conn_id)) { |
if(get_resource_type($this->conn_id) == 'ldap link') { |
return true; |
} |
} |
return false; |
} |
/** |
* Set some default options |
* |
* @access private |
*/ |
function _setDefaults() |
{ |
$this->options['host'] = 'localhost'; |
$this->options['port'] = '389'; |
$this->options['binddn'] = ''; |
$this->options['bindpw'] = ''; |
$this->options['scope'] = 'sub'; |
$this->options['basedn'] = ''; |
$this->options['userdn'] = ''; |
$this->options['userattr'] = "uid"; |
$this->options['useroc'] = 'posixAccount'; |
$this->options['groupdn'] = ''; |
$this->options['groupattr'] = 'cn'; |
$this->options['groupoc'] = 'groupOfUniqueNames'; |
$this->options['memberattr'] = 'uniqueMember'; |
$this->options['memberisdn'] = true; |
$this->options['debug'] = false; |
} |
/** |
* Parse options passed to the container class |
* |
* @access private |
* @param array |
*/ |
function _parseOptions($array) |
{ |
foreach ($array as $key => $value) { |
$this->options[$key] = $value; |
} |
// get the according search function for selected scope |
switch($this->options['scope']) { |
case 'one': |
$this->ldap_search_func = 'ldap_list'; |
break; |
case 'base': |
$this->ldap_search_func = 'ldap_read'; |
break; |
default: |
$this->ldap_search_func = 'ldap_search'; |
break; |
} |
$this->_debug("LDAP search function will be: {$this->ldap_search_func}", __LINE__); |
} |
/** |
* Fetch data from LDAP server |
* |
* Searches the LDAP server for the given username/password |
* combination. |
* |
* @param string Username |
* @param string Password |
* @return boolean |
*/ |
function fetchData($username, $password) |
{ |
$this->_connect(); |
$this->_getBaseDN(); |
// make search filter |
$filter = sprintf('(&(objectClass=%s)(%s=%s))', $this->options['useroc'], $this->options['userattr'], $username); |
// make search base dn |
$search_basedn = $this->options['userdn']; |
if ($search_basedn != '' && substr($search_basedn, -1) != ',') { |
$search_basedn .= ','; |
} |
$search_basedn .= $this->options['basedn']; |
// make functions params array |
$func_params = array($this->conn_id, $search_basedn, $filter, array($this->options['userattr'])); |
$this->_debug("Searching with $filter in $search_basedn", __LINE__); |
// search |
if (($result_id = @call_user_func_array($this->ldap_search_func, $func_params)) == false) { |
$this->_debug('User not found', __LINE__); |
} elseif (ldap_count_entries($this->conn_id, $result_id) == 1) { // did we get just one entry? |
$this->_debug('User was found', __LINE__); |
// then get the user dn |
$entry_id = ldap_first_entry($this->conn_id, $result_id); |
$user_dn = ldap_get_dn($this->conn_id, $entry_id); |
ldap_free_result($result_id); |
// need to catch an empty password as openldap seems to return TRUE |
// if anonymous binding is allowed |
if ($password != "") { |
$this->_debug("Bind as $user_dn", __LINE__); |
// try binding as this user with the supplied password |
if (@ldap_bind($this->conn_id, $user_dn, $password)) { |
$this->_debug('Bind successful', __LINE__); |
// check group if appropiate |
if(isset($this->options['group'])) { |
// decide whether memberattr value is a dn or the username |
$this->_debug('Checking group membership', __LINE__); |
return $this->checkGroup(($this->options['memberisdn']) ? $user_dn : $username); |
} else { |
$this->_debug('Authenticated', __LINE__); |
$this->_disconnect(); |
return true; // user authenticated |
} // checkGroup |
} // bind |
} // non-empty password |
} // one entry |
// default |
$this->_debug('NOT authenticated!', __LINE__); |
$this->_disconnect(); |
return false; |
} |
/** |
* Validate group membership |
* |
* Searches the LDAP server for group membership of the |
* authenticated user |
* |
* @param string Distinguished Name of the authenticated User |
* @return boolean |
*/ |
function checkGroup($user) |
{ |
// make filter |
$filter = sprintf('(&(%s=%s)(objectClass=%s)(%s=%s))', |
$this->options['groupattr'], |
$this->options['group'], |
$this->options['groupoc'], |
$this->options['memberattr'], |
$user |
); |
// make search base dn |
$search_basedn = $this->options['groupdn']; |
if($search_basedn != '' && substr($search_basedn, -1) != ',') { |
$search_basedn .= ','; |
} |
$search_basedn .= $this->options['basedn']; |
$func_params = array($this->conn_id, $search_basedn, $filter, array($this->options['memberattr'])); |
$this->_debug("Searching with $filter in $search_basedn", __LINE__); |
// search |
if(($result_id = @call_user_func_array($this->ldap_search_func, $func_params)) != false) { |
if(ldap_count_entries($this->conn_id, $result_id) == 1) { |
ldap_free_result($result_id); |
$this->_debug('User is member of group', __LINE__); |
$this->_disconnect(); |
return true; |
} |
} |
// default |
$this->_debug('User is NOT member of group', __LINE__); |
$this->_disconnect(); |
return false; |
} |
/** |
* Outputs debugging messages |
* |
* @access private |
* @param string Debugging Message |
* @param integer Line number |
*/ |
function _debug($msg = '', $line = 0) |
{ |
if($this->options['debug'] === true) { |
if($msg == '' && $this->_isValidLink()) { |
$msg = 'LDAP_Error: ' . @ldap_err2str(@ldap_errno($this->_conn_id)); |
} |
print("$line: $msg <br />"); |
} |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Auth/Container/POP3.php |
---|
New file |
0,0 → 1,107 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2002 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.02 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Stefan Ekman <stekman@sedata.org> | |
// | Martin Jansen <mj@php.net> | |
// | Mika Tuupola <tuupola@appelsiini.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: POP3.php,v 1.1 2005-03-30 08:50:33 jpm Exp $ |
// |
require_once('Auth/Container.php'); |
require_once('PEAR.php'); |
require_once('Net/POP3.php'); |
/** |
* Storage driver for Authentication on a POP3 server. |
* |
* @author Yavor Shahpasov <yavo@netsmart.com.cy> |
* @package Auth |
* @version $Revision: 1.1 $ |
*/ |
class Auth_Container_POP3 extends Auth_Container |
{ |
/** |
* POP3 Server |
* @var string |
*/ |
var $server='localhost'; |
/** |
* POP3 Server port |
* @var string |
*/ |
var $port='110'; |
// {{{ Constructor |
/** |
* Constructor of the container class |
* |
* @param $server string server or server:port combination |
* @return object Returns an error object if something went wrong |
*/ |
function Auth_Container_POP3($server=null) |
{ |
if(isset($server)){ |
if(is_array($server)){ |
if(isset($server['host'])){ |
$this->server = $server['host']; |
} |
if(isset($server['port'])){ |
$this->port = $server['port']; |
} |
} |
else{ |
if(strstr($server, ':')){ |
$serverparts = explode(':', trim($server)); |
$this->server = $serverparts[0]; |
$this->port = $serverparts[1]; |
} |
else |
{ |
$this->server = $server; |
} |
} |
} |
} |
// }}} |
// {{{ fetchData() |
/** |
* Try to login to the POP3 server |
* |
* @param string Username |
* @param string Password |
* @return boolean |
*/ |
function fetchData($username, $password) |
{ |
$pop3 =& new Net_POP3(); |
$res = $pop3->connect($this->server, $this->port); |
if(!$res){ |
return($res); |
} |
$result = $pop3->login($username, $password); |
$pop3->disconnect(); |
return $result; |
} |
// }}} |
} |
?> |
/branches/v1.0-menes/api/pear/Auth/Auth.php |
---|
New file |
0,0 → 1,5 |
<?php |
include_once('Auth.php'); |
?> |
/branches/v1.0-menes/api/pear/Mail/mail.php |
---|
New file |
0,0 → 1,130 |
<?php |
// |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2003 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.02 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Author: Chuck Hagenbuch <chuck@horde.org> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: mail.php,v 1.1 2005-11-24 16:15:46 florian Exp $ |
/** |
* internal PHP-mail() implementation of the PEAR Mail:: interface. |
* @package Mail |
* @version $Revision: 1.1 $ |
*/ |
class Mail_mail extends Mail { |
/** |
* Any arguments to pass to the mail() function. |
* @var string |
*/ |
var $_params = ''; |
/** |
* Constructor. |
* |
* Instantiates a new Mail_mail:: object based on the parameters |
* passed in. |
* |
* @param array $params Extra arguments for the mail() function. |
*/ |
function Mail_mail($params = null) |
{ |
/* The other mail implementations accept parameters as arrays. |
* In the interest of being consistent, explode an array into |
* a string of parameter arguments. */ |
if (is_array($params)) { |
$this->_params = join(' ', $params); |
} else { |
$this->_params = $params; |
} |
/* Because the mail() function may pass headers as command |
* line arguments, we can't guarantee the use of the standard |
* "\r\n" separator. Instead, we use the system's native line |
* separator. */ |
$this->sep = (strpos(PHP_OS, 'WIN') === false) ? "\n" : "\r\n"; |
} |
/** |
* Implements Mail_mail::send() function using php's built-in mail() |
* command. |
* |
* @param mixed $recipients Either a comma-seperated list of recipients |
* (RFC822 compliant), or an array of recipients, |
* each RFC822 valid. This may contain recipients not |
* specified in the headers, for Bcc:, resending |
* messages, etc. |
* |
* @param array $headers The array of headers to send with the mail, in an |
* associative array, where the array key is the |
* header name (ie, 'Subject'), and the array value |
* is the header value (ie, 'test'). The header |
* produced from those values would be 'Subject: |
* test'. |
* |
* @param string $body The full text of the message body, including any |
* Mime parts, etc. |
* |
* @return mixed Returns true on success, or a PEAR_Error |
* containing a descriptive error message on |
* failure. |
* |
* @access public |
*/ |
function send($recipients, $headers, $body) |
{ |
// If we're passed an array of recipients, implode it. |
if (is_array($recipients)) { |
$recipients = implode(', ', $recipients); |
} |
// Get the Subject out of the headers array so that we can |
// pass it as a seperate argument to mail(). |
$subject = ''; |
if (isset($headers['Subject'])) { |
$subject = $headers['Subject']; |
unset($headers['Subject']); |
} |
// Flatten the headers out. |
$headerElements = $this->prepareHeaders($headers); |
if (PEAR::isError($headerElements)) { |
return $headerElements; |
} |
list(, $text_headers) = $headerElements; |
/* |
* We only use mail()'s optional fifth parameter if the additional |
* parameters have been provided and we're not running in safe mode. |
*/ |
if (empty($this->_params) || ini_get('safe_mode')) { |
$result = mail($recipients, $subject, $body, $text_headers); |
} else { |
$result = mail($recipients, $subject, $body, $text_headers, |
$this->_params); |
} |
/* |
* If the mail() function returned failure, we need to create a |
* PEAR_Error object and return it instead of the boolean result. |
*/ |
if ($result === false) { |
$result = PEAR::raiseError('mail() returned failure'); |
} |
return $result; |
} |
} |
/branches/v1.0-menes/api/pear/Mail/smtp.php |
---|
New file |
0,0 → 1,323 |
<?php |
// |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2003 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.02 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Chuck Hagenbuch <chuck@horde.org> | |
// | Jon Parise <jon@php.net> | |
// +----------------------------------------------------------------------+ |
/** |
* SMTP implementation of the PEAR Mail interface. Requires the Net_SMTP class. |
* @access public |
* @package Mail |
* @version $Revision: 1.1 $ |
*/ |
class Mail_smtp extends Mail { |
/** |
* SMTP connection object. |
* |
* @var object |
* @access private |
*/ |
var $_smtp = null; |
/** |
* The SMTP host to connect to. |
* @var string |
*/ |
var $host = 'localhost'; |
/** |
* The port the SMTP server is on. |
* @var integer |
*/ |
var $port = 25; |
/** |
* Should SMTP authentication be used? |
* |
* This value may be set to true, false or the name of a specific |
* authentication method. |
* |
* If the value is set to true, the Net_SMTP package will attempt to use |
* the best authentication method advertised by the remote SMTP server. |
* |
* @var mixed |
*/ |
var $auth = false; |
/** |
* The username to use if the SMTP server requires authentication. |
* @var string |
*/ |
var $username = ''; |
/** |
* The password to use if the SMTP server requires authentication. |
* @var string |
*/ |
var $password = ''; |
/** |
* Hostname or domain that will be sent to the remote SMTP server in the |
* HELO / EHLO message. |
* |
* @var string |
*/ |
var $localhost = 'localhost'; |
/** |
* SMTP connection timeout value. NULL indicates no timeout. |
* |
* @var integer |
*/ |
var $timeout = null; |
/** |
* Whether to use VERP or not. If not a boolean, the string value |
* will be used as the VERP separators. |
* |
* @var mixed boolean or string |
*/ |
var $verp = false; |
/** |
* Turn on Net_SMTP debugging? |
* |
* @var boolean $debug |
*/ |
var $debug = false; |
/** |
* Indicates whether or not the SMTP connection should persist over |
* multiple calls to the send() method. |
* |
* @var boolean |
*/ |
var $persist = false; |
/** |
* Constructor. |
* |
* Instantiates a new Mail_smtp:: object based on the parameters |
* passed in. It looks for the following parameters: |
* host The server to connect to. Defaults to localhost. |
* port The port to connect to. Defaults to 25. |
* auth SMTP authentication. Defaults to none. |
* username The username to use for SMTP auth. No default. |
* password The password to use for SMTP auth. No default. |
* localhost The local hostname / domain. Defaults to localhost. |
* timeout The SMTP connection timeout. Defaults to none. |
* verp Whether to use VERP or not. Defaults to false. |
* debug Activate SMTP debug mode? Defaults to false. |
* persist Should the SMTP connection persist? |
* |
* If a parameter is present in the $params array, it replaces the |
* default. |
* |
* @param array Hash containing any parameters different from the |
* defaults. |
* @access public |
*/ |
function Mail_smtp($params) |
{ |
if (isset($params['host'])) $this->host = $params['host']; |
if (isset($params['port'])) $this->port = $params['port']; |
if (isset($params['auth'])) $this->auth = $params['auth']; |
if (isset($params['username'])) $this->username = $params['username']; |
if (isset($params['password'])) $this->password = $params['password']; |
if (isset($params['localhost'])) $this->localhost = $params['localhost']; |
if (isset($params['timeout'])) $this->timeout = $params['timeout']; |
if (isset($params['verp'])) $this->verp = $params['verp']; |
if (isset($params['debug'])) $this->debug = (boolean)$params['debug']; |
if (isset($params['persist'])) $this->persist = (boolean)$params['persist']; |
register_shutdown_function(array(&$this, '_Mail_smtp')); |
} |
/** |
* Destructor implementation to ensure that we disconnect from any |
* potentially-alive persistent SMTP connections. |
*/ |
function _Mail_smtp() |
{ |
$this->disconnect(); |
} |
/** |
* Implements Mail::send() function using SMTP. |
* |
* @param mixed $recipients Either a comma-seperated list of recipients |
* (RFC822 compliant), or an array of recipients, |
* each RFC822 valid. This may contain recipients not |
* specified in the headers, for Bcc:, resending |
* messages, etc. |
* |
* @param array $headers The array of headers to send with the mail, in an |
* associative array, where the array key is the |
* header name (e.g., 'Subject'), and the array value |
* is the header value (e.g., 'test'). The header |
* produced from those values would be 'Subject: |
* test'. |
* |
* @param string $body The full text of the message body, including any |
* Mime parts, etc. |
* |
* @return mixed Returns true on success, or a PEAR_Error |
* containing a descriptive error message on |
* failure. |
* @access public |
*/ |
function send($recipients, $headers, $body) |
{ |
include_once 'Net/SMTP.php'; |
/* If we don't already have an SMTP object, create one. */ |
if (is_object($this->_smtp) === false) { |
$this->_smtp =& new Net_SMTP($this->host, $this->port, |
$this->localhost); |
/* If we still don't have an SMTP object at this point, fail. */ |
if (is_object($this->_smtp) === false) { |
return PEAR::raiseError('Failed to create a Net_SMTP object'); |
} |
/* Configure the SMTP connection. */ |
if ($this->debug) { |
$this->_smtp->setDebug(true); |
} |
/* Attempt to connect to the configured SMTP server. */ |
if (PEAR::isError($res = $this->_smtp->connect($this->timeout))) { |
$error = $this->_error('Failed to connect to ' . |
$this->host . ':' . $this->port, |
$res); |
return PEAR::raiseError($error); |
} |
/* Attempt to authenticate if authentication has been enabled. */ |
if ($this->auth) { |
$method = is_string($this->auth) ? $this->auth : ''; |
if (PEAR::isError($res = $this->_smtp->auth($this->username, |
$this->password, |
$method))) { |
$error = $this->_error("$method authentication failure", |
$res); |
$this->_smtp->rset(); |
return PEAR::raiseError($error); |
} |
} |
} |
$headerElements = $this->prepareHeaders($headers); |
if (PEAR::isError($headerElements)) { |
$this->_smtp->rset(); |
return $headerElements; |
} |
list($from, $textHeaders) = $headerElements; |
/* Since few MTAs are going to allow this header to be forged |
* unless it's in the MAIL FROM: exchange, we'll use |
* Return-Path instead of From: if it's set. */ |
if (!empty($headers['Return-Path'])) { |
$from = $headers['Return-Path']; |
} |
if (!isset($from)) { |
$this->_smtp->rset(); |
return PEAR::raiseError('No From: address has been provided'); |
} |
$args['verp'] = $this->verp; |
if (PEAR::isError($res = $this->_smtp->mailFrom($from, $args))) { |
$error = $this->_error("Failed to set sender: $from", $res); |
$this->_smtp->rset(); |
return PEAR::raiseError($error); |
} |
$recipients = $this->parseRecipients($recipients); |
if (PEAR::isError($recipients)) { |
$this->_smtp->rset(); |
return $recipients; |
} |
foreach ($recipients as $recipient) { |
if (PEAR::isError($res = $this->_smtp->rcptTo($recipient))) { |
$error = $this->_error("Failed to add recipient: $recipient", |
$res); |
$this->_smtp->rset(); |
return PEAR::raiseError($error); |
} |
} |
/* Send the message's headers and the body as SMTP data. */ |
if (PEAR::isError($res = $this->_smtp->data("$textHeaders\r\n$body"))) { |
$error = $this->_error('Failed to send data', $res); |
$this->_smtp->rset(); |
return PEAR::raiseError($error); |
} |
/* If persistent connections are disabled, destroy our SMTP object. */ |
if ($this->persist === false) { |
$this->disconnect(); |
} |
return true; |
} |
/** |
* Disconnect and destroy the current SMTP connection. |
* |
* @return boolean True if the SMTP connection no longer exists. |
* |
* @since 1.1.9 |
* @access public |
*/ |
function disconnect() |
{ |
/* If we have an SMTP object, disconnect and destroy it. */ |
if (is_object($this->_smtp) && $this->_smtp->disconnect()) { |
$this->_smtp = null; |
} |
/* We are disconnected if we no longer have an SMTP object. */ |
return ($this->_smtp === null); |
} |
/** |
* Build a standardized string describing the current SMTP error. |
* |
* @param string $text Custom string describing the error context. |
* @param object $error Reference to the current PEAR_Error object. |
* |
* @return string A string describing the current SMTP error. |
* |
* @since 1.1.7 |
* @access private |
*/ |
function _error($text, &$error) |
{ |
/* Split the SMTP response into a code and a response string. */ |
list($code, $response) = $this->_smtp->getResponse(); |
/* Build our standardized error string. */ |
$msg = $text; |
$msg .= ' [SMTP: ' . $error->getMessage(); |
$msg .= " (code: $code, response: $response)]"; |
return $msg; |
} |
} |
/branches/v1.0-menes/api/pear/Mail/RFC822.php |
---|
New file |
0,0 → 1,923 |
<?php |
// +-----------------------------------------------------------------------+ |
// | Copyright (c) 2001-2002, Richard Heyes | |
// | All rights reserved. | |
// | | |
// | Redistribution and use in source and binary forms, with or without | |
// | modification, are permitted provided that the following conditions | |
// | are met: | |
// | | |
// | o Redistributions of source code must retain the above copyright | |
// | notice, this list of conditions and the following disclaimer. | |
// | o 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.| |
// | o The names of the authors may not be used to endorse or promote | |
// | products derived from this software without specific prior written | |
// | permission. | |
// | | |
// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | |
// | "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 COPYRIGHT | |
// | OWNER OR CONTRIBUTORS 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. | |
// | | |
// +-----------------------------------------------------------------------+ |
// | Authors: Richard Heyes <richard@phpguru.org> | |
// | Chuck Hagenbuch <chuck@horde.org> | |
// +-----------------------------------------------------------------------+ |
/** |
* RFC 822 Email address list validation Utility |
* |
* What is it? |
* |
* This class will take an address string, and parse it into it's consituent |
* parts, be that either addresses, groups, or combinations. Nested groups |
* are not supported. The structure it returns is pretty straight forward, |
* and is similar to that provided by the imap_rfc822_parse_adrlist(). Use |
* print_r() to view the structure. |
* |
* How do I use it? |
* |
* $address_string = 'My Group: "Richard" <richard@localhost> (A comment), ted@example.com (Ted Bloggs), Barney;'; |
* $structure = Mail_RFC822::parseAddressList($address_string, 'example.com', true) |
* print_r($structure); |
* |
* @author Richard Heyes <richard@phpguru.org> |
* @author Chuck Hagenbuch <chuck@horde.org> |
* @version $Revision: 1.1 $ |
* @license BSD |
* @package Mail |
*/ |
class Mail_RFC822 { |
/** |
* The address being parsed by the RFC822 object. |
* @var string $address |
*/ |
var $address = ''; |
/** |
* The default domain to use for unqualified addresses. |
* @var string $default_domain |
*/ |
var $default_domain = 'localhost'; |
/** |
* Should we return a nested array showing groups, or flatten everything? |
* @var boolean $nestGroups |
*/ |
var $nestGroups = true; |
/** |
* Whether or not to validate atoms for non-ascii characters. |
* @var boolean $validate |
*/ |
var $validate = true; |
/** |
* The array of raw addresses built up as we parse. |
* @var array $addresses |
*/ |
var $addresses = array(); |
/** |
* The final array of parsed address information that we build up. |
* @var array $structure |
*/ |
var $structure = array(); |
/** |
* The current error message, if any. |
* @var string $error |
*/ |
var $error = null; |
/** |
* An internal counter/pointer. |
* @var integer $index |
*/ |
var $index = null; |
/** |
* The number of groups that have been found in the address list. |
* @var integer $num_groups |
* @access public |
*/ |
var $num_groups = 0; |
/** |
* A variable so that we can tell whether or not we're inside a |
* Mail_RFC822 object. |
* @var boolean $mailRFC822 |
*/ |
var $mailRFC822 = true; |
/** |
* A limit after which processing stops |
* @var int $limit |
*/ |
var $limit = null; |
/** |
* Sets up the object. The address must either be set here or when |
* calling parseAddressList(). One or the other. |
* |
* @access public |
* @param string $address The address(es) to validate. |
* @param string $default_domain Default domain/host etc. If not supplied, will be set to localhost. |
* @param boolean $nest_groups Whether to return the structure with groups nested for easier viewing. |
* @param boolean $validate Whether to validate atoms. Turn this off if you need to run addresses through before encoding the personal names, for instance. |
* |
* @return object Mail_RFC822 A new Mail_RFC822 object. |
*/ |
function Mail_RFC822($address = null, $default_domain = null, $nest_groups = null, $validate = null, $limit = null) |
{ |
if (isset($address)) $this->address = $address; |
if (isset($default_domain)) $this->default_domain = $default_domain; |
if (isset($nest_groups)) $this->nestGroups = $nest_groups; |
if (isset($validate)) $this->validate = $validate; |
if (isset($limit)) $this->limit = $limit; |
} |
/** |
* Starts the whole process. The address must either be set here |
* or when creating the object. One or the other. |
* |
* @access public |
* @param string $address The address(es) to validate. |
* @param string $default_domain Default domain/host etc. |
* @param boolean $nest_groups Whether to return the structure with groups nested for easier viewing. |
* @param boolean $validate Whether to validate atoms. Turn this off if you need to run addresses through before encoding the personal names, for instance. |
* |
* @return array A structured array of addresses. |
*/ |
function parseAddressList($address = null, $default_domain = null, $nest_groups = null, $validate = null, $limit = null) |
{ |
if (!isset($this) || !isset($this->mailRFC822)) { |
$obj = new Mail_RFC822($address, $default_domain, $nest_groups, $validate, $limit); |
return $obj->parseAddressList(); |
} |
if (isset($address)) $this->address = $address; |
if (isset($default_domain)) $this->default_domain = $default_domain; |
if (isset($nest_groups)) $this->nestGroups = $nest_groups; |
if (isset($validate)) $this->validate = $validate; |
if (isset($limit)) $this->limit = $limit; |
$this->structure = array(); |
$this->addresses = array(); |
$this->error = null; |
$this->index = null; |
// Unfold any long lines in $this->address. |
$this->address = preg_replace('/\r?\n/', "\r\n", $this->address); |
$this->address = preg_replace('/\r\n(\t| )+/', ' ', $this->address); |
while ($this->address = $this->_splitAddresses($this->address)); |
if ($this->address === false || isset($this->error)) { |
require_once 'PEAR.php'; |
return PEAR::raiseError($this->error); |
} |
// Validate each address individually. If we encounter an invalid |
// address, stop iterating and return an error immediately. |
foreach ($this->addresses as $address) { |
$valid = $this->_validateAddress($address); |
if ($valid === false || isset($this->error)) { |
require_once 'PEAR.php'; |
return PEAR::raiseError($this->error); |
} |
if (!$this->nestGroups) { |
$this->structure = array_merge($this->structure, $valid); |
} else { |
$this->structure[] = $valid; |
} |
} |
return $this->structure; |
} |
/** |
* Splits an address into separate addresses. |
* |
* @access private |
* @param string $address The addresses to split. |
* @return boolean Success or failure. |
*/ |
function _splitAddresses($address) |
{ |
if (!empty($this->limit) && count($this->addresses) == $this->limit) { |
return ''; |
} |
if ($this->_isGroup($address) && !isset($this->error)) { |
$split_char = ';'; |
$is_group = true; |
} elseif (!isset($this->error)) { |
$split_char = ','; |
$is_group = false; |
} elseif (isset($this->error)) { |
return false; |
} |
// Split the string based on the above ten or so lines. |
$parts = explode($split_char, $address); |
$string = $this->_splitCheck($parts, $split_char); |
// If a group... |
if ($is_group) { |
// If $string does not contain a colon outside of |
// brackets/quotes etc then something's fubar. |
// First check there's a colon at all: |
if (strpos($string, ':') === false) { |
$this->error = 'Invalid address: ' . $string; |
return false; |
} |
// Now check it's outside of brackets/quotes: |
if (!$this->_splitCheck(explode(':', $string), ':')) { |
return false; |
} |
// We must have a group at this point, so increase the counter: |
$this->num_groups++; |
} |
// $string now contains the first full address/group. |
// Add to the addresses array. |
$this->addresses[] = array( |
'address' => trim($string), |
'group' => $is_group |
); |
// Remove the now stored address from the initial line, the +1 |
// is to account for the explode character. |
$address = trim(substr($address, strlen($string) + 1)); |
// If the next char is a comma and this was a group, then |
// there are more addresses, otherwise, if there are any more |
// chars, then there is another address. |
if ($is_group && substr($address, 0, 1) == ','){ |
$address = trim(substr($address, 1)); |
return $address; |
} elseif (strlen($address) > 0) { |
return $address; |
} else { |
return ''; |
} |
// If you got here then something's off |
return false; |
} |
/** |
* Checks for a group at the start of the string. |
* |
* @access private |
* @param string $address The address to check. |
* @return boolean Whether or not there is a group at the start of the string. |
*/ |
function _isGroup($address) |
{ |
// First comma not in quotes, angles or escaped: |
$parts = explode(',', $address); |
$string = $this->_splitCheck($parts, ','); |
// Now we have the first address, we can reliably check for a |
// group by searching for a colon that's not escaped or in |
// quotes or angle brackets. |
if (count($parts = explode(':', $string)) > 1) { |
$string2 = $this->_splitCheck($parts, ':'); |
return ($string2 !== $string); |
} else { |
return false; |
} |
} |
/** |
* A common function that will check an exploded string. |
* |
* @access private |
* @param array $parts The exloded string. |
* @param string $char The char that was exploded on. |
* @return mixed False if the string contains unclosed quotes/brackets, or the string on success. |
*/ |
function _splitCheck($parts, $char) |
{ |
$string = $parts[0]; |
for ($i = 0; $i < count($parts); $i++) { |
if ($this->_hasUnclosedQuotes($string) |
|| $this->_hasUnclosedBrackets($string, '<>') |
|| $this->_hasUnclosedBrackets($string, '[]') |
|| $this->_hasUnclosedBrackets($string, '()') |
|| substr($string, -1) == '\\') { |
if (isset($parts[$i + 1])) { |
$string = $string . $char . $parts[$i + 1]; |
} else { |
$this->error = 'Invalid address spec. Unclosed bracket or quotes'; |
return false; |
} |
} else { |
$this->index = $i; |
break; |
} |
} |
return $string; |
} |
/** |
* Checks if a string has an unclosed quotes or not. |
* |
* @access private |
* @param string $string The string to check. |
* @return boolean True if there are unclosed quotes inside the string, false otherwise. |
*/ |
function _hasUnclosedQuotes($string) |
{ |
$string = explode('"', $string); |
$string_cnt = count($string); |
for ($i = 0; $i < (count($string) - 1); $i++) |
if (substr($string[$i], -1) == '\\') |
$string_cnt--; |
return ($string_cnt % 2 === 0); |
} |
/** |
* Checks if a string has an unclosed brackets or not. IMPORTANT: |
* This function handles both angle brackets and square brackets; |
* |
* @access private |
* @param string $string The string to check. |
* @param string $chars The characters to check for. |
* @return boolean True if there are unclosed brackets inside the string, false otherwise. |
*/ |
function _hasUnclosedBrackets($string, $chars) |
{ |
$num_angle_start = substr_count($string, $chars[0]); |
$num_angle_end = substr_count($string, $chars[1]); |
$this->_hasUnclosedBracketsSub($string, $num_angle_start, $chars[0]); |
$this->_hasUnclosedBracketsSub($string, $num_angle_end, $chars[1]); |
if ($num_angle_start < $num_angle_end) { |
$this->error = 'Invalid address spec. Unmatched quote or bracket (' . $chars . ')'; |
return false; |
} else { |
return ($num_angle_start > $num_angle_end); |
} |
} |
/** |
* Sub function that is used only by hasUnclosedBrackets(). |
* |
* @access private |
* @param string $string The string to check. |
* @param integer &$num The number of occurences. |
* @param string $char The character to count. |
* @return integer The number of occurences of $char in $string, adjusted for backslashes. |
*/ |
function _hasUnclosedBracketsSub($string, &$num, $char) |
{ |
$parts = explode($char, $string); |
for ($i = 0; $i < count($parts); $i++){ |
if (substr($parts[$i], -1) == '\\' || $this->_hasUnclosedQuotes($parts[$i])) |
$num--; |
if (isset($parts[$i + 1])) |
$parts[$i + 1] = $parts[$i] . $char . $parts[$i + 1]; |
} |
return $num; |
} |
/** |
* Function to begin checking the address. |
* |
* @access private |
* @param string $address The address to validate. |
* @return mixed False on failure, or a structured array of address information on success. |
*/ |
function _validateAddress($address) |
{ |
$is_group = false; |
$addresses = array(); |
if ($address['group']) { |
$is_group = true; |
// Get the group part of the name |
$parts = explode(':', $address['address']); |
$groupname = $this->_splitCheck($parts, ':'); |
$structure = array(); |
// And validate the group part of the name. |
if (!$this->_validatePhrase($groupname)){ |
$this->error = 'Group name did not validate.'; |
return false; |
} else { |
// Don't include groups if we are not nesting |
// them. This avoids returning invalid addresses. |
if ($this->nestGroups) { |
$structure = new stdClass; |
$structure->groupname = $groupname; |
} |
} |
$address['address'] = ltrim(substr($address['address'], strlen($groupname . ':'))); |
} |
// If a group then split on comma and put into an array. |
// Otherwise, Just put the whole address in an array. |
if ($is_group) { |
while (strlen($address['address']) > 0) { |
$parts = explode(',', $address['address']); |
$addresses[] = $this->_splitCheck($parts, ','); |
$address['address'] = trim(substr($address['address'], strlen(end($addresses) . ','))); |
} |
} else { |
$addresses[] = $address['address']; |
} |
// Check that $addresses is set, if address like this: |
// Groupname:; |
// Then errors were appearing. |
if (!count($addresses)){ |
$this->error = 'Empty group.'; |
return false; |
} |
// Trim the whitespace from all of the address strings. |
array_map('trim', $addresses); |
// Validate each mailbox. |
// Format could be one of: name <geezer@domain.com> |
// geezer@domain.com |
// geezer |
// ... or any other format valid by RFC 822. |
for ($i = 0; $i < count($addresses); $i++) { |
if (!$this->validateMailbox($addresses[$i])) { |
if (empty($this->error)) { |
$this->error = 'Validation failed for: ' . $addresses[$i]; |
} |
return false; |
} |
} |
// Nested format |
if ($this->nestGroups) { |
if ($is_group) { |
$structure->addresses = $addresses; |
} else { |
$structure = $addresses[0]; |
} |
// Flat format |
} else { |
if ($is_group) { |
$structure = array_merge($structure, $addresses); |
} else { |
$structure = $addresses; |
} |
} |
return $structure; |
} |
/** |
* Function to validate a phrase. |
* |
* @access private |
* @param string $phrase The phrase to check. |
* @return boolean Success or failure. |
*/ |
function _validatePhrase($phrase) |
{ |
// Splits on one or more Tab or space. |
$parts = preg_split('/[ \\x09]+/', $phrase, -1, PREG_SPLIT_NO_EMPTY); |
$phrase_parts = array(); |
while (count($parts) > 0){ |
$phrase_parts[] = $this->_splitCheck($parts, ' '); |
for ($i = 0; $i < $this->index + 1; $i++) |
array_shift($parts); |
} |
foreach ($phrase_parts as $part) { |
// If quoted string: |
if (substr($part, 0, 1) == '"') { |
if (!$this->_validateQuotedString($part)) { |
return false; |
} |
continue; |
} |
// Otherwise it's an atom: |
if (!$this->_validateAtom($part)) return false; |
} |
return true; |
} |
/** |
* Function to validate an atom which from rfc822 is: |
* atom = 1*<any CHAR except specials, SPACE and CTLs> |
* |
* If validation ($this->validate) has been turned off, then |
* validateAtom() doesn't actually check anything. This is so that you |
* can split a list of addresses up before encoding personal names |
* (umlauts, etc.), for example. |
* |
* @access private |
* @param string $atom The string to check. |
* @return boolean Success or failure. |
*/ |
function _validateAtom($atom) |
{ |
if (!$this->validate) { |
// Validation has been turned off; assume the atom is okay. |
return true; |
} |
// Check for any char from ASCII 0 - ASCII 127 |
if (!preg_match('/^[\\x00-\\x7E]+$/i', $atom, $matches)) { |
return false; |
} |
// Check for specials: |
if (preg_match('/[][()<>@,;\\:". ]/', $atom)) { |
return false; |
} |
// Check for control characters (ASCII 0-31): |
if (preg_match('/[\\x00-\\x1F]+/', $atom)) { |
return false; |
} |
return true; |
} |
/** |
* Function to validate quoted string, which is: |
* quoted-string = <"> *(qtext/quoted-pair) <"> |
* |
* @access private |
* @param string $qstring The string to check |
* @return boolean Success or failure. |
*/ |
function _validateQuotedString($qstring) |
{ |
// Leading and trailing " |
$qstring = substr($qstring, 1, -1); |
// Perform check, removing quoted characters first. |
return !preg_match('/[\x0D\\\\"]/', preg_replace('/\\\\./', '', $qstring)); |
} |
/** |
* Function to validate a mailbox, which is: |
* mailbox = addr-spec ; simple address |
* / phrase route-addr ; name and route-addr |
* |
* @access public |
* @param string &$mailbox The string to check. |
* @return boolean Success or failure. |
*/ |
function validateMailbox(&$mailbox) |
{ |
// A couple of defaults. |
$phrase = ''; |
$comment = ''; |
$comments = array(); |
// Catch any RFC822 comments and store them separately. |
$_mailbox = $mailbox; |
while (strlen(trim($_mailbox)) > 0) { |
$parts = explode('(', $_mailbox); |
$before_comment = $this->_splitCheck($parts, '('); |
if ($before_comment != $_mailbox) { |
// First char should be a (. |
$comment = substr(str_replace($before_comment, '', $_mailbox), 1); |
$parts = explode(')', $comment); |
$comment = $this->_splitCheck($parts, ')'); |
$comments[] = $comment; |
// +1 is for the trailing ) |
$_mailbox = substr($_mailbox, strpos($_mailbox, $comment)+strlen($comment)+1); |
} else { |
break; |
} |
} |
foreach ($comments as $comment) { |
$mailbox = str_replace("($comment)", '', $mailbox); |
} |
$mailbox = trim($mailbox); |
// Check for name + route-addr |
if (substr($mailbox, -1) == '>' && substr($mailbox, 0, 1) != '<') { |
$parts = explode('<', $mailbox); |
$name = $this->_splitCheck($parts, '<'); |
$phrase = trim($name); |
$route_addr = trim(substr($mailbox, strlen($name.'<'), -1)); |
if ($this->_validatePhrase($phrase) === false || ($route_addr = $this->_validateRouteAddr($route_addr)) === false) { |
return false; |
} |
// Only got addr-spec |
} else { |
// First snip angle brackets if present. |
if (substr($mailbox, 0, 1) == '<' && substr($mailbox, -1) == '>') { |
$addr_spec = substr($mailbox, 1, -1); |
} else { |
$addr_spec = $mailbox; |
} |
if (($addr_spec = $this->_validateAddrSpec($addr_spec)) === false) { |
return false; |
} |
} |
// Construct the object that will be returned. |
$mbox = new stdClass(); |
// Add the phrase (even if empty) and comments |
$mbox->personal = $phrase; |
$mbox->comment = isset($comments) ? $comments : array(); |
if (isset($route_addr)) { |
$mbox->mailbox = $route_addr['local_part']; |
$mbox->host = $route_addr['domain']; |
$route_addr['adl'] !== '' ? $mbox->adl = $route_addr['adl'] : ''; |
} else { |
$mbox->mailbox = $addr_spec['local_part']; |
$mbox->host = $addr_spec['domain']; |
} |
$mailbox = $mbox; |
return true; |
} |
/** |
* This function validates a route-addr which is: |
* route-addr = "<" [route] addr-spec ">" |
* |
* Angle brackets have already been removed at the point of |
* getting to this function. |
* |
* @access private |
* @param string $route_addr The string to check. |
* @return mixed False on failure, or an array containing validated address/route information on success. |
*/ |
function _validateRouteAddr($route_addr) |
{ |
// Check for colon. |
if (strpos($route_addr, ':') !== false) { |
$parts = explode(':', $route_addr); |
$route = $this->_splitCheck($parts, ':'); |
} else { |
$route = $route_addr; |
} |
// If $route is same as $route_addr then the colon was in |
// quotes or brackets or, of course, non existent. |
if ($route === $route_addr){ |
unset($route); |
$addr_spec = $route_addr; |
if (($addr_spec = $this->_validateAddrSpec($addr_spec)) === false) { |
return false; |
} |
} else { |
// Validate route part. |
if (($route = $this->_validateRoute($route)) === false) { |
return false; |
} |
$addr_spec = substr($route_addr, strlen($route . ':')); |
// Validate addr-spec part. |
if (($addr_spec = $this->_validateAddrSpec($addr_spec)) === false) { |
return false; |
} |
} |
if (isset($route)) { |
$return['adl'] = $route; |
} else { |
$return['adl'] = ''; |
} |
$return = array_merge($return, $addr_spec); |
return $return; |
} |
/** |
* Function to validate a route, which is: |
* route = 1#("@" domain) ":" |
* |
* @access private |
* @param string $route The string to check. |
* @return mixed False on failure, or the validated $route on success. |
*/ |
function _validateRoute($route) |
{ |
// Split on comma. |
$domains = explode(',', trim($route)); |
foreach ($domains as $domain) { |
$domain = str_replace('@', '', trim($domain)); |
if (!$this->_validateDomain($domain)) return false; |
} |
return $route; |
} |
/** |
* Function to validate a domain, though this is not quite what |
* you expect of a strict internet domain. |
* |
* domain = sub-domain *("." sub-domain) |
* |
* @access private |
* @param string $domain The string to check. |
* @return mixed False on failure, or the validated domain on success. |
*/ |
function _validateDomain($domain) |
{ |
// Note the different use of $subdomains and $sub_domains |
$subdomains = explode('.', $domain); |
while (count($subdomains) > 0) { |
$sub_domains[] = $this->_splitCheck($subdomains, '.'); |
for ($i = 0; $i < $this->index + 1; $i++) |
array_shift($subdomains); |
} |
foreach ($sub_domains as $sub_domain) { |
if (!$this->_validateSubdomain(trim($sub_domain))) |
return false; |
} |
// Managed to get here, so return input. |
return $domain; |
} |
/** |
* Function to validate a subdomain: |
* subdomain = domain-ref / domain-literal |
* |
* @access private |
* @param string $subdomain The string to check. |
* @return boolean Success or failure. |
*/ |
function _validateSubdomain($subdomain) |
{ |
if (preg_match('|^\[(.*)]$|', $subdomain, $arr)){ |
if (!$this->_validateDliteral($arr[1])) return false; |
} else { |
if (!$this->_validateAtom($subdomain)) return false; |
} |
// Got here, so return successful. |
return true; |
} |
/** |
* Function to validate a domain literal: |
* domain-literal = "[" *(dtext / quoted-pair) "]" |
* |
* @access private |
* @param string $dliteral The string to check. |
* @return boolean Success or failure. |
*/ |
function _validateDliteral($dliteral) |
{ |
return !preg_match('/(.)[][\x0D\\\\]/', $dliteral, $matches) && $matches[1] != '\\'; |
} |
/** |
* Function to validate an addr-spec. |
* |
* addr-spec = local-part "@" domain |
* |
* @access private |
* @param string $addr_spec The string to check. |
* @return mixed False on failure, or the validated addr-spec on success. |
*/ |
function _validateAddrSpec($addr_spec) |
{ |
$addr_spec = trim($addr_spec); |
// Split on @ sign if there is one. |
if (strpos($addr_spec, '@') !== false) { |
$parts = explode('@', $addr_spec); |
$local_part = $this->_splitCheck($parts, '@'); |
$domain = substr($addr_spec, strlen($local_part . '@')); |
// No @ sign so assume the default domain. |
} else { |
$local_part = $addr_spec; |
$domain = $this->default_domain; |
} |
if (($local_part = $this->_validateLocalPart($local_part)) === false) return false; |
if (($domain = $this->_validateDomain($domain)) === false) return false; |
// Got here so return successful. |
return array('local_part' => $local_part, 'domain' => $domain); |
} |
/** |
* Function to validate the local part of an address: |
* local-part = word *("." word) |
* |
* @access private |
* @param string $local_part |
* @return mixed False on failure, or the validated local part on success. |
*/ |
function _validateLocalPart($local_part) |
{ |
$parts = explode('.', $local_part); |
$words = array(); |
// Split the local_part into words. |
while (count($parts) > 0){ |
$words[] = $this->_splitCheck($parts, '.'); |
for ($i = 0; $i < $this->index + 1; $i++) { |
array_shift($parts); |
} |
} |
// Validate each word. |
foreach ($words as $word) { |
// If this word contains an unquoted space, it is invalid. (6.2.4) |
if (strpos($word, ' ') && $word[0] !== '"') |
{ |
return false; |
} |
if ($this->_validatePhrase(trim($word)) === false) return false; |
} |
// Managed to get here, so return the input. |
return $local_part; |
} |
/** |
* Returns an approximate count of how many addresses are in the |
* given string. This is APPROXIMATE as it only splits based on a |
* comma which has no preceding backslash. Could be useful as |
* large amounts of addresses will end up producing *large* |
* structures when used with parseAddressList(). |
* |
* @param string $data Addresses to count |
* @return int Approximate count |
*/ |
function approximateCount($data) |
{ |
return count(preg_split('/(?<!\\\\),/', $data)); |
} |
/** |
* This is a email validating function separate to the rest of the |
* class. It simply validates whether an email is of the common |
* internet form: <user>@<domain>. This can be sufficient for most |
* people. Optional stricter mode can be utilised which restricts |
* mailbox characters allowed to alphanumeric, full stop, hyphen |
* and underscore. |
* |
* @param string $data Address to check |
* @param boolean $strict Optional stricter mode |
* @return mixed False if it fails, an indexed array |
* username/domain if it matches |
*/ |
function isValidInetAddress($data, $strict = false) |
{ |
$regex = $strict ? '/^([.0-9a-z_+-]+)@(([0-9a-z-]+\.)+[0-9a-z]{2,4})$/i' : '/^([*+!.&#$|\'\\%\/0-9a-z^_`{}=?~:-]+)@(([0-9a-z-]+\.)+[0-9a-z]{2,4})$/i'; |
if (preg_match($regex, trim($data), $matches)) { |
return array($matches[1], $matches[2]); |
} else { |
return false; |
} |
} |
} |
/branches/v1.0-menes/api/pear/Mail/mime.php |
---|
New file |
0,0 → 1,713 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ |
// +-----------------------------------------------------------------------+ |
// | Copyright (c) 2002-2003 Richard Heyes | |
// | Copyright (c) 2003-2005 The PHP Group | |
// | All rights reserved. | |
// | | |
// | Redistribution and use in source and binary forms, with or without | |
// | modification, are permitted provided that the following conditions | |
// | are met: | |
// | | |
// | o Redistributions of source code must retain the above copyright | |
// | notice, this list of conditions and the following disclaimer. | |
// | o 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.| |
// | o The names of the authors may not be used to endorse or promote | |
// | products derived from this software without specific prior written | |
// | permission. | |
// | | |
// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | |
// | "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 COPYRIGHT | |
// | OWNER OR CONTRIBUTORS 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. | |
// | | |
// +-----------------------------------------------------------------------+ |
// | Author: Richard Heyes <richard@phpguru.org> | |
// | Tomas V.V.Cox <cox@idecnet.com> (port to PEAR) | |
// +-----------------------------------------------------------------------+ |
// |
// $Id: mime.php,v 1.1 2006-09-13 08:49:41 alexandre_tb Exp $ |
require_once('PEAR.php'); |
require_once('Mail/mimePart.php'); |
/** |
* Mime mail composer class. Can handle: text and html bodies, embedded html |
* images and attachments. |
* Documentation and examples of this class are avaible here: |
* http://pear.php.net/manual/ |
* |
* @notes This class is based on HTML Mime Mail class from |
* Richard Heyes <richard@phpguru.org> which was based also |
* in the mime_mail.class by Tobias Ratschiller <tobias@dnet.it> and |
* Sascha Schumann <sascha@schumann.cx> |
* |
* @author Richard Heyes <richard.heyes@heyes-computing.net> |
* @author Tomas V.V.Cox <cox@idecnet.com> |
* @package Mail |
* @access public |
*/ |
class Mail_mime |
{ |
/** |
* Contains the plain text part of the email |
* @var string |
*/ |
var $_txtbody; |
/** |
* Contains the html part of the email |
* @var string |
*/ |
var $_htmlbody; |
/** |
* contains the mime encoded text |
* @var string |
*/ |
var $_mime; |
/** |
* contains the multipart content |
* @var string |
*/ |
var $_multipart; |
/** |
* list of the attached images |
* @var array |
*/ |
var $_html_images = array(); |
/** |
* list of the attachements |
* @var array |
*/ |
var $_parts = array(); |
/** |
* Build parameters |
* @var array |
*/ |
var $_build_params = array(); |
/** |
* Headers for the mail |
* @var array |
*/ |
var $_headers = array(); |
/** |
* End Of Line sequence (for serialize) |
* @var string |
*/ |
var $_eol; |
/** |
* Constructor function |
* |
* @access public |
*/ |
function Mail_mime($crlf = "\r\n") |
{ |
$this->_setEOL($crlf); |
$this->_build_params = array( |
'text_encoding' => '7bit', |
'html_encoding' => 'quoted-printable', |
'7bit_wrap' => 998, |
'html_charset' => 'ISO-8859-1', |
'text_charset' => 'ISO-8859-1', |
'head_charset' => 'ISO-8859-1' |
); |
} |
/** |
* Wakeup (unserialize) - re-sets EOL constant |
* |
* @access private |
*/ |
function __wakeup() |
{ |
$this->_setEOL($this->_eol); |
} |
/** |
* Accessor function to set the body text. Body text is used if |
* it's not an html mail being sent or else is used to fill the |
* text/plain part that emails clients who don't support |
* html should show. |
* |
* @param string $data Either a string or |
* the file name with the contents |
* @param bool $isfile If true the first param should be treated |
* as a file name, else as a string (default) |
* @param bool $append If true the text or file is appended to |
* the existing body, else the old body is |
* overwritten |
* @return mixed true on success or PEAR_Error object |
* @access public |
*/ |
function setTXTBody($data, $isfile = false, $append = false) |
{ |
if (!$isfile) { |
if (!$append) { |
$this->_txtbody = $data; |
} else { |
$this->_txtbody .= $data; |
} |
} else { |
$cont = $this->_file2str($data); |
if (PEAR::isError($cont)) { |
return $cont; |
} |
if (!$append) { |
$this->_txtbody = $cont; |
} else { |
$this->_txtbody .= $cont; |
} |
} |
return true; |
} |
/** |
* Adds a html part to the mail |
* |
* @param string $data Either a string or the file name with the |
* contents |
* @param bool $isfile If true the first param should be treated |
* as a file name, else as a string (default) |
* @return mixed true on success or PEAR_Error object |
* @access public |
*/ |
function setHTMLBody($data, $isfile = false) |
{ |
if (!$isfile) { |
$this->_htmlbody = $data; |
} else { |
$cont = $this->_file2str($data); |
if (PEAR::isError($cont)) { |
return $cont; |
} |
$this->_htmlbody = $cont; |
} |
return true; |
} |
/** |
* Adds an image to the list of embedded images. |
* |
* @param string $file The image file name OR image data itself |
* @param string $c_type The content type |
* @param string $name The filename of the image. |
* Only use if $file is the image data |
* @param bool $isfilename Whether $file is a filename or not |
* Defaults to true |
* @return mixed true on success or PEAR_Error object |
* @access public |
*/ |
function addHTMLImage($file, $c_type='application/octet-stream', |
$name = '', $isfilename = true) |
{ |
$filedata = ($isfilename === true) ? $this->_file2str($file) |
: $file; |
if ($isfilename === true) { |
$filename = ($name == '' ? basename($file) : basename($name)); |
} else { |
$filename = basename($name); |
} |
if (PEAR::isError($filedata)) { |
return $filedata; |
} |
$this->_html_images[] = array( |
'body' => $filedata, |
'name' => $filename, |
'c_type' => $c_type, |
'cid' => md5(uniqid(time())) |
); |
return true; |
} |
/** |
* Adds a file to the list of attachments. |
* |
* @param string $file The file name of the file to attach |
* OR the file data itself |
* @param string $c_type The content type |
* @param string $name The filename of the attachment |
* Only use if $file is the file data |
* @param bool $isFilename Whether $file is a filename or not |
* Defaults to true |
* @return mixed true on success or PEAR_Error object |
* @access public |
*/ |
function addAttachment($file, $c_type = 'application/octet-stream', |
$name = '', $isfilename = true, |
$encoding = 'base64') |
{ |
$filedata = ($isfilename === true) ? $this->_file2str($file) |
: $file; |
if ($isfilename === true) { |
// Force the name the user supplied, otherwise use $file |
$filename = (!empty($name)) ? $name : $file; |
} else { |
$filename = $name; |
} |
if (empty($filename)) { |
return PEAR::raiseError( |
'The supplied filename for the attachment can\'t be empty' |
); |
} |
$filename = basename($filename); |
if (PEAR::isError($filedata)) { |
return $filedata; |
} |
$this->_parts[] = array( |
'body' => $filedata, |
'name' => $filename, |
'c_type' => $c_type, |
'encoding' => $encoding |
); |
return true; |
} |
/** |
* Get the contents of the given file name as string |
* |
* @param string $file_name path of file to process |
* @return string contents of $file_name |
* @access private |
*/ |
function &_file2str($file_name) |
{ |
if (!is_readable($file_name)) { |
return PEAR::raiseError('File is not readable ' . $file_name); |
} |
if (!$fd = fopen($file_name, 'rb')) { |
return PEAR::raiseError('Could not open ' . $file_name); |
} |
$filesize = filesize($file_name); |
if ($filesize == 0){ |
$cont = ""; |
}else{ |
$cont = fread($fd, $filesize); |
} |
fclose($fd); |
return $cont; |
} |
/** |
* Adds a text subpart to the mimePart object and |
* returns it during the build process. |
* |
* @param mixed The object to add the part to, or |
* null if a new object is to be created. |
* @param string The text to add. |
* @return object The text mimePart object |
* @access private |
*/ |
function &_addTextPart(&$obj, $text) |
{ |
$params['content_type'] = 'text/plain'; |
$params['encoding'] = $this->_build_params['text_encoding']; |
$params['charset'] = $this->_build_params['text_charset']; |
if (is_object($obj)) { |
return $obj->addSubpart($text, $params); |
} else { |
return new Mail_mimePart($text, $params); |
} |
} |
/** |
* Adds a html subpart to the mimePart object and |
* returns it during the build process. |
* |
* @param mixed The object to add the part to, or |
* null if a new object is to be created. |
* @return object The html mimePart object |
* @access private |
*/ |
function &_addHtmlPart(&$obj) |
{ |
$params['content_type'] = 'text/html'; |
$params['encoding'] = $this->_build_params['html_encoding']; |
$params['charset'] = $this->_build_params['html_charset']; |
if (is_object($obj)) { |
return $obj->addSubpart($this->_htmlbody, $params); |
} else { |
return new Mail_mimePart($this->_htmlbody, $params); |
} |
} |
/** |
* Creates a new mimePart object, using multipart/mixed as |
* the initial content-type and returns it during the |
* build process. |
* |
* @return object The multipart/mixed mimePart object |
* @access private |
*/ |
function &_addMixedPart() |
{ |
$params['content_type'] = 'multipart/mixed'; |
return new Mail_mimePart('', $params); |
} |
/** |
* Adds a multipart/alternative part to a mimePart |
* object (or creates one), and returns it during |
* the build process. |
* |
* @param mixed The object to add the part to, or |
* null if a new object is to be created. |
* @return object The multipart/mixed mimePart object |
* @access private |
*/ |
function &_addAlternativePart(&$obj) |
{ |
$params['content_type'] = 'multipart/alternative'; |
if (is_object($obj)) { |
return $obj->addSubpart('', $params); |
} else { |
return new Mail_mimePart('', $params); |
} |
} |
/** |
* Adds a multipart/related part to a mimePart |
* object (or creates one), and returns it during |
* the build process. |
* |
* @param mixed The object to add the part to, or |
* null if a new object is to be created |
* @return object The multipart/mixed mimePart object |
* @access private |
*/ |
function &_addRelatedPart(&$obj) |
{ |
$params['content_type'] = 'multipart/related'; |
if (is_object($obj)) { |
return $obj->addSubpart('', $params); |
} else { |
return new Mail_mimePart('', $params); |
} |
} |
/** |
* Adds an html image subpart to a mimePart object |
* and returns it during the build process. |
* |
* @param object The mimePart to add the image to |
* @param array The image information |
* @return object The image mimePart object |
* @access private |
*/ |
function &_addHtmlImagePart(&$obj, $value) |
{ |
$params['content_type'] = $value['c_type']; |
$params['encoding'] = 'base64'; |
$params['disposition'] = 'inline'; |
$params['dfilename'] = $value['name']; |
$params['cid'] = $value['cid']; |
$obj->addSubpart($value['body'], $params); |
} |
/** |
* Adds an attachment subpart to a mimePart object |
* and returns it during the build process. |
* |
* @param object The mimePart to add the image to |
* @param array The attachment information |
* @return object The image mimePart object |
* @access private |
*/ |
function &_addAttachmentPart(&$obj, $value) |
{ |
$params['content_type'] = $value['c_type']; |
$params['encoding'] = $value['encoding']; |
$params['disposition'] = 'attachment'; |
$params['dfilename'] = $value['name']; |
$obj->addSubpart($value['body'], $params); |
} |
/** |
* Builds the multipart message from the list ($this->_parts) and |
* returns the mime content. |
* |
* @param array Build parameters that change the way the email |
* is built. Should be associative. Can contain: |
* text_encoding - What encoding to use for plain text |
* Default is 7bit |
* html_encoding - What encoding to use for html |
* Default is quoted-printable |
* 7bit_wrap - Number of characters before text is |
* wrapped in 7bit encoding |
* Default is 998 |
* html_charset - The character set to use for html. |
* Default is iso-8859-1 |
* text_charset - The character set to use for text. |
* Default is iso-8859-1 |
* head_charset - The character set to use for headers. |
* Default is iso-8859-1 |
* @return string The mime content |
* @access public |
*/ |
function &get($build_params = null) |
{ |
if (isset($build_params)) { |
while (list($key, $value) = each($build_params)) { |
$this->_build_params[$key] = $value; |
} |
} |
if (!empty($this->_html_images) AND isset($this->_htmlbody)) { |
foreach ($this->_html_images as $value) { |
$regex = '#(\s)((?i)src|background|href(?-i))\s*=\s*(["\']?)' . preg_quote($value['name'], '#') . |
'\3#'; |
$rep = '\1\2=\3cid:' . $value['cid'] .'\3'; |
$this->_htmlbody = preg_replace($regex, $rep, |
$this->_htmlbody |
); |
} |
} |
$null = null; |
$attachments = !empty($this->_parts) ? true : false; |
$html_images = !empty($this->_html_images) ? true : false; |
$html = !empty($this->_htmlbody) ? true : false; |
$text = (!$html AND !empty($this->_txtbody)) ? true : false; |
switch (true) { |
case $text AND !$attachments: |
$message =& $this->_addTextPart($null, $this->_txtbody); |
break; |
case !$text AND !$html AND $attachments: |
$message =& $this->_addMixedPart(); |
for ($i = 0; $i < count($this->_parts); $i++) { |
$this->_addAttachmentPart($message, $this->_parts[$i]); |
} |
break; |
case $text AND $attachments: |
$message =& $this->_addMixedPart(); |
$this->_addTextPart($message, $this->_txtbody); |
for ($i = 0; $i < count($this->_parts); $i++) { |
$this->_addAttachmentPart($message, $this->_parts[$i]); |
} |
break; |
case $html AND !$attachments AND !$html_images: |
if (isset($this->_txtbody)) { |
$message =& $this->_addAlternativePart($null); |
$this->_addTextPart($message, $this->_txtbody); |
$this->_addHtmlPart($message); |
} else { |
$message =& $this->_addHtmlPart($null); |
} |
break; |
case $html AND !$attachments AND $html_images: |
if (isset($this->_txtbody)) { |
$message =& $this->_addAlternativePart($null); |
$this->_addTextPart($message, $this->_txtbody); |
$related =& $this->_addRelatedPart($message); |
} else { |
$message =& $this->_addRelatedPart($null); |
$related =& $message; |
} |
$this->_addHtmlPart($related); |
for ($i = 0; $i < count($this->_html_images); $i++) { |
$this->_addHtmlImagePart($related, $this->_html_images[$i]); |
} |
break; |
case $html AND $attachments AND !$html_images: |
$message =& $this->_addMixedPart(); |
if (isset($this->_txtbody)) { |
$alt =& $this->_addAlternativePart($message); |
$this->_addTextPart($alt, $this->_txtbody); |
$this->_addHtmlPart($alt); |
} else { |
$this->_addHtmlPart($message); |
} |
for ($i = 0; $i < count($this->_parts); $i++) { |
$this->_addAttachmentPart($message, $this->_parts[$i]); |
} |
break; |
case $html AND $attachments AND $html_images: |
$message =& $this->_addMixedPart(); |
if (isset($this->_txtbody)) { |
$alt =& $this->_addAlternativePart($message); |
$this->_addTextPart($alt, $this->_txtbody); |
$rel =& $this->_addRelatedPart($alt); |
} else { |
$rel =& $this->_addRelatedPart($message); |
} |
$this->_addHtmlPart($rel); |
for ($i = 0; $i < count($this->_html_images); $i++) { |
$this->_addHtmlImagePart($rel, $this->_html_images[$i]); |
} |
for ($i = 0; $i < count($this->_parts); $i++) { |
$this->_addAttachmentPart($message, $this->_parts[$i]); |
} |
break; |
} |
if (isset($message)) { |
$output = $message->encode(); |
$this->_headers = array_merge($this->_headers, |
$output['headers']); |
return $output['body']; |
} else { |
return false; |
} |
} |
/** |
* Returns an array with the headers needed to prepend to the email |
* (MIME-Version and Content-Type). Format of argument is: |
* $array['header-name'] = 'header-value'; |
* |
* @param array $xtra_headers Assoc array with any extra headers. |
* Optional. |
* @return array Assoc array with the mime headers |
* @access public |
*/ |
function &headers($xtra_headers = null) |
{ |
// Content-Type header should already be present, |
// So just add mime version header |
$headers['MIME-Version'] = '1.0'; |
if (isset($xtra_headers)) { |
$headers = array_merge($headers, $xtra_headers); |
} |
$this->_headers = array_merge($headers, $this->_headers); |
return $this->_encodeHeaders($this->_headers); |
} |
/** |
* Get the text version of the headers |
* (usefull if you want to use the PHP mail() function) |
* |
* @param array $xtra_headers Assoc array with any extra headers. |
* Optional. |
* @return string Plain text headers |
* @access public |
*/ |
function txtHeaders($xtra_headers = null) |
{ |
$headers = $this->headers($xtra_headers); |
$ret = ''; |
foreach ($headers as $key => $val) { |
$ret .= "$key: $val" . MAIL_MIME_CRLF; |
} |
return $ret; |
} |
/** |
* Sets the Subject header |
* |
* @param string $subject String to set the subject to |
* access public |
*/ |
function setSubject($subject) |
{ |
$this->_headers['Subject'] = $subject; |
} |
/** |
* Set an email to the From (the sender) header |
* |
* @param string $email The email direction to add |
* @access public |
*/ |
function setFrom($email) |
{ |
$this->_headers['From'] = $email; |
} |
/** |
* Add an email to the Cc (carbon copy) header |
* (multiple calls to this method are allowed) |
* |
* @param string $email The email direction to add |
* @access public |
*/ |
function addCc($email) |
{ |
if (isset($this->_headers['Cc'])) { |
$this->_headers['Cc'] .= ", $email"; |
} else { |
$this->_headers['Cc'] = $email; |
} |
} |
/** |
* Add an email to the Bcc (blank carbon copy) header |
* (multiple calls to this method are allowed) |
* |
* @param string $email The email direction to add |
* @access public |
*/ |
function addBcc($email) |
{ |
if (isset($this->_headers['Bcc'])) { |
$this->_headers['Bcc'] .= ", $email"; |
} else { |
$this->_headers['Bcc'] = $email; |
} |
} |
/** |
* Encodes a header as per RFC2047 |
* |
* @param string $input The header data to encode |
* @return string Encoded data |
* @access private |
*/ |
function _encodeHeaders($input) |
{ |
foreach ($input as $hdr_name => $hdr_value) { |
preg_match_all('/(\w*[\x80-\xFF]+\w*)/', $hdr_value, $matches); |
foreach ($matches[1] as $value) { |
$replacement = preg_replace('/([\x80-\xFF])/e', |
'"=" . |
strtoupper(dechex(ord("\1")))', |
$value); |
$hdr_value = str_replace($value, '=?' . |
$this->_build_params['head_charset'] . |
'?Q?' . $replacement . '?=', |
$hdr_value); |
} |
$input[$hdr_name] = $hdr_value; |
} |
return $input; |
} |
/** |
* Set the object's end-of-line and define the constant if applicable |
* |
* @param string $eol End Of Line sequence |
* @access private |
*/ |
function _setEOL($eol) |
{ |
$this->_eol = $eol; |
if (!defined('MAIL_MIME_CRLF')) { |
define('MAIL_MIME_CRLF', $this->_eol, true); |
} |
} |
} // End of class |
?> |
/branches/v1.0-menes/api/pear/Mail/null.php |
---|
New file |
0,0 → 1,60 |
<?php |
// |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2003 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.02 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Author: Phil Kernick <philk@rotfl.com.au> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: null.php,v 1.1 2005-11-24 16:15:46 florian Exp $ |
// |
/** |
* Null implementation of the PEAR Mail:: interface. |
* @access public |
* @package Mail |
* @version $Revision: 1.1 $ |
*/ |
class Mail_null extends Mail { |
/** |
* Implements Mail_null::send() function. Silently discards all |
* mail. |
* |
* @param mixed $recipients Either a comma-seperated list of recipients |
* (RFC822 compliant), or an array of recipients, |
* each RFC822 valid. This may contain recipients not |
* specified in the headers, for Bcc:, resending |
* messages, etc. |
* |
* @param array $headers The array of headers to send with the mail, in an |
* associative array, where the array key is the |
* header name (ie, 'Subject'), and the array value |
* is the header value (ie, 'test'). The header |
* produced from those values would be 'Subject: |
* test'. |
* |
* @param string $body The full text of the message body, including any |
* Mime parts, etc. |
* |
* @return mixed Returns true on success, or a PEAR_Error |
* containing a descriptive error message on |
* failure. |
* @access public |
*/ |
function send($recipients, $headers, $body) |
{ |
return true; |
} |
} |
/branches/v1.0-menes/api/pear/Mail/mimeDecode.php |
---|
New file |
0,0 → 1,837 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ |
// +-----------------------------------------------------------------------+ |
// | Copyright (c) 2002-2003 Richard Heyes | |
// | Copyright (c) 2003-2005 The PHP Group | |
// | All rights reserved. | |
// | | |
// | Redistribution and use in source and binary forms, with or without | |
// | modification, are permitted provided that the following conditions | |
// | are met: | |
// | | |
// | o Redistributions of source code must retain the above copyright | |
// | notice, this list of conditions and the following disclaimer. | |
// | o 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.| |
// | o The names of the authors may not be used to endorse or promote | |
// | products derived from this software without specific prior written | |
// | permission. | |
// | | |
// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | |
// | "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 COPYRIGHT | |
// | OWNER OR CONTRIBUTORS 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. | |
// | | |
// +-----------------------------------------------------------------------+ |
// | Author: Richard Heyes <richard@phpguru.org> | |
// +-----------------------------------------------------------------------+ |
require_once 'PEAR.php'; |
/** |
* +----------------------------- IMPORTANT ------------------------------+ |
* | Usage of this class compared to native php extensions such as | |
* | mailparse or imap, is slow and may be feature deficient. If available| |
* | you are STRONGLY recommended to use the php extensions. | |
* +----------------------------------------------------------------------+ |
* |
* Mime Decoding class |
* |
* This class will parse a raw mime email and return |
* the structure. Returned structure is similar to |
* that returned by imap_fetchstructure(). |
* |
* USAGE: (assume $input is your raw email) |
* |
* $decode = new Mail_mimeDecode($input, "\r\n"); |
* $structure = $decode->decode(); |
* print_r($structure); |
* |
* Or statically: |
* |
* $params['input'] = $input; |
* $structure = Mail_mimeDecode::decode($params); |
* print_r($structure); |
* |
* TODO: |
* o Implement multipart/appledouble |
* o UTF8: ??? |
> 4. We have also found a solution for decoding the UTF-8 |
> headers. Therefore I made the following function: |
> |
> function decode_utf8($txt) { |
> $trans=array("Å‘"=>"õ","ű"=>"û","Å"=>"Õ","Å°" |
=>"Û"); |
> $txt=strtr($txt,$trans); |
> return(utf8_decode($txt)); |
> } |
> |
> And I have inserted the following line to the class: |
> |
> if (strtolower($charset)=="utf-8") $text=decode_utf8($text); |
> |
> ... before the following one in the "_decodeHeader" function: |
> |
> $input = str_replace($encoded, $text, $input); |
> |
> This way from now on it can easily decode the UTF-8 headers too. |
* |
* @author Richard Heyes <richard@phpguru.org> |
* @version $Revision: 1.1 $ |
* @package Mail |
*/ |
class Mail_mimeDecode extends PEAR |
{ |
/** |
* The raw email to decode |
* @var string |
*/ |
var $_input; |
/** |
* The header part of the input |
* @var string |
*/ |
var $_header; |
/** |
* The body part of the input |
* @var string |
*/ |
var $_body; |
/** |
* If an error occurs, this is used to store the message |
* @var string |
*/ |
var $_error; |
/** |
* Flag to determine whether to include bodies in the |
* returned object. |
* @var boolean |
*/ |
var $_include_bodies; |
/** |
* Flag to determine whether to decode bodies |
* @var boolean |
*/ |
var $_decode_bodies; |
/** |
* Flag to determine whether to decode headers |
* @var boolean |
*/ |
var $_decode_headers; |
/** |
* Constructor. |
* |
* Sets up the object, initialise the variables, and splits and |
* stores the header and body of the input. |
* |
* @param string The input to decode |
* @access public |
*/ |
function Mail_mimeDecode($input) |
{ |
list($header, $body) = $this->_splitBodyHeader($input); |
$this->_input = $input; |
$this->_header = $header; |
$this->_body = $body; |
$this->_decode_bodies = false; |
$this->_include_bodies = true; |
} |
/** |
* Begins the decoding process. If called statically |
* it will create an object and call the decode() method |
* of it. |
* |
* @param array An array of various parameters that determine |
* various things: |
* include_bodies - Whether to include the body in the returned |
* object. |
* decode_bodies - Whether to decode the bodies |
* of the parts. (Transfer encoding) |
* decode_headers - Whether to decode headers |
* input - If called statically, this will be treated |
* as the input |
* @return object Decoded results |
* @access public |
*/ |
function decode($params = null) |
{ |
// determine if this method has been called statically |
$isStatic = !(isset($this) && get_class($this) == __CLASS__); |
// Have we been called statically? |
// If so, create an object and pass details to that. |
if ($isStatic AND isset($params['input'])) { |
$obj = new Mail_mimeDecode($params['input']); |
$structure = $obj->decode($params); |
// Called statically but no input |
} elseif ($isStatic) { |
return PEAR::raiseError('Called statically and no input given'); |
// Called via an object |
} else { |
$this->_include_bodies = isset($params['include_bodies']) ? |
$params['include_bodies'] : false; |
$this->_decode_bodies = isset($params['decode_bodies']) ? |
$params['decode_bodies'] : false; |
$this->_decode_headers = isset($params['decode_headers']) ? |
$params['decode_headers'] : false; |
$structure = $this->_decode($this->_header, $this->_body); |
if ($structure === false) { |
$structure = $this->raiseError($this->_error); |
} |
} |
return $structure; |
} |
/** |
* Performs the decoding. Decodes the body string passed to it |
* If it finds certain content-types it will call itself in a |
* recursive fashion |
* |
* @param string Header section |
* @param string Body section |
* @return object Results of decoding process |
* @access private |
*/ |
function _decode($headers, $body, $default_ctype = 'text/plain') |
{ |
$return = new stdClass; |
$return->headers = array(); |
$headers = $this->_parseHeaders($headers); |
foreach ($headers as $value) { |
if (isset($return->headers[strtolower($value['name'])]) AND !is_array($return->headers[strtolower($value['name'])])) { |
$return->headers[strtolower($value['name'])] = array($return->headers[strtolower($value['name'])]); |
$return->headers[strtolower($value['name'])][] = $value['value']; |
} elseif (isset($return->headers[strtolower($value['name'])])) { |
$return->headers[strtolower($value['name'])][] = $value['value']; |
} else { |
$return->headers[strtolower($value['name'])] = $value['value']; |
} |
} |
reset($headers); |
while (list($key, $value) = each($headers)) { |
$headers[$key]['name'] = strtolower($headers[$key]['name']); |
switch ($headers[$key]['name']) { |
case 'content-type': |
$content_type = $this->_parseHeaderValue($headers[$key]['value']); |
if (preg_match('/([0-9a-z+.-]+)\/([0-9a-z+.-]+)/i', $content_type['value'], $regs)) { |
$return->ctype_primary = $regs[1]; |
$return->ctype_secondary = $regs[2]; |
} |
if (isset($content_type['other'])) { |
while (list($p_name, $p_value) = each($content_type['other'])) { |
$return->ctype_parameters[$p_name] = $p_value; |
} |
} |
break; |
case 'content-disposition': |
$content_disposition = $this->_parseHeaderValue($headers[$key]['value']); |
$return->disposition = $content_disposition['value']; |
if (isset($content_disposition['other'])) { |
while (list($p_name, $p_value) = each($content_disposition['other'])) { |
$return->d_parameters[$p_name] = $p_value; |
} |
} |
break; |
case 'content-transfer-encoding': |
$content_transfer_encoding = $this->_parseHeaderValue($headers[$key]['value']); |
break; |
} |
} |
if (isset($content_type)) { |
switch (strtolower($content_type['value'])) { |
case 'text/plain': |
$encoding = isset($content_transfer_encoding) ? $content_transfer_encoding['value'] : '7bit'; |
$this->_include_bodies ? $return->body = ($this->_decode_bodies ? $this->_decodeBody($body, $encoding) : $body) : null; |
break; |
case 'text/html': |
$encoding = isset($content_transfer_encoding) ? $content_transfer_encoding['value'] : '7bit'; |
$this->_include_bodies ? $return->body = ($this->_decode_bodies ? $this->_decodeBody($body, $encoding) : $body) : null; |
break; |
case 'multipart/parallel': |
case 'multipart/report': // RFC1892 |
case 'multipart/signed': // PGP |
case 'multipart/digest': |
case 'multipart/alternative': |
case 'multipart/related': |
case 'multipart/mixed': |
if(!isset($content_type['other']['boundary'])){ |
$this->_error = 'No boundary found for ' . $content_type['value'] . ' part'; |
return false; |
} |
$default_ctype = (strtolower($content_type['value']) === 'multipart/digest') ? 'message/rfc822' : 'text/plain'; |
$parts = $this->_boundarySplit($body, $content_type['other']['boundary']); |
for ($i = 0; $i < count($parts); $i++) { |
list($part_header, $part_body) = $this->_splitBodyHeader($parts[$i]); |
$part = $this->_decode($part_header, $part_body, $default_ctype); |
if($part === false) |
$part = $this->raiseError($this->_error); |
$return->parts[] = $part; |
} |
break; |
case 'message/rfc822': |
$obj = &new Mail_mimeDecode($body); |
$return->parts[] = $obj->decode(array('include_bodies' => $this->_include_bodies, |
'decode_bodies' => $this->_decode_bodies, |
'decode_headers' => $this->_decode_headers)); |
unset($obj); |
break; |
default: |
if(!isset($content_transfer_encoding['value'])) |
$content_transfer_encoding['value'] = '7bit'; |
$this->_include_bodies ? $return->body = ($this->_decode_bodies ? $this->_decodeBody($body, $content_transfer_encoding['value']) : $body) : null; |
break; |
} |
} else { |
$ctype = explode('/', $default_ctype); |
$return->ctype_primary = $ctype[0]; |
$return->ctype_secondary = $ctype[1]; |
$this->_include_bodies ? $return->body = ($this->_decode_bodies ? $this->_decodeBody($body) : $body) : null; |
} |
return $return; |
} |
/** |
* Given the output of the above function, this will return an |
* array of references to the parts, indexed by mime number. |
* |
* @param object $structure The structure to go through |
* @param string $mime_number Internal use only. |
* @return array Mime numbers |
*/ |
function &getMimeNumbers(&$structure, $no_refs = false, $mime_number = '', $prepend = '') |
{ |
$return = array(); |
if (!empty($structure->parts)) { |
if ($mime_number != '') { |
$structure->mime_id = $prepend . $mime_number; |
$return[$prepend . $mime_number] = &$structure; |
} |
for ($i = 0; $i < count($structure->parts); $i++) { |
if (!empty($structure->headers['content-type']) AND substr(strtolower($structure->headers['content-type']), 0, 8) == 'message/') { |
$prepend = $prepend . $mime_number . '.'; |
$_mime_number = ''; |
} else { |
$_mime_number = ($mime_number == '' ? $i + 1 : sprintf('%s.%s', $mime_number, $i + 1)); |
} |
$arr = &Mail_mimeDecode::getMimeNumbers($structure->parts[$i], $no_refs, $_mime_number, $prepend); |
foreach ($arr as $key => $val) { |
$no_refs ? $return[$key] = '' : $return[$key] = &$arr[$key]; |
} |
} |
} else { |
if ($mime_number == '') { |
$mime_number = '1'; |
} |
$structure->mime_id = $prepend . $mime_number; |
$no_refs ? $return[$prepend . $mime_number] = '' : $return[$prepend . $mime_number] = &$structure; |
} |
return $return; |
} |
/** |
* Given a string containing a header and body |
* section, this function will split them (at the first |
* blank line) and return them. |
* |
* @param string Input to split apart |
* @return array Contains header and body section |
* @access private |
*/ |
function _splitBodyHeader($input) |
{ |
if (preg_match("/^(.*?)\r?\n\r?\n(.*)/s", $input, $match)) { |
return array($match[1], $match[2]); |
} |
$this->_error = 'Could not split header and body'; |
return false; |
} |
/** |
* Parse headers given in $input and return |
* as assoc array. |
* |
* @param string Headers to parse |
* @return array Contains parsed headers |
* @access private |
*/ |
function _parseHeaders($input) |
{ |
if ($input !== '') { |
// Unfold the input |
$input = preg_replace("/\r?\n/", "\r\n", $input); |
$input = preg_replace("/\r\n(\t| )+/", ' ', $input); |
$headers = explode("\r\n", trim($input)); |
foreach ($headers as $value) { |
$hdr_name = substr($value, 0, $pos = strpos($value, ':')); |
$hdr_value = substr($value, $pos+1); |
if($hdr_value[0] == ' ') |
$hdr_value = substr($hdr_value, 1); |
$return[] = array( |
'name' => $hdr_name, |
'value' => $this->_decode_headers ? $this->_decodeHeader($hdr_value) : $hdr_value |
); |
} |
} else { |
$return = array(); |
} |
return $return; |
} |
/** |
* Function to parse a header value, |
* extract first part, and any secondary |
* parts (after ;) This function is not as |
* robust as it could be. Eg. header comments |
* in the wrong place will probably break it. |
* |
* @param string Header value to parse |
* @return array Contains parsed result |
* @access private |
*/ |
function _parseHeaderValue($input) |
{ |
if (($pos = strpos($input, ';')) !== false) { |
$return['value'] = trim(substr($input, 0, $pos)); |
$input = trim(substr($input, $pos+1)); |
if (strlen($input) > 0) { |
// This splits on a semi-colon, if there's no preceeding backslash |
// Now works with quoted values; had to glue the \; breaks in PHP |
// the regex is already bordering on incomprehensible |
$splitRegex = '/([^;\'"]*[\'"]([^\'"]*([^\'"]*)*)[\'"][^;\'"]*|([^;]+))(;|$)/'; |
preg_match_all($splitRegex, $input, $matches); |
$parameters = array(); |
for ($i=0; $i<count($matches[0]); $i++) { |
$param = $matches[0][$i]; |
while (substr($param, -2) == '\;') { |
$param .= $matches[0][++$i]; |
} |
$parameters[] = $param; |
} |
for ($i = 0; $i < count($parameters); $i++) { |
$param_name = trim(substr($parameters[$i], 0, $pos = strpos($parameters[$i], '=')), "'\";\t\\ "); |
$param_value = trim(str_replace('\;', ';', substr($parameters[$i], $pos + 1)), "'\";\t\\ "); |
if ($param_value[0] == '"') { |
$param_value = substr($param_value, 1, -1); |
} |
$return['other'][$param_name] = $param_value; |
$return['other'][strtolower($param_name)] = $param_value; |
} |
} |
} else { |
$return['value'] = trim($input); |
} |
return $return; |
} |
/** |
* This function splits the input based |
* on the given boundary |
* |
* @param string Input to parse |
* @return array Contains array of resulting mime parts |
* @access private |
*/ |
function _boundarySplit($input, $boundary) |
{ |
$parts = array(); |
$bs_possible = substr($boundary, 2, -2); |
$bs_check = '\"' . $bs_possible . '\"'; |
if ($boundary == $bs_check) { |
$boundary = $bs_possible; |
} |
$tmp = explode('--' . $boundary, $input); |
for ($i = 1; $i < count($tmp) - 1; $i++) { |
$parts[] = $tmp[$i]; |
} |
return $parts; |
} |
/** |
* Given a header, this function will decode it |
* according to RFC2047. Probably not *exactly* |
* conformant, but it does pass all the given |
* examples (in RFC2047). |
* |
* @param string Input header value to decode |
* @return string Decoded header value |
* @access private |
*/ |
function _decodeHeader($input) |
{ |
// Remove white space between encoded-words |
$input = preg_replace('/(=\?[^?]+\?(q|b)\?[^?]*\?=)(\s)+=\?/i', '\1=?', $input); |
// For each encoded-word... |
while (preg_match('/(=\?([^?]+)\?(q|b)\?([^?]*)\?=)/i', $input, $matches)) { |
$encoded = $matches[1]; |
$charset = $matches[2]; |
$encoding = $matches[3]; |
$text = $matches[4]; |
switch (strtolower($encoding)) { |
case 'b': |
$text = base64_decode($text); |
break; |
case 'q': |
$text = str_replace('_', ' ', $text); |
preg_match_all('/=([a-f0-9]{2})/i', $text, $matches); |
foreach($matches[1] as $value) |
$text = str_replace('='.$value, chr(hexdec($value)), $text); |
break; |
} |
$input = str_replace($encoded, $text, $input); |
} |
return $input; |
} |
/** |
* Given a body string and an encoding type, |
* this function will decode and return it. |
* |
* @param string Input body to decode |
* @param string Encoding type to use. |
* @return string Decoded body |
* @access private |
*/ |
function _decodeBody($input, $encoding = '7bit') |
{ |
switch (strtolower($encoding)) { |
case '7bit': |
return $input; |
break; |
case 'quoted-printable': |
return $this->_quotedPrintableDecode($input); |
break; |
case 'base64': |
return base64_decode($input); |
break; |
default: |
return $input; |
} |
} |
/** |
* Given a quoted-printable string, this |
* function will decode and return it. |
* |
* @param string Input body to decode |
* @return string Decoded body |
* @access private |
*/ |
function _quotedPrintableDecode($input) |
{ |
// Remove soft line breaks |
$input = preg_replace("/=\r?\n/", '', $input); |
// Replace encoded characters |
$input = preg_replace('/=([a-f0-9]{2})/ie', "chr(hexdec('\\1'))", $input); |
return $input; |
} |
/** |
* Checks the input for uuencoded files and returns |
* an array of them. Can be called statically, eg: |
* |
* $files =& Mail_mimeDecode::uudecode($some_text); |
* |
* It will check for the begin 666 ... end syntax |
* however and won't just blindly decode whatever you |
* pass it. |
* |
* @param string Input body to look for attahcments in |
* @return array Decoded bodies, filenames and permissions |
* @access public |
* @author Unknown |
*/ |
function &uudecode($input) |
{ |
// Find all uuencoded sections |
preg_match_all("/begin ([0-7]{3}) (.+)\r?\n(.+)\r?\nend/Us", $input, $matches); |
for ($j = 0; $j < count($matches[3]); $j++) { |
$str = $matches[3][$j]; |
$filename = $matches[2][$j]; |
$fileperm = $matches[1][$j]; |
$file = ''; |
$str = preg_split("/\r?\n/", trim($str)); |
$strlen = count($str); |
for ($i = 0; $i < $strlen; $i++) { |
$pos = 1; |
$d = 0; |
$len=(int)(((ord(substr($str[$i],0,1)) -32) - ' ') & 077); |
while (($d + 3 <= $len) AND ($pos + 4 <= strlen($str[$i]))) { |
$c0 = (ord(substr($str[$i],$pos,1)) ^ 0x20); |
$c1 = (ord(substr($str[$i],$pos+1,1)) ^ 0x20); |
$c2 = (ord(substr($str[$i],$pos+2,1)) ^ 0x20); |
$c3 = (ord(substr($str[$i],$pos+3,1)) ^ 0x20); |
$file .= chr(((($c0 - ' ') & 077) << 2) | ((($c1 - ' ') & 077) >> 4)); |
$file .= chr(((($c1 - ' ') & 077) << 4) | ((($c2 - ' ') & 077) >> 2)); |
$file .= chr(((($c2 - ' ') & 077) << 6) | (($c3 - ' ') & 077)); |
$pos += 4; |
$d += 3; |
} |
if (($d + 2 <= $len) && ($pos + 3 <= strlen($str[$i]))) { |
$c0 = (ord(substr($str[$i],$pos,1)) ^ 0x20); |
$c1 = (ord(substr($str[$i],$pos+1,1)) ^ 0x20); |
$c2 = (ord(substr($str[$i],$pos+2,1)) ^ 0x20); |
$file .= chr(((($c0 - ' ') & 077) << 2) | ((($c1 - ' ') & 077) >> 4)); |
$file .= chr(((($c1 - ' ') & 077) << 4) | ((($c2 - ' ') & 077) >> 2)); |
$pos += 3; |
$d += 2; |
} |
if (($d + 1 <= $len) && ($pos + 2 <= strlen($str[$i]))) { |
$c0 = (ord(substr($str[$i],$pos,1)) ^ 0x20); |
$c1 = (ord(substr($str[$i],$pos+1,1)) ^ 0x20); |
$file .= chr(((($c0 - ' ') & 077) << 2) | ((($c1 - ' ') & 077) >> 4)); |
} |
} |
$files[] = array('filename' => $filename, 'fileperm' => $fileperm, 'filedata' => $file); |
} |
return $files; |
} |
/** |
* getSendArray() returns the arguments required for Mail::send() |
* used to build the arguments for a mail::send() call |
* |
* Usage: |
* $mailtext = Full email (for example generated by a template) |
* $decoder = new Mail_mimeDecode($mailtext); |
* $parts = $decoder->getSendArray(); |
* if (!PEAR::isError($parts) { |
* list($recipents,$headers,$body) = $parts; |
* $mail = Mail::factory('smtp'); |
* $mail->send($recipents,$headers,$body); |
* } else { |
* echo $parts->message; |
* } |
* @return mixed array of recipeint, headers,body or Pear_Error |
* @access public |
* @author Alan Knowles <alan@akbkhome.com> |
*/ |
function getSendArray() |
{ |
// prevent warning if this is not set |
$this->_decode_headers = FALSE; |
$headerlist =$this->_parseHeaders($this->_header); |
$to = ""; |
if (!$headerlist) { |
return $this->raiseError("Message did not contain headers"); |
} |
foreach($headerlist as $item) { |
$header[$item['name']] = $item['value']; |
switch (strtolower($item['name'])) { |
case "to": |
case "cc": |
case "bcc": |
$to = ",".$item['value']; |
default: |
break; |
} |
} |
if ($to == "") { |
return $this->raiseError("Message did not contain any recipents"); |
} |
$to = substr($to,1); |
return array($to,$header,$this->_body); |
} |
/** |
* Returns a xml copy of the output of |
* Mail_mimeDecode::decode. Pass the output in as the |
* argument. This function can be called statically. Eg: |
* |
* $output = $obj->decode(); |
* $xml = Mail_mimeDecode::getXML($output); |
* |
* The DTD used for this should have been in the package. Or |
* alternatively you can get it from cvs, or here: |
* http://www.phpguru.org/xmail/xmail.dtd. |
* |
* @param object Input to convert to xml. This should be the |
* output of the Mail_mimeDecode::decode function |
* @return string XML version of input |
* @access public |
*/ |
function getXML($input) |
{ |
$crlf = "\r\n"; |
$output = '<?xml version=\'1.0\'?>' . $crlf . |
'<!DOCTYPE email SYSTEM "http://www.phpguru.org/xmail/xmail.dtd">' . $crlf . |
'<email>' . $crlf . |
Mail_mimeDecode::_getXML($input) . |
'</email>'; |
return $output; |
} |
/** |
* Function that does the actual conversion to xml. Does a single |
* mimepart at a time. |
* |
* @param object Input to convert to xml. This is a mimepart object. |
* It may or may not contain subparts. |
* @param integer Number of tabs to indent |
* @return string XML version of input |
* @access private |
*/ |
function _getXML($input, $indent = 1) |
{ |
$htab = "\t"; |
$crlf = "\r\n"; |
$output = ''; |
$headers = @(array)$input->headers; |
foreach ($headers as $hdr_name => $hdr_value) { |
// Multiple headers with this name |
if (is_array($headers[$hdr_name])) { |
for ($i = 0; $i < count($hdr_value); $i++) { |
$output .= Mail_mimeDecode::_getXML_helper($hdr_name, $hdr_value[$i], $indent); |
} |
// Only one header of this sort |
} else { |
$output .= Mail_mimeDecode::_getXML_helper($hdr_name, $hdr_value, $indent); |
} |
} |
if (!empty($input->parts)) { |
for ($i = 0; $i < count($input->parts); $i++) { |
$output .= $crlf . str_repeat($htab, $indent) . '<mimepart>' . $crlf . |
Mail_mimeDecode::_getXML($input->parts[$i], $indent+1) . |
str_repeat($htab, $indent) . '</mimepart>' . $crlf; |
} |
} elseif (isset($input->body)) { |
$output .= $crlf . str_repeat($htab, $indent) . '<body><![CDATA[' . |
$input->body . ']]></body>' . $crlf; |
} |
return $output; |
} |
/** |
* Helper function to _getXML(). Returns xml of a header. |
* |
* @param string Name of header |
* @param string Value of header |
* @param integer Number of tabs to indent |
* @return string XML version of input |
* @access private |
*/ |
function _getXML_helper($hdr_name, $hdr_value, $indent) |
{ |
$htab = "\t"; |
$crlf = "\r\n"; |
$return = ''; |
$new_hdr_value = ($hdr_name != 'received') ? Mail_mimeDecode::_parseHeaderValue($hdr_value) : array('value' => $hdr_value); |
$new_hdr_name = str_replace(' ', '-', ucwords(str_replace('-', ' ', $hdr_name))); |
// Sort out any parameters |
if (!empty($new_hdr_value['other'])) { |
foreach ($new_hdr_value['other'] as $paramname => $paramvalue) { |
$params[] = str_repeat($htab, $indent) . $htab . '<parameter>' . $crlf . |
str_repeat($htab, $indent) . $htab . $htab . '<paramname>' . htmlspecialchars($paramname) . '</paramname>' . $crlf . |
str_repeat($htab, $indent) . $htab . $htab . '<paramvalue>' . htmlspecialchars($paramvalue) . '</paramvalue>' . $crlf . |
str_repeat($htab, $indent) . $htab . '</parameter>' . $crlf; |
} |
$params = implode('', $params); |
} else { |
$params = ''; |
} |
$return = str_repeat($htab, $indent) . '<header>' . $crlf . |
str_repeat($htab, $indent) . $htab . '<headername>' . htmlspecialchars($new_hdr_name) . '</headername>' . $crlf . |
str_repeat($htab, $indent) . $htab . '<headervalue>' . htmlspecialchars($new_hdr_value['value']) . '</headervalue>' . $crlf . |
$params . |
str_repeat($htab, $indent) . '</header>' . $crlf; |
return $return; |
} |
} // End of class |
?> |
/branches/v1.0-menes/api/pear/Mail/sendmail.php |
---|
New file |
0,0 → 1,145 |
<?php |
// |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2003 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.02 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Author: Chuck Hagenbuch <chuck@horde.org> | |
// +----------------------------------------------------------------------+ |
/** |
* Sendmail implementation of the PEAR Mail:: interface. |
* @access public |
* @package Mail |
* @version $Revision: 1.1 $ |
*/ |
class Mail_sendmail extends Mail { |
/** |
* The location of the sendmail or sendmail wrapper binary on the |
* filesystem. |
* @var string |
*/ |
var $sendmail_path = '/usr/sbin/sendmail'; |
/** |
* Any extra command-line parameters to pass to the sendmail or |
* sendmail wrapper binary. |
* @var string |
*/ |
var $sendmail_args = ''; |
/** |
* Constructor. |
* |
* Instantiates a new Mail_sendmail:: object based on the parameters |
* passed in. It looks for the following parameters: |
* sendmail_path The location of the sendmail binary on the |
* filesystem. Defaults to '/usr/sbin/sendmail'. |
* |
* sendmail_args Any extra parameters to pass to the sendmail |
* or sendmail wrapper binary. |
* |
* If a parameter is present in the $params array, it replaces the |
* default. |
* |
* @param array $params Hash containing any parameters different from the |
* defaults. |
* @access public |
*/ |
function Mail_sendmail($params) |
{ |
if (isset($params['sendmail_path'])) $this->sendmail_path = $params['sendmail_path']; |
if (isset($params['sendmail_args'])) $this->sendmail_args = $params['sendmail_args']; |
/* |
* Because we need to pass message headers to the sendmail program on |
* the commandline, we can't guarantee the use of the standard "\r\n" |
* separator. Instead, we use the system's native line separator. |
*/ |
$this->sep = (strpos(PHP_OS, 'WIN') === false) ? "\n" : "\r\n"; |
} |
/** |
* Implements Mail::send() function using the sendmail |
* command-line binary. |
* |
* @param mixed $recipients Either a comma-seperated list of recipients |
* (RFC822 compliant), or an array of recipients, |
* each RFC822 valid. This may contain recipients not |
* specified in the headers, for Bcc:, resending |
* messages, etc. |
* |
* @param array $headers The array of headers to send with the mail, in an |
* associative array, where the array key is the |
* header name (ie, 'Subject'), and the array value |
* is the header value (ie, 'test'). The header |
* produced from those values would be 'Subject: |
* test'. |
* |
* @param string $body The full text of the message body, including any |
* Mime parts, etc. |
* |
* @return mixed Returns true on success, or a PEAR_Error |
* containing a descriptive error message on |
* failure. |
* @access public |
*/ |
function send($recipients, $headers, $body) |
{ |
$recipients = $this->parseRecipients($recipients); |
if (PEAR::isError($recipients)) { |
return $recipients; |
} |
$recipients = escapeShellCmd(implode(' ', $recipients)); |
$headerElements = $this->prepareHeaders($headers); |
if (PEAR::isError($headerElements)) { |
return $headerElements; |
} |
list($from, $text_headers) = $headerElements; |
if (!isset($from)) { |
return PEAR::raiseError('No from address given.'); |
} elseif (strpos($from, ' ') !== false || |
strpos($from, ';') !== false || |
strpos($from, '&') !== false || |
strpos($from, '`') !== false) { |
return PEAR::raiseError('From address specified with dangerous characters.'); |
} |
$result = 0; |
if (@is_file($this->sendmail_path)) { |
$from = escapeShellCmd($from); |
$mail = popen($this->sendmail_path . (!empty($this->sendmail_args) ? ' ' . $this->sendmail_args : '') . " -f$from -- $recipients", 'w'); |
fputs($mail, $text_headers); |
fputs($mail, $this->sep); // newline to end the headers section |
fputs($mail, $body); |
$result = pclose($mail); |
if (version_compare(phpversion(), '4.2.3') == -1) { |
// With older php versions, we need to shift the |
// pclose result to get the exit code. |
$result = $result >> 8 & 0xFF; |
} |
} else { |
return PEAR::raiseError('sendmail [' . $this->sendmail_path . '] is not a valid file'); |
} |
if ($result != 0) { |
return PEAR::raiseError('sendmail returned error code ' . $result, |
$result); |
} |
return true; |
} |
} |
/branches/v1.0-menes/api/pear/Mail/mimePart.php |
---|
New file |
0,0 → 1,351 |
<?php |
// +-----------------------------------------------------------------------+ |
// | Copyright (c) 2002-2003 Richard Heyes | |
// | All rights reserved. | |
// | | |
// | Redistribution and use in source and binary forms, with or without | |
// | modification, are permitted provided that the following conditions | |
// | are met: | |
// | | |
// | o Redistributions of source code must retain the above copyright | |
// | notice, this list of conditions and the following disclaimer. | |
// | o 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.| |
// | o The names of the authors may not be used to endorse or promote | |
// | products derived from this software without specific prior written | |
// | permission. | |
// | | |
// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | |
// | "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 COPYRIGHT | |
// | OWNER OR CONTRIBUTORS 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. | |
// | | |
// +-----------------------------------------------------------------------+ |
// | Author: Richard Heyes <richard@phpguru.org> | |
// +-----------------------------------------------------------------------+ |
/** |
* |
* Raw mime encoding class |
* |
* What is it? |
* This class enables you to manipulate and build |
* a mime email from the ground up. |
* |
* Why use this instead of mime.php? |
* mime.php is a userfriendly api to this class for |
* people who aren't interested in the internals of |
* mime mail. This class however allows full control |
* over the email. |
* |
* Eg. |
* |
* // Since multipart/mixed has no real body, (the body is |
* // the subpart), we set the body argument to blank. |
* |
* $params['content_type'] = 'multipart/mixed'; |
* $email = new Mail_mimePart('', $params); |
* |
* // Here we add a text part to the multipart we have |
* // already. Assume $body contains plain text. |
* |
* $params['content_type'] = 'text/plain'; |
* $params['encoding'] = '7bit'; |
* $text = $email->addSubPart($body, $params); |
* |
* // Now add an attachment. Assume $attach is |
* the contents of the attachment |
* |
* $params['content_type'] = 'application/zip'; |
* $params['encoding'] = 'base64'; |
* $params['disposition'] = 'attachment'; |
* $params['dfilename'] = 'example.zip'; |
* $attach =& $email->addSubPart($body, $params); |
* |
* // Now build the email. Note that the encode |
* // function returns an associative array containing two |
* // elements, body and headers. You will need to add extra |
* // headers, (eg. Mime-Version) before sending. |
* |
* $email = $message->encode(); |
* $email['headers'][] = 'Mime-Version: 1.0'; |
* |
* |
* Further examples are available at http://www.phpguru.org |
* |
* TODO: |
* - Set encode() to return the $obj->encoded if encode() |
* has already been run. Unless a flag is passed to specifically |
* re-build the message. |
* |
* @author Richard Heyes <richard@phpguru.org> |
* @version $Revision: 1.1 $ |
* @package Mail |
*/ |
class Mail_mimePart { |
/** |
* The encoding type of this part |
* @var string |
*/ |
var $_encoding; |
/** |
* An array of subparts |
* @var array |
*/ |
var $_subparts; |
/** |
* The output of this part after being built |
* @var string |
*/ |
var $_encoded; |
/** |
* Headers for this part |
* @var array |
*/ |
var $_headers; |
/** |
* The body of this part (not encoded) |
* @var string |
*/ |
var $_body; |
/** |
* Constructor. |
* |
* Sets up the object. |
* |
* @param $body - The body of the mime part if any. |
* @param $params - An associative array of parameters: |
* content_type - The content type for this part eg multipart/mixed |
* encoding - The encoding to use, 7bit, 8bit, base64, or quoted-printable |
* cid - Content ID to apply |
* disposition - Content disposition, inline or attachment |
* dfilename - Optional filename parameter for content disposition |
* description - Content description |
* charset - Character set to use |
* @access public |
*/ |
function Mail_mimePart($body = '', $params = array()) |
{ |
if (!defined('MAIL_MIMEPART_CRLF')) { |
define('MAIL_MIMEPART_CRLF', defined('MAIL_MIME_CRLF') ? MAIL_MIME_CRLF : "\r\n", TRUE); |
} |
foreach ($params as $key => $value) { |
switch ($key) { |
case 'content_type': |
$headers['Content-Type'] = $value . (isset($charset) ? '; charset="' . $charset . '"' : ''); |
break; |
case 'encoding': |
$this->_encoding = $value; |
$headers['Content-Transfer-Encoding'] = $value; |
break; |
case 'cid': |
$headers['Content-ID'] = '<' . $value . '>'; |
break; |
case 'disposition': |
$headers['Content-Disposition'] = $value . (isset($dfilename) ? '; filename="' . $dfilename . '"' : ''); |
break; |
case 'dfilename': |
if (isset($headers['Content-Disposition'])) { |
$headers['Content-Disposition'] .= '; filename="' . $value . '"'; |
} else { |
$dfilename = $value; |
} |
break; |
case 'description': |
$headers['Content-Description'] = $value; |
break; |
case 'charset': |
if (isset($headers['Content-Type'])) { |
$headers['Content-Type'] .= '; charset="' . $value . '"'; |
} else { |
$charset = $value; |
} |
break; |
} |
} |
// Default content-type |
if (!isset($headers['Content-Type'])) { |
$headers['Content-Type'] = 'text/plain'; |
} |
//Default encoding |
if (!isset($this->_encoding)) { |
$this->_encoding = '7bit'; |
} |
// Assign stuff to member variables |
$this->_encoded = array(); |
$this->_headers = $headers; |
$this->_body = $body; |
} |
/** |
* encode() |
* |
* Encodes and returns the email. Also stores |
* it in the encoded member variable |
* |
* @return An associative array containing two elements, |
* body and headers. The headers element is itself |
* an indexed array. |
* @access public |
*/ |
function encode() |
{ |
$encoded =& $this->_encoded; |
if (!empty($this->_subparts)) { |
srand((double)microtime()*1000000); |
$boundary = '=_' . md5(rand() . microtime()); |
$this->_headers['Content-Type'] .= ';' . MAIL_MIMEPART_CRLF . "\t" . 'boundary="' . $boundary . '"'; |
// Add body parts to $subparts |
for ($i = 0; $i < count($this->_subparts); $i++) { |
$headers = array(); |
$tmp = $this->_subparts[$i]->encode(); |
foreach ($tmp['headers'] as $key => $value) { |
$headers[] = $key . ': ' . $value; |
} |
$subparts[] = implode(MAIL_MIMEPART_CRLF, $headers) . MAIL_MIMEPART_CRLF . MAIL_MIMEPART_CRLF . $tmp['body']; |
} |
$encoded['body'] = '--' . $boundary . MAIL_MIMEPART_CRLF . |
implode('--' . $boundary . MAIL_MIMEPART_CRLF, $subparts) . |
'--' . $boundary.'--' . MAIL_MIMEPART_CRLF; |
} else { |
$encoded['body'] = $this->_getEncodedData($this->_body, $this->_encoding) . MAIL_MIMEPART_CRLF; |
} |
// Add headers to $encoded |
$encoded['headers'] =& $this->_headers; |
return $encoded; |
} |
/** |
* &addSubPart() |
* |
* Adds a subpart to current mime part and returns |
* a reference to it |
* |
* @param $body The body of the subpart, if any. |
* @param $params The parameters for the subpart, same |
* as the $params argument for constructor. |
* @return A reference to the part you just added. It is |
* crucial if using multipart/* in your subparts that |
* you use =& in your script when calling this function, |
* otherwise you will not be able to add further subparts. |
* @access public |
*/ |
function &addSubPart($body, $params) |
{ |
$this->_subparts[] = new Mail_mimePart($body, $params); |
return $this->_subparts[count($this->_subparts) - 1]; |
} |
/** |
* _getEncodedData() |
* |
* Returns encoded data based upon encoding passed to it |
* |
* @param $data The data to encode. |
* @param $encoding The encoding type to use, 7bit, base64, |
* or quoted-printable. |
* @access private |
*/ |
function _getEncodedData($data, $encoding) |
{ |
switch ($encoding) { |
case '8bit': |
case '7bit': |
return $data; |
break; |
case 'quoted-printable': |
return $this->_quotedPrintableEncode($data); |
break; |
case 'base64': |
return rtrim(chunk_split(base64_encode($data), 76, MAIL_MIMEPART_CRLF)); |
break; |
default: |
return $data; |
} |
} |
/** |
* quoteadPrintableEncode() |
* |
* Encodes data to quoted-printable standard. |
* |
* @param $input The data to encode |
* @param $line_max Optional max line length. Should |
* not be more than 76 chars |
* |
* @access private |
*/ |
function _quotedPrintableEncode($input , $line_max = 76) |
{ |
$lines = preg_split("/\r?\n/", $input); |
$eol = MAIL_MIMEPART_CRLF; |
$escape = '='; |
$output = ''; |
while(list(, $line) = each($lines)){ |
$linlen = strlen($line); |
$newline = ''; |
for ($i = 0; $i < $linlen; $i++) { |
$char = substr($line, $i, 1); |
$dec = ord($char); |
if (($dec == 32) AND ($i == ($linlen - 1))){ // convert space at eol only |
$char = '=20'; |
} elseif(($dec == 9) AND ($i == ($linlen - 1))) { // convert tab at eol only |
$char = '=09'; |
} elseif($dec == 9) { |
; // Do nothing if a tab. |
} elseif(($dec == 61) OR ($dec < 32 ) OR ($dec > 126)) { |
$char = $escape . strtoupper(sprintf('%02s', dechex($dec))); |
} |
if ((strlen($newline) + strlen($char)) >= $line_max) { // MAIL_MIMEPART_CRLF is not counted |
$output .= $newline . $escape . $eol; // soft line break; " =\r\n" is okay |
$newline = ''; |
} |
$newline .= $char; |
} // end of for |
$output .= $newline . $eol; |
} |
$output = substr($output, 0, -1 * strlen($eol)); // Don't want last crlf |
return $output; |
} |
} // End of class |
?> |
/branches/v1.0-menes/api/pear/HTML/QuickForm/element.php |
---|
New file |
0,0 → 1,479 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +----------------------------------------------------------------------+ |
// | PHP version 4.0 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997, 1998, 1999, 2000, 2001 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Adam Daniel <adaniel1@eesus.jnj.com> | |
// | Bertrand Mansion <bmansion@mamasam.com> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: element.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $ |
require_once('HTML/Common.php'); |
/** |
* Base class for form elements |
* |
* @author Adam Daniel <adaniel1@eesus.jnj.com> |
* @author Bertrand Mansion <bmansion@mamasam.com> |
* @version 1.3 |
* @since PHP4.04pl1 |
* @access public |
* @abstract |
*/ |
class HTML_QuickForm_element extends HTML_Common |
{ |
// {{{ properties |
/** |
* Label of the field |
* @var string |
* @since 1.3 |
* @access private |
*/ |
var $_label = ''; |
/** |
* Form element type |
* @var string |
* @since 1.0 |
* @access private |
*/ |
var $_type = ''; |
/** |
* Flag to tell if element is frozen |
* @var boolean |
* @since 1.0 |
* @access private |
*/ |
var $_flagFrozen = false; |
/** |
* Does the element support persistant data when frozen |
* @var boolean |
* @since 1.3 |
* @access private |
*/ |
var $_persistantFreeze = false; |
// }}} |
// {{{ constructor |
/** |
* Class constructor |
* |
* @param string Name of the element |
* @param mixed Label(s) for the element |
* @param mixed Associative array of tag attributes or HTML attributes name="value" pairs |
* @since 1.0 |
* @access public |
* @return void |
*/ |
function HTML_QuickForm_element($elementName=null, $elementLabel=null, $attributes=null) |
{ |
HTML_Common::HTML_Common($attributes); |
if (isset($elementName)) { |
$this->setName($elementName); |
} |
if (isset($elementLabel)) { |
$this->setLabel($elementLabel); |
} |
} //end constructor |
// }}} |
// {{{ apiVersion() |
/** |
* Returns the current API version |
* |
* @since 1.0 |
* @access public |
* @return float |
*/ |
function apiVersion() |
{ |
return 2.0; |
} // end func apiVersion |
// }}} |
// {{{ getType() |
/** |
* Returns element type |
* |
* @since 1.0 |
* @access public |
* @return string |
*/ |
function getType() |
{ |
return $this->_type; |
} // end func getType |
// }}} |
// {{{ setName() |
/** |
* Sets the input field name |
* |
* @param string $name Input field name attribute |
* @since 1.0 |
* @access public |
* @return void |
*/ |
function setName($name) |
{ |
// interface method |
} //end func setName |
// }}} |
// {{{ getName() |
/** |
* Returns the element name |
* |
* @since 1.0 |
* @access public |
* @return string |
*/ |
function getName() |
{ |
// interface method |
} //end func getName |
// }}} |
// {{{ setValue() |
/** |
* Sets the value of the form element |
* |
* @param string $value Default value of the form element |
* @since 1.0 |
* @access public |
* @return void |
*/ |
function setValue($value) |
{ |
// interface |
} // end func setValue |
// }}} |
// {{{ getValue() |
/** |
* Returns the value of the form element |
* |
* @since 1.0 |
* @access public |
* @return mixed |
*/ |
function getValue() |
{ |
// interface |
return null; |
} // end func getValue |
// }}} |
// {{{ freeze() |
/** |
* Freeze the element so that only its value is returned |
* |
* @access public |
* @return void |
*/ |
function freeze() |
{ |
$this->_flagFrozen = true; |
} //end func freeze |
// }}} |
// {{{ unfreeze() |
/** |
* Unfreezes the element so that it becomes editable |
* |
* @access public |
* @return void |
* @since 3.2.4 |
*/ |
function unfreeze() |
{ |
$this->_flagFrozen = false; |
} |
// }}} |
// {{{ getFrozenHtml() |
/** |
* Returns the value of field without HTML tags |
* |
* @since 1.0 |
* @access public |
* @return string |
*/ |
function getFrozenHtml() |
{ |
$value = $this->getValue(); |
return ('' != $value? htmlspecialchars($value): ' ') . |
$this->_getPersistantData(); |
} //end func getFrozenHtml |
// }}} |
// {{{ _getPersistantData() |
/** |
* Used by getFrozenHtml() to pass the element's value if _persistantFreeze is on |
* |
* @access private |
* @return string |
*/ |
function _getPersistantData() |
{ |
if (!$this->_persistantFreeze) { |
return ''; |
} else { |
$id = $this->getAttribute('id'); |
return '<input' . $this->_getAttrString(array( |
'type' => 'hidden', |
'name' => $this->getName(), |
'value' => $this->getValue() |
) + (isset($id)? array('id' => $id): array())) . ' />'; |
} |
} |
// }}} |
// {{{ isFrozen() |
/** |
* Returns whether or not the element is frozen |
* |
* @since 1.3 |
* @access public |
* @return bool |
*/ |
function isFrozen() |
{ |
return $this->_flagFrozen; |
} // end func isFrozen |
// }}} |
// {{{ setPersistantFreeze() |
/** |
* Sets wether an element value should be kept in an hidden field |
* when the element is frozen or not |
* |
* @param bool $persistant True if persistant value |
* @since 2.0 |
* @access public |
* @return void |
*/ |
function setPersistantFreeze($persistant=false) |
{ |
$this->_persistantFreeze = $persistant; |
} //end func setPersistantFreeze |
// }}} |
// {{{ setLabel() |
/** |
* Sets display text for the element |
* |
* @param string $label Display text for the element |
* @since 1.3 |
* @access public |
* @return void |
*/ |
function setLabel($label) |
{ |
$this->_label = $label; |
} //end func setLabel |
// }}} |
// {{{ getLabel() |
/** |
* Returns display text for the element |
* |
* @since 1.3 |
* @access public |
* @return string |
*/ |
function getLabel() |
{ |
return $this->_label; |
} //end func getLabel |
// }}} |
// {{{ _findValue() |
/** |
* Tries to find the element value from the values array |
* |
* @since 2.7 |
* @access private |
* @return mixed |
*/ |
function _findValue(&$values) |
{ |
if (empty($values)) { |
return null; |
} |
$elementName = $this->getName(); |
if (isset($values[$elementName])) { |
return $values[$elementName]; |
} elseif (strpos($elementName, '[')) { |
$myVar = "['" . str_replace(array(']', '['), array('', "']['"), $elementName) . "']"; |
return eval("return (isset(\$values$myVar)) ? \$values$myVar : null;"); |
} else { |
return null; |
} |
} //end func _findValue |
// }}} |
// {{{ onQuickFormEvent() |
/** |
* Called by HTML_QuickForm whenever form event is made on this element |
* |
* @param string $event Name of event |
* @param mixed $arg event arguments |
* @param object $caller calling object |
* @since 1.0 |
* @access public |
* @return void |
*/ |
function onQuickFormEvent($event, $arg, &$caller) |
{ |
switch ($event) { |
case 'createElement': |
$className = get_class($this); |
$this->$className($arg[0], $arg[1], $arg[2], $arg[3], $arg[4]); |
break; |
case 'addElement': |
$this->onQuickFormEvent('createElement', $arg, $caller); |
$this->onQuickFormEvent('updateValue', null, $caller); |
break; |
case 'updateValue': |
// constant values override both default and submitted ones |
// default values are overriden by submitted |
$value = $this->_findValue($caller->_constantValues); |
if (null === $value) { |
$value = $this->_findValue($caller->_submitValues); |
if (null === $value) { |
$value = $this->_findValue($caller->_defaultValues); |
} |
} |
if (null !== $value) { |
$this->setValue($value); |
} |
break; |
case 'setGroupValue': |
$this->setValue($arg); |
} |
return true; |
} // end func onQuickFormEvent |
// }}} |
// {{{ accept() |
/** |
* Accepts a renderer |
* |
* @param object An HTML_QuickForm_Renderer object |
* @param bool Whether an element is required |
* @param string An error message associated with an element |
* @access public |
* @return void |
*/ |
function accept(&$renderer, $required=false, $error=null) |
{ |
$renderer->renderElement($this, $required, $error); |
} // end func accept |
// }}} |
// {{{ _generateId() |
/** |
* Automatically generates and assigns an 'id' attribute for the element. |
* |
* Currently used to ensure that labels work on radio buttons and |
* checkboxes. Per idea of Alexander Radivanovich. |
* |
* @access private |
* @return void |
*/ |
function _generateId() |
{ |
static $idx = 1; |
if (!$this->getAttribute('id')) { |
$this->updateAttributes(array('id' => 'qf_' . substr(md5(microtime() . $idx++), 0, 6))); |
} |
} // end func _generateId |
// }}} |
// {{{ exportValue() |
/** |
* Returns a 'safe' element's value |
* |
* @param array array of submitted values to search |
* @param bool whether to return the value as associative array |
* @access public |
* @return mixed |
*/ |
function exportValue(&$submitValues, $assoc = false) |
{ |
$value = $this->_findValue($submitValues); |
if (null === $value) { |
$value = $this->getValue(); |
} |
return $this->_prepareValue($value, $assoc); |
} |
// }}} |
// {{{ _prepareValue() |
/** |
* Used by exportValue() to prepare the value for returning |
* |
* @param mixed the value found in exportValue() |
* @param bool whether to return the value as associative array |
* @access private |
* @return mixed |
*/ |
function _prepareValue($value, $assoc) |
{ |
if (null === $value) { |
return null; |
} elseif (!$assoc) { |
return $value; |
} else { |
$name = $this->getName(); |
if (!strpos($name, '[')) { |
return array($name => $value); |
} else { |
$valueAry = array(); |
$myIndex = "['" . str_replace(array(']', '['), array('', "']['"), $name) . "']"; |
eval("\$valueAry$myIndex = \$value;"); |
return $valueAry; |
} |
} |
} |
// }}} |
} // end class HTML_QuickForm_element |
?> |
/branches/v1.0-menes/api/pear/HTML/QuickForm/hiddenselect.php |
---|
New file |
0,0 → 1,107 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +----------------------------------------------------------------------+ |
// | PHP version 4.0 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997, 1998, 1999, 2000, 2001 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Adam Daniel <adaniel1@eesus.jnj.com> | |
// | Bertrand Mansion <bmansion@mamasam.com> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: hiddenselect.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $ |
require_once('HTML/QuickForm/select.php'); |
/** |
* This class takes the same arguments as a select element, but instead |
* of creating a select ring it creates hidden elements for all values |
* already selected with setDefault or setConstant. This is useful if |
* you have a select ring that you don't want visible, but you need all |
* selected values to be passed. |
* |
* @author Isaac Shepard <ishepard@bsiweb.com> |
* |
* @version 1.0 |
* @since 2.1 |
* @access public |
*/ |
class HTML_QuickForm_hiddenselect extends HTML_QuickForm_select |
{ |
// {{{ constructor |
/** |
* Class constructor |
* |
* @param string Select name attribute |
* @param mixed Label(s) for the select (not used) |
* @param mixed Data to be used to populate options |
* @param mixed Either a typical HTML attribute string or an associative array (not used) |
* @since 1.0 |
* @access public |
* @return void |
*/ |
function HTML_QuickForm_hiddenselect($elementName=null, $elementLabel=null, $options=null, $attributes=null) |
{ |
HTML_QuickForm_element::HTML_QuickForm_element($elementName, $elementLabel, $attributes); |
$this->_persistantFreeze = true; |
$this->_type = 'hiddenselect'; |
if (isset($options)) { |
$this->load($options); |
} |
} //end constructor |
// }}} |
// {{{ toHtml() |
/** |
* Returns the SELECT in HTML |
* |
* @since 1.0 |
* @access public |
* @return string |
* @throws |
*/ |
function toHtml() |
{ |
$tabs = $this->_getTabs(); |
$name = $this->getPrivateName(); |
$strHtml = ''; |
foreach ($this->_values as $key => $val) { |
for ($i = 0, $optCount = count($this->_options); $i < $optCount; $i++) { |
if ($val == $this->_options[$i]['attr']['value']) { |
$strHtml .= $tabs . '<input' . $this->_getAttrString(array( |
'type' => 'hidden', |
'name' => $name, |
'value' => $val |
)) . " />\n" ; |
} |
} |
} |
return $strHtml; |
} //end func toHtml |
// }}} |
// {{{ accept() |
/** |
* This is essentially a hidden element and should be rendered as one |
*/ |
function accept(&$renderer) |
{ |
$renderer->renderHidden($this); |
} |
// }}} |
} //end class HTML_QuickForm_hiddenselect |
?> |
/branches/v1.0-menes/api/pear/HTML/QuickForm/hidden.php |
---|
New file |
0,0 → 1,87 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +----------------------------------------------------------------------+ |
// | PHP version 4.0 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997, 1998, 1999, 2000, 2001 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Adam Daniel <adaniel1@eesus.jnj.com> | |
// | Bertrand Mansion <bmansion@mamasam.com> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: hidden.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $ |
require_once("HTML/QuickForm/input.php"); |
/** |
* HTML class for a hidden type element |
* |
* @author Adam Daniel <adaniel1@eesus.jnj.com> |
* @author Bertrand Mansion <bmansion@mamasam.com> |
* @version 1.0 |
* @since PHP4.04pl1 |
* @access public |
*/ |
class HTML_QuickForm_hidden extends HTML_QuickForm_input |
{ |
// {{{ constructor |
/** |
* Class constructor |
* |
* @param string $elementName (optional)Input field name attribute |
* @param string $value (optional)Input field value |
* @param mixed $attributes (optional)Either a typical HTML attribute string |
* or an associative array |
* @since 1.0 |
* @access public |
* @return void |
*/ |
function HTML_QuickForm_hidden($elementName=null, $value='', $attributes=null) |
{ |
HTML_QuickForm_input::HTML_QuickForm_input($elementName, null, $attributes); |
$this->setType('hidden'); |
$this->setValue($value); |
} //end constructor |
// }}} |
// {{{ freeze() |
/** |
* Freeze the element so that only its value is returned |
* |
* @access public |
* @return void |
*/ |
function freeze() |
{ |
return false; |
} //end func freeze |
// }}} |
// {{{ accept() |
/** |
* Accepts a renderer |
* |
* @param object An HTML_QuickForm_Renderer object |
* @access public |
* @return void |
*/ |
function accept(&$renderer) |
{ |
$renderer->renderHidden($this); |
} // end func accept |
// }}} |
} //end class HTML_QuickForm_hidden |
?> |
/branches/v1.0-menes/api/pear/HTML/QuickForm/group.php |
---|
New file |
0,0 → 1,579 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +----------------------------------------------------------------------+ |
// | PHP version 4.0 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997, 1998, 1999, 2000, 2001 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Adam Daniel <adaniel1@eesus.jnj.com> | |
// | Bertrand Mansion <bmansion@mamasam.com> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: group.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $ |
require_once("HTML/QuickForm/element.php"); |
/** |
* HTML class for a form element group |
* |
* @author Adam Daniel <adaniel1@eesus.jnj.com> |
* @author Bertrand Mansion <bmansion@mamasam.com> |
* @version 1.0 |
* @since PHP4.04pl1 |
* @access public |
*/ |
class HTML_QuickForm_group extends HTML_QuickForm_element |
{ |
// {{{ properties |
/** |
* Name of the element |
* @var string |
* @since 1.0 |
* @access private |
*/ |
var $_name = ''; |
/** |
* Array of grouped elements |
* @var array |
* @since 1.0 |
* @access private |
*/ |
var $_elements = array(); |
/** |
* String to separate elements |
* @var mixed |
* @since 2.5 |
* @access private |
*/ |
var $_separator = null; |
/** |
* Required elements in this group |
* @var array |
* @since 2.5 |
* @access private |
*/ |
var $_required = array(); |
/** |
* Whether to change elements' names to $groupName[$elementName] or leave them as is |
* @var bool |
* @since 3.0 |
* @access private |
*/ |
var $_appendName = true; |
// }}} |
// {{{ constructor |
/** |
* Class constructor |
* |
* @param string $elementName (optional)Group name |
* @param array $elementLabel (optional)Group label |
* @param array $elements (optional)Group elements |
* @param mixed $separator (optional)Use a string for one separator, |
* use an array to alternate the separators. |
* @param bool $appendName (optional)whether to change elements' names to |
* the form $groupName[$elementName] or leave |
* them as is. |
* @since 1.0 |
* @access public |
* @return void |
*/ |
function HTML_QuickForm_group($elementName=null, $elementLabel=null, $elements=null, $separator=null, $appendName = true) |
{ |
$this->HTML_QuickForm_element($elementName, $elementLabel); |
$this->_type = 'group'; |
if (isset($elements) && is_array($elements)) { |
$this->setElements($elements); |
} |
if (isset($separator)) { |
$this->_separator = $separator; |
} |
if (isset($appendName)) { |
$this->_appendName = $appendName; |
} |
} //end constructor |
// }}} |
// {{{ setName() |
/** |
* Sets the group name |
* |
* @param string $name Group name |
* @since 1.0 |
* @access public |
* @return void |
*/ |
function setName($name) |
{ |
$this->_name = $name; |
} //end func setName |
// }}} |
// {{{ getName() |
/** |
* Returns the group name |
* |
* @since 1.0 |
* @access public |
* @return string |
*/ |
function getName() |
{ |
return $this->_name; |
} //end func getName |
// }}} |
// {{{ setValue() |
/** |
* Sets values for group's elements |
* |
* @param mixed Values for group's elements |
* @since 1.0 |
* @access public |
* @return void |
*/ |
function setValue($value) |
{ |
$this->_createElementsIfNotExist(); |
foreach (array_keys($this->_elements) as $key) { |
if (!$this->_appendName) { |
$v = $this->_elements[$key]->_findValue($value); |
if (null !== $v) { |
$this->_elements[$key]->onQuickFormEvent('setGroupValue', $v, $this); |
} |
} else { |
$elementName = $this->_elements[$key]->getName(); |
$index = strlen($elementName) ? $elementName : $key; |
if (is_array($value)) { |
if (isset($value[$index])) { |
$this->_elements[$key]->onQuickFormEvent('setGroupValue', $value[$index], $this); |
} |
} elseif (isset($value)) { |
$this->_elements[$key]->onQuickFormEvent('setGroupValue', $value, $this); |
} |
} |
} |
} //end func setValue |
// }}} |
// {{{ getValue() |
/** |
* Returns the value of the group |
* |
* @since 1.0 |
* @access public |
* @return mixed |
*/ |
function getValue() |
{ |
$value = null; |
foreach (array_keys($this->_elements) as $key) { |
$element =& $this->_elements[$key]; |
switch ($element->getType()) { |
case 'radio': |
$v = $element->getChecked()? $element->getValue(): null; |
break; |
case 'checkbox': |
$v = $element->getChecked()? true: null; |
break; |
default: |
$v = $element->getValue(); |
} |
if (null !== $v) { |
$elementName = $element->getName(); |
if (is_null($elementName)) { |
$value = $v; |
} else { |
if (!is_array($value)) { |
$value = is_null($value)? array(): array($value); |
} |
if ('' === $elementName) { |
$value[] = $v; |
} else { |
$value[$elementName] = $v; |
} |
} |
} |
} |
return $value; |
} // end func getValue |
// }}} |
// {{{ setElements() |
/** |
* Sets the grouped elements |
* |
* @param array $elements Array of elements |
* @since 1.1 |
* @access public |
* @return void |
*/ |
function setElements($elements) |
{ |
$this->_elements = array_values($elements); |
if ($this->_flagFrozen) { |
$this->freeze(); |
} |
} // end func setElements |
// }}} |
// {{{ getElements() |
/** |
* Gets the grouped elements |
* |
* @since 2.4 |
* @access public |
* @return array |
*/ |
function &getElements() |
{ |
$this->_createElementsIfNotExist(); |
return $this->_elements; |
} // end func getElements |
// }}} |
// {{{ getGroupType() |
/** |
* Gets the group type based on its elements |
* Will return 'mixed' if elements contained in the group |
* are of different types. |
* |
* @access public |
* @return string group elements type |
*/ |
function getGroupType() |
{ |
$this->_createElementsIfNotExist(); |
$prevType = ''; |
foreach (array_keys($this->_elements) as $key) { |
$type = $this->_elements[$key]->getType(); |
if ($type != $prevType && $prevType != '') { |
return 'mixed'; |
} |
$prevType = $type; |
} |
return $type; |
} // end func getGroupType |
// }}} |
// {{{ toHtml() |
/** |
* Returns Html for the group |
* |
* @since 1.0 |
* @access public |
* @return string |
*/ |
function toHtml() |
{ |
include_once('HTML/QuickForm/Renderer/Default.php'); |
$renderer =& new HTML_QuickForm_Renderer_Default(); |
$renderer->setElementTemplate('{element}'); |
$this->accept($renderer); |
return $renderer->toHtml(); |
} //end func toHtml |
// }}} |
// {{{ getElementName() |
/** |
* Returns the element name inside the group such as found in the html form |
* |
* @param mixed $index Element name or element index in the group |
* @since 3.0 |
* @access public |
* @return mixed string with element name, false if not found |
*/ |
function getElementName($index) |
{ |
$this->_createElementsIfNotExist(); |
$elementName = false; |
if (is_int($index) && isset($this->_elements[$index])) { |
$elementName = $this->_elements[$index]->getName(); |
if (isset($elementName) && $elementName == '') { |
$elementName = $index; |
} |
if ($this->_appendName) { |
if (is_null($elementName)) { |
$elementName = $this->getName(); |
} else { |
$elementName = $this->getName().'['.$elementName.']'; |
} |
} |
} elseif (is_string($index)) { |
foreach (array_keys($this->_elements) as $key) { |
$elementName = $this->_elements[$key]->getName(); |
if ($index == $elementName) { |
if ($this->_appendName) { |
$elementName = $this->getName().'['.$elementName.']'; |
} |
break; |
} elseif ($this->_appendName && $this->getName().'['.$elementName.']' == $index) { |
break; |
} |
} |
} |
return $elementName; |
} //end func getElementName |
// }}} |
// {{{ getFrozenHtml() |
/** |
* Returns the value of field without HTML tags |
* |
* @since 1.3 |
* @access public |
* @return string |
*/ |
function getFrozenHtml() |
{ |
$flags = array(); |
$this->_createElementsIfNotExist(); |
foreach (array_keys($this->_elements) as $key) { |
if (false === ($flags[$key] = $this->_elements[$key]->isFrozen())) { |
$this->_elements[$key]->freeze(); |
} |
} |
$html = $this->toHtml(); |
foreach (array_keys($this->_elements) as $key) { |
if (!$flags[$key]) { |
$this->_elements[$key]->unfreeze(); |
} |
} |
return $html; |
} //end func getFrozenHtml |
// }}} |
// {{{ onQuickFormEvent() |
/** |
* Called by HTML_QuickForm whenever form event is made on this element |
* |
* @param string $event Name of event |
* @param mixed $arg event arguments |
* @param object $caller calling object |
* @since 1.0 |
* @access public |
* @return void |
*/ |
function onQuickFormEvent($event, $arg, &$caller) |
{ |
switch ($event) { |
case 'updateValue': |
$this->_createElementsIfNotExist(); |
foreach (array_keys($this->_elements) as $key) { |
if ($this->_appendName) { |
$elementName = $this->_elements[$key]->getName(); |
if (is_null($elementName)) { |
$this->_elements[$key]->setName($this->getName()); |
} elseif ('' === $elementName) { |
$this->_elements[$key]->setName($this->getName() . '[' . $key . ']'); |
} else { |
$this->_elements[$key]->setName($this->getName() . '[' . $elementName . ']'); |
} |
} |
$this->_elements[$key]->onQuickFormEvent('updateValue', $arg, $caller); |
if ($this->_appendName) { |
$this->_elements[$key]->setName($elementName); |
} |
} |
break; |
default: |
parent::onQuickFormEvent($event, $arg, $caller); |
} |
return true; |
} // end func onQuickFormEvent |
// }}} |
// {{{ accept() |
/** |
* Accepts a renderer |
* |
* @param object An HTML_QuickForm_Renderer object |
* @param bool Whether a group is required |
* @param string An error message associated with a group |
* @access public |
* @return void |
*/ |
function accept(&$renderer, $required = false, $error = null) |
{ |
$this->_createElementsIfNotExist(); |
$renderer->startGroup($this, $required, $error); |
$name = $this->getName(); |
foreach (array_keys($this->_elements) as $key) { |
$element =& $this->_elements[$key]; |
if ($this->_appendName) { |
$elementName = $element->getName(); |
if (isset($elementName)) { |
$element->setName($name . '['. (strlen($elementName)? $elementName: $key) .']'); |
} else { |
$element->setName($name); |
} |
} |
$required = !$element->isFrozen() && in_array($element->getName(), $this->_required); |
$element->accept($renderer, $required); |
// restore the element's name |
if ($this->_appendName) { |
$element->setName($elementName); |
} |
} |
$renderer->finishGroup($this); |
} // end func accept |
// }}} |
// {{{ exportValue() |
/** |
* As usual, to get the group's value we access its elements and call |
* their exportValue() methods |
*/ |
function exportValue(&$submitValues, $assoc = false) |
{ |
$value = null; |
foreach (array_keys($this->_elements) as $key) { |
$elementName = $this->_elements[$key]->getName(); |
if ($this->_appendName) { |
if (is_null($elementName)) { |
$this->_elements[$key]->setName($this->getName()); |
} elseif ('' === $elementName) { |
$this->_elements[$key]->setName($this->getName() . '[' . $key . ']'); |
} else { |
$this->_elements[$key]->setName($this->getName() . '[' . $elementName . ']'); |
} |
} |
$v = $this->_elements[$key]->exportValue($submitValues, $assoc); |
if ($this->_appendName) { |
$this->_elements[$key]->setName($elementName); |
} |
if (null !== $v) { |
// Make $value an array, we will use it like one |
if (null === $value) { |
$value = array(); |
} |
if ($assoc) { |
// just like HTML_QuickForm::exportValues() |
$value = HTML_QuickForm::arrayMerge($value, $v); |
} else { |
// just like getValue(), but should work OK every time here |
if (is_null($elementName)) { |
$value = $v; |
} elseif ('' === $elementName) { |
$value[] = $v; |
} else { |
$value[$elementName] = $v; |
} |
} |
} |
} |
// do not pass the value through _prepareValue, we took care of this already |
return $value; |
} |
// }}} |
// {{{ _createElements() |
/** |
* Creates the group's elements. |
* |
* This should be overriden by child classes that need to create their |
* elements. The method will be called automatically when needed, calling |
* it from the constructor is discouraged as the constructor is usually |
* called _twice_ on element creation, first time with _no_ parameters. |
* |
* @access private |
* @abstract |
*/ |
function _createElements() |
{ |
// abstract |
} |
// }}} |
// {{{ _createElementsIfNotExist() |
/** |
* A wrapper around _createElements() |
* |
* This method calls _createElements() if the group's _elements array |
* is empty. It also performs some updates, e.g. freezes the created |
* elements if the group is already frozen. |
* |
* @access private |
*/ |
function _createElementsIfNotExist() |
{ |
if (empty($this->_elements)) { |
$this->_createElements(); |
if ($this->_flagFrozen) { |
$this->freeze(); |
} |
} |
} |
// }}} |
// {{{ freeze() |
function freeze() |
{ |
parent::freeze(); |
foreach (array_keys($this->_elements) as $key) { |
$this->_elements[$key]->freeze(); |
} |
} |
// }}} |
// {{{ unfreeze() |
function unfreeze() |
{ |
parent::unfreeze(); |
foreach (array_keys($this->_elements) as $key) { |
$this->_elements[$key]->unfreeze(); |
} |
} |
// }}} |
// {{{ setPersistantFreeze() |
function setPersistantFreeze($persistant = false) |
{ |
parent::setPersistantFreeze($persistant); |
foreach (array_keys($this->_elements) as $key) { |
$this->_elements[$key]->setPersistantFreeze($persistant); |
} |
} |
// }}} |
} //end class HTML_QuickForm_group |
?> |
/branches/v1.0-menes/api/pear/HTML/QuickForm/link.php |
---|
New file |
0,0 → 1,192 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +----------------------------------------------------------------------+ |
// | PHP version 4.0 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997, 1998, 1999, 2000, 2001 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Adam Daniel <adaniel1@eesus.jnj.com> | |
// | Bertrand Mansion <bmansion@mamasam.com> | |
// +----------------------------------------------------------------------+ |
// |
require_once 'HTML/QuickForm/static.php'; |
/** |
* HTML class for a link type field |
* |
* @author Adam Daniel <adaniel1@eesus.jnj.com> |
* @author Bertrand Mansion <bmansion@mamasam.com> |
* @version 1.0 |
* @since PHP4.04pl1 |
* @access public |
*/ |
class HTML_QuickForm_link extends HTML_QuickForm_static |
{ |
// {{{ properties |
/** |
* Link display text |
* @var string |
* @since 1.0 |
* @access private |
*/ |
var $_text = ""; |
// }}} |
// {{{ constructor |
/** |
* Class constructor |
* |
* @param string $elementLabel (optional)Link label |
* @param string $href (optional)Link href |
* @param string $text (optional)Link display text |
* @param mixed $attributes (optional)Either a typical HTML attribute string |
* or an associative array |
* @since 1.0 |
* @access public |
* @return void |
* @throws |
*/ |
function HTML_QuickForm_link($elementName=null, $elementLabel=null, $href=null, $text=null, $attributes=null) |
{ |
HTML_QuickForm_element::HTML_QuickForm_element($elementName, $elementLabel, $attributes); |
$this->_persistantFreeze = false; |
$this->_type = 'link'; |
$this->setHref($href); |
$this->_text = $text; |
} //end constructor |
// }}} |
// {{{ setName() |
/** |
* Sets the input field name |
* |
* @param string $name Input field name attribute |
* @since 1.0 |
* @access public |
* @return void |
* @throws |
*/ |
function setName($name) |
{ |
$this->updateAttributes(array('name'=>$name)); |
} //end func setName |
// }}} |
// {{{ getName() |
/** |
* Returns the element name |
* |
* @since 1.0 |
* @access public |
* @return string |
* @throws |
*/ |
function getName() |
{ |
return $this->getAttribute('name'); |
} //end func getName |
// }}} |
// {{{ setValue() |
/** |
* Sets value for textarea element |
* |
* @param string $value Value for password element |
* @since 1.0 |
* @access public |
* @return void |
* @throws |
*/ |
function setValue($value) |
{ |
return; |
} //end func setValue |
// }}} |
// {{{ getValue() |
/** |
* Returns the value of the form element |
* |
* @since 1.0 |
* @access public |
* @return void |
* @throws |
*/ |
function getValue() |
{ |
return; |
} // end func getValue |
// }}} |
// {{{ setHref() |
/** |
* Sets the links href |
* |
* @param string $href |
* @since 1.0 |
* @access public |
* @return void |
* @throws |
*/ |
function setHref($href) |
{ |
$this->updateAttributes(array('href'=>$href)); |
} // end func setHref |
// }}} |
// {{{ toHtml() |
/** |
* Returns the textarea element in HTML |
* |
* @since 1.0 |
* @access public |
* @return string |
* @throws |
*/ |
function toHtml() |
{ |
$tabs = $this->_getTabs(); |
$html = "$tabs<a".$this->_getAttrString($this->_attributes).">"; |
$html .= $this->_text; |
$html .= "</a>"; |
return $html; |
} //end func toHtml |
// }}} |
// {{{ getFrozenHtml() |
/** |
* Returns the value of field without HTML tags (in this case, value is changed to a mask) |
* |
* @since 1.0 |
* @access public |
* @return string |
* @throws |
*/ |
function getFrozenHtml() |
{ |
return; |
} //end func getFrozenHtml |
// }}} |
} //end class HTML_QuickForm_textarea |
?> |
/branches/v1.0-menes/api/pear/HTML/QuickForm/radio.php |
---|
New file |
0,0 → 1,244 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +----------------------------------------------------------------------+ |
// | PHP version 4.0 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997, 1998, 1999, 2000, 2001 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Adam Daniel <adaniel1@eesus.jnj.com> | |
// | Bertrand Mansion <bmansion@mamasam.com> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: radio.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $ |
require_once('HTML/QuickForm/input.php'); |
/** |
* HTML class for a radio type element |
* |
* @author Adam Daniel <adaniel1@eesus.jnj.com> |
* @author Bertrand Mansion <bmansion@mamasam.com> |
* @version 1.1 |
* @since PHP4.04pl1 |
* @access public |
*/ |
class HTML_QuickForm_radio extends HTML_QuickForm_input |
{ |
// {{{ properties |
/** |
* Radio display text |
* @var string |
* @since 1.1 |
* @access private |
*/ |
var $_text = ''; |
// }}} |
// {{{ constructor |
/** |
* Class constructor |
* |
* @param string Input field name attribute |
* @param mixed Label(s) for a field |
* @param string Text to display near the radio |
* @param string Input field value |
* @param mixed Either a typical HTML attribute string or an associative array |
* @since 1.0 |
* @access public |
* @return void |
*/ |
function HTML_QuickForm_radio($elementName=null, $elementLabel=null, $text=null, $value=null, $attributes=null) |
{ |
$this->HTML_QuickForm_element($elementName, $elementLabel, $attributes); |
if (isset($value)) { |
$this->setValue($value); |
} |
$this->_persistantFreeze = true; |
$this->setType('radio'); |
$this->_text = $text; |
$this->_generateId(); |
} //end constructor |
// }}} |
// {{{ setChecked() |
/** |
* Sets whether radio button is checked |
* |
* @param bool $checked Whether the field is checked or not |
* @since 1.0 |
* @access public |
* @return void |
*/ |
function setChecked($checked) |
{ |
if (!$checked) { |
$this->removeAttribute('checked'); |
} else { |
$this->updateAttributes(array('checked'=>'checked')); |
} |
} //end func setChecked |
// }}} |
// {{{ getChecked() |
/** |
* Returns whether radio button is checked |
* |
* @since 1.0 |
* @access public |
* @return string |
*/ |
function getChecked() |
{ |
return $this->getAttribute('checked'); |
} //end func getChecked |
// }}} |
// {{{ toHtml() |
/** |
* Returns the radio element in HTML |
* |
* @since 1.0 |
* @access public |
* @return string |
*/ |
function toHtml() |
{ |
if (0 == strlen($this->_text)) { |
$label = ''; |
} elseif ($this->_flagFrozen) { |
$label = $this->_text; |
} else { |
$label = '<label for="' . $this->getAttribute('id') . '">' . $this->_text . '</label>'; |
} |
return HTML_QuickForm_input::toHtml() . $label; |
} //end func toHtml |
// }}} |
// {{{ getFrozenHtml() |
/** |
* Returns the value of field without HTML tags |
* |
* @since 1.0 |
* @access public |
* @return string |
*/ |
function getFrozenHtml() |
{ |
if ($this->getChecked()) { |
return '<tt>(x)</tt>' . |
$this->_getPersistantData(); |
} else { |
return '<tt>( )</tt>'; |
} |
} //end func getFrozenHtml |
// }}} |
// {{{ setText() |
/** |
* Sets the radio text |
* |
* @param string $text Text to display near the radio button |
* @since 1.1 |
* @access public |
* @return void |
*/ |
function setText($text) |
{ |
$this->_text = $text; |
} //end func setText |
// }}} |
// {{{ getText() |
/** |
* Returns the radio text |
* |
* @since 1.1 |
* @access public |
* @return string |
*/ |
function getText() |
{ |
return $this->_text; |
} //end func getText |
// }}} |
// {{{ onQuickFormEvent() |
/** |
* Called by HTML_QuickForm whenever form event is made on this element |
* |
* @param string $event Name of event |
* @param mixed $arg event arguments |
* @param object $caller calling object |
* @since 1.0 |
* @access public |
* @return void |
*/ |
function onQuickFormEvent($event, $arg, &$caller) |
{ |
switch ($event) { |
case 'updateValue': |
// constant values override both default and submitted ones |
// default values are overriden by submitted |
$value = $this->_findValue($caller->_constantValues); |
if (null === $value) { |
$value = $this->_findValue($caller->_submitValues); |
if (null === $value) { |
$value = $this->_findValue($caller->_defaultValues); |
} |
} |
if ($value == $this->getValue()) { |
$this->setChecked(true); |
} else { |
$this->setChecked(false); |
} |
break; |
case 'setGroupValue': |
if ($arg == $this->getValue()) { |
$this->setChecked(true); |
} else { |
$this->setChecked(false); |
} |
break; |
default: |
parent::onQuickFormEvent($event, $arg, $caller); |
} |
return true; |
} // end func onQuickFormLoad |
// }}} |
// {{{ exportValue() |
/** |
* Returns the value attribute if the radio is checked, null if it is not |
*/ |
function exportValue(&$submitValues, $assoc = false) |
{ |
$value = $this->_findValue($submitValues); |
if (null === $value) { |
$value = $this->getChecked()? $this->getValue(): null; |
} elseif ($value != $this->getValue()) { |
$value = null; |
} |
return $this->_prepareValue($value, $assoc); |
} |
// }}} |
} //end class HTML_QuickForm_radio |
?> |
/branches/v1.0-menes/api/pear/HTML/QuickForm/input.php |
---|
New file |
0,0 → 1,202 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +----------------------------------------------------------------------+ |
// | PHP version 4.0 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997, 1998, 1999, 2000, 2001 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Adam Daniel <adaniel1@eesus.jnj.com> | |
// | Bertrand Mansion <bmansion@mamasam.com> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: input.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $ |
require_once("HTML/QuickForm/element.php"); |
/** |
* Base class for input form elements |
* |
* @author Adam Daniel <adaniel1@eesus.jnj.com> |
* @author Bertrand Mansion <bmansion@mamasam.com> |
* @version 1.0 |
* @since PHP4.04pl1 |
* @access public |
* @abstract |
*/ |
class HTML_QuickForm_input extends HTML_QuickForm_element |
{ |
// {{{ constructor |
/** |
* Class constructor |
* |
* @param string Input field name attribute |
* @param mixed Label(s) for the input field |
* @param mixed Either a typical HTML attribute string or an associative array |
* @since 1.0 |
* @access public |
* @return void |
*/ |
function HTML_QuickForm_input($elementName=null, $elementLabel=null, $attributes=null) |
{ |
$this->HTML_QuickForm_element($elementName, $elementLabel, $attributes); |
} //end constructor |
// }}} |
// {{{ setType() |
/** |
* Sets the element type |
* |
* @param string $type Element type |
* @since 1.0 |
* @access public |
* @return void |
*/ |
function setType($type) |
{ |
$this->_type = $type; |
$this->updateAttributes(array('type'=>$type)); |
} // end func setType |
// }}} |
// {{{ setName() |
/** |
* Sets the input field name |
* |
* @param string $name Input field name attribute |
* @since 1.0 |
* @access public |
* @return void |
*/ |
function setName($name) |
{ |
$this->updateAttributes(array('name'=>$name)); |
} //end func setName |
// }}} |
// {{{ getName() |
/** |
* Returns the element name |
* |
* @since 1.0 |
* @access public |
* @return string |
*/ |
function getName() |
{ |
return $this->getAttribute('name'); |
} //end func getName |
// }}} |
// {{{ setValue() |
/** |
* Sets the value of the form element |
* |
* @param string $value Default value of the form element |
* @since 1.0 |
* @access public |
* @return void |
*/ |
function setValue($value) |
{ |
$this->updateAttributes(array('value'=>$value)); |
} // end func setValue |
// }}} |
// {{{ getValue() |
/** |
* Returns the value of the form element |
* |
* @since 1.0 |
* @access public |
* @return string |
*/ |
function getValue() |
{ |
return $this->getAttribute('value'); |
} // end func getValue |
// }}} |
// {{{ toHtml() |
/** |
* Returns the input field in HTML |
* |
* @since 1.0 |
* @access public |
* @return string |
*/ |
function toHtml() |
{ |
if ($this->_flagFrozen) { |
return $this->getFrozenHtml(); |
} else { |
return $this->_getTabs() . '<input' . $this->_getAttrString($this->_attributes) . ' />'; |
} |
} //end func toHtml |
// }}} |
// {{{ onQuickFormEvent() |
/** |
* Called by HTML_QuickForm whenever form event is made on this element |
* |
* @param string $event Name of event |
* @param mixed $arg event arguments |
* @param object $caller calling object |
* @since 1.0 |
* @access public |
* @return void |
* @throws |
*/ |
function onQuickFormEvent($event, $arg, &$caller) |
{ |
// do not use submit values for button-type elements |
$type = $this->getType(); |
if (('updateValue' != $event) || |
('submit' != $type && 'reset' != $type && 'image' != $type && 'button' != $type)) { |
parent::onQuickFormEvent($event, $arg, $caller); |
} else { |
$value = $this->_findValue($caller->_constantValues); |
if (null === $value) { |
$value = $this->_findValue($caller->_defaultValues); |
} |
if (null !== $value) { |
$this->setValue($value); |
} |
} |
return true; |
} // end func onQuickFormEvent |
// }}} |
// {{{ exportValue() |
/** |
* We don't need values from button-type elements (except submit) and files |
*/ |
function exportValue(&$submitValues, $assoc = false) |
{ |
$type = $this->getType(); |
if ('reset' == $type || 'image' == $type || 'button' == $type || 'file' == $type) { |
return null; |
} else { |
return parent::exportValue($submitValues, $assoc); |
} |
} |
// }}} |
} // end class HTML_QuickForm_element |
?> |
/branches/v1.0-menes/api/pear/HTML/QuickForm/RuleRegistry.php |
---|
New file |
0,0 → 1,333 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +----------------------------------------------------------------------+ |
// | PHP version 4.0 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2003 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Adam Daniel <adaniel1@eesus.jnj.com> | |
// | Alexey Borzov <borz_off@cs.msu.su> | |
// | Bertrand Mansion <bmansion@mamasam.com> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: RuleRegistry.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $ |
/** |
* Registers rule objects and uses them for validation |
* |
*/ |
class HTML_QuickForm_RuleRegistry |
{ |
/** |
* Array containing references to used rules |
* @var array |
* @access private |
*/ |
var $_rules = array(); |
/** |
* Returns a singleton of HTML_QuickForm_RuleRegistry |
* |
* Usually, only one RuleRegistry object is needed, this is the reason |
* why it is recommended to use this method to get the validation object. |
* |
* @access public |
* @static |
* @return object Reference to the HTML_QuickForm_RuleRegistry singleton |
*/ |
function &singleton() |
{ |
static $obj; |
if (!isset($obj)) { |
$obj = new HTML_QuickForm_RuleRegistry(); |
} |
return $obj; |
} // end func singleton |
/** |
* Registers a new validation rule |
* |
* In order to use a custom rule in your form, you need to register it |
* first. For regular expressions, one can directly use the 'regex' type |
* rule in addRule(), this is faster than registering the rule. |
* |
* Functions and methods can be registered. Use the 'function' type. |
* When registering a method, specify the class name as second parameter. |
* |
* You can also register an HTML_QuickForm_Rule subclass with its own |
* validate() method. |
* |
* @param string $ruleName Name of validation rule |
* @param string $type Either: 'regex', 'function' or null |
* @param string $data1 Name of function, regular expression or |
* HTML_QuickForm_Rule object class name |
* @param string $data2 Object parent of above function or HTML_QuickForm_Rule file path |
* @access public |
* @return void |
*/ |
function registerRule($ruleName, $type, $data1, $data2 = null) |
{ |
$type = strtolower($type); |
if ($type == 'regex') { |
// Regular expression |
$rule =& $this->getRule('regex'); |
$rule->addData($ruleName, $data1); |
$GLOBALS['_HTML_QuickForm_registered_rules'][$ruleName] = $GLOBALS['_HTML_QuickForm_registered_rules']['regex']; |
} elseif ($type == 'function' || $type == 'callback') { |
// Callback function |
$rule =& $this->getRule('callback'); |
$rule->addData($ruleName, $data1, $data2, 'function' == $type); |
$GLOBALS['_HTML_QuickForm_registered_rules'][$ruleName] = $GLOBALS['_HTML_QuickForm_registered_rules']['callback']; |
} elseif (is_object($data1)) { |
// An instance of HTML_QuickForm_Rule |
$this->_rules[strtolower(get_class($data1))] = $data1; |
$GLOBALS['_HTML_QuickForm_registered_rules'][$ruleName] = array(strtolower(get_class($data1)), null); |
} else { |
// Rule class name |
$GLOBALS['_HTML_QuickForm_registered_rules'][$ruleName] = array(strtolower($data1), $data2); |
} |
} // end func registerRule |
/** |
* Returns a reference to the requested rule object |
* |
* @param string $ruleName Name of the requested rule |
* @access public |
* @return object |
*/ |
function &getRule($ruleName) |
{ |
list($class, $path) = $GLOBALS['_HTML_QuickForm_registered_rules'][$ruleName]; |
if (!isset($this->_rules[$class])) { |
if (!empty($path)) { |
include_once($path); |
} |
$this->_rules[$class] =& new $class(); |
} |
$this->_rules[$class]->setName($ruleName); |
return $this->_rules[$class]; |
} // end func getRule |
/** |
* Performs validation on the given values |
* |
* @param string $ruleName Name of the rule to be used |
* @param mixed $values Can be a scalar or an array of values |
* to be validated |
* @param mixed $options Options used by the rule |
* @param mixed $multiple Whether to validate an array of values altogether |
* @access public |
* @return mixed true if no error found, int of valid values (when an array of values is given) or false if error |
*/ |
function validate($ruleName, $values, $options = null, $multiple = false) |
{ |
$rule =& $this->getRule($ruleName); |
if (is_array($values) && !$multiple) { |
$result = 0; |
foreach ($values as $value) { |
if ($rule->validate($value, $options) === true) { |
$result++; |
} |
} |
return ($result == 0) ? false : $result; |
} else { |
return $rule->validate($values, $options); |
} |
} // end func validate |
/** |
* Returns the validation test in javascript code |
* |
* @param mixed Element(s) the rule applies to |
* @param string Element name, in case $element is not array |
* @param array Rule data |
* @access public |
* @return string JavaScript for the rule |
*/ |
function getValidationScript(&$element, $elementName, $ruleData) |
{ |
$reset = (isset($ruleData['reset'])) ? $ruleData['reset'] : false; |
$rule =& $this->getRule($ruleData['type']); |
if (!is_array($element)) { |
list($jsValue, $jsReset) = $this->_getJsValue($element, $elementName, $reset, null); |
} else { |
$jsValue = " value = new Array();\n"; |
$jsReset = ''; |
for ($i = 0; $i < count($element); $i++) { |
list($tmp_value, $tmp_reset) = $this->_getJsValue($element[$i], $element[$i]->getName(), $reset, $i); |
$jsValue .= "\n" . $tmp_value; |
$jsReset .= $tmp_reset; |
} |
} |
$jsField = isset($ruleData['group'])? $ruleData['group']: $elementName; |
list ($jsPrefix, $jsCheck) = $rule->getValidationScript($ruleData['format']); |
if (!isset($ruleData['howmany'])) { |
$js = $jsValue . "\n" . $jsPrefix . |
" if (" . str_replace('{jsVar}', 'value', $jsCheck) . " && !errFlag['{$jsField}']) {\n" . |
" errFlag['{$jsField}'] = true;\n" . |
" _qfMsg = _qfMsg + '\\n - {$ruleData['message']}';\n" . |
$jsReset . |
" }\n"; |
} else { |
$js = $jsValue . "\n" . $jsPrefix . |
" var res = 0;\n" . |
" for (var i = 0; i < value.length; i++) {\n" . |
" if (!(" . str_replace('{jsVar}', 'value[i]', $jsCheck) . ")) {\n" . |
" res++;\n" . |
" }\n" . |
" }\n" . |
" if (res < {$ruleData['howmany']} && !errFlag['{$jsField}']) {\n" . |
" errFlag['{$jsField}'] = true;\n" . |
" _qfMsg = _qfMsg + '\\n - {$ruleData['message']}';\n" . |
$jsReset . |
" }\n"; |
} |
return $js; |
} // end func getValidationScript |
/** |
* Returns JavaScript to get and to reset the element's value |
* |
* @access private |
* @param object HTML_QuickForm_element element being processed |
* @param string element's name |
* @param bool whether to generate JavaScript to reset the value |
* @param integer value's index in the array (only used for multielement rules) |
* @return array first item is value javascript, second is reset |
*/ |
function _getJsValue(&$element, $elementName, $reset = false, $index = null) |
{ |
$jsIndex = isset($index)? '[' . $index . ']': ''; |
$tmp_reset = $reset? " var field = frm.elements['$elementName'];\n": ''; |
if (is_a($element, 'html_quickform_group')) { |
$value = " _qfGroups['{$elementName}'] = {"; |
$elements =& $element->getElements(); |
for ($i = 0, $count = count($elements); $i < $count; $i++) { |
$append = ($elements[$i]->getType() == 'select' && $elements[$i]->getMultiple())? '[]': ''; |
$value .= "'" . $element->getElementName($i) . $append . "': true" . |
($i < $count - 1? ', ': ''); |
} |
$value .= |
"};\n" . |
" value{$jsIndex} = new Array();\n" . |
" var valueIdx = 0;\n" . |
" for (var i = 0; i < frm.elements.length; i++) {\n" . |
" var _element = frm.elements[i];\n" . |
" if (_element.name in _qfGroups['{$elementName}']) {\n" . |
" switch (_element.type) {\n" . |
" case 'checkbox':\n" . |
" case 'radio':\n" . |
" if (_element.checked) {\n" . |
" value{$jsIndex}[valueIdx++] = _element.value;\n" . |
" }\n" . |
" break;\n" . |
" case 'select-one':\n" . |
" if (-1 != _element.selectedIndex) {\n" . |
" value{$jsIndex}[valueIdx++] = _element.options[_element.selectedIndex].value;\n" . |
" }\n" . |
" break;\n" . |
" case 'select-multiple':\n" . |
" var tmpVal = new Array();\n" . |
" var tmpIdx = 0;\n" . |
" for (var j = 0; j < _element.options.length; j++) {\n" . |
" if (_element.options[j].selected) {\n" . |
" tmpVal[tmpIdx++] = _element.options[j].value;\n" . |
" }\n" . |
" }\n" . |
" if (tmpIdx > 0) {\n" . |
" value{$jsIndex}[valueIdx++] = tmpVal;\n" . |
" }\n" . |
" break;\n" . |
" default:\n" . |
" value{$jsIndex}[valueIdx++] = _element.value;\n" . |
" }\n" . |
" }\n" . |
" }\n"; |
if ($reset) { |
$tmp_reset = |
" for (var i = 0; i < frm.elements.length; i++) {\n" . |
" var _element = frm.elements[i];\n" . |
" if (_element.name in _qfGroups['{$elementName}']) {\n" . |
" switch (_element.type) {\n" . |
" case 'checkbox':\n" . |
" case 'radio':\n" . |
" _element.checked = _element.defaultChecked;\n" . |
" break;\n" . |
" case 'select-one':\n" . |
" case 'select-multiple:\n" . |
" for (var j = 0; j < _element.options.length; j++) {\n" . |
" _element.options[j].selected = _element.options[j].defaultSelected;\n" . |
" }\n" . |
" break;\n" . |
" default:\n" . |
" _element.value = _element.defaultValue;\n" . |
" }\n" . |
" }\n" . |
" }\n"; |
} |
} elseif ($element->getType() == 'select') { |
if ($element->getMultiple()) { |
$elementName .= '[]'; |
$value = |
" value{$jsIndex} = new Array();\n" . |
" var valueIdx = 0;\n" . |
" for (var i = 0; i < frm.elements['{$elementName}'].options.length; i++) {\n" . |
" if (frm.elements['{$elementName}'].options[i].selected) {\n" . |
" value{$jsIndex}[valueIdx++] = frm.elements['{$elementName}'].options[i].value;\n" . |
" }\n" . |
" }\n"; |
} else { |
$value = " value{$jsIndex} = frm.elements['{$elementName}'].selectedIndex == -1? '': frm.elements['{$elementName}'].options[frm.elements['{$elementName}'].selectedIndex].value;\n"; |
} |
if ($reset) { |
$tmp_reset .= |
" for (var i = 0; i < field.options.length; i++) {\n" . |
" field.options[i].selected = field.options[i].defaultSelected;\n" . |
" }\n"; |
} |
} elseif ($element->getType() == 'checkbox' && !is_a($element, 'html_quickform_advcheckbox')) { |
$value = " if (frm.elements['$elementName'].checked) {\n" . |
" value{$jsIndex} = '1';\n" . |
" } else {\n" . |
" value{$jsIndex} = '';\n" . |
" }"; |
$tmp_reset .= ($reset) ? " field.checked = field.defaultChecked;\n" : ''; |
} elseif ($element->getType() == 'radio') { |
$value = " value{$jsIndex} = '';\n" . |
" for (var i = 0; i < frm.elements['$elementName'].length; i++) {\n" . |
" if (frm.elements['$elementName'][i].checked) {\n" . |
" value{$jsIndex} = frm.elements['$elementName'][i].value;\n" . |
" }\n" . |
" }"; |
if ($reset) { |
$tmp_reset .= " for (var i = 0; i < field.length; i++) {\n" . |
" field[i].checked = field[i].defaultChecked;\n" . |
" }"; |
} |
} else { |
$value = " value{$jsIndex} = frm.elements['$elementName'].value;"; |
$tmp_reset .= ($reset) ? " field.value = field.defaultValue;\n" : ''; |
} |
return array($value, $tmp_reset); |
} |
} // end class HTML_QuickForm_RuleRegistry |
?> |
/branches/v1.0-menes/api/pear/HTML/QuickForm/autocomplete.php |
---|
New file |
0,0 → 1,249 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2003 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Author: Matteo Di Giovinazzo <matteodg@infinito.it> | |
// | | |
// | For the JavaScript code thanks to Martin Honnen and | |
// | Nicholas C. Zakas | |
// | See: | |
// | http://www.faqts.com/knowledge_base/view.phtml/aid/13562 | |
// | and | |
// | http://www.sitepoint.com/article/1220 | |
// +----------------------------------------------------------------------+ |
// |
// $Id: autocomplete.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $ |
require_once("HTML/QuickForm/text.php"); |
/** |
* Class to dynamically create an HTML input text element that |
* at every keypressed javascript event, check in an array of options |
* if there's a match and autocomplete the text in case of match. |
* |
* Ex: |
* $autocomplete =& $form->addElement('autocomplete', 'fruit', 'Favourite fruit:'); |
* $options = array("Apple", "Orange", "Pear", "Strawberry"); |
* $autocomplete->setOptions($options); |
* |
* @author Matteo Di Giovinazzo <matteodg@infinito.it> |
*/ |
class HTML_QuickForm_autocomplete extends HTML_QuickForm_text |
{ |
// {{{ properties |
/** |
* Options for the autocomplete input text element |
* |
* @var array |
* @access private |
*/ |
var $_options = array(); |
/** |
* "One-time" javascript (containing functions), see bug #4611 |
* |
* @var string |
* @access private |
*/ |
var $_js = ''; |
// }}} |
// {{{ constructor |
/** |
* Class constructor |
* |
* @param string $elementName (optional)Input field name attribute |
* @param string $elementLabel (optional)Input field label in form |
* @param array $options (optional)Autocomplete options |
* @param mixed $attributes (optional)Either a typical HTML attribute string |
* or an associative array. Date format is passed along the attributes. |
* @access public |
* @return void |
*/ |
function HTML_QuickForm_autocomplete($elementName = null, $elementLabel = null, $options = null, $attributes = null) |
{ |
$this->HTML_QuickForm_text($elementName, $elementLabel, $attributes); |
$this->_persistantFreeze = true; |
$this->_type = 'autocomplete'; |
if (isset($options)) { |
$this->setOptions($options); |
} |
} //end constructor |
// }}} |
// {{{ setOptions() |
/** |
* Sets the options for the autocomplete input text element |
* |
* @param array $options Array of options for the autocomplete input text element |
* @access public |
* @return void |
*/ |
function setOptions($options) |
{ |
$this->_options = array_values($options); |
} // end func setOptions |
// }}} |
// {{{ toHtml() |
/** |
* Returns Html for the autocomplete input text element |
* |
* @access public |
* @return string |
*/ |
function toHtml() |
{ |
// prevent problems with grouped elements |
$arrayName = str_replace(array('[', ']'), array('__', ''), $this->getName()) . '_values'; |
$this->updateAttributes(array( |
'onkeypress' => 'return autocomplete(this, event, ' . $arrayName . ');' |
)); |
if ($this->_flagFrozen) { |
$js = ''; |
} else { |
$js = "<script type=\"text/javascript\">\n//<![CDATA[\n"; |
if (!defined('HTML_QUICKFORM_AUTOCOMPLETE_EXISTS')) { |
$this->_js .= <<<EOS |
/* begin javascript for autocomplete */ |
function setSelectionRange(input, selectionStart, selectionEnd) { |
if (input.setSelectionRange) { |
input.setSelectionRange(selectionStart, selectionEnd); |
} |
else if (input.createTextRange) { |
var range = input.createTextRange(); |
range.collapse(true); |
range.moveEnd("character", selectionEnd); |
range.moveStart("character", selectionStart); |
range.select(); |
} |
input.focus(); |
} |
function setCaretToPosition(input, position) { |
setSelectionRange(input, position, position); |
} |
function replaceSelection (input, replaceString) { |
var len = replaceString.length; |
if (input.setSelectionRange) { |
var selectionStart = input.selectionStart; |
var selectionEnd = input.selectionEnd; |
input.value = input.value.substring(0, selectionStart) + replaceString + input.value.substring(selectionEnd); |
input.selectionStart = selectionStart + len; |
input.selectionEnd = selectionStart + len; |
} |
else if (document.selection) { |
var range = document.selection.createRange(); |
var saved_range = range.duplicate(); |
if (range.parentElement() == input) { |
range.text = replaceString; |
range.moveEnd("character", saved_range.selectionStart + len); |
range.moveStart("character", saved_range.selectionStart + len); |
range.select(); |
} |
} |
input.focus(); |
} |
function autocompleteMatch (text, values) { |
for (var i = 0; i < values.length; i++) { |
if (values[i].toUpperCase().indexOf(text.toUpperCase()) == 0) { |
return values[i]; |
} |
} |
return null; |
} |
function autocomplete(textbox, event, values) { |
if (textbox.setSelectionRange || textbox.createTextRange) { |
switch (event.keyCode) { |
case 38: // up arrow |
case 40: // down arrow |
case 37: // left arrow |
case 39: // right arrow |
case 33: // page up |
case 34: // page down |
case 36: // home |
case 35: // end |
case 13: // enter |
case 9: // tab |
case 27: // esc |
case 16: // shift |
case 17: // ctrl |
case 18: // alt |
case 20: // caps lock |
case 8: // backspace |
case 46: // delete |
return true; |
break; |
default: |
var c = String.fromCharCode( |
(event.charCode == undefined) ? event.keyCode : event.charCode |
); |
replaceSelection(textbox, c); |
sMatch = autocompleteMatch(textbox.value, values); |
var len = textbox.value.length; |
if (sMatch != null) { |
textbox.value = sMatch; |
setSelectionRange(textbox, len, textbox.value.length); |
} |
return false; |
} |
} |
else { |
return true; |
} |
} |
/* end javascript for autocomplete */ |
EOS; |
define('HTML_QUICKFORM_AUTOCOMPLETE_EXISTS', true); |
} |
$jsEscape = array( |
"\r" => '\r', |
"\n" => '\n', |
"\t" => '\t', |
"'" => "\\'", |
'"' => '\"', |
'\\' => '\\\\' |
); |
$js .= $this->_js; |
$js .= 'var ' . $arrayName . " = new Array();\n"; |
for ($i = 0; $i < count($this->_options); $i++) { |
$js .= $arrayName . '[' . $i . "] = '" . strtr($this->_options[$i], $jsEscape) . "';\n"; |
} |
$js .= "//]]>\n</script>"; |
} |
return $js . parent::toHtml(); |
}// end func toHtml |
// }}} |
} // end class HTML_QuickForm_autocomplete |
?> |
/branches/v1.0-menes/api/pear/HTML/QuickForm/password.php |
---|
New file |
0,0 → 1,108 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +----------------------------------------------------------------------+ |
// | PHP version 4.0 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997, 1998, 1999, 2000, 2001 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Adam Daniel <adaniel1@eesus.jnj.com> | |
// | Bertrand Mansion <bmansion@mamasam.com> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: password.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $ |
require_once("HTML/QuickForm/input.php"); |
/** |
* HTML class for a password type field |
* |
* @author Adam Daniel <adaniel1@eesus.jnj.com> |
* @author Bertrand Mansion <bmansion@mamasam.com> |
* @version 1.1 |
* @since PHP4.04pl1 |
* @access public |
*/ |
class HTML_QuickForm_password extends HTML_QuickForm_input |
{ |
// {{{ constructor |
/** |
* Class constructor |
* |
* @param string $elementName (optional)Input field name attribute |
* @param string $elementLabel (optional)Input field label |
* @param mixed $attributes (optional)Either a typical HTML attribute string |
* or an associative array |
* @since 1.0 |
* @access public |
* @return void |
* @throws |
*/ |
function HTML_QuickForm_password($elementName=null, $elementLabel=null, $attributes=null) |
{ |
HTML_QuickForm_input::HTML_QuickForm_input($elementName, $elementLabel, $attributes); |
$this->setType('password'); |
} //end constructor |
// }}} |
// {{{ setSize() |
/** |
* Sets size of password element |
* |
* @param string $size Size of password field |
* @since 1.0 |
* @access public |
* @return void |
*/ |
function setSize($size) |
{ |
$this->updateAttributes(array('size'=>$size)); |
} //end func setSize |
// }}} |
// {{{ setMaxlength() |
/** |
* Sets maxlength of password element |
* |
* @param string $maxlength Maximum length of password field |
* @since 1.0 |
* @access public |
* @return void |
*/ |
function setMaxlength($maxlength) |
{ |
$this->updateAttributes(array('maxlength'=>$maxlength)); |
} //end func setMaxlength |
// }}} |
// {{{ getFrozenHtml() |
/** |
* Returns the value of field without HTML tags (in this case, value is changed to a mask) |
* |
* @since 1.0 |
* @access public |
* @return string |
* @throws |
*/ |
function getFrozenHtml() |
{ |
$value = $this->getValue(); |
return ('' != $value? '**********': ' ') . |
$this->_getPersistantData(); |
} //end func getFrozenHtml |
// }}} |
} //end class HTML_QuickForm_password |
?> |
/branches/v1.0-menes/api/pear/HTML/QuickForm/xbutton.php |
---|
New file |
0,0 → 1,145 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2003 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Alexey Borzov <avb@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: xbutton.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $ |
require_once 'HTML/QuickForm/element.php'; |
/** |
* Class for HTML 4.0 <button> element |
* |
* @author Alexey Borzov <avb@php.net> |
* @since 3.2.3 |
* @access public |
*/ |
class HTML_QuickForm_xbutton extends HTML_QuickForm_element |
{ |
/** |
* Contents of the <button> tag |
* @var string |
* @access private |
*/ |
var $_content; |
/** |
* Class constructor |
* |
* @param string Button name |
* @param string Button content (HTML to add between <button></button> tags) |
* @param mixed Either a typical HTML attribute string or an associative array |
* @access public |
*/ |
function HTML_QuickForm_xbutton($elementName = null, $elementContent = null, $attributes = null) |
{ |
$this->HTML_QuickForm_element($elementName, null, $attributes); |
$this->setContent($elementContent); |
$this->setPersistantFreeze(false); |
$this->_type = 'xbutton'; |
} |
function toHtml() |
{ |
return '<button' . $this->getAttributes(true) . '>' . $this->_content . '</button>'; |
} |
function getFrozenHtml() |
{ |
return $this->toHtml(); |
} |
function freeze() |
{ |
return false; |
} |
function setName($name) |
{ |
$this->updateAttributes(array( |
'name' => $name |
)); |
} |
function getName() |
{ |
return $this->getAttribute('name'); |
} |
function setValue($value) |
{ |
$this->updateAttributes(array( |
'value' => $value |
)); |
} |
function getValue() |
{ |
return $this->getAttribute('value'); |
} |
/** |
* Sets the contents of the button element |
* |
* @param string Button content (HTML to add between <button></button> tags) |
*/ |
function setContent($content) |
{ |
$this->_content = $content; |
} |
function onQuickFormEvent($event, $arg, &$caller) |
{ |
if ('updateValue' != $event) { |
return parent::onQuickFormEvent($event, $arg, $caller); |
} else { |
$value = $this->_findValue($caller->_constantValues); |
if (null === $value) { |
$value = $this->_findValue($caller->_defaultValues); |
} |
if (null !== $value) { |
$this->setValue($value); |
} |
} |
return true; |
} |
/** |
* Returns a 'safe' element's value |
* |
* The value is only returned if the button's type is "submit" and if this |
* particlular button was clicked |
*/ |
function exportValue(&$submitValues, $assoc = false) |
{ |
if ('submit' == $this->getAttribute('type')) { |
return $this->_prepareValue($this->_findValue($submitValues), $assoc); |
} else { |
return null; |
} |
} |
} |
?> |
/branches/v1.0-menes/api/pear/HTML/QuickForm/submit.php |
---|
New file |
0,0 → 1,82 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +----------------------------------------------------------------------+ |
// | PHP version 4.0 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997, 1998, 1999, 2000, 2001 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Adam Daniel <adaniel1@eesus.jnj.com> | |
// | Bertrand Mansion <bmansion@mamasam.com> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: submit.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $ |
require_once("HTML/QuickForm/input.php"); |
/** |
* HTML class for a submit type element |
* |
* @author Adam Daniel <adaniel1@eesus.jnj.com> |
* @author Bertrand Mansion <bmansion@mamasam.com> |
* @version 1.0 |
* @since PHP4.04pl1 |
* @access public |
*/ |
class HTML_QuickForm_submit extends HTML_QuickForm_input |
{ |
// {{{ constructor |
/** |
* Class constructor |
* |
* @param string Input field name attribute |
* @param string Input field value |
* @param mixed Either a typical HTML attribute string or an associative array |
* @since 1.0 |
* @access public |
* @return void |
*/ |
function HTML_QuickForm_submit($elementName=null, $value=null, $attributes=null) |
{ |
HTML_QuickForm_input::HTML_QuickForm_input($elementName, null, $attributes); |
$this->setValue($value); |
$this->setType('submit'); |
} //end constructor |
// }}} |
// {{{ freeze() |
/** |
* Freeze the element so that only its value is returned |
* |
* @access public |
* @return void |
*/ |
function freeze() |
{ |
return false; |
} //end func freeze |
// }}} |
// {{{ exportValue() |
/** |
* Only return the value if it is found within $submitValues (i.e. if |
* this particular submit button was clicked) |
*/ |
function exportValue(&$submitValues, $assoc = false) |
{ |
return $this->_prepareValue($this->_findValue($submitValues), $assoc); |
} |
// }}} |
} //end class HTML_QuickForm_submit |
?> |
/branches/v1.0-menes/api/pear/HTML/QuickForm/html.php |
---|
New file |
0,0 → 1,67 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +----------------------------------------------------------------------+ |
// | PHP version 4.0 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2003 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Author: Alexey Borzov <borz_off@cs.msu.su> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: html.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $ |
require_once 'HTML/QuickForm/static.php'; |
/** |
* A pseudo-element used for adding raw HTML to form |
* |
* Intended for use with the default renderer only, template-based |
* ones may (and probably will) completely ignore this |
* |
* @author Alexey Borzov <borz_off@cs.msu.su> |
* @access public |
*/ |
class HTML_QuickForm_html extends HTML_QuickForm_static |
{ |
// {{{ constructor |
/** |
* Class constructor |
* |
* @param string $text raw HTML to add |
* @access public |
* @return void |
*/ |
function HTML_QuickForm_html($text = null) |
{ |
$this->HTML_QuickForm_static(null, null, $text); |
$this->_type = 'html'; |
} |
// }}} |
// {{{ accept() |
/** |
* Accepts a renderer |
* |
* @param object An HTML_QuickForm_Renderer object |
* @access public |
* @return void |
*/ |
function accept(&$renderer) |
{ |
$renderer->renderHtml($this); |
} // end func accept |
// }}} |
} //end class HTML_QuickForm_header |
?> |
/branches/v1.0-menes/api/pear/HTML/QuickForm/Renderer.php |
---|
New file |
0,0 → 1,150 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +----------------------------------------------------------------------+ |
// | PHP version 4.0 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2003 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Author: Alexey Borzov <borz_off@cs.msu.su> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: Renderer.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $ |
/** |
* An abstract base class for QuickForm renderers |
* |
* The class implements a Visitor design pattern |
* |
* @abstract |
* @author Alexey Borzov <borz_off@cs.msu.su> |
*/ |
class HTML_QuickForm_Renderer |
{ |
/** |
* Constructor |
* |
* @access public |
*/ |
function HTML_QuickForm_Renderer() |
{ |
} // end constructor |
/** |
* Called when visiting a form, before processing any form elements |
* |
* @param object An HTML_QuickForm object being visited |
* @access public |
* @return void |
* @abstract |
*/ |
function startForm(&$form) |
{ |
return; |
} // end func startForm |
/** |
* Called when visiting a form, after processing all form elements |
* |
* @param object An HTML_QuickForm object being visited |
* @access public |
* @return void |
* @abstract |
*/ |
function finishForm(&$form) |
{ |
return; |
} // end func finishForm |
/** |
* Called when visiting a header element |
* |
* @param object An HTML_QuickForm_header element being visited |
* @access public |
* @return void |
* @abstract |
*/ |
function renderHeader(&$header) |
{ |
return; |
} // end func renderHeader |
/** |
* Called when visiting an element |
* |
* @param object An HTML_QuickForm_element object being visited |
* @param bool Whether an element is required |
* @param string An error message associated with an element |
* @access public |
* @return void |
* @abstract |
*/ |
function renderElement(&$element, $required, $error) |
{ |
return; |
} // end func renderElement |
/** |
* Called when visiting a hidden element |
* |
* @param object An HTML_QuickForm_hidden object being visited |
* @access public |
* @return void |
* @abstract |
*/ |
function renderHidden(&$element) |
{ |
return; |
} // end func renderHidden |
/** |
* Called when visiting a raw HTML/text pseudo-element |
* |
* Seems that this should not be used when using a template-based renderer |
* |
* @param object An HTML_QuickForm_html element being visited |
* @access public |
* @return void |
* @abstract |
*/ |
function renderHtml(&$data) |
{ |
return; |
} // end func renderHtml |
/** |
* Called when visiting a group, before processing any group elements |
* |
* @param object An HTML_QuickForm_group object being visited |
* @param bool Whether a group is required |
* @param string An error message associated with a group |
* @access public |
* @return void |
* @abstract |
*/ |
function startGroup(&$group, $required, $error) |
{ |
return; |
} // end func startGroup |
/** |
* Called when visiting a group, after processing all group elements |
* |
* @param object An HTML_QuickForm_group object being visited |
* @access public |
* @return void |
* @abstract |
*/ |
function finishGroup(&$group) |
{ |
return; |
} // end func finishGroup |
} // end class HTML_QuickForm_Renderer |
?> |
/branches/v1.0-menes/api/pear/HTML/QuickForm/Rule.php |
---|
New file |
0,0 → 1,67 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +----------------------------------------------------------------------+ |
// | PHP version 4.0 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2003 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Bertrand Mansion <bmansion@mamasam.com> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: Rule.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $ |
class HTML_QuickForm_Rule |
{ |
/** |
* Name of the rule to use in validate method |
* |
* This property is used in more global rules like Callback and Regex |
* to determine which callback and which regex is to be used for validation |
* |
* @var string |
* @access public |
*/ |
var $name; |
/** |
* Validates a value |
* |
* @access public |
* @abstract |
*/ |
function validate($value) |
{ |
return true; |
} |
/** |
* Sets the rule name |
* |
* @access public |
*/ |
function setName($ruleName) |
{ |
$this->name = $ruleName; |
} |
/** |
* Returns the javascript test (the test should return true if the value is INVALID) |
* |
* @param mixed Options for the rule |
* @access public |
* @return array first element is code to setup validation, second is the check itself |
*/ |
function getValidationScript($options = null) |
{ |
return array('', ''); |
} |
} |
?> |
/branches/v1.0-menes/api/pear/HTML/QuickForm/button.php |
---|
New file |
0,0 → 1,73 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +----------------------------------------------------------------------+ |
// | PHP version 4.0 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997, 1998, 1999, 2000, 2001 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Adam Daniel <adaniel1@eesus.jnj.com> | |
// | Bertrand Mansion <bmansion@mamasam.com> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: button.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $ |
require_once("HTML/QuickForm/input.php"); |
/** |
* HTML class for a button type element |
* |
* @author Adam Daniel <adaniel1@eesus.jnj.com> |
* @author Bertrand Mansion <bmansion@mamasam.com> |
* @version 1.1 |
* @since PHP4.04pl1 |
* @access public |
*/ |
class HTML_QuickForm_button extends HTML_QuickForm_input |
{ |
// {{{ constructor |
/** |
* Class constructor |
* |
* @param string $elementName (optional)Input field name attribute |
* @param string $value (optional)Input field value |
* @param mixed $attributes (optional)Either a typical HTML attribute string |
* or an associative array |
* @since 1.0 |
* @access public |
* @return void |
*/ |
function HTML_QuickForm_button($elementName=null, $value=null, $attributes=null) |
{ |
HTML_QuickForm_input::HTML_QuickForm_input($elementName, null, $attributes); |
$this->_persistantFreeze = false; |
$this->setValue($value); |
$this->setType('button'); |
} //end constructor |
// }}} |
// {{{ freeze() |
/** |
* Freeze the element so that only its value is returned |
* |
* @access public |
* @return void |
*/ |
function freeze() |
{ |
return false; |
} //end func freeze |
// }}} |
} //end class HTML_QuickForm_button |
?> |
/branches/v1.0-menes/api/pear/HTML/QuickForm/textarea.php |
---|
New file |
0,0 → 1,222 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +----------------------------------------------------------------------+ |
// | PHP version 4.0 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997, 1998, 1999, 2000, 2001 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Adam Daniel <adaniel1@eesus.jnj.com> | |
// | Bertrand Mansion <bmansion@mamasam.com> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: textarea.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $ |
require_once("HTML/QuickForm/element.php"); |
/** |
* HTML class for a textarea type field |
* |
* @author Adam Daniel <adaniel1@eesus.jnj.com> |
* @author Bertrand Mansion <bmansion@mamasam.com> |
* @version 1.0 |
* @since PHP4.04pl1 |
* @access public |
*/ |
class HTML_QuickForm_textarea extends HTML_QuickForm_element |
{ |
// {{{ properties |
/** |
* Field value |
* @var string |
* @since 1.0 |
* @access private |
*/ |
var $_value = null; |
// }}} |
// {{{ constructor |
/** |
* Class constructor |
* |
* @param string Input field name attribute |
* @param mixed Label(s) for a field |
* @param mixed Either a typical HTML attribute string or an associative array |
* @since 1.0 |
* @access public |
* @return void |
*/ |
function HTML_QuickForm_textarea($elementName=null, $elementLabel=null, $attributes=null) |
{ |
HTML_QuickForm_element::HTML_QuickForm_element($elementName, $elementLabel, $attributes); |
$this->_persistantFreeze = true; |
$this->_type = 'textarea'; |
} //end constructor |
// }}} |
// {{{ setName() |
/** |
* Sets the input field name |
* |
* @param string $name Input field name attribute |
* @since 1.0 |
* @access public |
* @return void |
*/ |
function setName($name) |
{ |
$this->updateAttributes(array('name'=>$name)); |
} //end func setName |
// }}} |
// {{{ getName() |
/** |
* Returns the element name |
* |
* @since 1.0 |
* @access public |
* @return string |
*/ |
function getName() |
{ |
return $this->getAttribute('name'); |
} //end func getName |
// }}} |
// {{{ setValue() |
/** |
* Sets value for textarea element |
* |
* @param string $value Value for textarea element |
* @since 1.0 |
* @access public |
* @return void |
*/ |
function setValue($value) |
{ |
$this->_value = $value; |
} //end func setValue |
// }}} |
// {{{ getValue() |
/** |
* Returns the value of the form element |
* |
* @since 1.0 |
* @access public |
* @return string |
*/ |
function getValue() |
{ |
return $this->_value; |
} // end func getValue |
// }}} |
// {{{ setWrap() |
/** |
* Sets wrap type for textarea element |
* |
* @param string $wrap Wrap type |
* @since 1.0 |
* @access public |
* @return void |
*/ |
function setWrap($wrap) |
{ |
$this->updateAttributes(array('wrap' => $wrap)); |
} //end func setWrap |
// }}} |
// {{{ setRows() |
/** |
* Sets height in rows for textarea element |
* |
* @param string $rows Height expressed in rows |
* @since 1.0 |
* @access public |
* @return void |
*/ |
function setRows($rows) |
{ |
$this->updateAttributes(array('rows' => $rows)); |
} //end func setRows |
// }}} |
// {{{ setCols() |
/** |
* Sets width in cols for textarea element |
* |
* @param string $cols Width expressed in cols |
* @since 1.0 |
* @access public |
* @return void |
*/ |
function setCols($cols) |
{ |
$this->updateAttributes(array('cols' => $cols)); |
} //end func setCols |
// }}} |
// {{{ toHtml() |
/** |
* Returns the textarea element in HTML |
* |
* @since 1.0 |
* @access public |
* @return string |
*/ |
function toHtml() |
{ |
if ($this->_flagFrozen) { |
return $this->getFrozenHtml(); |
} else { |
return $this->_getTabs() . |
'<textarea' . $this->_getAttrString($this->_attributes) . '>' . |
// because we wrap the form later we don't want the text indented |
preg_replace("/(\r\n|\n|\r)/", '
', htmlspecialchars($this->_value)) . |
'</textarea>'; |
} |
} //end func toHtml |
// }}} |
// {{{ getFrozenHtml() |
/** |
* Returns the value of field without HTML tags (in this case, value is changed to a mask) |
* |
* @since 1.0 |
* @access public |
* @return string |
*/ |
function getFrozenHtml() |
{ |
$value = htmlspecialchars($this->getValue()); |
if ($this->getAttribute('wrap') == 'off') { |
$html = $this->_getTabs() . '<pre>' . $value."</pre>\n"; |
} else { |
$html = nl2br($value)."\n"; |
} |
return $html . $this->_getPersistantData(); |
} //end func getFrozenHtml |
// }}} |
} //end class HTML_QuickForm_textarea |
?> |
/branches/v1.0-menes/api/pear/HTML/QuickForm/date.php |
---|
New file |
0,0 → 1,484 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2003 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Alexey Borzov <avb@php.net> | |
// | Adam Daniel <adaniel1@eesus.jnj.com> | |
// | Bertrand Mansion <bmansion@mamasam.com> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: date.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $ |
require_once 'HTML/QuickForm/group.php'; |
require_once 'HTML/QuickForm/select.php'; |
/** |
* Class for a group of elements used to input dates (and times). |
* |
* Inspired by original 'date' element but reimplemented as a subclass |
* of HTML_QuickForm_group |
* |
* @author Alexey Borzov <avb@php.net> |
* @access public |
*/ |
class HTML_QuickForm_date extends HTML_QuickForm_group |
{ |
// {{{ properties |
/** |
* Various options to control the element's display. |
* |
* Currently known options are |
* 'language': date language |
* 'format': Format of the date, based on PHP's date() function. |
* The following characters are recognised in format string: |
* D => Short names of days |
* l => Long names of days |
* d => Day numbers |
* M => Short names of months |
* F => Long names of months |
* m => Month numbers |
* Y => Four digit year |
* y => Two digit year |
* h => 12 hour format |
* H => 23 hour format |
* i => Minutes |
* s => Seconds |
* a => am/pm |
* A => AM/PM |
* 'minYear': Minimum year in year select |
* 'maxYear': Maximum year in year select |
* 'addEmptyOption': Should an empty option be added to the top of |
* each select box? |
* 'emptyOptionValue': The value passed by the empty option. |
* 'emptyOptionText': The text displayed for the empty option. |
* 'optionIncrement': Step to increase the option values by (works for 'i' and 's') |
* |
* @access private |
* @var array |
*/ |
var $_options = array( |
'language' => 'en', |
'format' => 'dMY', |
'minYear' => 2001, |
'maxYear' => 2010, |
'addEmptyOption' => false, |
'emptyOptionValue' => '', |
'emptyOptionText' => ' ', |
'optionIncrement' => array('i' => 1, 's' => 1) |
); |
/** |
* These complement separators, they are appended to the resultant HTML |
* @access private |
* @var array |
*/ |
var $_wrap = array('', ''); |
/** |
* Options in different languages |
* |
* Note to potential translators: to avoid encoding problems please send |
* your translations with "weird" letters encoded as HTML Unicode entities |
* |
* @access private |
* @var array |
*/ |
var $_locale = array( |
'en' => array ( |
'weekdays_short'=> array ('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'), |
'weekdays_long' => array ('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'), |
'months_short' => array ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'), |
'months_long' => array ('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December') |
), |
'de' => array ( |
'weekdays_short'=> array ('So', 'Mon', 'Di', 'Mi', 'Do', 'Fr', 'Sa'), |
'weekdays_long' => array ('Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag'), |
'months_short' => array ('Jan', 'Feb', 'März', 'April', 'Mai', 'Juni', 'Juli', 'Aug', 'Sept', 'Okt', 'Nov', 'Dez'), |
'months_long' => array ('Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember') |
), |
'fr' => array ( |
'weekdays_short'=> array ('Dim', 'Lun', 'Mar', 'Mer', 'Jeu', 'Ven', 'Sam'), |
'weekdays_long' => array ('Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi'), |
'months_short' => array ('Jan', 'Fév', 'Mar', 'Avr', 'Mai', 'Juin', 'Juil', 'Août', 'Sep', 'Oct', 'Nov', 'Déc'), |
'months_long' => array ('Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre') |
), |
'hu' => array ( |
'weekdays_short'=> array ('V', 'H', 'K', 'Sze', 'Cs', 'P', 'Szo'), |
'weekdays_long' => array ('vasárnap', 'hétfő', 'kedd', 'szerda', 'csütörtök', 'péntek', 'szombat'), |
'months_short' => array ('jan', 'feb', 'márc', 'ápr', 'máj', 'jún', 'júl', 'aug', 'szept', 'okt', 'nov', 'dec'), |
'months_long' => array ('január', 'február', 'március', 'április', 'május', 'június', 'július', 'augusztus', 'szeptember', 'október', 'november', 'december') |
), |
'pl' => array ( |
'weekdays_short'=> array ('Nie', 'Pn', 'Wt', 'Śr', 'Czw', 'Pt', 'Sob'), |
'weekdays_long' => array ('Niedziela', 'Poniedziałek', 'Wtorek', 'Środa', 'Czwartek', 'Piątek', 'Sobota'), |
'months_short' => array ('Sty', 'Lut', 'Mar', 'Kwi', 'Maj', 'Cze', 'Lip', 'Sie', 'Wrz', 'Paź', 'Lis', 'Gru'), |
'months_long' => array ('Styczeń', 'Luty', 'Marzec', 'Kwiecień', 'Maj', 'Czerwiec', 'Lipiec', 'Sierpień', 'Wrzesień', 'Październik', 'Listopad', 'Grudzień') |
), |
'sl' => array ( |
'weekdays_short'=> array ('Ned', 'Pon', 'Tor', 'Sre', 'Cet', 'Pet', 'Sob'), |
'weekdays_long' => array ('Nedelja', 'Ponedeljek', 'Torek', 'Sreda', 'Cetrtek', 'Petek', 'Sobota'), |
'months_short' => array ('Jan', 'Feb', 'Mar', 'Apr', 'Maj', 'Jun', 'Jul', 'Avg', 'Sep', 'Okt', 'Nov', 'Dec'), |
'months_long' => array ('Januar', 'Februar', 'Marec', 'April', 'Maj', 'Junij', 'Julij', 'Avgust', 'September', 'Oktober', 'November', 'December') |
), |
'ru' => array ( |
'weekdays_short'=> array ('Вс', 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб'), |
'weekdays_long' => array ('Воскресенье', 'Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота'), |
'months_short' => array ('Янв', 'Фев', 'Мар', 'Апр', 'Май', 'Июн', 'Июл', 'Авг', 'Сен', 'Окт', 'Ноя', 'Дек'), |
'months_long' => array ('Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь') |
), |
'es' => array ( |
'weekdays_short'=> array ('Dom', 'Lun', 'Mar', 'Mié', 'Jue', 'Vie', 'Sáb'), |
'weekdays_long' => array ('Domingo', 'Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado'), |
'months_short' => array ('Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic'), |
'months_long' => array ('Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre') |
), |
'da' => array ( |
'weekdays_short'=> array ('Søn', 'Man', 'Tir', 'Ons', 'Tor', 'Fre', 'Lør'), |
'weekdays_long' => array ('Søndag', 'Mandag', 'Tirsdag', 'Onsdag', 'Torsdag', 'Fredag', 'Lørdag'), |
'months_short' => array ('Jan', 'Feb', 'Mar', 'Apr', 'Maj', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dec'), |
'months_long' => array ('Januar', 'Februar', 'Marts', 'April', 'Maj', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'December') |
), |
'is' => array ( |
'weekdays_short'=> array ('Sun', 'Mán', 'Þri', 'Mið', 'Fim', 'Fös', 'Lau'), |
'weekdays_long' => array ('Sunnudagur', 'Mánudagur', 'Þriðjudagur', 'Miðvikudagur', 'Fimmtudagur', 'Föstudagur', 'Laugardagur'), |
'months_short' => array ('Jan', 'Feb', 'Mar', 'Apr', 'Maí', 'Jún', 'Júl', 'Ágú', 'Sep', 'Okt', 'Nóv', 'Des'), |
'months_long' => array ('Janúar', 'Febrúar', 'Mars', 'Apríl', 'Maí', 'Júní', 'Júlí', 'Ágúst', 'September', 'Október', 'Nóvember', 'Desember') |
), |
'it' => array ( |
'weekdays_short'=> array ('Dom', 'Lun', 'Mar', 'Mer', 'Gio', 'Ven', 'Sab'), |
'weekdays_long' => array ('Domenica', 'Lunedì', 'Martedì', 'Mercoledì', 'Giovedì', 'Venerdì', 'Sabato'), |
'months_short' => array ('Gen', 'Feb', 'Mar', 'Apr', 'Mag', 'Giu', 'Lug', 'Ago', 'Set', 'Ott', 'Nov', 'Dic'), |
'months_long' => array ('Gennaio', 'Febbraio', 'Marzo', 'Aprile', 'Maggio', 'Giugno', 'Luglio', 'Agosto', 'Settembre', 'Ottobre', 'Novembre', 'Dicembre') |
), |
'sk' => array ( |
'weekdays_short'=> array ('Ned', 'Pon', 'Uto', 'Str', 'Štv', 'Pia', 'Sob'), |
'weekdays_long' => array ('Nedeža', 'Pondelok', 'Utorok', 'Streda', 'Štvrtok', 'Piatok', 'Sobota'), |
'months_short' => array ('Jan', 'Feb', 'Mar', 'Apr', 'Máj', 'Jún', 'Júl', 'Aug', 'Sep', 'Okt', 'Nov', 'Dec'), |
'months_long' => array ('Január', 'Február', 'Marec', 'Apríl', 'Máj', 'Jún', 'Júl', 'August', 'September', 'Október', 'November', 'December') |
), |
'cs' => array ( |
'weekdays_short'=> array ('Ne', 'Po', 'Út', 'St', 'Čt', 'Pá', 'So'), |
'weekdays_long' => array ('Neděle', 'Pondělí', 'Úterý', 'Středa', 'Čtvrtek', 'Pátek', 'Sobota'), |
'months_short' => array ('Led', 'Úno', 'Bře', 'Dub', 'Kvě', 'Čen', 'Čec', 'Srp', 'Zář', 'Říj', 'Lis', 'Pro'), |
'months_long' => array ('Leden', 'Únor', 'Březen', 'Duben', 'Květen', 'Červen', 'Červenec', 'Srpen', 'Září', 'Říjen', 'Listopad', 'Prosinec') |
), |
'hy' => array ( |
'weekdays_short'=> array ('Կրկ', 'Երկ', 'Երք', 'Չրք', 'Հնգ', 'Ուր', 'Շբթ'), |
'weekdays_long' => array ('Կիրակի', 'Երկուշաբթի', 'Երեքշաբթի', 'Չորեքշաբթի', 'Հինգշաբթի', 'Ուրբաթ', 'Շաբաթ'), |
'months_short' => array ('Հնվ', 'Փտր', 'Մրտ', 'Ապր', 'Մյս', 'Հնս', 'Հլս', 'Օգս', 'Սպտ', 'Հկտ', 'Նյմ', 'Դկտ'), |
'months_long' => array ('Հունվար', 'Փետրվար', 'Մարտ', 'Ապրիլ', 'Մայիս', 'Հունիս', 'Հուլիս', 'Օգոստոս', 'Սեպտեմբեր', 'Հոկտեմբեր', 'Նոյեմբեր', 'Դեկտեմբեր') |
), |
'nl' => array ( |
'weekdays_short'=> array ('Zo', 'Ma', 'Di', 'Wo', 'Do', 'Vr', 'Za'), |
'weekdays_long' => array ('Zondag', 'Maandag', 'Dinsdag', 'Woensdag', 'Donderdag', 'Vrijdag', 'Zaterdag'), |
'months_short' => array ('Jan', 'Feb', 'Mar', 'Apr', 'Mei', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dec'), |
'months_long' => array ('Januari', 'Februari', 'Maart', 'April', 'Mei', 'Juni', 'Juli', 'Augustus', 'September', 'Oktober', 'November', 'December') |
), |
'et' => array ( |
'weekdays_short'=> array ('P', 'E', 'T', 'K', 'N', 'R', 'L'), |
'weekdays_long' => array ('Pühapäev', 'Esmaspäev', 'Teisipäev', 'Kolmapäev', 'Neljapäev', 'Reede', 'Laupäev'), |
'months_short' => array ('Jaan', 'Veebr', 'Märts', 'Aprill', 'Mai', 'Juuni', 'Juuli', 'Aug', 'Sept', 'Okt', 'Nov', 'Dets'), |
'months_long' => array ('Jaanuar', 'Veebruar', 'Märts', 'Aprill', 'Mai', 'Juuni', 'Juuli', 'August', 'September', 'Oktoober', 'November', 'Detsember') |
), |
'tr' => array ( |
'weekdays_short'=> array ('Paz', 'Pzt', 'Sal', 'Çar', 'Per', 'Cum', 'Cts'), |
'weekdays_long' => array ('Pazar', 'Pazartesi', 'Salı', 'Çarşamba', 'Perşembe', 'Cuma', 'Cumartesi'), |
'months_short' => array ('Ock', 'Şbt', 'Mrt', 'Nsn', 'Mys', 'Hzrn', 'Tmmz', 'Ağst', 'Eyl', 'Ekm', 'Ksm', 'Arlk'), |
'months_long' => array ('Ocak', 'Şubat', 'Mart', 'Nisan', 'Mayıs', 'Haziran', 'Temmuz', 'Ağustos', 'Eylül', 'Ekim', 'Kasım', 'Aralık') |
), |
'no' => array ( |
'weekdays_short'=> array ('Søn', 'Man', 'Tir', 'Ons', 'Tor', 'Fre', 'Lør'), |
'weekdays_long' => array ('Søndag', 'Mandag', 'Tirsdag', 'Onsdag', 'Torsdag', 'Fredag', 'Lørdag'), |
'months_short' => array ('Jan', 'Feb', 'Mar', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Des'), |
'months_long' => array ('Januar', 'Februar', 'Mars', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Desember') |
), |
'eo' => array ( |
'weekdays_short'=> array ('Dim', 'Lun', 'Mar', 'Mer', 'Ĵaŭ', 'Ven', 'Sab'), |
'weekdays_long' => array ('Dimanĉo', 'Lundo', 'Mardo', 'Merkredo', 'Ĵaŭdo', 'Vendredo', 'Sabato'), |
'months_short' => array ('Jan', 'Feb', 'Mar', 'Apr', 'Maj', 'Jun', 'Jul', 'Aŭg', 'Sep', 'Okt', 'Nov', 'Dec'), |
'months_long' => array ('Januaro', 'Februaro', 'Marto', 'Aprilo', 'Majo', 'Junio', 'Julio', 'Aŭgusto', 'Septembro', 'Oktobro', 'Novembro', 'Decembro') |
), |
'ua' => array ( |
'weekdays_short'=> array('Ндл', 'Пнд', 'Втр', 'Срд', 'Чтв', 'Птн', 'Сбт'), |
'weekdays_long' => array('Неділя', 'Понеділок', 'Вівторок', 'Середа', 'Четвер', 'П\'ятниця', 'Субота'), |
'months_short' => array('Січ', 'Лют', 'Бер', 'Кві', 'Тра', 'Чер', 'Лип', 'Сер', 'Вер', 'Жов', 'Лис', 'Гру'), |
'months_long' => array('Січень', 'Лютий', 'Березень', 'Квітень', 'Травень', 'Червень', 'Липень', 'Серпень', 'Вересень', 'Жовтень', 'Листопад', 'Грудень') |
), |
'ro' => array ( |
'weekdays_short'=> array ('Dum', 'Lun', 'Mar', 'Mie', 'Joi', 'Vin', 'Sam'), |
'weekdays_long' => array ('Duminica', 'Luni', 'Marti', 'Miercuri', 'Joi', 'Vineri', 'Sambata'), |
'months_short' => array ('Ian', 'Feb', 'Mar', 'Apr', 'Mai', 'Iun', 'Iul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'), |
'months_long' => array ('Ianuarie', 'Februarie', 'Martie', 'Aprilie', 'Mai', 'Iunie', 'Iulie', 'August', 'Septembrie', 'Octombrie', 'Noiembrie', 'Decembrie') |
), |
'he' => array ( |
'weekdays_short'=> array ('ראשון', 'שני', 'שלישי', 'רביעי', 'חמישי', 'שישי', 'שבת'), |
'weekdays_long' => array ('יום ראשון', 'יום שני', 'יום שלישי', 'יום רביעי', 'יום חמישי', 'יום שישי', 'שבת'), |
'months_short' => array ('ינואר', 'פברואר', 'מרץ', 'אפריל', 'מאי', 'יוני', 'יולי', 'אוגוסט', 'ספטמבר', 'אוקטובר', 'נובמבר', 'דצמבר'), |
'months_long' => array ('ינואר', 'פברואר', 'מרץ', 'אפריל', 'מאי', 'יוני', 'יולי', 'אוגוסט', 'ספטמבר', 'אוקטובר', 'נובמבר', 'דצמבר') |
), |
'sv' => array ( |
'weekdays_short'=> array ('Sön', 'Mån', 'Tis', 'Ons', 'Tor', 'Fre', 'Lör'), |
'weekdays_long' => array ('Söndag', 'Måndag', 'Tisdag', 'Onsdag', 'Torsdag', 'Fredag', 'Lördag'), |
'months_short' => array ('Jan', 'Feb', 'Mar', 'Apr', 'Maj', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dec'), |
'months_long' => array ('Januari', 'Februari', 'Mars', 'April', 'Maj', 'Juni', 'Juli', 'Augusti', 'September', 'Oktober', 'November', 'December') |
), |
'pt' => array ( |
'weekdays_short'=> array ('Dom', 'Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'Sáb'), |
'weekdays_long' => array ('Domingo', 'Segunda-feira', 'Terça-feira', 'Quarta-feira', 'Quinta-feira', 'Sexta-feira', 'Sábado'), |
'months_short' => array ('Jan', 'Fev', 'Mar', 'Abr', 'Mai', 'Jun', 'Jul', 'Ago', 'Set', 'Out', 'Nov', 'Dez'), |
'months_long' => array ('Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro') |
) |
); |
// }}} |
// {{{ constructor |
/** |
* Class constructor |
* |
* @access public |
* @param string Element's name |
* @param mixed Label(s) for an element |
* @param array Options to control the element's display |
* @param mixed Either a typical HTML attribute string or an associative array |
*/ |
function HTML_QuickForm_date($elementName = null, $elementLabel = null, $options = array(), $attributes = null) |
{ |
$this->HTML_QuickForm_element($elementName, $elementLabel, $attributes); |
$this->_persistantFreeze = true; |
$this->_appendName = true; |
$this->_type = 'date'; |
// set the options, do not bother setting bogus ones |
if (is_array($options)) { |
foreach ($options as $name => $value) { |
if ('language' == $name) { |
$this->_options['language'] = isset($this->_locale[$value])? $value: 'en'; |
} elseif (isset($this->_options[$name])) { |
if (is_array($value)) { |
$this->_options[$name] = @array_merge($this->_options[$name], $value); |
} else { |
$this->_options[$name] = $value; |
} |
} |
} |
} |
} |
// }}} |
// {{{ _createElements() |
function _createElements() |
{ |
$this->_separator = $this->_elements = array(); |
$separator = ''; |
$locale =& $this->_locale[$this->_options['language']]; |
$backslash = false; |
for ($i = 0, $length = strlen($this->_options['format']); $i < $length; $i++) { |
$sign = $this->_options['format']{$i}; |
if ($backslash) { |
$backslash = false; |
$separator .= $sign; |
} else { |
$loadSelect = true; |
switch ($sign) { |
case 'D': |
// Sunday is 0 like with 'w' in date() |
$options = $locale['weekdays_short']; |
break; |
case 'l': |
$options = $locale['weekdays_long']; |
break; |
case 'd': |
$options = $this->_createOptionList(1, 31); |
break; |
case 'M': |
$options = $locale['months_short']; |
array_unshift($options , ''); |
unset($options[0]); |
break; |
case 'm': |
$options = $this->_createOptionList(1, 12); |
break; |
case 'F': |
$options = $locale['months_long']; |
array_unshift($options , ''); |
unset($options[0]); |
break; |
case 'Y': |
$options = $this->_createOptionList( |
$this->_options['minYear'], |
$this->_options['maxYear'], |
$this->_options['minYear'] > $this->_options['maxYear']? -1: 1 |
); |
break; |
case 'y': |
$options = $this->_createOptionList( |
$this->_options['minYear'], |
$this->_options['maxYear'], |
$this->_options['minYear'] > $this->_options['maxYear']? -1: 1 |
); |
array_walk($options, create_function('&$v,$k','$v = substr($v,-2);')); |
break; |
case 'h': |
$options = $this->_createOptionList(1, 12); |
break; |
case 'g': |
$options = $this->_createOptionList(1, 12); |
array_walk($options, create_function('&$v,$k', '$v = intval($v);')); |
break; |
case 'H': |
$options = $this->_createOptionList(0, 23); |
break; |
case 'i': |
$options = $this->_createOptionList(0, 59, $this->_options['optionIncrement']['i']); |
break; |
case 's': |
$options = $this->_createOptionList(0, 59, $this->_options['optionIncrement']['s']); |
break; |
case 'a': |
$options = array('am' => 'am', 'pm' => 'pm'); |
break; |
case 'A': |
$options = array('AM' => 'AM', 'PM' => 'PM'); |
break; |
case 'W': |
$options = $this->_createOptionList(1, 53); |
break; |
case '\\': |
$backslash = true; |
$loadSelect = false; |
break; |
default: |
$separator .= (' ' == $sign? ' ': $sign); |
$loadSelect = false; |
} |
if ($loadSelect) { |
if (0 < count($this->_elements)) { |
$this->_separator[] = $separator; |
} else { |
$this->_wrap[0] = $separator; |
} |
$separator = ''; |
// Should we add an empty option to the top of the select? |
if (!is_array($this->_options['addEmptyOption']) && $this->_options['addEmptyOption'] || |
is_array($this->_options['addEmptyOption']) && !empty($this->_options['addEmptyOption'][$sign])) { |
// Using '+' array operator to preserve the keys |
if (is_array($this->_options['emptyOptionText']) && !empty($this->_options['emptyOptionText'][$sign])) { |
$options = array($this->_options['emptyOptionValue'] => $this->_options['emptyOptionText'][$sign]) + $options; |
} else { |
$options = array($this->_options['emptyOptionValue'] => $this->_options['emptyOptionText']) + $options; |
} |
} |
$this->_elements[] =& new HTML_QuickForm_select($sign, null, $options, $this->getAttributes()); |
} |
} |
} |
$this->_wrap[1] = $separator . ($backslash? '\\': ''); |
} |
// }}} |
// {{{ _createOptionList() |
/** |
* Creates an option list containing the numbers from the start number to the end, inclusive |
* |
* @param int The start number |
* @param int The end number |
* @param int Increment by this value |
* @access private |
* @return array An array of numeric options. |
*/ |
function _createOptionList($start, $end, $step = 1) |
{ |
for ($i = $start, $options = array(); $start > $end? $i >= $end: $i <= $end; $i += $step) { |
$options[$i] = sprintf('%02d', $i); |
} |
return $options; |
} |
// }}} |
// {{{ setValue() |
function setValue($value) |
{ |
if (empty($value)) { |
$value = array(); |
} elseif (is_scalar($value)) { |
if (!is_numeric($value)) { |
$value = strtotime($value); |
} |
// might be a unix epoch, then we fill all possible values |
$arr = explode('-', date('w-d-n-Y-h-H-i-s-a-A-W', (int)$value)); |
$value = array( |
'D' => $arr[0], |
'l' => $arr[0], |
'd' => $arr[1], |
'M' => $arr[2], |
'm' => $arr[2], |
'F' => $arr[2], |
'Y' => $arr[3], |
'y' => $arr[3], |
'h' => $arr[4], |
'g' => $arr[4], |
'H' => $arr[5], |
'i' => $arr[6], |
's' => $arr[7], |
'a' => $arr[8], |
'A' => $arr[9], |
'W' => $arr[10] |
); |
} |
parent::setValue($value); |
} |
// }}} |
// {{{ toHtml() |
function toHtml() |
{ |
include_once('HTML/QuickForm/Renderer/Default.php'); |
$renderer =& new HTML_QuickForm_Renderer_Default(); |
$renderer->setElementTemplate('{element}'); |
parent::accept($renderer); |
return $this->_wrap[0] . $renderer->toHtml() . $this->_wrap[1]; |
} |
// }}} |
// {{{ accept() |
function accept(&$renderer, $required = false, $error = null) |
{ |
$renderer->renderElement($this, $required, $error); |
} |
// }}} |
// {{{ onQuickFormEvent() |
function onQuickFormEvent($event, $arg, &$caller) |
{ |
if ('updateValue' == $event) { |
// we need to call setValue(), 'cause the default/constant value |
// may be in fact a timestamp, not an array |
return HTML_QuickForm_element::onQuickFormEvent($event, $arg, $caller); |
} else { |
return parent::onQuickFormEvent($event, $arg, $caller); |
} |
} |
// }}} |
} |
?> |
/branches/v1.0-menes/api/pear/HTML/QuickForm/file.php |
---|
New file |
0,0 → 1,346 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +----------------------------------------------------------------------+ |
// | PHP version 4.0 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997, 1998, 1999, 2000, 2001 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Adam Daniel <adaniel1@eesus.jnj.com> | |
// | Bertrand Mansion <bmansion@mamasam.com> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: file.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $ |
require_once("HTML/QuickForm/input.php"); |
// register file-related rules |
if (class_exists('HTML_QuickForm')) { |
HTML_QuickForm::registerRule('uploadedfile', 'callback', '_ruleIsUploadedFile', 'HTML_QuickForm_file'); |
HTML_QuickForm::registerRule('maxfilesize', 'callback', '_ruleCheckMaxFileSize', 'HTML_QuickForm_file'); |
HTML_QuickForm::registerRule('mimetype', 'callback', '_ruleCheckMimeType', 'HTML_QuickForm_file'); |
HTML_QuickForm::registerRule('filename', 'callback', '_ruleCheckFileName', 'HTML_QuickForm_file'); |
} |
/** |
* HTML class for a file type element |
* |
* @author Adam Daniel <adaniel1@eesus.jnj.com> |
* @author Bertrand Mansion <bmansion@mamasam.com> |
* @version 1.0 |
* @since PHP4.04pl1 |
* @access public |
*/ |
class HTML_QuickForm_file extends HTML_QuickForm_input |
{ |
// {{{ properties |
/** |
* Uploaded file data, from $_FILES |
* @var array |
*/ |
var $_value = null; |
// }}} |
// {{{ constructor |
/** |
* Class constructor |
* |
* @param string Input field name attribute |
* @param string Input field label |
* @param mixed (optional)Either a typical HTML attribute string |
* or an associative array |
* @since 1.0 |
* @access public |
*/ |
function HTML_QuickForm_file($elementName=null, $elementLabel=null, $attributes=null) |
{ |
HTML_QuickForm_input::HTML_QuickForm_input($elementName, $elementLabel, $attributes); |
$this->setType('file'); |
} //end constructor |
// }}} |
// {{{ setSize() |
/** |
* Sets size of file element |
* |
* @param int Size of file element |
* @since 1.0 |
* @access public |
*/ |
function setSize($size) |
{ |
$this->updateAttributes(array('size' => $size)); |
} //end func setSize |
// }}} |
// {{{ getSize() |
/** |
* Returns size of file element |
* |
* @since 1.0 |
* @access public |
* @return int |
*/ |
function getSize() |
{ |
return $this->getAttribute('size'); |
} //end func getSize |
// }}} |
// {{{ freeze() |
/** |
* Freeze the element so that only its value is returned |
* |
* @access public |
* @return bool |
*/ |
function freeze() |
{ |
return false; |
} //end func freeze |
// }}} |
// {{{ setValue() |
/** |
* Sets value for file element. |
* |
* Actually this does nothing. The function is defined here to override |
* HTML_Quickform_input's behaviour of setting the 'value' attribute. As |
* no sane user-agent uses <input type="file">'s value for anything |
* (because of security implications) we implement file's value as a |
* read-only property with a special meaning. |
* |
* @param mixed Value for file element |
* @since 3.0 |
* @access public |
*/ |
function setValue($value) |
{ |
return null; |
} //end func setValue |
// }}} |
// {{{ getValue() |
/** |
* Returns information about the uploaded file |
* |
* @since 3.0 |
* @access public |
* @return array |
*/ |
function getValue() |
{ |
return $this->_value; |
} // end func getValue |
// }}} |
// {{{ onQuickFormEvent() |
/** |
* Called by HTML_QuickForm whenever form event is made on this element |
* |
* @param string Name of event |
* @param mixed event arguments |
* @param object calling object |
* @since 1.0 |
* @access public |
* @return bool |
*/ |
function onQuickFormEvent($event, $arg, &$caller) |
{ |
switch ($event) { |
case 'updateValue': |
if ($caller->getAttribute('method') == 'get') { |
return PEAR::raiseError('Cannot add a file upload field to a GET method form'); |
} |
$this->_value = $this->_findValue(); |
$caller->updateAttributes(array('enctype' => 'multipart/form-data')); |
$caller->setMaxFileSize(); |
break; |
case 'addElement': |
$this->onQuickFormEvent('createElement', $arg, $caller); |
return $this->onQuickFormEvent('updateValue', null, $caller); |
break; |
case 'createElement': |
$className = get_class($this); |
$this->$className($arg[0], $arg[1], $arg[2]); |
break; |
} |
return true; |
} // end func onQuickFormEvent |
// }}} |
// {{{ moveUploadedFile() |
/** |
* Moves an uploaded file into the destination |
* |
* @param string Destination directory path |
* @param string New file name |
* @access public |
*/ |
function moveUploadedFile($dest, $fileName = '') |
{ |
if ($dest != '' && substr($dest, -1) != '/') { |
$dest .= '/'; |
} |
$fileName = ($fileName != '') ? $fileName : basename($this->_value['name']); |
if (move_uploaded_file($this->_value['tmp_name'], $dest . $fileName)) { |
return true; |
} else { |
return false; |
} |
} // end func moveUploadedFile |
// }}} |
// {{{ isUploadedFile() |
/** |
* Checks if the element contains an uploaded file |
* |
* @access public |
* @return bool true if file has been uploaded, false otherwise |
*/ |
function isUploadedFile() |
{ |
return $this->_ruleIsUploadedFile($this->_value); |
} // end func isUploadedFile |
// }}} |
// {{{ _ruleIsUploadedFile() |
/** |
* Checks if the given element contains an uploaded file |
* |
* @param array Uploaded file info (from $_FILES) |
* @access private |
* @return bool true if file has been uploaded, false otherwise |
*/ |
function _ruleIsUploadedFile($elementValue) |
{ |
if ((isset($elementValue['error']) && $elementValue['error'] == 0) || |
(!empty($elementValue['tmp_name']) && $elementValue['tmp_name'] != 'none')) { |
return is_uploaded_file($elementValue['tmp_name']); |
} else { |
return false; |
} |
} // end func _ruleIsUploadedFile |
// }}} |
// {{{ _ruleCheckMaxFileSize() |
/** |
* Checks that the file does not exceed the max file size |
* |
* @param array Uploaded file info (from $_FILES) |
* @param int Max file size |
* @access private |
* @return bool true if filesize is lower than maxsize, false otherwise |
*/ |
function _ruleCheckMaxFileSize($elementValue, $maxSize) |
{ |
if (!empty($elementValue['error']) && |
(UPLOAD_ERR_FORM_SIZE == $elementValue['error'] || UPLOAD_ERR_INI_SIZE == $elementValue['error'])) { |
return false; |
} |
if (!HTML_QuickForm_file::_ruleIsUploadedFile($elementValue)) { |
return true; |
} |
return ($maxSize >= @filesize($elementValue['tmp_name'])); |
} // end func _ruleCheckMaxFileSize |
// }}} |
// {{{ _ruleCheckMimeType() |
/** |
* Checks if the given element contains an uploaded file of the right mime type |
* |
* @param array Uploaded file info (from $_FILES) |
* @param mixed Mime Type (can be an array of allowed types) |
* @access private |
* @return bool true if mimetype is correct, false otherwise |
*/ |
function _ruleCheckMimeType($elementValue, $mimeType) |
{ |
if (!HTML_QuickForm_file::_ruleIsUploadedFile($elementValue)) { |
return true; |
} |
if (is_array($mimeType)) { |
return in_array($elementValue['type'], $mimeType); |
} |
return $elementValue['type'] == $mimeType; |
} // end func _ruleCheckMimeType |
// }}} |
// {{{ _ruleCheckFileName() |
/** |
* Checks if the given element contains an uploaded file of the filename regex |
* |
* @param array Uploaded file info (from $_FILES) |
* @param string Regular expression |
* @access private |
* @return bool true if name matches regex, false otherwise |
*/ |
function _ruleCheckFileName($elementValue, $regex) |
{ |
if (!HTML_QuickForm_file::_ruleIsUploadedFile($elementValue)) { |
return true; |
} |
return preg_match($regex, $elementValue['name']); |
} // end func _ruleCheckFileName |
// }}} |
// {{{ _findValue() |
/** |
* Tries to find the element value from the values array |
* |
* Needs to be redefined here as $_FILES is populated differently from |
* other arrays when element name is of the form foo[bar] |
* |
* @access private |
* @return mixed |
*/ |
function _findValue() |
{ |
if (empty($_FILES)) { |
return null; |
} |
$elementName = $this->getName(); |
if (isset($_FILES[$elementName])) { |
return $_FILES[$elementName]; |
} elseif (false !== ($pos = strpos($elementName, '['))) { |
$base = substr($elementName, 0, $pos); |
$idx = "['" . str_replace(array(']', '['), array('', "']['"), substr($elementName, $pos + 1, -1)) . "']"; |
$props = array('name', 'type', 'size', 'tmp_name', 'error'); |
$code = "if (!isset(\$_FILES['{$base}']['name']{$idx})) {\n" . |
" return null;\n" . |
"} else {\n" . |
" \$value = array();\n"; |
foreach ($props as $prop) { |
$code .= " \$value['{$prop}'] = \$_FILES['{$base}']['{$prop}']{$idx};\n"; |
} |
return eval($code . " return \$value;\n}\n"); |
} else { |
return null; |
} |
} |
// }}} |
} // end class HTML_QuickForm_file |
?> |
/branches/v1.0-menes/api/pear/HTML/QuickForm/select.php |
---|
New file |
0,0 → 1,604 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +----------------------------------------------------------------------+ |
// | PHP version 4.0 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2003 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Adam Daniel <adaniel1@eesus.jnj.com> | |
// | Bertrand Mansion <bmansion@mamasam.com> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: select.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $ |
require_once('HTML/QuickForm/element.php'); |
/** |
* Class to dynamically create an HTML SELECT |
* |
* @author Adam Daniel <adaniel1@eesus.jnj.com> |
* @author Bertrand Mansion <bmansion@mamasam.com> |
* @version 1.0 |
* @since PHP4.04pl1 |
* @access public |
*/ |
class HTML_QuickForm_select extends HTML_QuickForm_element { |
// {{{ properties |
/** |
* Contains the select options |
* |
* @var array |
* @since 1.0 |
* @access private |
*/ |
var $_options = array(); |
/** |
* Default values of the SELECT |
* |
* @var string |
* @since 1.0 |
* @access private |
*/ |
var $_values = null; |
// }}} |
// {{{ constructor |
/** |
* Class constructor |
* |
* @param string Select name attribute |
* @param mixed Label(s) for the select |
* @param mixed Data to be used to populate options |
* @param mixed Either a typical HTML attribute string or an associative array |
* @since 1.0 |
* @access public |
* @return void |
*/ |
function HTML_QuickForm_select($elementName=null, $elementLabel=null, $options=null, $attributes=null) |
{ |
HTML_QuickForm_element::HTML_QuickForm_element($elementName, $elementLabel, $attributes); |
$this->_persistantFreeze = true; |
$this->_type = 'select'; |
if (isset($options)) { |
$this->load($options); |
} |
} //end constructor |
// }}} |
// {{{ apiVersion() |
/** |
* Returns the current API version |
* |
* @since 1.0 |
* @access public |
* @return double |
*/ |
function apiVersion() |
{ |
return 2.3; |
} //end func apiVersion |
// }}} |
// {{{ setSelected() |
/** |
* Sets the default values of the select box |
* |
* @param mixed $values Array or comma delimited string of selected values |
* @since 1.0 |
* @access public |
* @return void |
*/ |
function setSelected($values) |
{ |
if (is_string($values) && $this->getMultiple()) { |
$values = split("[ ]?,[ ]?", $values); |
} |
if (is_array($values)) { |
$this->_values = array_values($values); |
} else { |
$this->_values = array($values); |
} |
} //end func setSelected |
// }}} |
// {{{ getSelected() |
/** |
* Returns an array of the selected values |
* |
* @since 1.0 |
* @access public |
* @return array of selected values |
*/ |
function getSelected() |
{ |
return $this->_values; |
} // end func getSelected |
// }}} |
// {{{ setName() |
/** |
* Sets the input field name |
* |
* @param string $name Input field name attribute |
* @since 1.0 |
* @access public |
* @return void |
*/ |
function setName($name) |
{ |
$this->updateAttributes(array('name' => $name)); |
} //end func setName |
// }}} |
// {{{ getName() |
/** |
* Returns the element name |
* |
* @since 1.0 |
* @access public |
* @return string |
*/ |
function getName() |
{ |
return $this->getAttribute('name'); |
} //end func getName |
// }}} |
// {{{ getPrivateName() |
/** |
* Returns the element name (possibly with brackets appended) |
* |
* @since 1.0 |
* @access public |
* @return string |
*/ |
function getPrivateName() |
{ |
if ($this->getAttribute('multiple')) { |
return $this->getName() . '[]'; |
} else { |
return $this->getName(); |
} |
} //end func getPrivateName |
// }}} |
// {{{ setValue() |
/** |
* Sets the value of the form element |
* |
* @param mixed $values Array or comma delimited string of selected values |
* @since 1.0 |
* @access public |
* @return void |
*/ |
function setValue($value) |
{ |
$this->setSelected($value); |
} // end func setValue |
// }}} |
// {{{ getValue() |
/** |
* Returns an array of the selected values |
* |
* @since 1.0 |
* @access public |
* @return array of selected values |
*/ |
function getValue() |
{ |
return $this->_values; |
} // end func getValue |
// }}} |
// {{{ setSize() |
/** |
* Sets the select field size, only applies to 'multiple' selects |
* |
* @param int $size Size of select field |
* @since 1.0 |
* @access public |
* @return void |
*/ |
function setSize($size) |
{ |
$this->updateAttributes(array('size' => $size)); |
} //end func setSize |
// }}} |
// {{{ getSize() |
/** |
* Returns the select field size |
* |
* @since 1.0 |
* @access public |
* @return int |
*/ |
function getSize() |
{ |
return $this->getAttribute('size'); |
} //end func getSize |
// }}} |
// {{{ setMultiple() |
/** |
* Sets the select mutiple attribute |
* |
* @param bool $multiple Whether the select supports multi-selections |
* @since 1.2 |
* @access public |
* @return void |
*/ |
function setMultiple($multiple) |
{ |
if ($multiple) { |
$this->updateAttributes(array('multiple' => 'multiple')); |
} else { |
$this->removeAttribute('multiple'); |
} |
} //end func setMultiple |
// }}} |
// {{{ getMultiple() |
/** |
* Returns the select mutiple attribute |
* |
* @since 1.2 |
* @access public |
* @return bool true if multiple select, false otherwise |
*/ |
function getMultiple() |
{ |
return (bool)$this->getAttribute('multiple'); |
} //end func getMultiple |
// }}} |
// {{{ addOption() |
/** |
* Adds a new OPTION to the SELECT |
* |
* @param string $text Display text for the OPTION |
* @param string $value Value for the OPTION |
* @param mixed $attributes Either a typical HTML attribute string |
* or an associative array |
* @since 1.0 |
* @access public |
* @return void |
*/ |
function addOption($text, $value, $attributes=null) |
{ |
if (null === $attributes) { |
$attributes = array('value' => $value); |
} else { |
$attributes = $this->_parseAttributes($attributes); |
if (isset($attributes['selected'])) { |
// the 'selected' attribute will be set in toHtml() |
$this->_removeAttr('selected', $attributes); |
if (is_null($this->_values)) { |
$this->_values = array($value); |
} elseif (!in_array($value, $this->_values)) { |
$this->_values[] = $value; |
} |
} |
$this->_updateAttrArray($attributes, array('value' => $value)); |
} |
$this->_options[] = array('text' => $text, 'attr' => $attributes); |
} // end func addOption |
// }}} |
// {{{ loadArray() |
/** |
* Loads the options from an associative array |
* |
* @param array $arr Associative array of options |
* @param mixed $values (optional) Array or comma delimited string of selected values |
* @since 1.0 |
* @access public |
* @return PEAR_Error on error or true |
* @throws PEAR_Error |
*/ |
function loadArray($arr, $values=null) |
{ |
if (!is_array($arr)) { |
return PEAR::raiseError('Argument 1 of HTML_Select::loadArray is not a valid array'); |
} |
if (isset($values)) { |
$this->setSelected($values); |
} |
foreach ($arr as $key => $val) { |
// Warning: new API since release 2.3 |
$this->addOption($val, $key); |
} |
return true; |
} // end func loadArray |
// }}} |
// {{{ loadDbResult() |
/** |
* Loads the options from DB_result object |
* |
* If no column names are specified the first two columns of the result are |
* used as the text and value columns respectively |
* @param object $result DB_result object |
* @param string $textCol (optional) Name of column to display as the OPTION text |
* @param string $valueCol (optional) Name of column to use as the OPTION value |
* @param mixed $values (optional) Array or comma delimited string of selected values |
* @since 1.0 |
* @access public |
* @return PEAR_Error on error or true |
* @throws PEAR_Error |
*/ |
function loadDbResult(&$result, $textCol=null, $valueCol=null, $values=null) |
{ |
if (!is_object($result) || !is_a($result, 'db_result')) { |
return PEAR::raiseError('Argument 1 of HTML_Select::loadDbResult is not a valid DB_result'); |
} |
if (isset($values)) { |
$this->setValue($values); |
} |
$fetchMode = ($textCol && $valueCol) ? DB_FETCHMODE_ASSOC : DB_FETCHMODE_DEFAULT; |
while (is_array($row = $result->fetchRow($fetchMode)) ) { |
if ($fetchMode == DB_FETCHMODE_ASSOC) { |
$this->addOption($row[$textCol], $row[$valueCol]); |
} else { |
$this->addOption($row[0], $row[1]); |
} |
} |
return true; |
} // end func loadDbResult |
// }}} |
// {{{ loadQuery() |
/** |
* Queries a database and loads the options from the results |
* |
* @param mixed $conn Either an existing DB connection or a valid dsn |
* @param string $sql SQL query string |
* @param string $textCol (optional) Name of column to display as the OPTION text |
* @param string $valueCol (optional) Name of column to use as the OPTION value |
* @param mixed $values (optional) Array or comma delimited string of selected values |
* @since 1.1 |
* @access public |
* @return void |
* @throws PEAR_Error |
*/ |
function loadQuery(&$conn, $sql, $textCol=null, $valueCol=null, $values=null) |
{ |
if (is_string($conn)) { |
require_once('DB.php'); |
$dbConn = &DB::connect($conn, true); |
if (DB::isError($dbConn)) { |
return $dbConn; |
} |
} elseif (is_subclass_of($conn, "db_common")) { |
$dbConn = &$conn; |
} else { |
return PEAR::raiseError('Argument 1 of HTML_Select::loadQuery is not a valid type'); |
} |
$result = $dbConn->query($sql); |
if (DB::isError($result)) { |
return $result; |
} |
$this->loadDbResult($result, $textCol, $valueCol, $values); |
$result->free(); |
if (is_string($conn)) { |
$dbConn->disconnect(); |
} |
return true; |
} // end func loadQuery |
// }}} |
// {{{ load() |
/** |
* Loads options from different types of data sources |
* |
* This method is a simulated overloaded method. The arguments, other than the |
* first are optional and only mean something depending on the type of the first argument. |
* If the first argument is an array then all arguments are passed in order to loadArray. |
* If the first argument is a db_result then all arguments are passed in order to loadDbResult. |
* If the first argument is a string or a DB connection then all arguments are |
* passed in order to loadQuery. |
* @param mixed $options Options source currently supports assoc array or DB_result |
* @param mixed $param1 (optional) See function detail |
* @param mixed $param2 (optional) See function detail |
* @param mixed $param3 (optional) See function detail |
* @param mixed $param4 (optional) See function detail |
* @since 1.1 |
* @access public |
* @return PEAR_Error on error or true |
* @throws PEAR_Error |
*/ |
function load(&$options, $param1=null, $param2=null, $param3=null, $param4=null) |
{ |
switch (true) { |
case is_array($options): |
return $this->loadArray($options, $param1); |
break; |
case (is_a($options, 'db_result')): |
return $this->loadDbResult($options, $param1, $param2, $param3); |
break; |
case (is_string($options) && !empty($options) ): |
return $this->loadQuery($options, $param1, $param2, $param3, $param4); |
break; |
} |
} // end func load |
// }}} |
// {{{ toHtml() |
/** |
* Returns the SELECT in HTML |
* |
* @since 1.0 |
* @access public |
* @return string |
*/ |
function toHtml() |
{ |
if ($this->_flagFrozen) { |
return $this->getFrozenHtml(); |
} else { |
$tabs = $this->_getTabs(); |
$strHtml = ''; |
if ($this->getComment() != '') { |
$strHtml .= $tabs . '<!-- ' . $this->getComment() . " //-->\n"; |
} |
if (!$this->getMultiple()) { |
$attrString = $this->_getAttrString($this->_attributes); |
} else { |
$myName = $this->getName(); |
$this->setName($myName . '[]'); |
$attrString = $this->_getAttrString($this->_attributes); |
$this->setName($myName); |
} |
$strHtml .= $tabs . '<select' . $attrString . ">\n"; |
foreach ($this->_options as $option) { |
if (is_array($this->_values) && in_array((string)$option['attr']['value'], $this->_values)) { |
$this->_updateAttrArray($option['attr'], array('selected' => 'selected')); |
} |
$strHtml .= $tabs . "\t<option" . $this->_getAttrString($option['attr']) . '>' . |
$option['text'] . "</option>\n"; |
} |
return $strHtml . $tabs . '</select>'; |
} |
} //end func toHtml |
// }}} |
// {{{ getFrozenHtml() |
/** |
* Returns the value of field without HTML tags |
* |
* @since 1.0 |
* @access public |
* @return string |
*/ |
function getFrozenHtml() |
{ |
$value = array(); |
if (is_array($this->_values)) { |
foreach ($this->_values as $key => $val) { |
for ($i = 0, $optCount = count($this->_options); $i < $optCount; $i++) { |
if ((string)$val == (string)$this->_options[$i]['attr']['value']) { |
$value[$key] = $this->_options[$i]['text']; |
break; |
} |
} |
} |
} |
$html = empty($value)? ' ': join('<br />', $value); |
if ($this->_persistantFreeze) { |
$name = $this->getPrivateName(); |
// Only use id attribute if doing single hidden input |
if (1 == count($value)) { |
$id = $this->getAttribute('id'); |
$idAttr = isset($id)? array('id' => $id): array(); |
} else { |
$idAttr = array(); |
} |
foreach ($value as $key => $item) { |
$html .= '<input' . $this->_getAttrString(array( |
'type' => 'hidden', |
'name' => $name, |
'value' => $this->_values[$key] |
) + $idAttr) . ' />'; |
} |
} |
return $html; |
} //end func getFrozenHtml |
// }}} |
// {{{ exportValue() |
/** |
* We check the options and return only the values that _could_ have been |
* selected. We also return a scalar value if select is not "multiple" |
*/ |
function exportValue(&$submitValues, $assoc = false) |
{ |
$value = $this->_findValue($submitValues); |
if (is_null($value)) { |
$value = $this->getValue(); |
} elseif(!is_array($value)) { |
$value = array($value); |
} |
if (is_array($value) && !empty($this->_options)) { |
$cleanValue = null; |
foreach ($value as $v) { |
for ($i = 0, $optCount = count($this->_options); $i < $optCount; $i++) { |
if ($v == $this->_options[$i]['attr']['value']) { |
$cleanValue[] = $v; |
break; |
} |
} |
} |
} else { |
$cleanValue = $value; |
} |
if (is_array($cleanValue) && !$this->getMultiple()) { |
return $this->_prepareValue($cleanValue[0], $assoc); |
} else { |
return $this->_prepareValue($cleanValue, $assoc); |
} |
} |
// }}} |
// {{{ onQuickFormEvent() |
function onQuickFormEvent($event, $arg, &$caller) |
{ |
if ('updateValue' == $event) { |
$value = $this->_findValue($caller->_constantValues); |
if (null === $value) { |
$value = $this->_findValue($caller->_submitValues); |
// Fix for bug #4465 |
// XXX: should we push this to element::onQuickFormEvent()? |
if (null === $value && !$caller->isSubmitted()) { |
$value = $this->_findValue($caller->_defaultValues); |
} |
} |
if (null !== $value) { |
$this->setValue($value); |
} |
return true; |
} else { |
return parent::onQuickFormEvent($event, $arg, $caller); |
} |
} |
// }}} |
} //end class HTML_QuickForm_select |
?> |
/branches/v1.0-menes/api/pear/HTML/QuickForm/Renderer/Array.php |
---|
New file |
0,0 → 1,319 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +----------------------------------------------------------------------+ |
// | PHP version 4.0 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2003 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Alexey Borzov <borz_off@cs.msu.su> | |
// | Adam Daniel <adaniel1@eesus.jnj.com> | |
// | Bertrand Mansion <bmansion@mamasam.com> | |
// | Thomas Schulz <ths@4bconsult.de> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: Array.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $ |
require_once 'HTML/QuickForm/Renderer.php'; |
/** |
* A concrete renderer for HTML_QuickForm, makes an array of form contents |
* |
* Based on old toArray() code. |
* |
* The form array structure is the following: |
* array( |
* 'frozen' => 'whether the form is frozen', |
* 'javascript' => 'javascript for client-side validation', |
* 'attributes' => 'attributes for <form> tag', |
* 'requirednote => 'note about the required elements', |
* // if we set the option to collect hidden elements |
* 'hidden' => 'collected html of all hidden elements', |
* // if there were some validation errors: |
* 'errors' => array( |
* '1st element name' => 'Error for the 1st element', |
* ... |
* 'nth element name' => 'Error for the nth element' |
* ), |
* // if there are no headers in the form: |
* 'elements' => array( |
* element_1, |
* ... |
* element_N |
* ) |
* // if there are headers in the form: |
* 'sections' => array( |
* array( |
* 'header' => 'Header text for the first header', |
* 'name' => 'Header name for the first header', |
* 'elements' => array( |
* element_1, |
* ... |
* element_K1 |
* ) |
* ), |
* ... |
* array( |
* 'header' => 'Header text for the Mth header', |
* 'name' => 'Header name for the Mth header', |
* 'elements' => array( |
* element_1, |
* ... |
* element_KM |
* ) |
* ) |
* ) |
* ); |
* |
* where element_i is an array of the form: |
* array( |
* 'name' => 'element name', |
* 'value' => 'element value', |
* 'type' => 'type of the element', |
* 'frozen' => 'whether element is frozen', |
* 'label' => 'label for the element', |
* 'required' => 'whether element is required', |
* 'error' => 'error associated with the element', |
* 'style' => 'some information about element style (e.g. for Smarty)', |
* // if element is not a group |
* 'html' => 'HTML for the element' |
* // if element is a group |
* 'separator' => 'separator for group elements', |
* 'elements' => array( |
* element_1, |
* ... |
* element_N |
* ) |
* ); |
* |
* @access public |
*/ |
class HTML_QuickForm_Renderer_Array extends HTML_QuickForm_Renderer |
{ |
/** |
* An array being generated |
* @var array |
*/ |
var $_ary; |
/** |
* Number of sections in the form (i.e. number of headers in it) |
* @var integer |
*/ |
var $_sectionCount; |
/** |
* Current section number |
* @var integer |
*/ |
var $_currentSection; |
/** |
* Array representing current group |
* @var array |
*/ |
var $_currentGroup = null; |
/** |
* Additional style information for different elements |
* @var array |
*/ |
var $_elementStyles = array(); |
/** |
* true: collect all hidden elements into string; false: process them as usual form elements |
* @var bool |
*/ |
var $_collectHidden = false; |
/** |
* true: render an array of labels to many labels, $key 0 named 'label', the rest "label_$key" |
* false: leave labels as defined |
* @var bool |
*/ |
var $staticLabels = false; |
/** |
* Constructor |
* |
* @param bool true: collect all hidden elements into string; false: process them as usual form elements |
* @param bool true: render an array of labels to many labels, $key 0 to 'label' and the oterh to "label_$key" |
* @access public |
*/ |
function HTML_QuickForm_Renderer_Array($collectHidden = false, $staticLabels = false) |
{ |
$this->HTML_QuickForm_Renderer(); |
$this->_collectHidden = $collectHidden; |
$this->_staticLabels = $staticLabels; |
} // end constructor |
/** |
* Returns the resultant array |
* |
* @access public |
* @return array |
*/ |
function toArray() |
{ |
return $this->_ary; |
} |
function startForm(&$form) |
{ |
$this->_ary = array( |
'frozen' => $form->isFrozen(), |
'javascript' => $form->getValidationScript(), |
'attributes' => $form->getAttributes(true), |
'requirednote' => $form->getRequiredNote(), |
'errors' => array() |
); |
if ($this->_collectHidden) { |
$this->_ary['hidden'] = ''; |
} |
$this->_elementIdx = 1; |
$this->_currentSection = null; |
$this->_sectionCount = 0; |
} // end func startForm |
function renderHeader(&$header) |
{ |
$this->_ary['sections'][$this->_sectionCount] = array( |
'header' => $header->toHtml(), |
'name' => $header->getName() |
); |
$this->_currentSection = $this->_sectionCount++; |
} // end func renderHeader |
function renderElement(&$element, $required, $error) |
{ |
$elAry = $this->_elementToArray($element, $required, $error); |
if (!empty($error)) { |
$this->_ary['errors'][$elAry['name']] = $error; |
} |
$this->_storeArray($elAry); |
} // end func renderElement |
function renderHidden(&$element) |
{ |
if ($this->_collectHidden) { |
$this->_ary['hidden'] .= $element->toHtml() . "\n"; |
} else { |
$this->renderElement($element, false, null); |
} |
} // end func renderHidden |
function startGroup(&$group, $required, $error) |
{ |
$this->_currentGroup = $this->_elementToArray($group, $required, $error); |
if (!empty($error)) { |
$this->_ary['errors'][$this->_currentGroup['name']] = $error; |
} |
} // end func startGroup |
function finishGroup(&$group) |
{ |
$this->_storeArray($this->_currentGroup); |
$this->_currentGroup = null; |
} // end func finishGroup |
/** |
* Creates an array representing an element |
* |
* @access private |
* @param object An HTML_QuickForm_element object |
* @param bool Whether an element is required |
* @param string Error associated with the element |
* @return array |
*/ |
function _elementToArray(&$element, $required, $error) |
{ |
$ret = array( |
'name' => $element->getName(), |
'value' => $element->getValue(), |
'type' => $element->getType(), |
'frozen' => $element->isFrozen(), |
'required' => $required, |
'error' => $error |
); |
// render label(s) |
$labels = $element->getLabel(); |
if (is_array($labels) && $this->_staticLabels) { |
foreach($labels as $key => $label) { |
$key = is_int($key)? $key + 1: $key; |
if (1 === $key) { |
$ret['label'] = $label; |
} else { |
$ret['label_' . $key] = $label; |
} |
} |
} else { |
$ret['label'] = $labels; |
} |
// set the style for the element |
if (isset($this->_elementStyles[$ret['name']])) { |
$ret['style'] = $this->_elementStyles[$ret['name']]; |
} |
if ('group' == $ret['type']) { |
$ret['separator'] = $element->_separator; |
$ret['elements'] = array(); |
} else { |
$ret['html'] = $element->toHtml(); |
} |
return $ret; |
} |
/** |
* Stores an array representation of an element in the form array |
* |
* @access private |
* @param array Array representation of an element |
* @return void |
*/ |
function _storeArray($elAry) |
{ |
// where should we put this element... |
if (is_array($this->_currentGroup) && ('group' != $elAry['type'])) { |
$this->_currentGroup['elements'][] = $elAry; |
} elseif (isset($this->_currentSection)) { |
$this->_ary['sections'][$this->_currentSection]['elements'][] = $elAry; |
} else { |
$this->_ary['elements'][] = $elAry; |
} |
} |
/** |
* Sets a style to use for element rendering |
* |
* @param mixed element name or array ('element name' => 'style name') |
* @param string style name if $elementName is not an array |
* @access public |
* @return void |
*/ |
function setElementStyle($elementName, $styleName = null) |
{ |
if (is_array($elementName)) { |
$this->_elementStyles = array_merge($this->_elementStyles, $elementName); |
} else { |
$this->_elementStyles[$elementName] = $styleName; |
} |
} |
} |
?> |
/branches/v1.0-menes/api/pear/HTML/QuickForm/Renderer/ArraySmarty.php |
---|
New file |
0,0 → 1,376 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +----------------------------------------------------------------------+ |
// | PHP version 4.0 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2003 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Alexey Borzov <borz_off@cs.msu.su> | |
// | Bertrand Mansion <bmansion@mamasam.com> | |
// | Thomas Schulz <ths@4bconsult.de> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: ArraySmarty.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $ |
require_once 'HTML/QuickForm/Renderer/Array.php'; |
/** |
* A static renderer for HTML_QuickForm, makes an array of form content |
* useful for an Smarty template |
* |
* Based on old toArray() code and ITStatic renderer. |
* |
* The form array structure is the following: |
* Array ( |
* [frozen] => whether the complete form is frozen' |
* [javascript] => javascript for client-side validation |
* [attributes] => attributes for <form> tag |
* [hidden] => html of all hidden elements |
* [requirednote] => note about the required elements |
* [errors] => Array |
* ( |
* [1st_element_name] => Error for the 1st element |
* ... |
* [nth_element_name] => Error for the nth element |
* ) |
* |
* [header] => Array |
* ( |
* [1st_header_name] => Header text for the 1st header |
* ... |
* [nth_header_name] => Header text for the nth header |
* ) |
* |
* [1st_element_name] => Array for the 1st element |
* ... |
* [nth_element_name] => Array for the nth element |
* |
* // where an element array has the form: |
* ( |
* [name] => element name |
* [value] => element value, |
* [type] => type of the element |
* [frozen] => whether element is frozen |
* [label] => label for the element |
* [required] => whether element is required |
* // if element is not a group: |
* [html] => HTML for the element |
* // if element is a group: |
* [separator] => separator for group elements |
* [1st_gitem_name] => Array for the 1st element in group |
* ... |
* [nth_gitem_name] => Array for the nth element in group |
* ) |
* ) |
* |
* @access public |
*/ |
class HTML_QuickForm_Renderer_ArraySmarty extends HTML_QuickForm_Renderer_Array |
{ |
/** |
* The Smarty template engine instance |
* @var object |
*/ |
var $_tpl = null; |
/** |
* Current element index |
* @var integer |
*/ |
var $_elementIdx = 0; |
/** |
* The current element index inside a group |
* @var integer |
*/ |
var $_groupElementIdx = 0; |
/** |
* How to handle the required tag for required fields |
* @var string |
* @see setRequiredTemplate() |
*/ |
var $_required = ''; |
/** |
* How to handle error messages in form validation |
* @var string |
* @see setErrorTemplate() |
*/ |
var $_error = ''; |
/** |
* Constructor |
* |
* @param object reference to the Smarty template engine instance |
* @param bool true: render an array of labels to many labels, $key 0 to 'label' and the oterh to "label_$key" |
* @access public |
*/ |
function HTML_QuickForm_Renderer_ArraySmarty(&$tpl, $staticLabels = false) |
{ |
$this->HTML_QuickForm_Renderer_Array(true, $staticLabels); |
$this->_tpl =& $tpl; |
} // end constructor |
/** |
* Called when visiting a header element |
* |
* @param object An HTML_QuickForm_header element being visited |
* @access public |
* @return void |
*/ |
function renderHeader(&$header) |
{ |
if ($name = $header->getName()) { |
$this->_ary['header'][$name] = $header->toHtml(); |
} else { |
$this->_ary['header'][$this->_sectionCount] = $header->toHtml(); |
} |
$this->_currentSection = $this->_sectionCount++; |
} // end func renderHeader |
/** |
* Called when visiting a group, before processing any group elements |
* |
* @param object An HTML_QuickForm_group object being visited |
* @param bool Whether a group is required |
* @param string An error message associated with a group |
* @access public |
* @return void |
*/ |
function startGroup(&$group, $required, $error) |
{ |
parent::startGroup($group, $required, $error); |
$this->_groupElementIdx = 1; |
} // end func startGroup |
/** |
* Creates an array representing an element containing |
* the key for storing this |
* |
* @access private |
* @param object An HTML_QuickForm_element object |
* @param bool Whether an element is required |
* @param string Error associated with the element |
* @return array |
*/ |
function _elementToArray(&$element, $required, $error) |
{ |
$ret = parent::_elementToArray($element, $required, $error); |
if ('group' == $ret['type']) { |
$ret['html'] = $element->toHtml(); |
// we don't need the elements, see the array structure |
unset($ret['elements']); |
} |
if (($required || $error) && !empty($this->_required)){ |
$this->_renderRequired($ret['label'], $ret['html'], $required, $error); |
} |
if ($error && !empty($this->_error)) { |
$this->_renderError($ret['label'], $ret['html'], $error); |
$ret['error'] = $error; |
} |
// create keys for elements grouped by native group or name |
if (strstr($ret['name'], '[') or $this->_currentGroup) { |
preg_match('/([^]]*)\\[([^]]*)\\]/', $ret['name'], $matches); |
if (isset($matches[1])) { |
$sKeysSub = substr_replace($ret['name'], '', 0, strlen($matches[1])); |
$sKeysSub = str_replace( |
array('[' , ']', '[\'\']'), |
array('[\'', '\']', '[]' ), |
$sKeysSub |
); |
$sKeys = '[\'' . $matches[1] . '\']' . $sKeysSub; |
} else { |
$sKeys = '[\'' . $ret['name'] . '\']'; |
} |
// special handling for elements in native groups |
if ($this->_currentGroup) { |
// skip unnamed group items unless radios: no name -> no static access |
// identification: have the same key string as the parent group |
if ($this->_currentGroup['keys'] == $sKeys and 'radio' != $ret['type']) { |
return false; |
} |
// reduce string of keys by remove leading group keys |
if (0 === strpos($sKeys, $this->_currentGroup['keys'])) { |
$sKeys = substr_replace($sKeys, '', 0, strlen($this->_currentGroup['keys'])); |
} |
} |
// element without a name |
} elseif ($ret['name'] == '') { |
$sKeys = '[\'element_' . $this->_elementIdx . '\']'; |
// other elements |
} else { |
$sKeys = '[\'' . $ret['name'] . '\']'; |
} |
// for radios: add extra key from value |
if ('radio' == $ret['type'] and substr($sKeys, -2) != '[]') { |
$sKeys .= '[\'' . $ret['value'] . '\']'; |
} |
$this->_elementIdx++; |
$ret['keys'] = $sKeys; |
return $ret; |
} // end func _elementToArray |
/** |
* Stores an array representation of an element in the form array |
* |
* @access private |
* @param array Array representation of an element |
* @return void |
*/ |
function _storeArray($elAry) |
{ |
if ($elAry) { |
$sKeys = $elAry['keys']; |
unset($elAry['keys']); |
// where should we put this element... |
if (is_array($this->_currentGroup) && ('group' != $elAry['type'])) { |
$toEval = '$this->_currentGroup' . $sKeys . ' = $elAry;'; |
} else { |
$toEval = '$this->_ary' . $sKeys . ' = $elAry;'; |
} |
eval($toEval); |
} |
return; |
} |
/** |
* Called when an element is required |
* |
* This method will add the required tag to the element label and/or the element html |
* such as defined with the method setRequiredTemplate. |
* |
* @param string The element label |
* @param string The element html rendering |
* @param boolean The element required |
* @param string The element error |
* @see setRequiredTemplate() |
* @access private |
* @return void |
*/ |
function _renderRequired(&$label, &$html, &$required, &$error) |
{ |
$this->_tpl->assign(array( |
'label' => $label, |
'html' => $html, |
'required' => $required, |
'error' => $error |
)); |
if (!empty($label) && strpos($this->_required, $this->_tpl->left_delimiter . '$label') !== false) { |
$label = $this->_tplFetch($this->_required); |
} |
if (!empty($html) && strpos($this->_required, $this->_tpl->left_delimiter . '$html') !== false) { |
$html = $this->_tplFetch($this->_required); |
} |
$this->_tpl->clear_assign(array('label', 'html', 'required')); |
} // end func _renderRequired |
/** |
* Called when an element has a validation error |
* |
* This method will add the error message to the element label or the element html |
* such as defined with the method setErrorTemplate. If the error placeholder is not found |
* in the template, the error will be displayed in the form error block. |
* |
* @param string The element label |
* @param string The element html rendering |
* @param string The element error |
* @see setErrorTemplate() |
* @access private |
* @return void |
*/ |
function _renderError(&$label, &$html, &$error) |
{ |
$this->_tpl->assign(array('label' => '', 'html' => '', 'error' => $error)); |
$error = $this->_tplFetch($this->_error); |
$this->_tpl->assign(array('label' => $label, 'html' => $html)); |
if (!empty($label) && strpos($this->_error, $this->_tpl->left_delimiter . '$label') !== false) { |
$label = $this->_tplFetch($this->_error); |
} elseif (!empty($html) && strpos($this->_error, $this->_tpl->left_delimiter . '$html') !== false) { |
$html = $this->_tplFetch($this->_error); |
} |
$this->_tpl->clear_assign(array('label', 'html', 'error')); |
} // end func _renderError |
/** |
* Process an template sourced in a string with Smarty |
* |
* Smarty has no core function to render a template given as a string. |
* So we use the smarty eval plugin function to do this. |
* |
* @param string The template source |
* @access private |
* @return void |
*/ |
function _tplFetch($tplSource) |
{ |
if (!function_exists('smarty_function_eval')) { |
require SMARTY_DIR . '/plugins/function.eval.php'; |
} |
return smarty_function_eval(array('var' => $tplSource), $this->_tpl); |
}// end func _tplFetch |
/** |
* Sets the way required elements are rendered |
* |
* You can use {$label} or {$html} placeholders to let the renderer know where |
* where the element label or the element html are positionned according to the |
* required tag. They will be replaced accordingly with the right value. You |
* can use the full smarty syntax here, especially a custom modifier for I18N. |
* For example: |
* {if $required}<span style="color: red;">*</span>{/if}{$label|translate} |
* will put a red star in front of the label if the element is required and |
* translate the label. |
* |
* |
* @param string The required element template |
* @access public |
* @return void |
*/ |
function setRequiredTemplate($template) |
{ |
$this->_required = $template; |
} // end func setRequiredTemplate |
/** |
* Sets the way elements with validation errors are rendered |
* |
* You can use {$label} or {$html} placeholders to let the renderer know where |
* where the element label or the element html are positionned according to the |
* error message. They will be replaced accordingly with the right value. |
* The error message will replace the {$error} placeholder. |
* For example: |
* {if $error}<span style="color: red;">{$error}</span>{/if}<br />{$html} |
* will put the error message in red on top of the element html. |
* |
* If you want all error messages to be output in the main error block, use |
* the {$form.errors} part of the rendered array that collects all raw error |
* messages. |
* |
* If you want to place all error messages manually, do not specify {$html} |
* nor {$label}. |
* |
* Groups can have special layouts. With this kind of groups, you have to |
* place the formated error message manually. In this case, use {$form.group.error} |
* where you want the formated error message to appear in the form. |
* |
* @param string The element error template |
* @access public |
* @return void |
*/ |
function setErrorTemplate($template) |
{ |
$this->_error = $template; |
} // end func setErrorTemplate |
} |
?> |
/branches/v1.0-menes/api/pear/HTML/QuickForm/Renderer/ObjectFlexy.php |
---|
New file |
0,0 → 1,261 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +----------------------------------------------------------------------+ |
// | PHP version 4.0 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2003 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Author: Ron McClain <ron@humaniq.com> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: ObjectFlexy.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $ |
require_once("HTML/QuickForm/Renderer/Object.php"); |
/** |
* QuickForm renderer for Flexy template engine, static version. |
* |
* A static renderer for HTML_Quickform. Makes a QuickFormFlexyObject |
* from the form content suitable for use with a Flexy template |
* |
* Usage: |
* $form =& new HTML_QuickForm('form', 'POST'); |
* $template =& new HTML_Template_Flexy(); |
* $renderer =& new HTML_QuickForm_Renderer_ObjectFlexy(&$template); |
* $renderer->setHtmlTemplate("html.html"); |
* $renderer->setLabelTemplate("label.html"); |
* $form->accept($renderer); |
* $view = new StdClass; |
* $view->form = $renderer->toObject(); |
* $template->compile("mytemplate.html"); |
* |
* Based on the code for HTML_QuickForm_Renderer_ArraySmarty |
* |
* @see QuickFormFlexyObject |
* @access public |
*/ |
class HTML_QuickForm_Renderer_ObjectFlexy extends HTML_QuickForm_Renderer_Object |
{ |
/** |
* HTML_Template_Flexy instance |
* @var object $_flexy |
*/ |
var $_flexy; |
/** |
* Current element index |
* @var integer $_elementIdx |
*/ |
var $_elementIdx; |
/** |
* The current element index inside a group |
* @var integer $_groupElementIdx |
*/ |
var $_groupElementIdx = 0; |
/** |
* Name of template file for form html |
* @var string $_html |
* @see setRequiredTemplate() |
*/ |
var $_html = ''; |
/** |
* Name of template file for form labels |
* @var string $label |
* @see setErrorTemplate() |
*/ |
var $label = ''; |
/** |
* Class of the element objects, so you can add your own |
* element methods |
* @var string $_elementType |
*/ |
var $_elementType = 'QuickformFlexyElement'; |
/** |
* Constructor |
* |
* @param $flexy object HTML_Template_Flexy instance |
* @public |
*/ |
function HTML_QuickForm_Renderer_ObjectFlexy(&$flexy) |
{ |
$this->HTML_QuickForm_Renderer_Object(true); |
$this->_obj = new QuickformFlexyForm(); |
$this->_flexy =& $flexy; |
} // end constructor |
function renderHeader(&$header) |
{ |
if($name = $header->getName()) { |
$this->_obj->header->$name = $header->toHtml(); |
} else { |
$this->_obj->header[$this->_sectionCount] = $header->toHtml(); |
} |
$this->_currentSection = $this->_sectionCount++; |
} // end func renderHeader |
function startGroup(&$group, $required, $error) |
{ |
parent::startGroup($group, $required, $error); |
$this->_groupElementIdx = 1; |
} //end func startGroup |
/** |
* Creates an object representing an element containing |
* the key for storing this |
* |
* @access private |
* @param element object An HTML_QuickForm_element object |
* @param required bool Whether an element is required |
* @param error string Error associated with the element |
* @return object |
*/ |
function _elementToObject(&$element, $required, $error) |
{ |
$ret = parent::_elementToObject($element, $required, $error); |
if($ret->type == 'group') { |
$ret->html = $element->toHtml(); |
unset($ret->elements); |
} |
if(!empty($this->_label)) { |
$this->_renderLabel($ret); |
} |
if(!empty($this->_html)) { |
$this->_renderHtml($ret); |
$ret->error = $error; |
} |
// Create an element key from the name |
if (false !== ($pos = strpos($ret->name, '[')) || is_object($this->_currentGroup)) { |
if (!$pos) { |
$keys = '->{\'' . $ret->name . '\'}'; |
} else { |
$keys = '->{\'' . str_replace(array('[', ']'), array('\'}->{\'', ''), $ret->name) . '\'}'; |
} |
// special handling for elements in native groups |
if (is_object($this->_currentGroup)) { |
// skip unnamed group items unless radios: no name -> no static access |
// identification: have the same key string as the parent group |
if ($this->_currentGroup->keys == $keys && 'radio' != $ret->type) { |
return false; |
} |
// reduce string of keys by remove leading group keys |
if (0 === strpos($keys, $this->_currentGroup->keys)) { |
$keys = substr_replace($keys, '', 0, strlen($this->_currentGroup->keys)); |
} |
} |
} elseif (0 == strlen($ret->name)) { |
$keys = '->{\'element_' . $this->_elementIdx . '\'}'; |
} else { |
$keys = '->{\'' . $ret->name . '\'}'; |
} |
// for radios: add extra key from value |
if ('radio' == $ret->type && '[]' != substr($keys, -2)) { |
$keys .= '->{\'' . $ret->value . '\'}'; |
} |
$ret->keys = $keys; |
$this->_elementIdx++; |
return $ret; |
} |
/** |
* Stores an object representation of an element in the |
* QuickformFormObject instance |
* |
* @access private |
* @param elObj object Object representation of an element |
* @return void |
*/ |
function _storeObject($elObj) |
{ |
if ($elObj) { |
$keys = $elObj->keys; |
unset($elObj->keys); |
if(is_object($this->_currentGroup) && ('group' != $elObj->type)) { |
$code = '$this->_currentGroup' . $keys . ' = $elObj;'; |
} else { |
$code = '$this->_obj' . $keys . ' = $elObj;'; |
} |
eval($code); |
} |
} |
/** |
* Set the filename of the template to render html elements. |
* In your template, {html} is replaced by the unmodified html. |
* If the element is required, {required} will be true. |
* Eg. |
* {if:error} |
* <font color="red" size="1">{error:h}</font><br /> |
* {end:} |
* {html:h} |
* |
* @access public |
* @param template string Filename of template |
* @return void |
*/ |
function setHtmlTemplate($template) |
{ |
$this->_html = $template; |
} |
/** |
* Set the filename of the template to render form labels |
* In your template, {label} is replaced by the unmodified label. |
* {error} will be set to the error, if any. {required} will |
* be true if this is a required field |
* Eg. |
* {if:required} |
* <font color="orange" size="1">*</font> |
* {end:} |
* {label:h} |
* |
* @access public |
* @param template string Filename of template |
* @return void |
*/ |
function setLabelTemplate($template) |
{ |
$this->_label = $template; |
} |
function _renderLabel(&$ret) |
{ |
$this->_flexy->compile($this->_label); |
$ret->label = $this->_flexy->bufferedOutputObject($ret); |
} |
function _renderHtml(&$ret) |
{ |
$this->_flexy->compile($this->_html); |
$ret->html = $this->_flexy->bufferedOutputObject($ret); |
} |
} // end class HTML_QuickForm_Renderer_ObjectFlexy |
/** |
* Adds nothing to QuickformForm, left for backwards compatibility |
*/ |
class QuickformFlexyForm extends QuickformForm |
{ |
} |
/** |
* Adds nothing to QuickformElement, left for backwards compatibility |
*/ |
class QuickformFlexyElement extends QuickformElement |
{ |
} |
?> |
/branches/v1.0-menes/api/pear/HTML/QuickForm/Renderer/ITDynamic.php |
---|
New file |
0,0 → 1,287 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +----------------------------------------------------------------------+ |
// | PHP version 4.0 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2003 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Author: Alexey Borzov <borz_off@cs.msu.su> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: ITDynamic.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $ |
require_once 'HTML/QuickForm/Renderer.php'; |
/** |
* A concrete renderer for HTML_QuickForm, using Integrated Templates. |
* |
* This is a "dynamic" renderer, which means that concrete form look |
* is defined at runtime. This also means that you can define |
* <b>one</b> template file for <b>all</b> your forms. That template |
* should contain a block for every element 'look' appearing in your |
* forms and also some special blocks (consult the examples). If a |
* special block is not set for an element, the renderer falls back to |
* a default one. |
* |
* @author Alexey Borzov <borz_off@cs.msu.su> |
* @access public |
*/ |
class HTML_QuickForm_Renderer_ITDynamic extends HTML_QuickForm_Renderer |
{ |
/** |
* A template class (HTML_Template_ITX or HTML_Template_Sigma) instance |
* @var object |
*/ |
var $_tpl = null; |
/** |
* The errors that were not shown near concrete fields go here |
* @var array |
*/ |
var $_errors = array(); |
/** |
* Show the block with required note? |
* @var bool |
*/ |
var $_showRequired = false; |
/** |
* A separator for group elements |
* @var mixed |
*/ |
var $_groupSeparator = null; |
/** |
* The current element index inside a group |
* @var integer |
*/ |
var $_groupElementIdx = 0; |
/** |
* Blocks to use for different elements |
* @var array |
*/ |
var $_elementBlocks = array(); |
/** |
* Block to use for headers |
* @var string |
*/ |
var $_headerBlock = null; |
/** |
* Constructor |
* |
* @param object An HTML_Template_ITX/HTML_Template_Sigma object to use |
*/ |
function HTML_QuickForm_Renderer_ITDynamic(&$tpl) |
{ |
$this->HTML_QuickForm_Renderer(); |
$this->_tpl =& $tpl; |
$this->_tpl->setCurrentBlock('qf_main_loop'); |
} |
function finishForm(&$form) |
{ |
// display errors above form |
if (!empty($this->_errors) && $this->_tpl->blockExists('qf_error_loop')) { |
foreach ($this->_errors as $error) { |
$this->_tpl->setVariable('qf_error', $error); |
$this->_tpl->parse('qf_error_loop'); |
} |
} |
// show required note |
if ($this->_showRequired) { |
$this->_tpl->setVariable('qf_required_note', $form->getRequiredNote()); |
} |
// assign form attributes |
$this->_tpl->setVariable('qf_attributes', $form->getAttributes(true)); |
// assign javascript validation rules |
$this->_tpl->setVariable('qf_javascript', $form->getValidationScript()); |
} |
function renderHeader(&$header) |
{ |
$blockName = $this->_matchBlock($header); |
if ('qf_header' == $blockName && isset($this->_headerBlock)) { |
$blockName = $this->_headerBlock; |
} |
$this->_tpl->setVariable('qf_header', $header->toHtml()); |
$this->_tpl->parse($blockName); |
$this->_tpl->parse('qf_main_loop'); |
} |
function renderElement(&$element, $required, $error) |
{ |
$blockName = $this->_matchBlock($element); |
// are we inside a group? |
if ('qf_main_loop' != $this->_tpl->currentBlock) { |
if (0 != $this->_groupElementIdx && $this->_tpl->placeholderExists('qf_separator', $blockName)) { |
if (is_array($this->_groupSeparator)) { |
$this->_tpl->setVariable('qf_separator', $this->_groupSeparator[($this->_groupElementIdx - 1) % count($this->_groupSeparator)]); |
} else { |
$this->_tpl->setVariable('qf_separator', (string)$this->_groupSeparator); |
} |
} |
$this->_groupElementIdx++; |
} elseif(!empty($error)) { |
// show the error message or keep it for later use |
if ($this->_tpl->blockExists($blockName . '_error')) { |
$this->_tpl->setVariable('qf_error', $error); |
} else { |
$this->_errors[] = $error; |
} |
} |
// show an '*' near the required element |
if ($required) { |
$this->_showRequired = true; |
if ($this->_tpl->blockExists($blockName . '_required')) { |
$this->_tpl->touchBlock($blockName . '_required'); |
} |
} |
// Prepare multiple labels |
$labels = $element->getLabel(); |
if (is_array($labels)) { |
$mainLabel = array_shift($labels); |
} else { |
$mainLabel = $labels; |
} |
// render the element itself with its main label |
$this->_tpl->setVariable('qf_element', $element->toHtml()); |
if ($this->_tpl->placeholderExists('qf_label', $blockName)) { |
$this->_tpl->setVariable('qf_label', $mainLabel); |
} |
// render extra labels, if any |
if (is_array($labels)) { |
foreach($labels as $key => $label) { |
$key = is_int($key)? $key + 2: $key; |
if ($this->_tpl->blockExists($blockName . '_label_' . $key)) { |
$this->_tpl->setVariable('qf_label_' . $key, $label); |
} |
} |
} |
$this->_tpl->parse($blockName); |
$this->_tpl->parseCurrentBlock(); |
} |
function renderHidden(&$element) |
{ |
$this->_tpl->setVariable('qf_hidden', $element->toHtml()); |
$this->_tpl->parse('qf_hidden_loop'); |
} |
function startGroup(&$group, $required, $error) |
{ |
$blockName = $this->_matchBlock($group); |
$this->_tpl->setCurrentBlock($blockName . '_loop'); |
$this->_groupElementIdx = 0; |
$this->_groupSeparator = is_null($group->_separator)? ' ': $group->_separator; |
// show an '*' near the required element |
if ($required) { |
$this->_showRequired = true; |
if ($this->_tpl->blockExists($blockName . '_required')) { |
$this->_tpl->touchBlock($blockName . '_required'); |
} |
} |
// show the error message or keep it for later use |
if (!empty($error)) { |
if ($this->_tpl->blockExists($blockName . '_error')) { |
$this->_tpl->setVariable('qf_error', $error); |
} else { |
$this->_errors[] = $error; |
} |
} |
$this->_tpl->setVariable('qf_group_label', $group->getLabel()); |
} |
function finishGroup(&$group) |
{ |
$this->_tpl->parse($this->_matchBlock($group)); |
$this->_tpl->setCurrentBlock('qf_main_loop'); |
$this->_tpl->parseCurrentBlock(); |
} |
/** |
* Returns the name of a block to use for element rendering |
* |
* If a name was not explicitly set via setElementBlock(), it tries |
* the names '{prefix}_{element type}' and '{prefix}_{element}', where |
* prefix is either 'qf' or the name of the current group's block |
* |
* @param object An HTML_QuickForm_element object |
* @access private |
* @return string block name |
*/ |
function _matchBlock(&$element) |
{ |
$name = $element->getName(); |
$type = $element->getType(); |
if (isset($this->_elementBlocks[$name]) && $this->_tpl->blockExists($this->_elementBlocks[$name])) { |
if (('group' == $type) || ($this->_elementBlocks[$name] . '_loop' != $this->_tpl->currentBlock)) { |
return $this->_elementBlocks[$name]; |
} |
} |
if ('group' != $type && 'qf_main_loop' != $this->_tpl->currentBlock) { |
$prefix = substr($this->_tpl->currentBlock, 0, -5); // omit '_loop' postfix |
} else { |
$prefix = 'qf'; |
} |
if ($this->_tpl->blockExists($prefix . '_' . $type)) { |
return $prefix . '_' . $type; |
} elseif ($this->_tpl->blockExists($prefix . '_' . $name)) { |
return $prefix . '_' . $name; |
} else { |
return $prefix . '_element'; |
} |
} |
/** |
* Sets the block to use for element rendering |
* |
* @param mixed element name or array ('element name' => 'block name') |
* @param string block name if $elementName is not an array |
* @access public |
* @return void |
*/ |
function setElementBlock($elementName, $blockName = null) |
{ |
if (is_array($elementName)) { |
$this->_elementBlocks = array_merge($this->_elementBlocks, $elementName); |
} else { |
$this->_elementBlocks[$elementName] = $blockName; |
} |
} |
/** |
* Sets the name of a block to use for header rendering |
* |
* @param string block name |
* @access public |
* @return void |
*/ |
function setHeaderBlock($blockName) |
{ |
$this->_headerBlock = $blockName; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/HTML/QuickForm/Renderer/QuickHtml.php |
---|
New file |
0,0 → 1,203 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +----------------------------------------------------------------------+ |
// | PHP version 4.0 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2003 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Jason Rust <jrust@rustyparts.com> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: QuickHtml.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $ |
require_once('HTML/QuickForm/Renderer/Default.php'); |
/** |
* A renderer that makes it quick and easy to create customized forms. |
* |
* This renderer has three main distinctives: an easy way to create |
* custom-looking forms, the ability to separate the creation of form |
* elements from their display, and being able to use QuickForm in |
* widget-based template systems. See the online docs for more info. |
* For a usage example see: docs/renderers/QuickHtml_example.php |
* |
* @access public |
* @package QuickForm |
*/ |
class HTML_QuickForm_Renderer_QuickHtml extends HTML_QuickForm_Renderer_Default { |
// {{{ properties |
/** |
* The array of rendered elements |
* @var array |
*/ |
var $renderedElements = array(); |
// }}} |
// {{{ constructor |
/** |
* Constructor |
* |
* @access public |
* @return void |
*/ |
function HTML_QuickForm_Renderer_QuickHtml() |
{ |
$this->HTML_QuickForm_Renderer_Default(); |
// The default templates aren't used for this renderer |
$this->clearAllTemplates(); |
} // end constructor |
// }}} |
// {{{ toHtml() |
/** |
* returns the HTML generated for the form |
* |
* @param string $data (optional) Any extra data to put before the end of the form |
* |
* @access public |
* @return string |
*/ |
function toHtml($data = '') |
{ |
// Render any elements that haven't been rendered explicitly by elementToHtml() |
foreach (array_keys($this->renderedElements) as $key) { |
if (!$this->renderedElements[$key]['rendered']) { |
$this->renderedElements[$key]['rendered'] = true; |
$data .= $this->renderedElements[$key]['html'] . "\n"; |
} |
} |
// Insert the extra data and form elements at the end of the form |
$this->_html = str_replace('</form>', $data . "\n</form>", $this->_html); |
return $this->_html; |
} // end func toHtml |
// }}} |
// {{{ elementToHtml() |
/** |
* Gets the html for an element and marks it as rendered. |
* |
* @param string $elementName The element name |
* @param string $elementValue (optional) The value of the element. This is only useful |
* for elements that have the same name (i.e. radio and checkbox), but |
* different values |
* |
* @access public |
* @return string The html for the QuickForm element |
*/ |
function elementToHtml($elementName, $elementValue = null) |
{ |
$elementKey = null; |
// Find the key for the element |
foreach ($this->renderedElements as $key => $data) { |
if ($data['name'] == $elementName && |
// See if the value must match as well |
(is_null($elementValue) || |
$data['value'] == $elementValue)) { |
$elementKey = $key; |
break; |
} |
} |
if (is_null($elementKey)) { |
$msg = is_null($elementValue) ? "Element $elementName does not exist." : |
"Element $elementName with value of $elementValue does not exist."; |
return PEAR::raiseError(null, QUICKFORM_UNREGISTERED_ELEMENT, null, E_USER_WARNING, $msg, 'HTML_QuickForm_Error', true); |
} else { |
if ($this->renderedElements[$elementKey]['rendered']) { |
$msg = is_null($elementValue) ? "Element $elementName has already been rendered." : |
"Element $elementName with value of $elementValue has already been rendered."; |
return PEAR::raiseError(null, QUICKFORM_ERROR, null, E_USER_WARNING, $msg, 'HTML_QuickForm_Error', true); |
} else { |
$this->renderedElements[$elementKey]['rendered'] = true; |
return $this->renderedElements[$elementKey]['html']; |
} |
} |
} // end func elementToHtml |
// }}} |
// {{{ renderElement() |
/** |
* Gets the html for an element and adds it to the array by calling |
* parent::renderElement() |
* |
* @param object An HTML_QuickForm_element object |
* @param bool Whether an element is required |
* @param string An error message associated with an element |
* |
* @access public |
* @return mixed HTML string of element if $immediateRender is set, else we just add the |
* html to the global _html string |
*/ |
function renderElement(&$element, $required, $error) |
{ |
$this->_html = ''; |
parent::renderElement($element, $required, $error); |
if (!$this->_inGroup) { |
$this->renderedElements[] = array( |
'name' => $element->getName(), |
'value' => $element->getValue(), |
'html' => $this->_html, |
'rendered' => false); |
} |
$this->_html = ''; |
} // end func renderElement |
// }}} |
// {{{ renderHidden() |
/** |
* Gets the html for a hidden element and adds it to the array. |
* |
* @param object An HTML_QuickForm_hidden object being visited |
* @access public |
* @return void |
*/ |
function renderHidden(&$element) |
{ |
$this->renderedElements[] = array( |
'name' => $element->getName(), |
'value' => $element->getValue(), |
'html' => $element->toHtml(), |
'rendered' => false); |
} // end func renderHidden |
// }}} |
// {{{ finishGroup() |
/** |
* Gets the html for the group element and adds it to the array by calling |
* parent::finishGroup() |
* |
* @param object An HTML_QuickForm_group object being visited |
* @access public |
* @return void |
*/ |
function finishGroup(&$group) |
{ |
$this->_html = ''; |
parent::finishGroup($group); |
$this->renderedElements[] = array( |
'name' => $group->getName(), |
'value' => $group->getValue(), |
'html' => $this->_html, |
'rendered' => false); |
$this->_html = ''; |
} // end func finishGroup |
// }}} |
} // end class HTML_QuickForm_Renderer_QuickHtml |
?> |
/branches/v1.0-menes/api/pear/HTML/QuickForm/Renderer/Default.php |
---|
New file |
0,0 → 1,474 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +----------------------------------------------------------------------+ |
// | PHP version 4.0 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2003 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Alexey Borzov <borz_off@cs.msu.su> | |
// | Adam Daniel <adaniel1@eesus.jnj.com> | |
// | Bertrand Mansion <bmansion@mamasam.com> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: Default.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $ |
require_once('HTML/QuickForm/Renderer.php'); |
/** |
* A concrete renderer for HTML_QuickForm, |
* based on QuickForm 2.x built-in one |
* |
* @access public |
*/ |
class HTML_QuickForm_Renderer_Default extends HTML_QuickForm_Renderer |
{ |
/** |
* The HTML of the form |
* @var string |
* @access private |
*/ |
var $_html; |
/** |
* Header Template string |
* @var string |
* @access private |
*/ |
var $_headerTemplate = |
"\n\t<tr>\n\t\t<td style=\"white-space: nowrap; background-color: #CCCCCC;\" align=\"left\" valign=\"top\" colspan=\"2\"><b>{header}</b></td>\n\t</tr>"; |
/** |
* Element template string |
* @var string |
* @access private |
*/ |
var $_elementTemplate = |
"\n\t<tr>\n\t\t<td align=\"right\" valign=\"top\"><!-- BEGIN required --><span style=\"color: #ff0000\">*</span><!-- END required --><b>{label}</b></td>\n\t\t<td valign=\"top\" align=\"left\"><!-- BEGIN error --><span style=\"color: #ff0000\">{error}</span><br /><!-- END error -->\t{element}</td>\n\t</tr>"; |
/** |
* Form template string |
* @var string |
* @access private |
*/ |
var $_formTemplate = |
"\n<form{attributes}>\n<div>\n{hidden}<table border=\"0\">\n{content}\n</table>\n</div>\n</form>"; |
/** |
* Required Note template string |
* @var string |
* @access private |
*/ |
var $_requiredNoteTemplate = |
"\n\t<tr>\n\t\t<td></td>\n\t<td align=\"left\" valign=\"top\">{requiredNote}</td>\n\t</tr>"; |
/** |
* Array containing the templates for customised elements |
* @var array |
* @access private |
*/ |
var $_templates = array(); |
/** |
* Array containing the templates for group wraps. |
* |
* These templates are wrapped around group elements and groups' own |
* templates wrap around them. This is set by setGroupTemplate(). |
* |
* @var array |
* @access private |
*/ |
var $_groupWraps = array(); |
/** |
* Array containing the templates for elements within groups |
* @var array |
* @access private |
*/ |
var $_groupTemplates = array(); |
/** |
* True if we are inside a group |
* @var bool |
* @access private |
*/ |
var $_inGroup = false; |
/** |
* Array with HTML generated for group elements |
* @var array |
* @access private |
*/ |
var $_groupElements = array(); |
/** |
* Template for an element inside a group |
* @var string |
* @access private |
*/ |
var $_groupElementTemplate = ''; |
/** |
* HTML that wraps around the group elements |
* @var string |
* @access private |
*/ |
var $_groupWrap = ''; |
/** |
* HTML for the current group |
* @var string |
* @access private |
*/ |
var $_groupTemplate = ''; |
/** |
* Collected HTML of the hidden fields |
* @var string |
* @access private |
*/ |
var $_hiddenHtml = ''; |
/** |
* Constructor |
* |
* @access public |
*/ |
function HTML_QuickForm_Renderer_Default() |
{ |
$this->HTML_QuickForm_Renderer(); |
} // end constructor |
/** |
* returns the HTML generated for the form |
* |
* @access public |
* @return string |
*/ |
function toHtml() |
{ |
// _hiddenHtml is cleared in finishForm(), so this only matters when |
// finishForm() was not called (e.g. group::toHtml(), bug #3511) |
return $this->_hiddenHtml . $this->_html; |
} // end func toHtml |
/** |
* Called when visiting a form, before processing any form elements |
* |
* @param object An HTML_QuickForm object being visited |
* @access public |
* @return void |
*/ |
function startForm(&$form) |
{ |
$this->_html = ''; |
$this->_hiddenHtml = ''; |
} // end func startForm |
/** |
* Called when visiting a form, after processing all form elements |
* Adds required note, form attributes, validation javascript and form content. |
* |
* @param object An HTML_QuickForm object being visited |
* @access public |
* @return void |
*/ |
function finishForm(&$form) |
{ |
// add a required note, if one is needed |
if (!empty($form->_required) && !$form->_freezeAll) { |
$this->_html .= str_replace('{requiredNote}', $form->getRequiredNote(), $this->_requiredNoteTemplate); |
} |
// add form attributes and content |
$html = str_replace('{attributes}', $form->getAttributes(true), $this->_formTemplate); |
if (strpos($this->_formTemplate, '{hidden}')) { |
$html = str_replace('{hidden}', $this->_hiddenHtml, $html); |
} else { |
$this->_html .= $this->_hiddenHtml; |
} |
$this->_hiddenHtml = ''; |
$this->_html = str_replace('{content}', $this->_html, $html); |
// add a validation script |
if ('' != ($script = $form->getValidationScript())) { |
$this->_html = $script . "\n" . $this->_html; |
} |
} // end func finishForm |
/** |
* Called when visiting a header element |
* |
* @param object An HTML_QuickForm_header element being visited |
* @access public |
* @return void |
*/ |
function renderHeader(&$header) |
{ |
$name = $header->getName(); |
if (!empty($name) && isset($this->_templates[$name])) { |
$this->_html .= str_replace('{header}', $header->toHtml(), $this->_templates[$name]); |
} else { |
$this->_html .= str_replace('{header}', $header->toHtml(), $this->_headerTemplate); |
} |
} // end func renderHeader |
/** |
* Helper method for renderElement |
* |
* @param string Element name |
* @param mixed Element label (if using an array of labels, you should set the appropriate template) |
* @param bool Whether an element is required |
* @param string Error message associated with the element |
* @access private |
* @see renderElement() |
* @return string Html for element |
*/ |
function _prepareTemplate($name, $label, $required, $error) |
{ |
if (is_array($label)) { |
$nameLabel = array_shift($label); |
} else { |
$nameLabel = $label; |
} |
if (isset($this->_templates[$name])) { |
$html = str_replace('{label}', $nameLabel, $this->_templates[$name]); |
} else { |
$html = str_replace('{label}', $nameLabel, $this->_elementTemplate); |
} |
if ($required) { |
$html = str_replace('<!-- BEGIN required -->', '', $html); |
$html = str_replace('<!-- END required -->', '', $html); |
} else { |
$html = preg_replace("/([ \t\n\r]*)?<!-- BEGIN required -->(\s|\S)*<!-- END required -->([ \t\n\r]*)?/i", '', $html); |
} |
if (isset($error)) { |
$html = str_replace('{error}', $error, $html); |
$html = str_replace('<!-- BEGIN error -->', '', $html); |
$html = str_replace('<!-- END error -->', '', $html); |
} else { |
$html = preg_replace("/([ \t\n\r]*)?<!-- BEGIN error -->(\s|\S)*<!-- END error -->([ \t\n\r]*)?/i", '', $html); |
} |
if (is_array($label)) { |
foreach($label as $key => $text) { |
$key = is_int($key)? $key + 2: $key; |
$html = str_replace("{label_{$key}}", $text, $html); |
$html = str_replace("<!-- BEGIN label_{$key} -->", '', $html); |
$html = str_replace("<!-- END label_{$key} -->", '', $html); |
} |
} |
if (strpos($html, '{label_')) { |
$html = preg_replace('/\s*<!-- BEGIN label_(\S+) -->.*<!-- END label_\1 -->\s*/i', '', $html); |
} |
return $html; |
} // end func _prepareTemplate |
/** |
* Renders an element Html |
* Called when visiting an element |
* |
* @param object An HTML_QuickForm_element object being visited |
* @param bool Whether an element is required |
* @param string An error message associated with an element |
* @access public |
* @return void |
*/ |
function renderElement(&$element, $required, $error) |
{ |
if (!$this->_inGroup) { |
$html = $this->_prepareTemplate($element->getName(), $element->getLabel(), $required, $error); |
$this->_html .= str_replace('{element}', $element->toHtml(), $html); |
} elseif (!empty($this->_groupElementTemplate)) { |
$html = str_replace('{label}', $element->getLabel(), $this->_groupElementTemplate); |
if ($required) { |
$html = str_replace('<!-- BEGIN required -->', '', $html); |
$html = str_replace('<!-- END required -->', '', $html); |
} else { |
$html = preg_replace("/([ \t\n\r]*)?<!-- BEGIN required -->(\s|\S)*<!-- END required -->([ \t\n\r]*)?/i", '', $html); |
} |
$this->_groupElements[] = str_replace('{element}', $element->toHtml(), $html); |
} else { |
$this->_groupElements[] = $element->toHtml(); |
} |
} // end func renderElement |
/** |
* Renders an hidden element |
* Called when visiting a hidden element |
* |
* @param object An HTML_QuickForm_hidden object being visited |
* @access public |
* @return void |
*/ |
function renderHidden(&$element) |
{ |
$this->_hiddenHtml .= $element->toHtml() . "\n"; |
} // end func renderHidden |
/** |
* Called when visiting a raw HTML/text pseudo-element |
* |
* @param object An HTML_QuickForm_html element being visited |
* @access public |
* @return void |
*/ |
function renderHtml(&$data) |
{ |
$this->_html .= $data->toHtml(); |
} // end func renderHtml |
/** |
* Called when visiting a group, before processing any group elements |
* |
* @param object An HTML_QuickForm_group object being visited |
* @param bool Whether a group is required |
* @param string An error message associated with a group |
* @access public |
* @return void |
*/ |
function startGroup(&$group, $required, $error) |
{ |
$name = $group->getName(); |
$this->_groupTemplate = $this->_prepareTemplate($name, $group->getLabel(), $required, $error); |
$this->_groupElementTemplate = empty($this->_groupTemplates[$name])? '': $this->_groupTemplates[$name]; |
$this->_groupWrap = empty($this->_groupWraps[$name])? '': $this->_groupWraps[$name]; |
$this->_groupElements = array(); |
$this->_inGroup = true; |
} // end func startGroup |
/** |
* Called when visiting a group, after processing all group elements |
* |
* @param object An HTML_QuickForm_group object being visited |
* @access public |
* @return void |
*/ |
function finishGroup(&$group) |
{ |
$separator = $group->_separator; |
if (is_array($separator)) { |
$count = count($separator); |
$html = ''; |
for ($i = 0; $i < count($this->_groupElements); $i++) { |
$html .= (0 == $i? '': $separator[($i - 1) % $count]) . $this->_groupElements[$i]; |
} |
} else { |
if (is_null($separator)) { |
$separator = ' '; |
} |
$html = implode((string)$separator, $this->_groupElements); |
} |
if (!empty($this->_groupWrap)) { |
$html = str_replace('{content}', $html, $this->_groupWrap); |
} |
$this->_html .= str_replace('{element}', $html, $this->_groupTemplate); |
$this->_inGroup = false; |
} // end func finishGroup |
/** |
* Sets element template |
* |
* @param string The HTML surrounding an element |
* @param string (optional) Name of the element to apply template for |
* @access public |
* @return void |
*/ |
function setElementTemplate($html, $element = null) |
{ |
if (is_null($element)) { |
$this->_elementTemplate = $html; |
} else { |
$this->_templates[$element] = $html; |
} |
} // end func setElementTemplate |
/** |
* Sets template for a group wrapper |
* |
* This template is contained within a group-as-element template |
* set via setTemplate() and contains group's element templates, set |
* via setGroupElementTemplate() |
* |
* @param string The HTML surrounding group elements |
* @param string Name of the group to apply template for |
* @access public |
* @return void |
*/ |
function setGroupTemplate($html, $group) |
{ |
$this->_groupWraps[$group] = $html; |
} // end func setGroupTemplate |
/** |
* Sets element template for elements within a group |
* |
* @param string The HTML surrounding an element |
* @param string Name of the group to apply template for |
* @access public |
* @return void |
*/ |
function setGroupElementTemplate($html, $group) |
{ |
$this->_groupTemplates[$group] = $html; |
} // end func setGroupElementTemplate |
/** |
* Sets header template |
* |
* @param string The HTML surrounding the header |
* @access public |
* @return void |
*/ |
function setHeaderTemplate($html) |
{ |
$this->_headerTemplate = $html; |
} // end func setHeaderTemplate |
/** |
* Sets form template |
* |
* @param string The HTML surrounding the form tags |
* @access public |
* @return void |
*/ |
function setFormTemplate($html) |
{ |
$this->_formTemplate = $html; |
} // end func setFormTemplate |
/** |
* Sets the note indicating required fields template |
* |
* @param string The HTML surrounding the required note |
* @access public |
* @return void |
*/ |
function setRequiredNoteTemplate($html) |
{ |
$this->_requiredNoteTemplate = $html; |
} // end func setRequiredNoteTemplate |
/** |
* Clears all the HTML out of the templates that surround notes, elements, etc. |
* Useful when you want to use addData() to create a completely custom form look |
* |
* @access public |
* @return void |
*/ |
function clearAllTemplates() |
{ |
$this->setElementTemplate('{element}'); |
$this->setFormTemplate("\n\t<form{attributes}>{content}\n\t</form>\n"); |
$this->setRequiredNoteTemplate(''); |
$this->_templates = array(); |
} // end func clearAllTemplates |
} // end class HTML_QuickForm_Renderer_Default |
?> |
/branches/v1.0-menes/api/pear/HTML/QuickForm/Renderer/ITStatic.php |
---|
New file |
0,0 → 1,490 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +----------------------------------------------------------------------+ |
// | PHP version 4.0 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2003 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Author: Bertrand Mansion <bmansion@mamasam.com> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: ITStatic.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $ |
require_once('HTML/QuickForm/Renderer.php'); |
/** |
* A static renderer for HTML_QuickForm compatible |
* with HTML_Template_IT and HTML_Template_Sigma. |
* |
* As opposed to the dynamic renderer, this renderer needs |
* every elements and labels in the form to be specified by |
* placeholders at the position you want them to be displayed. |
* |
* @author Bertrand Mansion <bmansion@mamasam.com> |
* @access public |
*/ |
class HTML_QuickForm_Renderer_ITStatic extends HTML_QuickForm_Renderer |
{ |
/** |
* An HTML_Template_IT or some other API compatible Template instance |
* @var object |
*/ |
var $_tpl = null; |
/** |
* Rendered form name |
* @var string |
*/ |
var $_formName = 'form'; |
/** |
* The errors that were not shown near concrete fields go here |
* @var array |
*/ |
var $_errors = array(); |
/** |
* Show the block with required note? |
* @var bool |
*/ |
var $_showRequired = false; |
/** |
* Which group are we currently parsing ? |
* @var string |
*/ |
var $_inGroup; |
/** |
* Index of the element in its group |
* @var int |
*/ |
var $_elementIndex = 0; |
/** |
* If elements have been added with the same name |
* @var array |
*/ |
var $_duplicateElements = array(); |
/** |
* How to handle the required tag for required fields |
* @var string |
*/ |
var $_required = '{label}<font size="1" color="red">*</font>'; |
/** |
* How to handle error messages in form validation |
* @var string |
*/ |
var $_error = '<font color="red">{error}</font><br />{html}'; |
/** |
* Collected HTML for hidden elements, if needed |
* @var string |
*/ |
var $_hidden = ''; |
/** |
* Constructor |
* |
* @param object An HTML_Template_IT or other compatible Template object to use |
*/ |
function HTML_QuickForm_Renderer_ITStatic(&$tpl) |
{ |
$this->HTML_QuickForm_Renderer(); |
$this->_tpl =& $tpl; |
} // end constructor |
/** |
* Called when visiting a form, before processing any form elements |
* |
* @param object An HTML_QuickForm object being visited |
* @access public |
* @return void |
*/ |
function startForm(&$form) |
{ |
$this->_formName = $form->getAttribute('id'); |
if (count($form->_duplicateIndex) > 0) { |
// Take care of duplicate elements |
foreach ($form->_duplicateIndex as $elementName => $indexes) { |
$this->_duplicateElements[$elementName] = 0; |
} |
} |
} // end func startForm |
/** |
* Called when visiting a form, after processing all form elements |
* |
* @param object An HTML_QuickForm object being visited |
* @access public |
* @return void |
*/ |
function finishForm(&$form) |
{ |
// display errors above form |
if (!empty($this->_errors) && $this->_tpl->blockExists($this->_formName.'_error_loop')) { |
foreach ($this->_errors as $error) { |
$this->_tpl->setVariable($this->_formName.'_error', $error); |
$this->_tpl->parse($this->_formName.'_error_loop'); |
} |
} |
// show required note |
if ($this->_showRequired) { |
$this->_tpl->setVariable($this->_formName.'_required_note', $form->getRequiredNote()); |
} |
// add hidden elements, if collected |
if (!empty($this->_hidden)) { |
$this->_tpl->setVariable($this->_formName . '_hidden', $this->_hidden); |
} |
// assign form attributes |
$this->_tpl->setVariable($this->_formName.'_attributes', $form->getAttributes(true)); |
// assign javascript validation rules |
$this->_tpl->setVariable($this->_formName.'_javascript', $form->getValidationScript()); |
} // end func finishForm |
/** |
* Called when visiting a header element |
* |
* @param object An HTML_QuickForm_header element being visited |
* @access public |
* @return void |
*/ |
function renderHeader(&$header) |
{ |
$name = $header->getName(); |
$varName = $this->_formName.'_header'; |
// Find placeHolder |
if (!empty($name) && $this->_tpl->placeHolderExists($this->_formName.'_header_'.$name)) { |
$varName = $this->_formName.'_header_'.$name; |
} |
$this->_tpl->setVariable($varName, $header->toHtml()); |
} // end func renderHeader |
/** |
* Called when visiting an element |
* |
* @param object An HTML_QuickForm_element object being visited |
* @param bool Whether an element is required |
* @param string An error message associated with an element |
* @access public |
* @return void |
*/ |
function renderElement(&$element, $required, $error) |
{ |
$name = $element->getName(); |
// are we inside a group? |
if (!empty($this->_inGroup)) { |
$varName = $this->_formName.'_'.str_replace(array('[', ']'), '_', $name); |
if (substr($varName, -2) == '__') { |
// element name is of type : group[] |
$varName = $this->_inGroup.'_'.$this->_elementIndex.'_'; |
$this->_elementIndex++; |
} |
if ($varName != $this->_inGroup) { |
$varName .= '_' == substr($varName, -1)? '': '_'; |
// element name is of type : group[name] |
$label = $element->getLabel(); |
$html = $element->toHtml(); |
if ($required && !$element->isFrozen()) { |
$this->_renderRequired($label, $html); |
$this->_showRequired = true; |
} |
if (!empty($label)) { |
if (is_array($label)) { |
foreach ($label as $key => $value) { |
$this->_tpl->setVariable($varName.'label_'.$key, $value); |
} |
} else { |
$this->_tpl->setVariable($varName.'label', $label); |
} |
} |
$this->_tpl->setVariable($varName.'html', $html); |
} |
} else { |
$name = str_replace(array('[', ']'), array('_', ''), $name); |
if (isset($this->_duplicateElements[$name])) { |
// Element is a duplicate |
$varName = $this->_formName.'_'.$name.'_'.$this->_duplicateElements[$name]; |
$this->_duplicateElements[$name]++; |
} else { |
$varName = $this->_formName.'_'.$name; |
} |
$label = $element->getLabel(); |
$html = $element->toHtml(); |
if ($required) { |
$this->_showRequired = true; |
$this->_renderRequired($label, $html); |
} |
if (!empty($error)) { |
$this->_renderError($label, $html, $error); |
} |
if (is_array($label)) { |
foreach ($label as $key => $value) { |
$this->_tpl->setVariable($varName.'_label_'.$key, $value); |
} |
} else { |
$this->_tpl->setVariable($varName.'_label', $label); |
} |
$this->_tpl->setVariable($varName.'_html', $html); |
} |
} // end func renderElement |
/** |
* Called when visiting a hidden element |
* |
* @param object An HTML_QuickForm_hidden object being visited |
* @access public |
* @return void |
*/ |
function renderHidden(&$element) |
{ |
if ($this->_tpl->placeholderExists($this->_formName . '_hidden')) { |
$this->_hidden .= $element->toHtml(); |
} else { |
$name = $element->getName(); |
$name = str_replace(array('[', ']'), array('_', ''), $name); |
$this->_tpl->setVariable($this->_formName.'_'.$name.'_html', $element->toHtml()); |
} |
} // end func renderHidden |
/** |
* Called when visiting a group, before processing any group elements |
* |
* @param object An HTML_QuickForm_group object being visited |
* @param bool Whether a group is required |
* @param string An error message associated with a group |
* @access public |
* @return void |
*/ |
function startGroup(&$group, $required, $error) |
{ |
$name = $group->getName(); |
$varName = $this->_formName.'_'.$name; |
$this->_elementIndex = 0; |
$html = $this->_tpl->placeholderExists($varName.'_html') ? $group->toHtml() : ''; |
$label = $group->getLabel(); |
if ($required) { |
$this->_renderRequired($label, $html); |
} |
if (!empty($error)) { |
$this->_renderError($label, $html, $error); |
} |
if (!empty($html)) { |
$this->_tpl->setVariable($varName.'_html', $html); |
} else { |
// Uses error blocks to set the special groups layout error |
// <!-- BEGIN form_group_error -->{form_group_error}<!-- END form_group_error --> |
if (!empty($error)) { |
if ($this->_tpl->placeholderExists($varName.'_error')) { |
if ($this->_tpl->blockExists($this->_formName . '_error_block')) { |
$this->_tpl->setVariable($this->_formName . '_error', $error); |
$error = $this->_getTplBlock($this->_formName . '_error_block'); |
} elseif (strpos($this->_error, '{html}') !== false || strpos($this->_error, '{label}') !== false) { |
$error = str_replace('{error}', $error, $this->_error); |
} |
} |
$this->_tpl->setVariable($varName . '_error', $error); |
array_pop($this->_errors); |
} |
} |
if (is_array($label)) { |
foreach ($label as $key => $value) { |
$this->_tpl->setVariable($varName.'_label_'.$key, $value); |
} |
} else { |
$this->_tpl->setVariable($varName.'_label', $label); |
} |
$this->_inGroup = $varName; |
} // end func startGroup |
/** |
* Called when visiting a group, after processing all group elements |
* |
* @param object An HTML_QuickForm_group object being visited |
* @access public |
* @return void |
*/ |
function finishGroup(&$group) |
{ |
$this->_inGroup = ''; |
} // end func finishGroup |
/** |
* Sets the way required elements are rendered |
* |
* You can use {label} or {html} placeholders to let the renderer know where |
* where the element label or the element html are positionned according to the |
* required tag. They will be replaced accordingly with the right value. |
* For example: |
* <font color="red">*</font>{label} |
* will put a red star in front of the label if the element is required. |
* |
* @param string The required element template |
* @access public |
* @return void |
*/ |
function setRequiredTemplate($template) |
{ |
$this->_required = $template; |
} // end func setRequiredTemplate |
/** |
* Sets the way elements with validation errors are rendered |
* |
* You can use {label} or {html} placeholders to let the renderer know where |
* where the element label or the element html are positionned according to the |
* error message. They will be replaced accordingly with the right value. |
* The error message will replace the {error} place holder. |
* For example: |
* <font color="red">{error}</font><br />{html} |
* will put the error message in red on top of the element html. |
* |
* If you want all error messages to be output in the main error block, do not specify |
* {html} nor {label}. |
* |
* Groups can have special layouts. With this kind of groups, the renderer will need |
* to know where to place the error message. In this case, use error blocks like: |
* <!-- BEGIN form_group_error -->{form_group_error}<!-- END form_group_error --> |
* where you want the error message to appear in the form. |
* |
* @param string The element error template |
* @access public |
* @return void |
*/ |
function setErrorTemplate($template) |
{ |
$this->_error = $template; |
} // end func setErrorTemplate |
/** |
* Called when an element is required |
* |
* This method will add the required tag to the element label and/or the element html |
* such as defined with the method setRequiredTemplate |
* |
* @param string The element label |
* @param string The element html rendering |
* @see setRequiredTemplate() |
* @access private |
* @return void |
*/ |
function _renderRequired(&$label, &$html) |
{ |
if ($this->_tpl->blockExists($tplBlock = $this->_formName . '_required_block')) { |
if (!empty($label) && $this->_tpl->placeholderExists($this->_formName . '_label', $tplBlock)) { |
$this->_tpl->setVariable($this->_formName . '_label', is_array($label)? $label[0]: $label); |
if (is_array($label)) { |
$label[0] = $this->_getTplBlock($tplBlock); |
} else { |
$label = $this->_getTplBlock($tplBlock); |
} |
} |
if (!empty($html) && $this->_tpl->placeholderExists($this->_formName . '_html', $tplBlock)) { |
$this->_tpl->setVariable($this->_formName . '_html', $html); |
$html = $this->_getTplBlock($tplBlock); |
} |
} else { |
if (!empty($label) && strpos($this->_required, '{label}') !== false) { |
if (is_array($label)) { |
$label[0] = str_replace('{label}', $label[0], $this->_required); |
} else { |
$label = str_replace('{label}', $label, $this->_required); |
} |
} |
if (!empty($html) && strpos($this->_required, '{html}') !== false) { |
$html = str_replace('{html}', $html, $this->_required); |
} |
} |
} // end func _renderRequired |
/** |
* Called when an element has a validation error |
* |
* This method will add the error message to the element label or the element html |
* such as defined with the method setErrorTemplate. If the error placeholder is not found |
* in the template, the error will be displayed in the form error block. |
* |
* @param string The element label |
* @param string The element html rendering |
* @param string The element error |
* @see setErrorTemplate() |
* @access private |
* @return void |
*/ |
function _renderError(&$label, &$html, $error) |
{ |
if ($this->_tpl->blockExists($tplBlock = $this->_formName . '_error_block')) { |
$this->_tpl->setVariable($this->_formName . '_error', $error); |
if (!empty($label) && $this->_tpl->placeholderExists($this->_formName . '_label', $tplBlock)) { |
$this->_tpl->setVariable($this->_formName . '_label', is_array($label)? $label[0]: $label); |
if (is_array($label)) { |
$label[0] = $this->_getTplBlock($tplBlock); |
} else { |
$label = $this->_getTplBlock($tplBlock); |
} |
} elseif (!empty($html) && $this->_tpl->placeholderExists($this->_formName . '_html', $tplBlock)) { |
$this->_tpl->setVariable($this->_formName . '_html', $html); |
$html = $this->_getTplBlock($tplBlock); |
} |
// clean up after ourselves |
$this->_tpl->setVariable($this->_formName . '_error', null); |
} elseif (!empty($label) && strpos($this->_error, '{label}') !== false) { |
if (is_array($label)) { |
$label[0] = str_replace(array('{label}', '{error}'), array($label[0], $error), $this->_error); |
} else { |
$label = str_replace(array('{label}', '{error}'), array($label, $error), $this->_error); |
} |
} elseif (!empty($html) && strpos($this->_error, '{html}') !== false) { |
$html = str_replace(array('{html}', '{error}'), array($html, $error), $this->_error); |
} else { |
$this->_errors[] = $error; |
} |
}// end func _renderError |
/** |
* Returns the block's contents |
* |
* The method is needed because ITX and Sigma implement clearing |
* the block contents on get() a bit differently |
* |
* @param string Block name |
* @return string Block contents |
*/ |
function _getTplBlock($block) |
{ |
$this->_tpl->parse($block); |
if (is_a($this->_tpl, 'html_template_sigma')) { |
$ret = $this->_tpl->get($block, true); |
} else { |
$oldClear = $this->_tpl->clearCache; |
$this->_tpl->clearCache = true; |
$ret = $this->_tpl->get($block); |
$this->_tpl->clearCache = $oldClear; |
} |
return $ret; |
} |
} // end class HTML_QuickForm_Renderer_ITStatic |
?> |
/branches/v1.0-menes/api/pear/HTML/QuickForm/Renderer/Object.php |
---|
New file |
0,0 → 1,432 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +----------------------------------------------------------------------+ |
// | PHP version 4.0 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2003 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Author: Ron McClain <ron@humaniq.com> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: Object.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $ |
require_once('HTML/QuickForm/Renderer.php'); |
/** |
* A concrete renderer for HTML_QuickForm, makes an object from form contents |
* |
* Based on HTML_Quickform_Renderer_Array code |
* |
* @access public |
*/ |
class HTML_QuickForm_Renderer_Object extends HTML_QuickForm_Renderer |
{ |
/** |
* The object being generated |
* @var object $_obj |
*/ |
var $_obj= null; |
/** |
* Number of sections in the form (i.e. number of headers in it) |
* @var integer $_sectionCount |
*/ |
var $_sectionCount; |
/** |
* Current section number |
* @var integer $_currentSection |
*/ |
var $_currentSection; |
/** |
* Object representing current group |
* @var object $_currentGroup |
*/ |
var $_currentGroup = null; |
/** |
* Class of Element Objects |
* @var object $_elementType |
*/ |
var $_elementType = 'QuickFormElement'; |
/** |
* Additional style information for different elements |
* @var array $_elementStyles |
*/ |
var $_elementStyles = array(); |
/** |
* true: collect all hidden elements into string; false: process them as usual form elements |
* @var bool $_collectHidden |
*/ |
var $_collectHidden = false; |
/** |
* Constructor |
* |
* @param collecthidden bool true: collect all hidden elements |
* @access public |
*/ |
function HTML_QuickForm_Renderer_Object($collecthidden = false) |
{ |
$this->HTML_QuickForm_Renderer(); |
$this->_collectHidden = $collecthidden; |
$this->_obj = new QuickformForm; |
} |
/** |
* Return the rendered Object |
* @access public |
*/ |
function toObject() |
{ |
return $this->_obj; |
} |
/** |
* Set the class of the form elements. Defaults to QuickformElement. |
* @param type string Name of element class |
* @access public |
*/ |
function setElementType($type) |
{ |
$this->_elementType = $type; |
} |
function startForm(&$form) |
{ |
$this->_obj->frozen = $form->isFrozen(); |
$this->_obj->javascript = $form->getValidationScript(); |
$this->_obj->attributes = $form->getAttributes(true); |
$this->_obj->requirednote = $form->getRequiredNote(); |
$this->_obj->errors = new StdClass; |
if($this->_collectHidden) { |
$this->_obj->hidden = ''; |
} |
$this->_elementIdx = 1; |
$this->_currentSection = null; |
$this->_sectionCount = 0; |
} // end func startForm |
function renderHeader(&$header) |
{ |
$hobj = new StdClass; |
$hobj->header = $header->toHtml(); |
$this->_obj->sections[$this->_sectionCount] = $hobj; |
$this->_currentSection = $this->_sectionCount++; |
} |
function renderElement(&$element, $required, $error) |
{ |
$elObj = $this->_elementToObject($element, $required, $error); |
if(!empty($error)) { |
$name = $elObj->name; |
$this->_obj->errors->$name = $error; |
} |
$this->_storeObject($elObj); |
} // end func renderElement |
function renderHidden(&$element) |
{ |
if($this->_collectHidden) { |
$this->_obj->hidden .= $element->toHtml() . "\n"; |
} else { |
$this->renderElement($element, false, null); |
} |
} //end func renderHidden |
function startGroup(&$group, $required, $error) |
{ |
$this->_currentGroup = $this->_elementToObject($group, $required, $error); |
if(!empty($error)) { |
$name = $this->_currentGroup->name; |
$this->_obj->errors->$name = $error; |
} |
} // end func startGroup |
function finishGroup(&$group) |
{ |
$this->_storeObject($this->_currentGroup); |
$this->_currentGroup = null; |
} // end func finishGroup |
/** |
* Creates an object representing an element |
* |
* @access private |
* @param element object An HTML_QuickForm_element object |
* @param required bool Whether an element is required |
* @param error string Error associated with the element |
* @return object |
*/ |
function _elementToObject(&$element, $required, $error) |
{ |
if($this->_elementType) { |
$ret = new $this->_elementType; |
} |
$ret->name = $element->getName(); |
$ret->value = $element->getValue(); |
$ret->type = $element->getType(); |
$ret->frozen = $element->isFrozen(); |
$labels = $element->getLabel(); |
if (is_array($labels)) { |
$ret->label = array_shift($labels); |
foreach ($labels as $key => $label) { |
$key = is_int($key)? $key + 2: $key; |
$ret->{'label_' . $key} = $label; |
} |
} else { |
$ret->label = $labels; |
} |
$ret->required = $required; |
$ret->error = $error; |
if(isset($this->_elementStyles[$ret->name])) { |
$ret->style = $this->_elementStyles[$ret->name]; |
$ret->styleTemplate = "styles/". $ret->style .".html"; |
} |
if($ret->type == 'group') { |
$ret->separator = $element->_separator; |
$ret->elements = array(); |
} else { |
$ret->html = $element->toHtml(); |
} |
return $ret; |
} |
/** |
* Stores an object representation of an element in the form array |
* |
* @access private |
* @param elObj object Object representation of an element |
* @return void |
*/ |
function _storeObject($elObj) |
{ |
$name = $elObj->name; |
if(is_object($this->_currentGroup) && $elObj->type != 'group') { |
$this->_currentGroup->elements[] = $elObj; |
} elseif (isset($this->_currentSection)) { |
$this->_obj->sections[$this->_currentSection]->elements[] = $elObj; |
} else { |
$this->_obj->elements[] = $elObj; |
} |
} |
function setElementStyle($elementName, $styleName = null) |
{ |
if(is_array($elementName)) { |
$this->_elementStyles = array_merge($this->_elementStyles, $elementName); |
} else { |
$this->_elementStyles[$elementName] = $styleName; |
} |
} |
} // end class HTML_QuickForm_Renderer_Object |
/** |
* Convenience class for the form object passed to outputObject() |
* |
* Eg. |
* {form.outputJavaScript():h} |
* {form.outputHeader():h} |
* <table> |
* <tr> |
* <td>{form.name.label:h}</td><td>{form.name.html:h}</td> |
* </tr> |
* </table> |
* </form> |
*/ |
class QuickformForm |
{ |
/** |
* Whether the form has been frozen |
* @var boolean $frozen |
*/ |
var $frozen; |
/** |
* Javascript for client-side validation |
* @var string $javascript |
*/ |
var $javascript; |
/** |
* Attributes for form tag |
* @var string $attributes |
*/ |
var $attributes; |
/** |
* Note about required elements |
* @var string $requirednote |
*/ |
var $requirednote; |
/** |
* Collected html of all hidden variables |
* @var string $hidden |
*/ |
var $hidden; |
/** |
* Set if there were validation errors. |
* StdClass object with element names for keys and their |
* error messages as values |
* @var object $errors |
*/ |
var $errors; |
/** |
* Array of QuickformElementObject elements. If there are headers in the form |
* this will be empty and the elements will be in the |
* separate sections |
* @var array $elements |
*/ |
var $elements; |
/** |
* Array of sections contained in the document |
* @var array $sections |
*/ |
var $sections; |
/** |
* Output <form> header |
* {form.outputHeader():h} |
* @return string <form attributes> |
*/ |
function outputHeader() |
{ |
return "<form " . $this->attributes . ">\n"; |
} |
/** |
* Output form javascript |
* {form.outputJavaScript():h} |
* @return string Javascript |
*/ |
function outputJavaScript() |
{ |
return $this->javascript; |
} |
} // end class QuickformForm |
/** |
* Convenience class describing a form element. |
* The properties defined here will be available from |
* your flexy templates by referencing |
* {form.zip.label:h}, {form.zip.html:h}, etc. |
*/ |
class QuickformElement |
{ |
/** |
* Element name |
* @var string $name |
*/ |
var $name; |
/** |
* Element value |
* @var mixed $value |
*/ |
var $value; |
/** |
* Type of element |
* @var string $type |
*/ |
var $type; |
/** |
* Whether the element is frozen |
* @var boolean $frozen |
*/ |
var $frozen; |
/** |
* Label for the element |
* @var string $label |
*/ |
var $label; |
/** |
* Whether element is required |
* @var boolean $required |
*/ |
var $required; |
/** |
* Error associated with the element |
* @var string $error |
*/ |
var $error; |
/** |
* Some information about element style |
* @var string $style |
*/ |
var $style; |
/** |
* HTML for the element |
* @var string $html |
*/ |
var $html; |
/** |
* If element is a group, the group separator |
* @var mixed $separator |
*/ |
var $separator; |
/** |
* If element is a group, an array of subelements |
* @var array $elements |
*/ |
var $elements; |
function isType($type) |
{ |
return ($this->type == $type); |
} |
function notFrozen() |
{ |
return !$this->frozen; |
} |
function isButton() |
{ |
return ($this->type == "submit" || $this->type == "reset"); |
} |
/** |
* XXX: why does it use Flexy when all other stuff here does not depend on it? |
*/ |
function outputStyle() |
{ |
ob_start(); |
HTML_Template_Flexy::staticQuickTemplate('styles/' . $this->style . '.html', $this); |
$ret = ob_get_contents(); |
ob_end_clean(); |
return $ret; |
} |
} // end class QuickformElement |
?> |
/branches/v1.0-menes/api/pear/HTML/QuickForm/advcheckbox.php |
---|
New file |
0,0 → 1,283 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +----------------------------------------------------------------------+ |
// | PHP version 4.0 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997, 1998, 1999, 2000, 2001 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Adam Daniel <adaniel1@eesus.jnj.com> | |
// | Bertrand Mansion <bmansion@mamasam.com> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: advcheckbox.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $ |
require_once('HTML/QuickForm/checkbox.php'); |
/** |
* HTML class for an advanced checkbox type field |
* |
* Basically this fixes a problem that HTML has had |
* where checkboxes can only pass a single value (the |
* value of the checkbox when checked). A value for when |
* the checkbox is not checked cannot be passed, and |
* furthermore the checkbox variable doesn't even exist if |
* the checkbox was submitted unchecked. |
* |
* It works by creating a hidden field with the passed-in name |
* and creating the checkbox with no name, but with a javascript |
* onclick which sets the value of the hidden field. |
* |
* @author Jason Rust <jrust@php.net> |
* @since 2.0 |
* @access public |
*/ |
class HTML_QuickForm_advcheckbox extends HTML_QuickForm_checkbox |
{ |
// {{{ properties |
/** |
* The values passed by the hidden elment |
* |
* @var array |
* @access private |
*/ |
var $_values = null; |
/** |
* The default value |
* |
* @var boolean |
* @access private |
*/ |
var $_currentValue = null; |
// }}} |
// {{{ constructor |
/** |
* Class constructor |
* |
* @param string $elementName (optional)Input field name attribute |
* @param string $elementLabel (optional)Input field label |
* @param string $text (optional)Text to put after the checkbox |
* @param mixed $attributes (optional)Either a typical HTML attribute string |
* or an associative array |
* @param mixed $values (optional)Values to pass if checked or not checked |
* |
* @since 1.0 |
* @access public |
* @return void |
*/ |
function HTML_QuickForm_advcheckbox($elementName=null, $elementLabel=null, $text=null, $attributes=null, $values=null) |
{ |
$this->HTML_QuickForm_checkbox($elementName, $elementLabel, $text, $attributes); |
$this->setValues($values); |
} //end constructor |
// }}} |
// {{{ getPrivateName() |
/** |
* Gets the pribate name for the element |
* |
* @param string $elementName The element name to make private |
* |
* @access public |
* @return string |
*/ |
function getPrivateName($elementName) |
{ |
return '__'.$elementName; |
} |
// }}} |
// {{{ getOnclickJs() |
/** |
* Create the javascript for the onclick event which will |
* set the value of the hidden field |
* |
* @param string $elementName The element name |
* |
* @access public |
* @return string |
*/ |
function getOnclickJs($elementName) |
{ |
$onclickJs = 'if (this.checked) { this.form[\''.$elementName.'\'].value=\''.addcslashes($this->_values[1], '\'').'\'; }'; |
$onclickJs .= 'else { this.form[\''.$elementName.'\'].value=\''.addcslashes($this->_values[0], '\'').'\'; }'; |
return $onclickJs; |
} |
// }}} |
// {{{ setValues() |
/** |
* Sets the values used by the hidden element |
* |
* @param mixed $values The values, either a string or an array |
* |
* @access public |
* @return void |
*/ |
function setValues($values) |
{ |
if (empty($values)) { |
// give it default checkbox behavior |
$this->_values = array('', 1); |
} elseif (is_scalar($values)) { |
// if it's string, then assume the value to |
// be passed is for when the element is checked |
$this->_values = array('', $values); |
} else { |
$this->_values = $values; |
} |
$this->setChecked($this->_currentValue == $this->_values[1]); |
} |
// }}} |
// {{{ setValue() |
/** |
* Sets the element's value |
* |
* @param mixed Element's value |
* @access public |
*/ |
function setValue($value) |
{ |
$this->setChecked(isset($this->_values[1]) && $value == $this->_values[1]); |
$this->_currentValue = $value; |
} |
// }}} |
// {{{ getValue() |
/** |
* Returns the element's value |
* |
* @access public |
* @return mixed |
*/ |
function getValue() |
{ |
if (is_array($this->_values)) { |
return $this->_values[$this->getChecked()? 1: 0]; |
} else { |
return null; |
} |
} |
// }}} |
// {{{ toHtml() |
/** |
* Returns the checkbox element in HTML |
* and the additional hidden element in HTML |
* |
* @access public |
* @return string |
*/ |
function toHtml() |
{ |
if ($this->_flagFrozen) { |
return parent::toHtml(); |
} else { |
$oldName = $this->getName(); |
$oldJs = $this->getAttribute('onclick'); |
$this->updateAttributes(array( |
'name' => $this->getPrivateName($oldName), |
'onclick' => $this->getOnclickJs($oldName) . ' ' . $oldJs |
)); |
$html = parent::toHtml() . '<input' . |
$this->_getAttrString(array( |
'type' => 'hidden', |
'name' => $oldName, |
'value' => $this->getValue() |
)) . ' />'; |
// revert the name and JS, in case this method will be called once more |
$this->updateAttributes(array( |
'name' => $oldName, |
'onclick' => $oldJs |
)); |
return $html; |
} |
} //end func toHtml |
// }}} |
// {{{ getFrozenHtml() |
/** |
* Unlike checkbox, this has to append a hidden input in both |
* checked and non-checked states |
*/ |
function getFrozenHtml() |
{ |
return ($this->getChecked()? '<tt>[x]</tt>': '<tt>[ ]</tt>') . |
$this->_getPersistantData(); |
} |
// }}} |
// {{{ onQuickFormEvent() |
/** |
* Called by HTML_QuickForm whenever form event is made on this element |
* |
* @param string $event Name of event |
* @param mixed $arg event arguments |
* @param object $caller calling object |
* @since 1.0 |
* @access public |
* @return void |
*/ |
function onQuickFormEvent($event, $arg, &$caller) |
{ |
switch ($event) { |
case 'updateValue': |
// constant values override both default and submitted ones |
// default values are overriden by submitted |
$value = $this->_findValue($caller->_constantValues); |
if (null === $value) { |
$value = $this->_findValue($caller->_submitValues); |
if (null === $value) { |
$value = $this->_findValue($caller->_defaultValues); |
} |
} |
if (null !== $value) { |
$this->setValue($value); |
} |
break; |
default: |
parent::onQuickFormEvent($event, $arg, $caller); |
} |
return true; |
} // end func onQuickFormLoad |
// }}} |
// {{{ exportValue() |
/** |
* This element has a value even if it is not checked, thus we override |
* checkbox's behaviour here |
*/ |
function exportValue(&$submitValues, $assoc) |
{ |
$value = $this->_findValue($submitValues); |
if (null === $value) { |
$value = $this->getValue(); |
} elseif (is_array($this->_values) && ($value != $this->_values[0]) && ($value != $this->_values[1])) { |
$value = null; |
} |
return $this->_prepareValue($value, $assoc); |
} |
// }}} |
} //end class HTML_QuickForm_advcheckbox |
?> |
/branches/v1.0-menes/api/pear/HTML/QuickForm/Rule/Compare.php |
---|
New file |
0,0 → 1,95 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +----------------------------------------------------------------------+ |
// | PHP version 4.0 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2003 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Author: Alexey Borzov <avb@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: Compare.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $ |
require_once 'HTML/QuickForm/Rule.php'; |
/** |
* Rule to compare two form fields |
* |
* The most common usage for this is to ensure that the password |
* confirmation field matches the password field |
* |
* @access public |
* @package HTML_QuickForm |
* @version $Revision: 1.2 $ |
*/ |
class HTML_QuickForm_Rule_Compare extends HTML_QuickForm_Rule |
{ |
/** |
* Possible operators to use |
* @var array |
* @access private |
*/ |
var $_operators = array( |
'eq' => '==', |
'neq' => '!=', |
'gt' => '>', |
'gte' => '>=', |
'lt' => '<', |
'lte' => '<=' |
); |
/** |
* Returns the operator to use for comparing the values |
* |
* @access private |
* @param string operator name |
* @return string operator to use for validation |
*/ |
function _findOperator($name) |
{ |
if (empty($name)) { |
return '=='; |
} elseif (isset($this->_operators[$name])) { |
return $this->_operators[$name]; |
} elseif (in_array($name, $this->_operators)) { |
return $name; |
} else { |
return '=='; |
} |
} |
function validate($values, $operator = null) |
{ |
$operator = $this->_findOperator($operator); |
if ('==' != $operator && '!=' != $operator) { |
$compareFn = create_function('$a, $b', 'return floatval($a) ' . $operator . ' floatval($b);'); |
} else { |
$compareFn = create_function('$a, $b', 'return $a ' . $operator . ' $b;'); |
} |
return $compareFn($values[0], $values[1]); |
} |
function getValidationScript($operator = null) |
{ |
$operator = $this->_findOperator($operator); |
if ('==' != $operator && '!=' != $operator) { |
$check = "!(Number({jsVar}[0]) {$operator} Number({jsVar}[1]))"; |
} else { |
$check = "!({jsVar}[0] {$operator} {jsVar}[1])"; |
} |
return array('', "'' != {jsVar}[0] && {$check}"); |
} |
} |
?> |
/branches/v1.0-menes/api/pear/HTML/QuickForm/Rule/Email.php |
---|
New file |
0,0 → 1,61 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +----------------------------------------------------------------------+ |
// | PHP version 4.0 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2003 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Bertrand Mansion <bmansion@mamasam.com> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: Email.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $ |
require_once('HTML/QuickForm/Rule.php'); |
/** |
* Email validation rule |
* @version 1.0 |
*/ |
class HTML_QuickForm_Rule_Email extends HTML_QuickForm_Rule |
{ |
var $regex = '/^((\"[^\"\f\n\r\t\v\b]+\")|([\w\!\#\$\%\&\'\*\+\-\~\/\^\`\|\{\}]+(\.[\w\!\#\$\%\&\'\*\+\-\~\/\^\`\|\{\}]+)*))@((\[(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))\])|(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))|((([A-Za-z0-9\-])+\.)+[A-Za-z\-]+))$/'; |
/** |
* Validates an email address |
* |
* @param string $email Email address |
* @param boolean $checkDomain True if dns check should be performed |
* @access public |
* @return boolean true if email is valid |
*/ |
function validate($email, $checkDomain = false) |
{ |
if (preg_match($this->regex, $email)) { |
if ($checkDomain && function_exists('checkdnsrr')) { |
$tokens = explode('@', $email); |
if (checkdnsrr($tokens[1], 'MX') || checkdnsrr($tokens[1], 'A')) { |
return true; |
} |
return false; |
} |
return true; |
} |
return false; |
} // end func validate |
function getValidationScript($options = null) |
{ |
return array(" var regex = " . $this->regex . ";\n", "{jsVar} != '' && !regex.test({jsVar})"); |
} // end func getValidationScript |
} // end class HTML_QuickForm_Rule_Email |
?> |
/branches/v1.0-menes/api/pear/HTML/QuickForm/Rule/Regex.php |
---|
New file |
0,0 → 1,89 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +----------------------------------------------------------------------+ |
// | PHP version 4.0 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2003 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Bertrand Mansion <bmansion@mamasam.com> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: Regex.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $ |
require_once('HTML/QuickForm/Rule.php'); |
/** |
* Validates values using regular expressions |
* @version 1.0 |
*/ |
class HTML_QuickForm_Rule_Regex extends HTML_QuickForm_Rule |
{ |
/** |
* Array of regular expressions |
* |
* Array is in the format: |
* $_data['rulename'] = 'pattern'; |
* |
* @var array |
* @access private |
*/ |
var $_data = array( |
'lettersonly' => '/^[a-zA-Z]+$/', |
'alphanumeric' => '/^[a-zA-Z0-9]+$/', |
'numeric' => '/(^-?\d\d*\.\d*$)|(^-?\d\d*$)|(^-?\.\d\d*$)/', |
'nopunctuation' => '/^[^().\/\*\^\?#!@$%+=,\"\'><~\[\]{}]+$/', |
'nonzero' => '/^-?[1-9][0-9]*/' |
); |
/** |
* Validates a value using a regular expression |
* |
* @param string $value Value to be checked |
* @param string $regex Regular expression |
* @access public |
* @return boolean true if value is valid |
*/ |
function validate($value, $regex = null) |
{ |
if (isset($this->_data[$this->name])) { |
if (!preg_match($this->_data[$this->name], $value)) { |
return false; |
} |
} else { |
if (!preg_match($regex, $value)) { |
return false; |
} |
} |
return true; |
} // end func validate |
/** |
* Adds new regular expressions to the list |
* |
* @param string $name Name of rule |
* @param string $pattern Regular expression pattern |
* @access public |
*/ |
function addData($name, $pattern) |
{ |
$this->_data[$name] = $pattern; |
} // end func addData |
function getValidationScript($options = null) |
{ |
$regex = isset($this->_data[$this->name]) ? $this->_data[$this->name] : $options; |
return array(" var regex = " . $regex . ";\n", "{jsVar} != '' && !regex.test({jsVar})"); |
} // end func getValidationScript |
} // end class HTML_QuickForm_Rule_Regex |
?> |
/branches/v1.0-menes/api/pear/HTML/QuickForm/Rule/Callback.php |
---|
New file |
0,0 → 1,113 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +----------------------------------------------------------------------+ |
// | PHP version 4.0 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2003 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Bertrand Mansion <bmansion@mamasam.com> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: Callback.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $ |
require_once('HTML/QuickForm/Rule.php'); |
/** |
* Validates values using callback functions or methods |
* @version 1.0 |
*/ |
class HTML_QuickForm_Rule_Callback extends HTML_QuickForm_Rule |
{ |
/** |
* Array of callbacks |
* |
* Array is in the format: |
* $_data['rulename'] = array('functionname', 'classname'); |
* If the callback is not a method, then the class name is not set. |
* |
* @var array |
* @access private |
*/ |
var $_data = array(); |
/** |
* Whether to use BC mode for specific rules |
* |
* Previous versions of QF passed element's name as a first parameter |
* to validation functions, but not to validation methods. This behaviour |
* is emulated if you are using 'function' as rule type when registering. |
* |
* @var array |
* @access private |
*/ |
var $_BCMode = array(); |
/** |
* Validates a value using a callback |
* |
* @param string $value Value to be checked |
* @param mixed $options Options for callback |
* @access public |
* @return boolean true if value is valid |
*/ |
function validate($value, $options = null) |
{ |
if (isset($this->_data[$this->name])) { |
$callback = $this->_data[$this->name]; |
if (isset($callback[1])) { |
return call_user_func(array($callback[1], $callback[0]), $value, $options); |
} elseif ($this->_BCMode[$this->name]) { |
return $callback[0]('', $value, $options); |
} else { |
return $callback[0]($value, $options); |
} |
} elseif (is_callable($options)) { |
return call_user_func($options, $value); |
} else { |
return true; |
} |
} // end func validate |
/** |
* Adds new callbacks to the callbacks list |
* |
* @param string $name Name of rule |
* @param string $callback Name of function or method |
* @param string $class Name of class containing the method |
* @param bool $BCMode Backwards compatibility mode |
* @access public |
*/ |
function addData($name, $callback, $class = null, $BCMode = false) |
{ |
if (!empty($class)) { |
$this->_data[$name] = array($callback, $class); |
} else { |
$this->_data[$name] = array($callback); |
} |
$this->_BCMode[$name] = $BCMode; |
} // end func addData |
function getValidationScript($options = null) |
{ |
if (isset($this->_data[$this->name])) { |
$callback = $this->_data[$this->name][0]; |
$params = ($this->_BCMode[$this->name]? "'', {jsVar}": '{jsVar}') . |
(isset($options)? ", '{$options}'": ''); |
} else { |
$callback = is_array($options)? $options[1]: $options; |
$params = '{jsVar}'; |
} |
return array('', "{jsVar} != '' && !{$callback}({$params})"); |
} // end func getValidationScript |
} // end class HTML_QuickForm_Rule_Callback |
?> |
/branches/v1.0-menes/api/pear/HTML/QuickForm/Rule/Range.php |
---|
New file |
0,0 → 1,64 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +----------------------------------------------------------------------+ |
// | PHP version 4.0 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2003 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Bertrand Mansion <bmansion@mamasam.com> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: Range.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $ |
require_once('HTML/QuickForm/Rule.php'); |
/** |
* Validates values using range comparison |
* @version 1.0 |
*/ |
class HTML_QuickForm_Rule_Range extends HTML_QuickForm_Rule |
{ |
/** |
* Validates a value using a range comparison |
* |
* @param string $value Value to be checked |
* @param mixed $options Int for length, array for range |
* @access public |
* @return boolean true if value is valid |
*/ |
function validate($value, $options) |
{ |
$length = strlen($value); |
switch ($this->name) { |
case 'minlength': return ($length >= $options); |
case 'maxlength': return ($length <= $options); |
default: return ($length >= $options[0] && $length <= $options[1]); |
} |
} // end func validate |
function getValidationScript($options = null) |
{ |
switch ($this->name) { |
case 'minlength': |
$test = '{jsVar}.length < '.$options; |
break; |
case 'maxlength': |
$test = '{jsVar}.length > '.$options; |
break; |
default: |
$test = '({jsVar}.length < '.$options[0].' || {jsVar}.length > '.$options[1].')'; |
} |
return array('', "{jsVar} != '' && {$test}"); |
} // end func getValidationScript |
} // end class HTML_QuickForm_Rule_Range |
?> |
/branches/v1.0-menes/api/pear/HTML/QuickForm/Rule/Required.php |
---|
New file |
0,0 → 1,52 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +----------------------------------------------------------------------+ |
// | PHP version 4.0 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2003 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Bertrand Mansion <bmansion@mamasam.com> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: Required.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $ |
require_once('HTML/QuickForm/Rule.php'); |
/** |
* Required elements validation |
* @version 1.0 |
*/ |
class HTML_QuickForm_Rule_Required extends HTML_QuickForm_Rule |
{ |
/** |
* Checks if an element is empty |
* |
* @param string $value Value to check |
* @param mixed $options Not used yet |
* @access public |
* @return boolean true if value is not empty |
*/ |
function validate($value, $options = null) |
{ |
if ((string)$value == '') { |
return false; |
} |
return true; |
} // end func validate |
function getValidationScript($options = null) |
{ |
return array('', "{jsVar} == ''"); |
} // end func getValidationScript |
} // end class HTML_QuickForm_Rule_Required |
?> |
/branches/v1.0-menes/api/pear/HTML/QuickForm/image.php |
---|
New file |
0,0 → 1,119 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +----------------------------------------------------------------------+ |
// | PHP version 4.0 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997, 1998, 1999, 2000, 2001 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Adam Daniel <adaniel1@eesus.jnj.com> | |
// | Bertrand Mansion <bmansion@mamasam.com> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: image.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $ |
require_once("HTML/QuickForm/input.php"); |
/** |
* HTML class for a image type element |
* |
* @author Adam Daniel <adaniel1@eesus.jnj.com> |
* @author Bertrand Mansion <bmansion@mamasam.com> |
* @version 1.0 |
* @since PHP4.04pl1 |
* @access public |
*/ |
class HTML_QuickForm_image extends HTML_QuickForm_input |
{ |
// {{{ constructor |
/** |
* Class constructor |
* |
* @param string $elementName (optional)Element name attribute |
* @param string $src (optional)Image source |
* @param mixed $attributes (optional)Either a typical HTML attribute string |
* or an associative array |
* @since 1.0 |
* @access public |
* @return void |
*/ |
function HTML_QuickForm_image($elementName=null, $src='', $attributes=null) |
{ |
HTML_QuickForm_input::HTML_QuickForm_input($elementName, null, $attributes); |
$this->setType('image'); |
$this->setSource($src); |
} // end class constructor |
// }}} |
// {{{ setSource() |
/** |
* Sets source for image element |
* |
* @param string $src source for image element |
* @since 1.0 |
* @access public |
* @return void |
*/ |
function setSource($src) |
{ |
$this->updateAttributes(array('src' => $src)); |
} // end func setSource |
// }}} |
// {{{ setBorder() |
/** |
* Sets border size for image element |
* |
* @param string $border border for image element |
* @since 1.0 |
* @access public |
* @return void |
*/ |
function setBorder($border) |
{ |
$this->updateAttributes(array('border' => $border)); |
} // end func setBorder |
// }}} |
// {{{ setAlign() |
/** |
* Sets alignment for image element |
* |
* @param string $align alignment for image element |
* @since 1.0 |
* @access public |
* @return void |
*/ |
function setAlign($align) |
{ |
$this->updateAttributes(array('align' => $align)); |
} // end func setAlign |
// }}} |
// {{{ freeze() |
/** |
* Freeze the element so that only its value is returned |
* |
* @access public |
* @return void |
*/ |
function freeze() |
{ |
return false; |
} //end func freeze |
// }}} |
} // end class HTML_QuickForm_image |
?> |
/branches/v1.0-menes/api/pear/HTML/QuickForm/reset.php |
---|
New file |
0,0 → 1,72 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +----------------------------------------------------------------------+ |
// | PHP version 4.0 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997, 1998, 1999, 2000, 2001 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Adam Daniel <adaniel1@eesus.jnj.com> | |
// | Bertrand Mansion <bmansion@mamasam.com> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: reset.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $ |
require_once("HTML/QuickForm/input.php"); |
/** |
* HTML class for a reset type element |
* |
* @author Adam Daniel <adaniel1@eesus.jnj.com> |
* @author Bertrand Mansion <bmansion@mamasam.com> |
* @version 1.1 |
* @since PHP4.04pl1 |
* @access public |
*/ |
class HTML_QuickForm_reset extends HTML_QuickForm_input |
{ |
// {{{ constructor |
/** |
* Class constructor |
* |
* @param string $elementName (optional)Input field name attribute |
* @param string $value (optional)Input field value |
* @param mixed $attributes (optional)Either a typical HTML attribute string |
* or an associative array |
* @since 1.0 |
* @access public |
* @return void |
*/ |
function HTML_QuickForm_reset($elementName=null, $value=null, $attributes=null) |
{ |
HTML_QuickForm_input::HTML_QuickForm_input($elementName, null, $attributes); |
$this->setValue($value); |
$this->setType('reset'); |
} //end constructor |
// }}} |
// {{{ freeze() |
/** |
* Freeze the element so that only its value is returned |
* |
* @access public |
* @return void |
*/ |
function freeze() |
{ |
return false; |
} //end func freeze |
// }}} |
} //end class HTML_QuickForm_reset |
?> |
/branches/v1.0-menes/api/pear/HTML/QuickForm/text.php |
---|
New file |
0,0 → 1,91 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +----------------------------------------------------------------------+ |
// | PHP version 4.0 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997, 1998, 1999, 2000, 2001 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Adam Daniel <adaniel1@eesus.jnj.com> | |
// | Bertrand Mansion <bmansion@mamasam.com> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: text.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $ |
require_once("HTML/QuickForm/input.php"); |
/** |
* HTML class for a text field |
* |
* @author Adam Daniel <adaniel1@eesus.jnj.com> |
* @author Bertrand Mansion <bmansion@mamasam.com> |
* @version 1.0 |
* @since PHP4.04pl1 |
* @access public |
*/ |
class HTML_QuickForm_text extends HTML_QuickForm_input |
{ |
// {{{ constructor |
/** |
* Class constructor |
* |
* @param string $elementName (optional)Input field name attribute |
* @param string $elementLabel (optional)Input field label |
* @param mixed $attributes (optional)Either a typical HTML attribute string |
* or an associative array |
* @since 1.0 |
* @access public |
* @return void |
*/ |
function HTML_QuickForm_text($elementName=null, $elementLabel=null, $attributes=null) |
{ |
HTML_QuickForm_input::HTML_QuickForm_input($elementName, $elementLabel, $attributes); |
$this->_persistantFreeze = true; |
$this->setType('text'); |
} //end constructor |
// }}} |
// {{{ setSize() |
/** |
* Sets size of text field |
* |
* @param string $size Size of text field |
* @since 1.3 |
* @access public |
* @return void |
*/ |
function setSize($size) |
{ |
$this->updateAttributes(array('size'=>$size)); |
} //end func setSize |
// }}} |
// {{{ setMaxlength() |
/** |
* Sets maxlength of text field |
* |
* @param string $maxlength Maximum length of text field |
* @since 1.3 |
* @access public |
* @return void |
*/ |
function setMaxlength($maxlength) |
{ |
$this->updateAttributes(array('maxlength'=>$maxlength)); |
} //end func setMaxlength |
// }}} |
} //end class HTML_QuickForm_text |
?> |
/branches/v1.0-menes/api/pear/HTML/QuickForm/checkbox.php |
---|
New file |
0,0 → 1,268 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +----------------------------------------------------------------------+ |
// | PHP version 4.0 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997, 1998, 1999, 2000, 2001 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Adam Daniel <adaniel1@eesus.jnj.com> | |
// | Bertrand Mansion <bmansion@mamasam.com> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: checkbox.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $ |
require_once("HTML/QuickForm/input.php"); |
/** |
* HTML class for a checkbox type field |
* |
* @author Adam Daniel <adaniel1@eesus.jnj.com> |
* @author Bertrand Mansion <bmansion@mamasam.com> |
* @version 1.1 |
* @since PHP4.04pl1 |
* @access public |
*/ |
class HTML_QuickForm_checkbox extends HTML_QuickForm_input |
{ |
// {{{ properties |
/** |
* Checkbox display text |
* @var string |
* @since 1.1 |
* @access private |
*/ |
var $_text = ''; |
// }}} |
// {{{ constructor |
/** |
* Class constructor |
* |
* @param string $elementName (optional)Input field name attribute |
* @param string $elementLabel (optional)Input field value |
* @param string $text (optional)Checkbox display text |
* @param mixed $attributes (optional)Either a typical HTML attribute string |
* or an associative array |
* @since 1.0 |
* @access public |
* @return void |
*/ |
function HTML_QuickForm_checkbox($elementName=null, $elementLabel=null, $text='', $attributes=null) |
{ |
HTML_QuickForm_input::HTML_QuickForm_input($elementName, $elementLabel, $attributes); |
$this->_persistantFreeze = true; |
$this->_text = $text; |
$this->setType('checkbox'); |
$this->updateAttributes(array('value'=>1)); |
$this->_generateId(); |
} //end constructor |
// }}} |
// {{{ setChecked() |
/** |
* Sets whether a checkbox is checked |
* |
* @param bool $checked Whether the field is checked or not |
* @since 1.0 |
* @access public |
* @return void |
*/ |
function setChecked($checked) |
{ |
if (!$checked) { |
$this->removeAttribute('checked'); |
} else { |
$this->updateAttributes(array('checked'=>'checked')); |
} |
} //end func setChecked |
// }}} |
// {{{ getChecked() |
/** |
* Returns whether a checkbox is checked |
* |
* @since 1.0 |
* @access public |
* @return bool |
*/ |
function getChecked() |
{ |
return (bool)$this->getAttribute('checked'); |
} //end func getChecked |
// }}} |
// {{{ toHtml() |
/** |
* Returns the checkbox element in HTML |
* |
* @since 1.0 |
* @access public |
* @return string |
*/ |
function toHtml() |
{ |
if (0 == strlen($this->_text)) { |
$label = ''; |
} elseif ($this->_flagFrozen) { |
$label = $this->_text; |
} else { |
$label = '<label for="' . $this->getAttribute('id') . '">' . $this->_text . '</label>'; |
} |
return HTML_QuickForm_input::toHtml() . $label; |
} //end func toHtml |
// }}} |
// {{{ getFrozenHtml() |
/** |
* Returns the value of field without HTML tags |
* |
* @since 1.0 |
* @access public |
* @return string |
*/ |
function getFrozenHtml() |
{ |
if ($this->getChecked()) { |
return '<tt>[x]</tt>' . |
$this->_getPersistantData(); |
} else { |
return '<tt>[ ]</tt>'; |
} |
} //end func getFrozenHtml |
// }}} |
// {{{ setText() |
/** |
* Sets the checkbox text |
* |
* @param string $text |
* @since 1.1 |
* @access public |
* @return void |
*/ |
function setText($text) |
{ |
$this->_text = $text; |
} //end func setText |
// }}} |
// {{{ getText() |
/** |
* Returns the checkbox text |
* |
* @since 1.1 |
* @access public |
* @return string |
*/ |
function getText() |
{ |
return $this->_text; |
} //end func getText |
// }}} |
// {{{ setValue() |
/** |
* Sets the value of the form element |
* |
* @param string $value Default value of the form element |
* @since 1.0 |
* @access public |
* @return void |
*/ |
function setValue($value) |
{ |
return $this->setChecked($value); |
} // end func setValue |
// }}} |
// {{{ getValue() |
/** |
* Returns the value of the form element |
* |
* @since 1.0 |
* @access public |
* @return bool |
*/ |
function getValue() |
{ |
return $this->getChecked(); |
} // end func getValue |
// }}} |
// {{{ onQuickFormEvent() |
/** |
* Called by HTML_QuickForm whenever form event is made on this element |
* |
* @param string $event Name of event |
* @param mixed $arg event arguments |
* @param object $caller calling object |
* @since 1.0 |
* @access public |
* @return void |
*/ |
function onQuickFormEvent($event, $arg, &$caller) |
{ |
switch ($event) { |
case 'updateValue': |
// constant values override both default and submitted ones |
// default values are overriden by submitted |
$value = $this->_findValue($caller->_constantValues); |
if (null === $value) { |
// if no boxes were checked, then there is no value in the array |
// yet we don't want to display default value in this case |
if ($caller->isSubmitted()) { |
$value = $this->_findValue($caller->_submitValues); |
} else { |
$value = $this->_findValue($caller->_defaultValues); |
} |
} |
if (null !== $value) { |
$this->setChecked($value); |
} |
break; |
case 'setGroupValue': |
$this->setChecked($arg); |
break; |
default: |
parent::onQuickFormEvent($event, $arg, $caller); |
} |
return true; |
} // end func onQuickFormEvent |
// }}} |
// {{{ exportValue() |
/** |
* Return true if the checkbox is checked, null if it is not checked (getValue() returns false) |
*/ |
function exportValue(&$submitValues, $assoc = false) |
{ |
$value = $this->_findValue($submitValues); |
if (null === $value) { |
$value = $this->getChecked()? true: null; |
} |
return $this->_prepareValue($value, $assoc); |
} |
// }}} |
} //end class HTML_QuickForm_checkbox |
?> |
/branches/v1.0-menes/api/pear/HTML/QuickForm/hierselect.php |
---|
New file |
0,0 → 1,565 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +----------------------------------------------------------------------+ |
// | PHP version 4.0 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2004 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Herim Vasquez <vasquezh@iro.umontreal.ca> | |
// | Bertrand Mansion <bmansion@mamasam.com> | |
// | Alexey Borzov <avb@php.net> |
// +----------------------------------------------------------------------+ |
// |
// $Id: hierselect.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $ |
require_once('HTML/QuickForm/group.php'); |
require_once('HTML/QuickForm/select.php'); |
/** |
* Class to dynamically create two or more HTML Select elements |
* The first select changes the content of the second select and so on. |
* This element is considered as a group. Selects will be named |
* groupName[0], groupName[1], groupName[2]... |
* |
* @author Herim Vasquez <vasquezh@iro.umontreal.ca> |
* @author Bertrand Mansion <bmansion@mamasam.com> |
* @version 1.0 |
* @since PHP4.04pl1 |
* @access public |
*/ |
class HTML_QuickForm_hierselect extends HTML_QuickForm_group |
{ |
// {{{ properties |
/** |
* Options for all the select elements |
* |
* Format is a bit more complex as we need to know which options |
* are related to the ones in the previous select: |
* |
* Ex: |
* // first select |
* $select1[0] = 'Pop'; |
* $select1[1] = 'Classical'; |
* $select1[2] = 'Funeral doom'; |
* |
* // second select |
* $select2[0][0] = 'Red Hot Chil Peppers'; |
* $select2[0][1] = 'The Pixies'; |
* $select2[1][0] = 'Wagner'; |
* $select2[1][1] = 'Strauss'; |
* $select2[2][0] = 'Pantheist'; |
* $select2[2][1] = 'Skepticism'; |
* |
* // If only need two selects |
* // - and using the depracated functions |
* $sel =& $form->addElement('hierselect', 'cds', 'Choose CD:'); |
* $sel->setMainOptions($select1); |
* $sel->setSecOptions($select2); |
* |
* // - and using the new setOptions function |
* $sel =& $form->addElement('hierselect', 'cds', 'Choose CD:'); |
* $sel->setOptions(array($select1, $select2)); |
* |
* // If you have a third select with prices for the cds |
* $select3[0][0][0] = '15.00$'; |
* $select3[0][0][1] = '17.00$'; |
* etc |
* |
* // You can now use |
* $sel =& $form->addElement('hierselect', 'cds', 'Choose CD:'); |
* $sel->setOptions(array($select1, $select2, $select3)); |
* |
* @var array |
* @access private |
*/ |
var $_options = array(); |
/** |
* Number of select elements on this group |
* |
* @var int |
* @access private |
*/ |
var $_nbElements = 0; |
/** |
* The javascript used to set and change the options |
* |
* @var string |
* @access private |
*/ |
var $_js = ''; |
// }}} |
// {{{ constructor |
/** |
* Class constructor |
* |
* @param string $elementName (optional)Input field name attribute |
* @param string $elementLabel (optional)Input field label in form |
* @param mixed $attributes (optional)Either a typical HTML attribute string |
* or an associative array. Date format is passed along the attributes. |
* @param mixed $separator (optional)Use a string for one separator, |
* use an array to alternate the separators. |
* @access public |
* @return void |
*/ |
function HTML_QuickForm_hierselect($elementName=null, $elementLabel=null, $attributes=null, $separator=null) |
{ |
$this->HTML_QuickForm_element($elementName, $elementLabel, $attributes); |
$this->_persistantFreeze = true; |
if (isset($separator)) { |
$this->_separator = $separator; |
} |
$this->_type = 'hierselect'; |
$this->_appendName = true; |
} //end constructor |
// }}} |
// {{{ setOptions() |
/** |
* Initialize the array structure containing the options for each select element. |
* Call the functions that actually do the magic. |
* |
* @param array $options Array of options defining each element |
* |
* @access public |
* @return void |
*/ |
function setOptions($options) |
{ |
$this->_options = $options; |
if (empty($this->_elements)) { |
$this->_nbElements = count($this->_options); |
$this->_createElements(); |
} else { |
// setDefaults has probably been called before this function |
// check if all elements have been created |
$totalNbElements = count($this->_options); |
for ($i = $this->_nbElements; $i < $totalNbElements; $i ++) { |
$this->_elements[] =& new HTML_QuickForm_select($i, null, array(), $this->getAttributes()); |
$this->_nbElements++; |
} |
} |
$this->_setOptions(); |
} // end func setMainOptions |
// }}} |
// {{{ setMainOptions() |
/** |
* Sets the options for the first select element. Deprecated. setOptions() should be used. |
* |
* @param array $array Options for the first select element |
* |
* @access public |
* @return void |
*/ |
function setMainOptions($array) |
{ |
$this->_options[0] = $array; |
if (empty($this->_elements)) { |
$this->_nbElements = 2; |
$this->_createElements(); |
} |
} // end func setMainOptions |
// }}} |
// {{{ setSecOptions() |
/** |
* Sets the options for the second select element. Deprecated. setOptions() should be used. |
* The main _options array is initialized and the _setOptions function is called. |
* |
* @param array $array Options for the second select element |
* |
* @access public |
* @return void |
*/ |
function setSecOptions($array) |
{ |
$this->_options[1] = $array; |
if (empty($this->_elements)) { |
$this->_nbElements = 2; |
$this->_createElements(); |
} else { |
// setDefaults has probably been called before this function |
// check if all elements have been created |
$totalNbElements = 2; |
for ($i = $this->_nbElements; $i < $totalNbElements; $i ++) { |
$this->_elements[] =& new HTML_QuickForm_select($i, null, array(), $this->getAttributes()); |
$this->_nbElements++; |
} |
} |
$this->_setOptions(); |
} // end func setSecOptions |
// }}} |
// {{{ _setOptions() |
/** |
* Sets the options for each select element |
* |
* @access private |
* @return void |
*/ |
function _setOptions() |
{ |
$toLoad = ''; |
foreach (array_keys($this->_elements) AS $key) { |
$array = eval("return isset(\$this->_options[{$key}]{$toLoad})? \$this->_options[{$key}]{$toLoad}: null;"); |
if (is_array($array)) { |
$select =& $this->_elements[$key]; |
$select->_options = array(); |
$select->loadArray($array); |
$value = is_array($v = $select->getValue()) ? $v[0] : key($array); |
$toLoad .= '[\'' . str_replace(array('\\', '\''), array('\\\\', '\\\''), $value) . '\']'; |
} |
} |
} // end func _setOptions |
// }}} |
// {{{ setValue() |
/** |
* Sets values for group's elements |
* |
* @param array $value An array of 2 or more values, for the first, |
* the second, the third etc. select |
* |
* @access public |
* @return void |
*/ |
function setValue($value) |
{ |
$this->_nbElements = count($value); |
parent::setValue($value); |
$this->_setOptions(); |
} // end func setValue |
// }}} |
// {{{ _createElements() |
/** |
* Creates all the elements for the group |
* |
* @access private |
* @return void |
*/ |
function _createElements() |
{ |
for ($i = 0; $i < $this->_nbElements; $i++) { |
$this->_elements[] =& new HTML_QuickForm_select($i, null, array(), $this->getAttributes()); |
} |
} // end func _createElements |
// }}} |
// {{{ toHtml() |
function toHtml() |
{ |
$this->_js = ''; |
if (!$this->_flagFrozen) { |
// set the onchange attribute for each element except last |
$keys = array_keys($this->_elements); |
$onChange = array(); |
for ($i = 0; $i < count($keys) - 1; $i++) { |
$select =& $this->_elements[$keys[$i]]; |
$onChange[$i] = $select->getAttribute('onchange'); |
$select->updateAttributes( |
array('onchange' => '_hs_swapOptions(this.form, \'' . $this->_escapeString($this->getName()) . '\', ' . $keys[$i] . ');' . $onChange[$i]) |
); |
} |
// create the js function to call |
if (!defined('HTML_QUICKFORM_HIERSELECT_EXISTS')) { |
$this->_js .= <<<JAVASCRIPT |
function _hs_findOptions(ary, keys) |
{ |
var key = keys.shift(); |
if (!key in ary) { |
return {}; |
} else if (0 == keys.length) { |
return ary[key]; |
} else { |
return _hs_findOptions(ary[key], keys); |
} |
} |
function _hs_findSelect(form, groupName, selectIndex) |
{ |
if (groupName+'['+ selectIndex +']' in form) { |
return form[groupName+'['+ selectIndex +']']; |
} else { |
return form[groupName+'['+ selectIndex +'][]']; |
} |
} |
function _hs_replaceOptions(ctl, optionList) |
{ |
var j = 0; |
ctl.options.length = 0; |
for (i in optionList) { |
ctl.options[j++] = new Option(optionList[i], i, false, false); |
} |
} |
function _hs_setValue(ctl, value) |
{ |
var testValue = {}; |
if (value instanceof Array) { |
for (var i = 0; i < value.length; i++) { |
testValue[value[i]] = true; |
} |
} else { |
testValue[value] = true; |
} |
for (var i = 0; i < ctl.options.length; i++) { |
if (ctl.options[i].value in testValue) { |
ctl.options[i].selected = true; |
} |
} |
} |
function _hs_swapOptions(form, groupName, selectIndex) |
{ |
var hsValue = []; |
for (var i = 0; i <= selectIndex; i++) { |
hsValue[i] = _hs_findSelect(form, groupName, i).value; |
} |
_hs_replaceOptions(_hs_findSelect(form, groupName, selectIndex + 1), |
_hs_findOptions(_hs_options[groupName][selectIndex], hsValue)); |
if (selectIndex + 1 < _hs_options[groupName].length) { |
_hs_swapOptions(form, groupName, selectIndex + 1); |
} |
} |
function _hs_onReset(form, groupNames) |
{ |
for (var i = 0; i < groupNames.length; i++) { |
try { |
for (var j = 0; j <= _hs_options[groupNames[i]].length; j++) { |
_hs_setValue(_hs_findSelect(form, groupNames[i], j), _hs_defaults[groupNames[i]][j]); |
if (j < _hs_options[groupNames[i]].length) { |
_hs_replaceOptions(_hs_findSelect(form, groupNames[i], j + 1), |
_hs_findOptions(_hs_options[groupNames[i]][j], _hs_defaults[groupNames[i]].slice(0, j + 1))); |
} |
} |
} catch (e) { |
if (!(e instanceof TypeError)) { |
throw e; |
} |
} |
} |
} |
function _hs_setupOnReset(form, groupNames) |
{ |
setTimeout(function() { _hs_onReset(form, groupNames); }, 25); |
} |
function _hs_onReload() |
{ |
var ctl; |
for (var i = 0; i < document.forms.length; i++) { |
for (var j in _hs_defaults) { |
if (ctl = _hs_findSelect(document.forms[i], j, 0)) { |
for (var k = 0; k < _hs_defaults[j].length; k++) { |
_hs_setValue(_hs_findSelect(document.forms[i], j, k), _hs_defaults[j][k]); |
} |
} |
} |
} |
if (_hs_prevOnload) { |
_hs_prevOnload(); |
} |
} |
var _hs_prevOnload = null; |
if (window.onload) { |
_hs_prevOnload = window.onload; |
} |
window.onload = _hs_onReload; |
var _hs_options = {}; |
var _hs_defaults = {}; |
JAVASCRIPT; |
define('HTML_QUICKFORM_HIERSELECT_EXISTS', true); |
} |
// option lists |
$jsParts = array(); |
for ($i = 1; $i < $this->_nbElements; $i++) { |
$jsParts[] = $this->_convertArrayToJavascript($this->_options[$i]); |
} |
$this->_js .= "\n_hs_options['" . $this->_escapeString($this->getName()) . "'] = [\n" . |
implode(",\n", $jsParts) . |
"\n];\n"; |
// default value; if we don't actually have any values yet just use |
// the first option (for single selects) or empty array (for multiple) |
$values = array(); |
foreach (array_keys($this->_elements) as $key) { |
if (is_array($v = $this->_elements[$key]->getValue())) { |
$values[] = count($v) > 1? $v: $v[0]; |
} else { |
// XXX: accessing the supposedly private _options array |
$values[] = $this->_elements[$key]->getMultiple() || empty($this->_elements[$key]->_options[0])? |
array(): |
$this->_elements[$key]->_options[0]['attr']['value']; |
} |
} |
$this->_js .= "_hs_defaults['" . $this->_escapeString($this->getName()) . "'] = " . |
$this->_convertArrayToJavascript($values, false) . ";\n"; |
} |
include_once('HTML/QuickForm/Renderer/Default.php'); |
$renderer =& new HTML_QuickForm_Renderer_Default(); |
$renderer->setElementTemplate('{element}'); |
parent::accept($renderer); |
if (!empty($onChange)) { |
$keys = array_keys($this->_elements); |
for ($i = 0; $i < count($keys) - 1; $i++) { |
$this->_elements[$keys[$i]]->updateAttributes(array('onchange' => $onChange[$i])); |
} |
} |
return (empty($this->_js)? '': "<script type=\"text/javascript\">\n//<![CDATA[\n" . $this->_js . "//]]>\n</script>") . |
$renderer->toHtml(); |
} // end func toHtml |
// }}} |
// {{{ accept() |
function accept(&$renderer, $required = false, $error = null) |
{ |
$renderer->renderElement($this, $required, $error); |
} // end func accept |
// }}} |
// {{{ onQuickFormEvent() |
function onQuickFormEvent($event, $arg, &$caller) |
{ |
if ('updateValue' == $event) { |
// we need to call setValue() so that the secondary option |
// matches the main option |
return HTML_QuickForm_element::onQuickFormEvent($event, $arg, $caller); |
} else { |
$ret = parent::onQuickFormEvent($event, $arg, $caller); |
// add onreset handler to form to properly reset hierselect (see bug #2970) |
if ('addElement' == $event) { |
$onReset = $caller->getAttribute('onreset'); |
if (strlen($onReset)) { |
if (strpos($onReset, '_hs_setupOnReset')) { |
$caller->updateAttributes(array('onreset' => str_replace('_hs_setupOnReset(this, [', "_hs_setupOnReset(this, ['" . $this->_escapeString($this->getName()) . "', ", $onReset))); |
} else { |
$caller->updateAttributes(array('onreset' => "var temp = function() { {$onReset} } ; if (!temp()) { return false; } ; if (typeof _hs_setupOnReset != 'undefined') { return _hs_setupOnReset(this, ['" . $this->_escapeString($this->getName()) . "']); } ")); |
} |
} else { |
$caller->updateAttributes(array('onreset' => "if (typeof _hs_setupOnReset != 'undefined') { return _hs_setupOnReset(this, ['" . $this->_escapeString($this->getName()) . "']); } ")); |
} |
} |
return $ret; |
} |
} // end func onQuickFormEvent |
// }}} |
// {{{ _convertArrayToJavascript() |
/** |
* Converts PHP array to its Javascript analog |
* |
* @access private |
* @param array PHP array to convert |
* @param bool Generate Javascript object literal (default, works like PHP's associative array) or array literal |
* @return string Javascript representation of the value |
*/ |
function _convertArrayToJavascript($array, $assoc = true) |
{ |
if (!is_array($array)) { |
return $this->_convertScalarToJavascript($array); |
} else { |
$items = array(); |
foreach ($array as $key => $val) { |
$item = $assoc? "'" . $this->_escapeString($key) . "': ": ''; |
if (is_array($val)) { |
$item .= $this->_convertArrayToJavascript($val, $assoc); |
} else { |
$item .= $this->_convertScalarToJavascript($val); |
} |
$items[] = $item; |
} |
} |
$js = implode(', ', $items); |
return $assoc? '{ ' . $js . ' }': '[' . $js . ']'; |
} |
// }}} |
// {{{ _convertScalarToJavascript() |
/** |
* Converts PHP's scalar value to its Javascript analog |
* |
* @access private |
* @param mixed PHP value to convert |
* @return string Javascript representation of the value |
*/ |
function _convertScalarToJavascript($val) |
{ |
if (is_bool($val)) { |
return $val ? 'true' : 'false'; |
} elseif (is_int($val) || is_double($val)) { |
return $val; |
} elseif (is_string($val)) { |
return "'" . $this->_escapeString($val) . "'"; |
} elseif (is_null($val)) { |
return 'null'; |
} else { |
// don't bother |
return '{}'; |
} |
} |
// }}} |
// {{{ _escapeString() |
/** |
* Quotes the string so that it can be used in Javascript string constants |
* |
* @access private |
* @param string |
* @return string |
*/ |
function _escapeString($str) |
{ |
return strtr($str,array( |
"\r" => '\r', |
"\n" => '\n', |
"\t" => '\t', |
"'" => "\\'", |
'"' => '\"', |
'\\' => '\\\\' |
)); |
} |
// }}} |
} // end class HTML_QuickForm_hierselect |
?> |
/branches/v1.0-menes/api/pear/HTML/QuickForm/static.php |
---|
New file |
0,0 → 1,193 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +----------------------------------------------------------------------+ |
// | PHP version 4.0 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2003 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Adam Daniel <adaniel1@eesus.jnj.com> | |
// | Bertrand Mansion <bmansion@mamasam.com> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: static.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $ |
require_once("HTML/QuickForm/element.php"); |
/** |
* HTML class for static data |
* |
* @author Wojciech Gdela <eltehaem@poczta.onet.pl> |
* @access public |
*/ |
class HTML_QuickForm_static extends HTML_QuickForm_element { |
// {{{ properties |
/** |
* Display text |
* @var string |
* @access private |
*/ |
var $_text = null; |
// }}} |
// {{{ constructor |
/** |
* Class constructor |
* |
* @param string $elementLabel (optional)Label |
* @param string $text (optional)Display text |
* @access public |
* @return void |
*/ |
function HTML_QuickForm_static($elementName=null, $elementLabel=null, $text=null) |
{ |
HTML_QuickForm_element::HTML_QuickForm_element($elementName, $elementLabel); |
$this->_persistantFreeze = false; |
$this->_type = 'static'; |
$this->_text = $text; |
} //end constructor |
// }}} |
// {{{ setName() |
/** |
* Sets the element name |
* |
* @param string $name Element name |
* @access public |
* @return void |
*/ |
function setName($name) |
{ |
$this->updateAttributes(array('name'=>$name)); |
} //end func setName |
// }}} |
// {{{ getName() |
/** |
* Returns the element name |
* |
* @access public |
* @return string |
*/ |
function getName() |
{ |
return $this->getAttribute('name'); |
} //end func getName |
// }}} |
// {{{ setText() |
/** |
* Sets the text |
* |
* @param string $text |
* @access public |
* @return void |
*/ |
function setText($text) |
{ |
$this->_text = $text; |
} // end func setText |
// }}} |
// {{{ setValue() |
/** |
* Sets the text (uses the standard setValue call to emulate a form element. |
* |
* @param string $text |
* @access public |
* @return void |
*/ |
function setValue($text) |
{ |
$this->setText($text); |
} // end func setValue |
// }}} |
// {{{ toHtml() |
/** |
* Returns the static text element in HTML |
* |
* @access public |
* @return string |
*/ |
function toHtml() |
{ |
return $this->_getTabs() . $this->_text; |
} //end func toHtml |
// }}} |
// {{{ getFrozenHtml() |
/** |
* Returns the value of field without HTML tags |
* |
* @access public |
* @return string |
*/ |
function getFrozenHtml() |
{ |
return $this->toHtml(); |
} //end func getFrozenHtml |
// }}} |
// {{{ onQuickFormEvent() |
/** |
* Called by HTML_QuickForm whenever form event is made on this element |
* |
* @param string $event Name of event |
* @param mixed $arg event arguments |
* @param object $caller calling object |
* @since 1.0 |
* @access public |
* @return void |
* @throws |
*/ |
function onQuickFormEvent($event, $arg, &$caller) |
{ |
switch ($event) { |
case 'updateValue': |
// do NOT use submitted values for static elements |
$value = $this->_findValue($caller->_constantValues); |
if (null === $value) { |
$value = $this->_findValue($caller->_defaultValues); |
} |
if (null !== $value) { |
$this->setValue($value); |
} |
break; |
default: |
parent::onQuickFormEvent($event, $arg, $caller); |
} |
return true; |
} // end func onQuickFormEvent |
// }}} |
// {{{ exportValue() |
/** |
* We override this here because we don't want any values from static elements |
*/ |
function exportValue(&$submitValues, $assoc = false) |
{ |
return null; |
} |
// }}} |
} //end class HTML_QuickForm_static |
?> |
/branches/v1.0-menes/api/pear/HTML/QuickForm/header.php |
---|
New file |
0,0 → 1,65 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +----------------------------------------------------------------------+ |
// | PHP version 4.0 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2003 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Author: Alexey Borzov <borz_off@cs.msu.su> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: header.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $ |
require_once 'HTML/QuickForm/static.php'; |
/** |
* A pseudo-element used for adding headers to form |
* |
* @author Alexey Borzov <borz_off@cs.msu.su> |
* @access public |
*/ |
class HTML_QuickForm_header extends HTML_QuickForm_static |
{ |
// {{{ constructor |
/** |
* Class constructor |
* |
* @param string $elementName Header name |
* @param string $text Header text |
* @access public |
* @return void |
*/ |
function HTML_QuickForm_header($elementName = null, $text = null) |
{ |
$this->HTML_QuickForm_static($elementName, null, $text); |
$this->_type = 'header'; |
} |
// }}} |
// {{{ accept() |
/** |
* Accepts a renderer |
* |
* @param object An HTML_QuickForm_Renderer object |
* @access public |
* @return void |
*/ |
function accept(&$renderer) |
{ |
$renderer->renderHeader($this); |
} // end func accept |
// }}} |
} //end class HTML_QuickForm_header |
?> |
/branches/v1.0-menes/api/pear/HTML/QuickForm.php |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/pear/HTML/QuickForm.php |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/pear/HTML/Template/IT.php |
---|
New file |
0,0 → 1,990 |
<?php |
// |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2005 Ulf Wendel, Pierre-Alain Joye | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to the New BSD license, That is bundled | |
// | with this package in the file LICENSE, and is available through | |
// | the world-wide-web at | |
// | http://www.opensource.org/licenses/bsd-license.php | |
// | If you did not receive a copy of the new BSDlicense and are unable | |
// | to obtain it through the world-wide-web, please send a note to | |
// | pajoye@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Author: Ulf Wendel <ulf.wendel@phpdoc.de> | |
// | Pierre-Alain Joye <pajoye@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id$ |
// |
require_once 'PEAR.php'; |
define('IT_OK', 1); |
define('IT_ERROR', -1); |
define('IT_TPL_NOT_FOUND', -2); |
define('IT_BLOCK_NOT_FOUND', -3); |
define('IT_BLOCK_DUPLICATE', -4); |
define('IT_UNKNOWN_OPTION', -6); |
/** |
* Integrated Template - IT |
* |
* Well there's not much to say about it. I needed a template class that |
* supports a single template file with multiple (nested) blocks inside and |
* a simple block API. |
* |
* The Isotemplate API is somewhat tricky for a beginner although it is the best |
* one you can build. template::parse() [phplib template = Isotemplate] requests |
* you to name a source and a target where the current block gets parsed into. |
* Source and target can be block names or even handler names. This API gives you |
* a maximum of fexibility but you always have to know what you do which is |
* quite unusual for php skripter like me. |
* |
* I noticed that I do not any control on which block gets parsed into which one. |
* If all blocks are within one file, the script knows how they are nested and in |
* which way you have to parse them. IT knows that inner1 is a child of block2, there's |
* no need to tell him about this. |
* |
* <table border> |
* <tr> |
* <td colspan=2> |
* __global__ |
* <p> |
* (hidden and automatically added) |
* </td> |
* </tr> |
* <tr> |
* <td>block1</td> |
* <td> |
* <table border> |
* <tr> |
* <td colspan=2>block2</td> |
* </tr> |
* <tr> |
* <td>inner1</td> |
* <td>inner2</td> |
* </tr> |
* </table> |
* </td> |
* </tr> |
* </table> |
* |
* To add content to block1 you simply type: |
* <code>$tpl->setCurrentBlock("block1");</code> |
* and repeat this as often as needed: |
* <code> |
* $tpl->setVariable(...); |
* $tpl->parseCurrentBlock(); |
* </code> |
* |
* To add content to block2 you would type something like: |
* <code> |
* $tpl->setCurrentBlock("inner1"); |
* $tpl->setVariable(...); |
* $tpl->parseCurrentBlock(); |
* |
* $tpl->setVariable(...); |
* $tpl->parseCurrentBlock(); |
* |
* $tpl->parse("block1"); |
* </code> |
* |
* This will result in one repition of block1 which contains two repitions |
* of inner1. inner2 will be removed if $removeEmptyBlock is set to true which is the default. |
* |
* Usage: |
* <code> |
* $tpl = new HTML_Template_IT( [string filerootdir] ); |
* |
* // load a template or set it with setTemplate() |
* $tpl->loadTemplatefile( string filename [, boolean removeUnknownVariables, boolean removeEmptyBlocks] ) |
* |
* // set "global" Variables meaning variables not beeing within a (inner) block |
* $tpl->setVariable( string variablename, mixed value ); |
* |
* // like with the Isotemplates there's a second way to use setVariable() |
* $tpl->setVariable( array ( string varname => mixed value ) ); |
* |
* // Let's use any block, even a deeply nested one |
* $tpl->setCurrentBlock( string blockname ); |
* |
* // repeat this as often as you need it. |
* $tpl->setVariable( array ( string varname => mixed value ) ); |
* $tpl->parseCurrentBlock(); |
* |
* // get the parsed template or print it: $tpl->show() |
* $tpl->get(); |
* </code> |
* |
* @author Ulf Wendel <uw@netuse.de> |
* @version $Id$ |
* @access public |
* @package HTML_Template_IT |
*/ |
class HTML_Template_IT |
{ |
/** |
* Contains the error objects |
* @var array |
* @access public |
* @see halt(), $printError, $haltOnError |
*/ |
var $err = array(); |
/** |
* Clear cache on get()? |
* @var boolean |
*/ |
var $clearCache = false; |
/** |
* First character of a variable placeholder ( _{_VARIABLE} ). |
* @var string |
* @access public |
* @see $closingDelimiter, $blocknameRegExp, $variablenameRegExp |
*/ |
var $openingDelimiter = '{'; |
/** |
* Last character of a variable placeholder ( {VARIABLE_}_ ). |
* @var string |
* @access public |
* @see $openingDelimiter, $blocknameRegExp, $variablenameRegExp |
*/ |
var $closingDelimiter = '}'; |
/** |
* RegExp matching a block in the template. |
* Per default "sm" is used as the regexp modifier, "i" is missing. |
* That means a case sensitive search is done. |
* @var string |
* @access public |
* @see $variablenameRegExp, $openingDelimiter, $closingDelimiter |
*/ |
var $blocknameRegExp = '[0-9A-Za-z_-]+'; |
/** |
* RegExp matching a variable placeholder in the template. |
* Per default "sm" is used as the regexp modifier, "i" is missing. |
* That means a case sensitive search is done. |
* @var string |
* @access public |
* @see $blocknameRegExp, $openingDelimiter, $closingDelimiter |
*/ |
var $variablenameRegExp = '[0-9A-Za-z_-]+'; |
/** |
* RegExp used to find variable placeholder, filled by the constructor. |
* @var string Looks somewhat like @(delimiter varname delimiter)@ |
* @access public |
* @see IntegratedTemplate() |
*/ |
var $variablesRegExp = ''; |
/** |
* RegExp used to strip unused variable placeholder. |
* @brother $variablesRegExp |
*/ |
var $removeVariablesRegExp = ''; |
/** |
* Controls the handling of unknown variables, default is remove. |
* @var boolean |
* @access public |
*/ |
var $removeUnknownVariables = true; |
/** |
* Controls the handling of empty blocks, default is remove. |
* @var boolean |
* @access public |
*/ |
var $removeEmptyBlocks = true; |
/** |
* RegExp used to find blocks an their content, filled by the constructor. |
* @var string |
* @see IntegratedTemplate() |
*/ |
var $blockRegExp = ''; |
/** |
* Name of the current block. |
* @var string |
*/ |
var $currentBlock = '__global__'; |
/** |
* Content of the template. |
* @var string |
*/ |
var $template = ''; |
/** |
* Array of all blocks and their content. |
* |
* @var array |
* @see findBlocks() |
*/ |
var $blocklist = array(); |
/** |
* Array with the parsed content of a block. |
* |
* @var array |
*/ |
var $blockdata = array(); |
/** |
* Array of variables in a block. |
* @var array |
*/ |
var $blockvariables = array(); |
/** |
* Array of inner blocks of a block. |
* @var array |
*/ |
var $blockinner = array(); |
/** |
* List of blocks to preverse even if they are "empty". |
* |
* This is something special. Sometimes you have blocks that |
* should be preserved although they are empty (no placeholder replaced). |
* Think of a shopping basket. If it's empty you have to drop a message to |
* the user. If it's filled you have to show the contents of |
* the shopping baseket. Now where do you place the message that the basket |
* is empty? It's no good idea to place it in you applications as customers |
* tend to like unecessary minor text changes. Having another template file |
* for an empty basket means that it's very likely that one fine day |
* the filled and empty basket templates have different layout. I decided |
* to introduce blocks that to not contain any placeholder but only |
* text such as the message "Your shopping basked is empty". |
* |
* Now if there is no replacement done in such a block the block will |
* be recognized as "empty" and by default ($removeEmptyBlocks = true) be |
* stripped off. To avoid thisyou can now call touchBlock() to avoid this. |
* |
* The array $touchedBlocks stores a list of touched block which must not |
* be removed even if they are empty. |
* |
* @var array $touchedBlocks |
* @see touchBlock(), $removeEmptyBlocks |
*/ |
var $touchedBlocks = array(); |
/** |
* List of blocks which should not be shown even if not "empty" |
* @var array $_hiddenBlocks |
* @see hideBlock(), $removeEmptyBlocks |
*/ |
var $_hiddenBlocks = array(); |
/** |
* Variable cache. |
* |
* Variables get cached before any replacement is done. |
* Advantage: empty blocks can be removed automatically. |
* Disadvantage: might take some more memory |
* |
* @var array |
* @see setVariable(), $clearCacheOnParse |
*/ |
var $variableCache = array(); |
/** |
* Clear the variable cache on parse? |
* |
* If you're not an expert just leave the default false. |
* True reduces memory consumption somewhat if you tend to |
* add lots of values for unknown placeholder. |
* |
* @var boolean |
*/ |
var $clearCacheOnParse = false; |
/** |
* Root directory for all file operations. |
* The string gets prefixed to all filenames given. |
* @var string |
* @see HTML_Template_IT(), setRoot() |
*/ |
var $fileRoot = ''; |
/** |
* Internal flag indicating that a blockname was used multiple times. |
* @var boolean |
*/ |
var $flagBlocktrouble = false; |
/** |
* Flag indicating that the global block was parsed. |
* @var boolean |
*/ |
var $flagGlobalParsed = false; |
/** |
* EXPERIMENTAL! FIXME! |
* Flag indication that a template gets cached. |
* |
* Complex templates require some times to be preparsed |
* before the replacement can take place. Often I use |
* one template file over and over again but I don't know |
* before that I will use the same template file again. |
* Now IT could notice this and skip the preparse. |
* |
* @var boolean |
*/ |
var $flagCacheTemplatefile = true; |
/** |
* EXPERIMENTAL! FIXME! |
*/ |
var $lastTemplatefile = ''; |
/** |
* $_options['preserve_data'] Whether to substitute variables and remove |
* empty placeholders in data passed through setVariable |
* (see also bugs #20199, #21951). |
* $_options['use_preg'] Whether to use preg_replace instead of |
* str_replace in parse() |
* (this is a backwards compatibility feature, see also bugs #21951, #20392) |
*/ |
var $_options = array( |
'preserve_data' => false, |
'use_preg' => true |
); |
/** |
* Builds some complex regular expressions and optinally sets the |
* file root directory. |
* |
* Make sure that you call this constructor if you derive your template |
* class from this one. |
* |
* @param string File root directory, prefix for all filenames |
* given to the object. |
* @see setRoot() |
*/ |
function HTML_Template_IT($root = '', $options = null) |
{ |
if (!is_null($options)) { |
$this->setOptions($options); |
} |
$this->variablesRegExp = '@' . $this->openingDelimiter . |
'(' . $this->variablenameRegExp . ')' . |
$this->closingDelimiter . '@sm'; |
$this->removeVariablesRegExp = '@' . $this->openingDelimiter . |
"\s*(" . $this->variablenameRegExp . |
")\s*" . $this->closingDelimiter .'@sm'; |
$this->blockRegExp = '@<!--\s+BEGIN\s+(' . $this->blocknameRegExp . |
')\s+-->(.*)<!--\s+END\s+\1\s+-->@sm'; |
$this->setRoot($root); |
} // end constructor |
/** |
* Sets the option for the template class |
* |
* @access public |
* @param string option name |
* @param mixed option value |
* @return mixed IT_OK on success, error object on failure |
*/ |
function setOption($option, $value) |
{ |
if (array_key_exists($option, $this->_options)) { |
$this->_options[$option] = $value; |
return IT_OK; |
} |
return PEAR::raiseError( |
$this->errorMessage(IT_UNKNOWN_OPTION) . ": '{$option}'", |
IT_UNKNOWN_OPTION |
); |
} |
/** |
* Sets the options for the template class |
* |
* @access public |
* @param string options array of options |
* default value: |
* 'preserve_data' => false, |
* 'use_preg' => true |
* @param mixed option value |
* @return mixed IT_OK on success, error object on failure |
* @see $options |
*/ |
function setOptions($options) |
{ |
if (is_array($options)) { |
foreach ($options as $option => $value) { |
$error = $this->setOption($option, $value); |
if (PEAR::isError($error)) { |
return $error; |
} |
} |
} |
return IT_OK; |
} |
/** |
* Print a certain block with all replacements done. |
* @brother get() |
*/ |
function show($block = '__global__') |
{ |
print $this->get($block); |
} // end func show |
/** |
* Returns a block with all replacements done. |
* |
* @param string name of the block |
* @return string |
* @throws PEAR_Error |
* @access public |
* @see show() |
*/ |
function get($block = '__global__') |
{ |
if ($block == '__global__' && !$this->flagGlobalParsed) { |
$this->parse('__global__'); |
} |
if (!isset($this->blocklist[$block])) { |
$this->err[] = PEAR::raiseError( |
$this->errorMessage(IT_BLOCK_NOT_FOUND) . |
'"' . $block . "'", |
IT_BLOCK_NOT_FOUND |
); |
return ''; |
} |
if (isset($this->blockdata[$block])) { |
$ret = $this->blockdata[$block]; |
if ($this->clearCache) { |
unset($this->blockdata[$block]); |
} |
if ($this->_options['preserve_data']) { |
$ret = str_replace( |
$this->openingDelimiter . |
'%preserved%' . $this->closingDelimiter, |
$this->openingDelimiter, |
$ret |
); |
} |
return $ret; |
} |
return ''; |
} // end func get() |
/** |
* Parses the given block. |
* |
* @param string name of the block to be parsed |
* @access public |
* @see parseCurrentBlock() |
* @throws PEAR_Error |
*/ |
function parse($block = '__global__', $flag_recursion = false) |
{ |
static $regs, $values; |
if (!isset($this->blocklist[$block])) { |
return PEAR::raiseError( |
$this->errorMessage( IT_BLOCK_NOT_FOUND ) . '"' . $block . "'", |
IT_BLOCK_NOT_FOUND |
); |
} |
if ($block == '__global__') { |
$this->flagGlobalParsed = true; |
} |
if (!$flag_recursion) { |
$regs = array(); |
$values = array(); |
} |
$outer = $this->blocklist[$block]; |
$empty = true; |
if ($this->clearCacheOnParse) { |
foreach ($this->variableCache as $name => $value) { |
$regs[] = $this->openingDelimiter . |
$name . $this->closingDelimiter; |
$values[] = $value; |
$empty = false; |
} |
$this->variableCache = array(); |
} else { |
foreach ($this->blockvariables[$block] as $allowedvar => $v) { |
if (isset($this->variableCache[$allowedvar])) { |
$regs[] = $this->openingDelimiter . |
$allowedvar . $this->closingDelimiter; |
$values[] = $this->variableCache[$allowedvar]; |
unset($this->variableCache[$allowedvar]); |
$empty = false; |
} |
} |
} |
if (isset($this->blockinner[$block])) { |
foreach ($this->blockinner[$block] as $k => $innerblock) { |
$this->parse($innerblock, true); |
if ($this->blockdata[$innerblock] != '') { |
$empty = false; |
} |
$placeholder = $this->openingDelimiter . "__" . |
$innerblock . "__" . $this->closingDelimiter; |
$outer = str_replace( |
$placeholder, |
$this->blockdata[$innerblock], $outer |
); |
$this->blockdata[$innerblock] = ""; |
} |
} |
if (!$flag_recursion && 0 != count($values)) { |
if ($this->_options['use_preg']) { |
$regs = array_map(array( |
&$this, '_addPregDelimiters'), |
$regs |
); |
$funcReplace = 'preg_replace'; |
} else { |
$funcReplace = 'str_replace'; |
} |
if ($this->_options['preserve_data']) { |
$values = array_map( |
array(&$this, '_preserveOpeningDelimiter'), $values |
); |
} |
$outer = $funcReplace($regs, $values, $outer); |
if ($this->removeUnknownVariables) { |
$outer = preg_replace($this->removeVariablesRegExp, "", $outer); |
} |
} |
if ($empty) { |
if (!$this->removeEmptyBlocks) { |
$this->blockdata[$block ].= $outer; |
} else { |
if (isset($this->touchedBlocks[$block])) { |
$this->blockdata[$block] .= $outer; |
unset($this->touchedBlocks[$block]); |
} |
} |
} else { |
$this->blockdata[$block] .= $outer; |
} |
return $empty; |
} // end func parse |
/** |
* Parses the current block |
* @see parse(), setCurrentBlock(), $currentBlock |
* @access public |
*/ |
function parseCurrentBlock() |
{ |
return $this->parse($this->currentBlock); |
} // end func parseCurrentBlock |
/** |
* Sets a variable value. |
* |
* The function can be used eighter like setVariable( "varname", "value") |
* or with one array $variables["varname"] = "value" |
* given setVariable($variables) quite like phplib templates set_var(). |
* |
* @param mixed string with the variable name or an array |
* %variables["varname"] = "value" |
* @param string value of the variable or empty if $variable |
* is an array. |
* @param string prefix for variable names |
* @access public |
*/ |
function setVariable($variable, $value = '') |
{ |
if (is_array($variable)) { |
$this->variableCache = array_merge( |
$this->variableCache, $variable |
); |
} else { |
$this->variableCache[$variable] = $value; |
} |
} // end func setVariable |
/** |
* Sets the name of the current block that is the block where variables |
* are added. |
* |
* @param string name of the block |
* @return boolean false on failure, otherwise true |
* @throws PEAR_Error |
* @access public |
*/ |
function setCurrentBlock($block = '__global__') |
{ |
if (!isset($this->blocklist[$block])) { |
return PEAR::raiseError( |
$this->errorMessage( IT_BLOCK_NOT_FOUND ) . |
'"' . $block . "'", IT_BLOCK_NOT_FOUND |
); |
} |
$this->currentBlock = $block; |
return true; |
} // end func setCurrentBlock |
/** |
* Preserves an empty block even if removeEmptyBlocks is true. |
* |
* @param string name of the block |
* @return boolean false on false, otherwise true |
* @throws PEAR_Error |
* @access public |
* @see $removeEmptyBlocks |
*/ |
function touchBlock($block) |
{ |
if (!isset($this->blocklist[$block])) { |
return PEAR::raiseError( |
$this->errorMessage(IT_BLOCK_NOT_FOUND) . |
'"' . $block . "'", IT_BLOCK_NOT_FOUND); |
} |
$this->touchedBlocks[$block] = true; |
return true; |
} // end func touchBlock |
/** |
* Clears all datafields of the object and rebuild the internal blocklist |
* |
* LoadTemplatefile() and setTemplate() automatically call this function |
* when a new template is given. Don't use this function |
* unless you know what you're doing. |
* |
* @access public |
* @see free() |
*/ |
function init() |
{ |
$this->free(); |
$this->findBlocks($this->template); |
// we don't need it any more |
$this->template = ''; |
$this->buildBlockvariablelist(); |
} // end func init |
/** |
* Clears all datafields of the object. |
* |
* Don't use this function unless you know what you're doing. |
* |
* @access public |
* @see init() |
*/ |
function free() |
{ |
$this->err = array(); |
$this->currentBlock = '__global__'; |
$this->variableCache = array(); |
$this->blocklookup = array(); |
$this->touchedBlocks = array(); |
$this->flagBlocktrouble = false; |
$this->flagGlobalParsed = false; |
} // end func free |
/** |
* Sets the template. |
* |
* You can eighter load a template file from disk with |
* LoadTemplatefile() or set the template manually using this function. |
* |
* @param string template content |
* @param boolean remove unknown/unused variables? |
* @param boolean remove empty blocks? |
* @see LoadTemplatefile(), $template |
* @access public |
*/ |
function setTemplate( $template, $removeUnknownVariables = true, |
$removeEmptyBlocks = true) |
{ |
$this->removeUnknownVariables = $removeUnknownVariables; |
$this->removeEmptyBlocks = $removeEmptyBlocks; |
if ($template == '' && $this->flagCacheTemplatefile) { |
$this->variableCache = array(); |
$this->blockdata = array(); |
$this->touchedBlocks = array(); |
$this->currentBlock = '__global__'; |
} else { |
$this->template = '<!-- BEGIN __global__ -->' . $template . |
'<!-- END __global__ -->'; |
$this->init(); |
} |
if ($this->flagBlocktrouble) { |
return false; |
} |
return true; |
} // end func setTemplate |
/** |
* Reads a template file from the disk. |
* |
* @param string name of the template file |
* @param bool how to handle unknown variables. |
* @param bool how to handle empty blocks. |
* @access public |
* @return boolean false on failure, otherwise true |
* @see $template, setTemplate(), $removeUnknownVariables, |
* $removeEmptyBlocks |
*/ |
function loadTemplatefile( $filename, |
$removeUnknownVariables = true, |
$removeEmptyBlocks = true ) |
{ |
$template = ''; |
if (!$this->flagCacheTemplatefile || |
$this->lastTemplatefile != $filename |
) { |
$template = $this->getFile($filename); |
} |
$this->lastTemplatefile = $filename; |
return $template != '' ? |
$this->setTemplate( |
$template,$removeUnknownVariables, $removeEmptyBlocks |
) : false; |
} // end func LoadTemplatefile |
/** |
* Sets the file root. The file root gets prefixed to all filenames passed |
* to the object. |
* |
* Make sure that you override this function when using the class |
* on windows. |
* |
* @param string |
* @see IntegratedTemplate() |
* @access public |
*/ |
function setRoot($root) |
{ |
if ($root != '' && substr($root, -1) != '/') { |
$root .= '/'; |
} |
$this->fileRoot = $root; |
} // end func setRoot |
/** |
* Build a list of all variables within of a block |
*/ |
function buildBlockvariablelist() |
{ |
foreach ($this->blocklist as $name => $content) { |
preg_match_all($this->variablesRegExp, $content, $regs); |
if (count($regs[1]) != 0) { |
foreach ($regs[1] as $k => $var) { |
$this->blockvariables[$name][$var] = true; |
} |
} else { |
$this->blockvariables[$name] = array(); |
} |
} |
} // end func buildBlockvariablelist |
/** |
* Returns a list of all global variables |
*/ |
function getGlobalvariables() |
{ |
$regs = array(); |
$values = array(); |
foreach ($this->blockvariables['__global__'] as $allowedvar => $v) { |
if (isset($this->variableCache[$allowedvar])) { |
$regs[] = '@' . $this->openingDelimiter . |
$allowedvar . $this->closingDelimiter . '@'; |
$values[] = $this->variableCache[$allowedvar]; |
unset($this->variableCache[$allowedvar]); |
} |
} |
return array($regs, $values); |
} // end func getGlobalvariables |
/** |
* Recusively builds a list of all blocks within the template. |
* |
* @param string string that gets scanned |
* @see $blocklist |
*/ |
function findBlocks($string) |
{ |
$blocklist = array(); |
if (preg_match_all($this->blockRegExp, $string, $regs, PREG_SET_ORDER)) { |
foreach ($regs as $k => $match) { |
$blockname = $match[1]; |
$blockcontent = $match[2]; |
if (isset($this->blocklist[$blockname])) { |
$this->err[] = PEAR::raiseError( |
$this->errorMessage( |
IT_BLOCK_DUPLICATE, $blockname), |
IT_BLOCK_DUPLICATE |
); |
$this->flagBlocktrouble = true; |
} |
$this->blocklist[$blockname] = $blockcontent; |
$this->blockdata[$blockname] = ""; |
$blocklist[] = $blockname; |
$inner = $this->findBlocks($blockcontent); |
foreach ($inner as $k => $name) { |
$pattern = sprintf( |
'@<!--\s+BEGIN\s+%s\s+-->(.*)<!--\s+END\s+%s\s+-->@sm', |
$name, |
$name |
); |
$this->blocklist[$blockname] = preg_replace( |
$pattern, |
$this->openingDelimiter . |
'__' . $name . '__' . |
$this->closingDelimiter, |
$this->blocklist[$blockname] |
); |
$this->blockinner[$blockname][] = $name; |
$this->blockparents[$name] = $blockname; |
} |
} |
} |
return $blocklist; |
} // end func findBlocks |
/** |
* Reads a file from disk and returns its content. |
* @param string Filename |
* @return string Filecontent |
*/ |
function getFile($filename) |
{ |
if ($filename{0} == '/' && substr($this->fileRoot, -1) == '/') { |
$filename = substr($filename, 1); |
} |
$filename = $this->fileRoot . $filename; |
if (!($fh = @fopen($filename, 'r'))) { |
$this->err[] = PEAR::raiseError( |
$this->errorMessage(IT_TPL_NOT_FOUND) . |
': "' .$filename .'"', |
IT_TPL_NOT_FOUND |
); |
return ""; |
} |
$content = fread($fh, filesize($filename)); |
fclose($fh); |
return preg_replace( |
"#<!-- INCLUDE (.*) -->#ime", "\$this->getFile('\\1')", $content |
); |
} // end func getFile |
/** |
* Adds delimiters to a string, so it can be used as a pattern |
* in preg_* functions |
* |
* @param string |
* @return string |
*/ |
function _addPregDelimiters($str) |
{ |
return '@' . $str . '@'; |
} |
/** |
* Replaces an opening delimiter by a special string |
* |
* @param string |
* @return string |
*/ |
function _preserveOpeningDelimiter($str) |
{ |
return (false === strpos($str, $this->openingDelimiter))? |
$str: |
str_replace( |
$this->openingDelimiter, |
$this->openingDelimiter . |
'%preserved%' . $this->closingDelimiter, |
$str |
); |
} |
/** |
* Return a textual error message for a IT error code |
* |
* @param integer $value error code |
* |
* @return string error message, or false if the error code was |
* not recognized |
*/ |
function errorMessage($value, $blockname = '') |
{ |
static $errorMessages; |
if (!isset($errorMessages)) { |
$errorMessages = array( |
IT_OK => '', |
IT_ERROR => 'unknown error', |
IT_TPL_NOT_FOUND => 'Cannot read the template file', |
IT_BLOCK_NOT_FOUND => 'Cannot find this block', |
IT_BLOCK_DUPLICATE => 'The name of a block must be'. |
' uniquewithin a template.'. |
' Found "' . $blockname . '" twice.'. |
'Unpredictable results '. |
'may appear.', |
IT_UNKNOWN_OPTION => 'Unknown option' |
); |
} |
if (PEAR::isError($value)) { |
$value = $value->getCode(); |
} |
return isset($errorMessages[$value]) ? |
$errorMessages[$value] : $errorMessages[IT_ERROR]; |
} |
} // end class IntegratedTemplate |
?> |
/branches/v1.0-menes/api/pear/HTML/Template/ITX.php |
---|
New file |
0,0 → 1,809 |
<?php |
// |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2005 Ulf Wendel, Pierre-Alain Joye | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to the New BSD license, That is bundled | |
// | with this package in the file LICENSE, and is available through | |
// | the world-wide-web at | |
// | http://www.opensource.org/licenses/bsd-license.php | |
// | If you did not receive a copy of the new BSD license and are unable | |
// | to obtain it through the world-wide-web, please send a note to | |
// | pajoye@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Author: Ulf Wendel <ulf.wendel@phpdoc.de> | |
// | Pierre-Alain Joye <pajoye@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id$ |
// |
require_once 'HTML/Template/IT.php'; |
require_once 'HTML/Template/IT_Error.php'; |
/** |
* Integrated Template Extension - ITX |
* |
* With this class you get the full power of the phplib template class. |
* You may have one file with blocks in it but you have as well one main file |
* and multiple files one for each block. This is quite usefull when you have |
* user configurable websites. Using blocks not in the main template allows |
* you to modify some parts of your layout easily. |
* |
* Note that you can replace an existing block and add new blocks at runtime. |
* Adding new blocks means changing a variable placeholder to a block. |
* |
* @author Ulf Wendel <uw@netuse.de> |
* @access public |
* @version $Id$ |
* @package IT[X] |
*/ |
class HTML_Template_ITX extends HTML_Template_IT |
{ |
/** |
* Array with all warnings. |
* @var array |
* @access public |
* @see $printWarning, $haltOnWarning, warning() |
*/ |
var $warn = array(); |
/** |
* Print warnings? |
* @var array |
* @access public |
* @see $haltOnWarning, $warn, warning() |
*/ |
var $printWarning = false; |
/** |
* Call die() on warning? |
* @var boolean |
* @access public |
* @see $warn, $printWarning, warning() |
*/ |
var $haltOnWarning = false; |
/** |
* RegExp used to test for a valid blockname. |
* @var string |
*/ |
var $checkblocknameRegExp = ''; |
/** |
* Functionnameprefix used when searching function calls in the template. |
* @var string |
*/ |
var $functionPrefix = 'func_'; |
/** |
* Functionname RegExp. |
* @var string |
*/ |
var $functionnameRegExp = '[_a-zA-Z]+[A-Za-z_0-9]*'; |
/** |
* RegExp used to grep function calls in the template. |
* |
* The variable gets set by the constructor. |
* |
* @var string |
* @see HTML_Template_IT() |
*/ |
var $functionRegExp = ''; |
/** |
* List of functions found in the template. |
* |
* @var array |
*/ |
var $functions = array(); |
/** |
* List of callback functions specified by the user. |
* |
* @var array |
*/ |
var $callback = array(); |
/** |
* Builds some complex regexps and calls the constructor |
* of the parent class. |
* |
* Make sure that you call this constructor if you derive your own |
* template class from this one. |
* |
* @see HTML_Template_IT() |
*/ |
function HTML_Template_ITX($root = '') |
{ |
$this->checkblocknameRegExp = '@' . $this->blocknameRegExp . '@'; |
$this->functionRegExp = '@' . $this->functionPrefix . '(' . |
$this->functionnameRegExp . ')\s*\(@sm'; |
$this->HTML_Template_IT($root); |
} // end func constructor |
function init() |
{ |
$this->free(); |
$this->buildFunctionlist(); |
$this->findBlocks($this->template); |
// we don't need it any more |
$this->template = ''; |
$this->buildBlockvariablelist(); |
} // end func init |
/** |
* Replaces an existing block with new content. |
* |
* This function will replace a block of the template and all blocks |
* contained in the replaced block and add a new block insted, means |
* you can dynamically change your template. |
* |
* Note that changing the template structure violates one of the IT[X] |
* development goals. I've tried to write a simple to use template engine |
* supporting blocks. In contrast to other systems IT[X] analyses the way |
* you've nested blocks and knows which block belongs into another block. |
* The nesting information helps to make the API short and simple. Replacing |
* blocks does not only mean that IT[X] has to update the nesting |
* information (relatively time consumpting task) but you have to make sure |
* that you do not get confused due to the template change itself. |
* |
* @param string Blockname |
* @param string Blockcontent |
* @param boolean true if the new block inherits the content |
* of the old block |
* @return boolean |
* @throws IT_Error |
* @see replaceBlockfile(), addBlock(), addBlockfile() |
* @access public |
*/ |
function replaceBlock($block, $template, $keep_content = false) |
{ |
if (!isset($this->blocklist[$block])) { |
return new IT_Error( |
"The block "."'$block'". |
" does not exist in the template and thus it can't be replaced.", |
__FILE__, __LINE__ |
); |
} |
if ($template == '') { |
return new IT_Error('No block content given.', __FILE__, __LINE__); |
} |
if ($keep_content) { |
$blockdata = $this->blockdata[$block]; |
} |
// remove all kinds of links to the block / data of the block |
$this->removeBlockData($block); |
$template = "<!-- BEGIN $block -->" . $template . "<!-- END $block -->"; |
$parents = $this->blockparents[$block]; |
$this->findBlocks($template); |
$this->blockparents[$block] = $parents; |
// KLUDGE: rebuild the list for all block - could be done faster |
$this->buildBlockvariablelist(); |
if ($keep_content) { |
$this->blockdata[$block] = $blockdata; |
} |
// old TODO - I'm not sure if we need this |
// update caches |
return true; |
} // end func replaceBlock |
/** |
* Replaces an existing block with new content from a file. |
* |
* @brother replaceBlock() |
* @param string Blockname |
* @param string Name of the file that contains the blockcontent |
* @param boolean true if the new block inherits the content of the old block |
*/ |
function replaceBlockfile($block, $filename, $keep_content = false) |
{ |
return $this->replaceBlock($block, $this->getFile($filename), $keep_content); |
} // end func replaceBlockfile |
/** |
* Adds a block to the template changing a variable placeholder |
* to a block placeholder. |
* |
* Add means "replace a variable placeholder by a new block". |
* This is different to PHPLibs templates. The function loads a |
* block, creates a handle for it and assigns it to a certain |
* variable placeholder. To to the same with PHPLibs templates you would |
* call set_file() to create the handle and parse() to assign the |
* parsed block to a variable. By this PHPLibs templates assume |
* that you tend to assign a block to more than one one placeholder. |
* To assign a parsed block to more than only the placeholder you specify |
* in this function you have to use a combination of getBlock() |
* and setVariable(). |
* |
* As no updates to cached data is necessary addBlock() and addBlockfile() |
* are rather "cheap" meaning quick operations. |
* |
* The block content must not start with <!-- BEGIN blockname --> |
* and end with <!-- END blockname --> this would cause overhead and |
* produce an error. |
* |
* @param string Name of the variable placeholder, the name must be unique |
* within the template. |
* @param string Name of the block to be added |
* @param string Content of the block |
* @return boolean |
* @throws IT_Error |
* @see addBlockfile() |
* @access public |
*/ |
function addBlock($placeholder, $blockname, $template) |
{ |
// Don't trust any user even if it's a programmer or yourself... |
if ($placeholder == '') { |
return new IT_Error('No variable placeholder given.', |
__FILE__, __LINE__ |
); |
} elseif ($blockname == '' || |
!preg_match($this->checkblocknameRegExp, $blockname) |
) { |
return new IT_Error("No or invalid blockname '$blockname' given.", |
__FILE__, __LINE__ |
); |
} elseif ($template == '') { |
return new IT_Error('No block content given.', __FILE__, __LINE__); |
} elseif (isset($this->blocklist[$blockname])) { |
return new IT_Error('The block already exists.', |
__FILE__, __LINE__ |
); |
} |
// find out where to insert the new block |
$parents = $this->findPlaceholderBlocks($placeholder); |
if (count($parents) == 0) { |
return new IT_Error( |
"The variable placeholder". |
" '$placeholder' was not found in the template.", |
__FILE__, __LINE__ |
); |
} elseif (count($parents) > 1) { |
reset($parents); |
while (list($k, $parent) = each($parents)) { |
$msg .= "$parent, "; |
} |
$msg = substr($parent, -2); |
return new IT_Error("The variable placeholder "."'$placeholder'". |
" must be unique, found in multiple blocks '$msg'.", |
__FILE__, __LINE__ |
); |
} |
$template = "<!-- BEGIN $blockname -->" . $template . "<!-- END $blockname -->"; |
$this->findBlocks($template); |
if ($this->flagBlocktrouble) { |
return false; // findBlocks() already throws an exception |
} |
$this->blockinner[$parents[0]][] = $blockname; |
$this->blocklist[$parents[0]] = preg_replace( |
'@' . $this->openingDelimiter . $placeholder . |
$this->closingDelimiter . '@', |
$this->openingDelimiter . '__' . $blockname . '__' . |
$this->closingDelimiter, |
$this->blocklist[$parents[0]] |
); |
$this->deleteFromBlockvariablelist($parents[0], $placeholder); |
$this->updateBlockvariablelist($blockname); |
/* |
// check if any inner blocks were found |
if(is_array($this->blockinner[$blockname]) and count($this->blockinner[$blockname]) > 0) { |
// loop through inner blocks, registering the variable placeholders in each |
foreach($this->blockinner[$blockname] as $childBlock) { |
$this->updateBlockvariablelist($childBlock); |
} |
} |
*/ |
return true; |
} // end func addBlock |
/** |
* Adds a block taken from a file to the template changing a variable |
* placeholder to a block placeholder. |
* |
* @param string Name of the variable placeholder to be converted |
* @param string Name of the block to be added |
* @param string File that contains the block |
* @brother addBlock() |
*/ |
function addBlockfile($placeholder, $blockname, $filename) |
{ |
return $this->addBlock($placeholder, $blockname, $this->getFile($filename)); |
} // end func addBlockfile |
/** |
* Returns the name of the (first) block that contains |
* the specified placeholder. |
* |
* @param string Name of the placeholder you're searching |
* @param string Name of the block to scan. If left out (default) |
* all blocks are scanned. |
* @return string Name of the (first) block that contains |
* the specified placeholder. |
* If the placeholder was not found or an error occured |
* an empty string is returned. |
* @throws IT_Error |
* @access public |
*/ |
function placeholderExists($placeholder, $block = '') |
{ |
if ($placeholder == '') { |
new IT_Error('No placeholder name given.', __FILE__, __LINE__); |
return ''; |
} |
if ($block != '' && !isset($this->blocklist[$block])) { |
new IT_Error("Unknown block '$block'.", __FILE__, __LINE__); |
return ''; |
} |
// name of the block where the given placeholder was found |
$found = ''; |
if ($block != '') { |
if (is_array($variables = $this->blockvariables[$block])) { |
// search the value in the list of blockvariables |
reset($variables); |
while (list($k, $variable) = each($variables)) { |
if ($k == $placeholder) { |
$found = $block; |
break; |
} |
} |
} |
} else { |
// search all blocks and return the name of the first block that |
// contains the placeholder |
reset($this->blockvariables); |
while (list($blockname, $variables) = each($this->blockvariables)){ |
if (is_array($variables) && isset($variables[$placeholder])) { |
$found = $blockname; |
break; |
} |
} |
} |
return $found; |
} // end func placeholderExists |
/** |
* Checks the list of function calls in the template and |
* calls their callback function. |
* |
* @access public |
*/ |
function performCallback() |
{ |
reset($this->functions); |
while (list($func_id, $function) = each($this->functions)) { |
if (isset($this->callback[$function['name']])) { |
if ($this->callback[$function['name']]['object'] != '') { |
$this->variableCache['__function' . $func_id . '__'] = |
call_user_func( |
array( |
&$GLOBALS[$this->callback[$function['name']]['object']], |
$this->callback[$function['name']]['function']), |
$function['args'] |
); |
} else { |
$this->variableCache['__function' . $func_id . '__'] = |
call_user_func( |
$this->callback[$function['name']]['function'], |
$function['args'] |
); |
} |
} |
} |
} // end func performCallback |
/** |
* Returns a list of all function calls in the current template. |
* |
* @return array |
* @access public |
*/ |
function getFunctioncalls() |
{ |
return $this->functions; |
} // end func getFunctioncalls |
/** |
* Replaces a function call with the given replacement. |
* |
* @param int Function ID |
* @param string Replacement |
* @deprec |
*/ |
function setFunctioncontent($functionID, $replacement) |
{ |
$this->variableCache['__function' . $functionID . '__'] = $replacement; |
} // end func setFunctioncontent |
/** |
* Sets a callback function. |
* |
* IT[X] templates (note the X) can contain simple function calls. |
* "function call" means that the editor of the template can add |
* special placeholder to the template like 'func_h1("embedded in h1")'. |
* IT[X] will grab this function calls and allow you to define a callback |
* function for them. |
* |
* This is an absolutely evil feature. If your application makes heavy |
* use of such callbacks and you're even implementing if-then etc. on |
* the level of a template engine you're reiventing the wheel... - that's |
* actually how PHP came into life. Anyway, sometimes it's handy. |
* |
* Consider also using XML/XSLT or native PHP. And please do not push |
* IT[X] any further into this direction of adding logics to the template |
* engine. |
* |
* For those of you ready for the X in IT[X]: |
* |
* <?php |
* ... |
* function h_one($args) { |
* return sprintf('<h1>%s</h1>', $args[0]); |
* } |
* |
* ... |
* $itx = new HTML_Template_ITX( ... ); |
* ... |
* $itx->setCallbackFunction('h1', 'h_one'); |
* $itx->performCallback(); |
* ?> |
* |
* template: |
* func_h1('H1 Headline'); |
* |
* @param string Function name in the template |
* @param string Name of the callback function |
* @param string Name of the callback object |
* @return boolean False on failure. |
* @throws IT_Error |
* @access public |
*/ |
function |
setCallbackFunction($tplfunction, $callbackfunction, $callbackobject = '') |
{ |
if ($tplfunction == '' || $callbackfunction == '') { |
return new IT_Error( |
"No template function "."('$tplfunction')". |
" and/or no callback function ('$callback') given.", |
__FILE__, __LINE__ |
); |
} |
$this->callback[$tplfunction] = array( |
'function' => $callbackfunction, |
'object' => $callbackobject |
); |
return true; |
} // end func setCallbackFunction |
/** |
* Sets the Callback function lookup table |
* |
* @param array function table |
* array[templatefunction] = |
* array( |
* "function" => userfunction, |
* "object" => userobject |
* ) |
* @access public |
*/ |
function setCallbackFuntiontable($functions) |
{ |
$this->callback = $functions; |
} // end func setCallbackFunctiontable |
/** |
* Recursively removes all data assiciated with a block, including all inner blocks |
* |
* @param string block to be removed |
*/ |
function removeBlockData($block) |
{ |
if (isset($this->blockinner[$block])) { |
foreach ($this->blockinner[$block] as $k => $inner) { |
$this->removeBlockData($inner); |
} |
unset($this->blockinner[$block]); |
} |
unset($this->blocklist[$block]); |
unset($this->blockdata[$block]); |
unset($this->blockvariables[$block]); |
unset($this->touchedBlocks[$block]); |
} // end func removeBlockinner |
/** |
* Returns a list of blocknames in the template. |
* |
* @return array [blockname => blockname] |
* @access public |
* @see blockExists() |
*/ |
function getBlocklist() |
{ |
$blocklist = array(); |
foreach ($this->blocklist as $block => $content) { |
$blocklist[$block] = $block; |
} |
return $blocklist; |
} // end func getBlocklist |
/** |
* Checks wheter a block exists. |
* |
* @param string |
* @return boolean |
* @access public |
* @see getBlocklist() |
*/ |
function blockExists($blockname) |
{ |
return isset($this->blocklist[$blockname]); |
} // end func blockExists |
/** |
* Returns a list of variables of a block. |
* |
* @param string Blockname |
* @return array [varname => varname] |
* @access public |
* @see BlockvariableExists() |
*/ |
function getBlockvariables($block) |
{ |
if (!isset($this->blockvariables[$block])) { |
return array(); |
} |
$variables = array(); |
foreach ($this->blockvariables[$block] as $variable => $v) { |
$variables[$variable] = $variable; |
} |
return $variables; |
} // end func getBlockvariables |
/** |
* Checks wheter a block variable exists. |
* |
* @param string Blockname |
* @param string Variablename |
* @return boolean |
* @access public |
* @see getBlockvariables() |
*/ |
function BlockvariableExists($block, $variable) |
{ |
return isset($this->blockvariables[$block][$variable]); |
} // end func BlockvariableExists |
/** |
* Builds a functionlist from the template. |
*/ |
function buildFunctionlist() |
{ |
$this->functions = array(); |
$template = $this->template; |
$num = 0; |
while (preg_match($this->functionRegExp, $template, $regs)) { |
$pos = strpos($template, $regs[0]); |
$template = substr($template, $pos + strlen($regs[0])); |
$head = $this->getValue($template, ')'); |
$args = array(); |
$search = $regs[0] . $head . ')'; |
$replace = $this->openingDelimiter . |
'__function' . $num . '__' . |
$this->closingDelimiter; |
$this->template = str_replace($search, $replace, $this->template); |
$template = str_replace($search, $replace, $template); |
while ($head != '' && $args2 = $this->getValue($head, ',')) { |
$arg2 = trim($args2); |
$args[] = ('"' == $arg2{0} || "'" == $arg2{0}) ? |
substr($arg2, 1, -1) : $arg2; |
if ($arg2 == $head) { |
break; |
} |
$head = substr($head, strlen($arg2) + 1); |
} |
$this->functions[$num++] = array( |
'name' => $regs[1], |
'args' => $args |
); |
} |
} // end func buildFunctionlist |
function getValue($code, $delimiter) { |
if ($code == '') { |
return ''; |
} |
if (!is_array($delimiter)) { |
$delimiter = array( $delimiter => true ); |
} |
$len = strlen($code); |
$enclosed = false; |
$enclosed_by = ''; |
if (isset($delimiter[$code[0]])) { |
$i = 1; |
} else { |
for ($i = 0; $i < $len; ++$i) { |
$char = $code[$i]; |
if ( |
($char == '"' || $char = "'") && |
($char == $enclosed_by || '' == $enclosed_by) && |
(0 == $i || ($i > 0 && '\\' != $code[$i - 1])) |
) { |
if (!$enclosed) { |
$enclosed_by = $char; |
} else { |
$enclosed_by = ""; |
} |
$enclosed = !$enclosed; |
} |
if (!$enclosed && isset($delimiter[$char])) { |
break; |
} |
} |
} |
return substr($code, 0, $i); |
} // end func getValue |
/** |
* Deletes one or many variables from the block variable list. |
* |
* @param string Blockname |
* @param mixed Name of one variable or array of variables |
* ( array ( name => true ) ) to be stripped. |
*/ |
function deleteFromBlockvariablelist($block, $variables) |
{ |
if (!is_array($variables)) { |
$variables = array($variables => true); |
} |
reset($this->blockvariables[$block]); |
while (list($varname, $val) = each($this->blockvariables[$block])) { |
if (isset($variables[$varname])) { |
unset($this->blockvariables[$block][$varname]); |
} |
} |
} // end deleteFromBlockvariablelist |
/** |
* Updates the variable list of a block. |
* |
* @param string Blockname |
*/ |
function updateBlockvariablelist($block) |
{ |
preg_match_all( $this->variablesRegExp, |
$this->blocklist[$block], $regs |
); |
if (count($regs[1]) != 0) { |
foreach ($regs[1] as $k => $var) { |
$this->blockvariables[$block][$var] = true; |
} |
} else { |
$this->blockvariables[$block] = array(); |
} |
// check if any inner blocks were found |
if (isset($this->blockinner[$block]) && |
is_array($this->blockinner[$block]) && |
count($this->blockinner[$block]) > 0 |
) { |
/* |
* loop through inner blocks, registering the variable |
* placeholders in each |
*/ |
foreach ($this->blockinner[$block] as $childBlock) { |
$this->updateBlockvariablelist($childBlock); |
} |
} |
} // end func updateBlockvariablelist |
/** |
* Returns an array of blocknames where the given variable |
* placeholder is used. |
* |
* @param string Variable placeholder |
* @return array $parents parents[0..n] = blockname |
*/ |
function findPlaceholderBlocks($variable) |
{ |
$parents = array(); |
reset($this->blocklist); |
while (list($blockname, $content) = each($this->blocklist)) { |
reset($this->blockvariables[$blockname]); |
while ( |
list($varname, $val) = each($this->blockvariables[$blockname])) |
{ |
if ($variable == $varname) { |
$parents[] = $blockname; |
} |
} |
} |
return $parents; |
} // end func findPlaceholderBlocks |
/** |
* Handles warnings, saves them to $warn and prints them or |
* calls die() depending on the flags |
* |
* @param string Warning |
* @param string File where the warning occured |
* @param int Linenumber where the warning occured |
* @see $warn, $printWarning, $haltOnWarning |
*/ |
function warning($message, $file = '', $line = 0) |
{ |
$message = sprintf( |
'HTML_Template_ITX Warning: %s [File: %s, Line: %d]', |
$message, |
$file, |
$line |
); |
$this->warn[] = $message; |
if ($this->printWarning) { |
print $message; |
} |
if ($this->haltOnWarning) { |
die($message); |
} |
} // end func warning |
} // end class HTML_Template_ITX |
?> |
/branches/v1.0-menes/api/pear/HTML/Template/IT_Error.php |
---|
New file |
0,0 → 1,51 |
<?php |
// |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2005 Ulf Wendel, Pierre-Alain Joye | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to the New BSD license, That is bundled | |
// | with this package in the file LICENSE, and is available through | |
// | the world-wide-web at | |
// | http://www.opensource.org/licenses/bsd-license.php | |
// | If you did not receive a copy of the new BSD license and are unable | |
// | to obtain it through the world-wide-web, please send a note to | |
// | pajoye@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Author: Ulf Wendel <ulf.wendel@phpdoc.de> | |
// | Pierre-Alain Joye <pajoye@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id$ |
require_once "PEAR.php"; |
/** |
* IT[X] Error class |
* |
* @package IT[X] |
*/ |
class IT_Error extends PEAR_Error { |
/** |
* Prefix of all error messages. |
* |
* @var string |
*/ |
var $error_message_prefix = "IntegratedTemplate Error: "; |
/** |
* Creates an cache error object. |
* |
* @param string error message |
* @param string file where the error occured |
* @param string linenumber where the error occured |
*/ |
function IT_Error($msg, $file = __FILE__, $line = __LINE__) { |
$this->PEAR_Error(sprintf("%s [%s on line %d].", $msg, $file, $line)); |
} // end func IT_Error |
} // end class IT_Error |
?> |
/branches/v1.0-menes/api/pear/HTML/Table.php |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/pear/HTML/Table.php |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/pear/HTML/Common.php |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/pear/HTML/Common.php |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/pear/Text/Wiki/Parse.php |
---|
New file |
0,0 → 1,253 |
<?php |
/** |
* |
* Baseline rule class for extension into a "real" parser component. |
* |
* Text_Wiki_Rule classes do not stand on their own; they are called by a |
* Text_Wiki object, typcially in the transform()method. Each rule class |
* performs three main activities: parse, process, and render. |
* |
* The parse() method takes a regex and applies it to the whole block of |
* source text at one time. Each match is sent as $matches to the |
* process() method. |
* |
* The process() method acts on the matched text from the source, and |
* then processes the source text is some way. This may mean the |
* creation of a delimited token using addToken(). In every case, the |
* process() method returns the text that should replace the matched text |
* from parse(). |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
* $Id: Parse.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
* |
*/ |
class Text_Wiki_Parse { |
/** |
* |
* Configuration options for this parser rule. |
* |
* @access public |
* |
* @var string |
* |
*/ |
var $conf = array(); |
/** |
* |
* Regular expression to find matching text for this rule. |
* |
* @access public |
* |
* @var string |
* |
* @see parse() |
* |
*/ |
var $regex = null; |
/** |
* |
* The name of this rule for new token array elements. |
* |
* @access public |
* |
* @var string |
* |
*/ |
var $rule = null; |
/** |
* |
* A reference to the calling Text_Wiki object. |
* |
* This is needed so that each rule has access to the same source |
* text, token set, URLs, interwiki maps, page names, etc. |
* |
* @access public |
* |
* @var object |
*/ |
var $wiki = null; |
/** |
* |
* Constructor for this parser rule. |
* |
* @access public |
* |
* @param object &$obj The calling "parent" Text_Wiki object. |
* |
*/ |
function Text_Wiki_Parse(&$obj) |
{ |
// set the reference to the calling Text_Wiki object; |
// this allows us access to the shared source text, token |
// array, etc. |
$this->wiki =& $obj; |
// set the name of this rule; generally used when adding |
// to the tokens array. strip off the Text_Wiki_Parse_ portion. |
// text_wiki_parse_ |
// 0123456789012345 |
$tmp = substr(get_class($this), 16); |
$this->rule = ucwords(strtolower($tmp)); |
// override config options for the rule if specified |
if (isset($this->wiki->parseConf[$this->rule]) && |
is_array($this->wiki->parseConf[$this->rule])) { |
$this->conf = array_merge( |
$this->conf, |
$this->wiki->parseConf[$this->rule] |
); |
} |
} |
/** |
* |
* Abstrct method to parse source text for matches. |
* |
* Applies the rule's regular expression to the source text, passes |
* every match to the process() method, and replaces the matched text |
* with the results of the processing. |
* |
* @access public |
* |
* @see Text_Wiki_Parse::process() |
* |
*/ |
function parse() |
{ |
$this->wiki->source = preg_replace_callback( |
$this->regex, |
array(&$this, 'process'), |
$this->wiki->source |
); |
} |
/** |
* |
* Abstract method to generate replacements for matched text. |
* |
* @access public |
* |
* @param array $matches An array of matches from the parse() method |
* as generated by preg_replace_callback. $matches[0] is the full |
* matched string, $matches[1] is the first matched pattern, |
* $matches[2] is the second matched pattern, and so on. |
* |
* @return string The processed text replacement; defaults to the |
* full matched string (i.e., no changes to the text). |
* |
* @see Text_Wiki_Parse::parse() |
* |
*/ |
function process(&$matches) |
{ |
return $matches[0]; |
} |
/** |
* |
* Simple method to safely get configuration key values. |
* |
* @access public |
* |
* @param string $key The configuration key. |
* |
* @param mixed $default If the key does not exist, return this value |
* instead. |
* |
* @return mixed The configuration key value (if it exists) or the |
* default value (if not). |
* |
*/ |
function getConf($key, $default = null) |
{ |
if (isset($this->conf[$key])) { |
return $this->conf[$key]; |
} else { |
return $default; |
} |
} |
/** |
* |
* Extract 'attribute="value"' portions of wiki markup. |
* |
* This kind of markup is typically used only in macros, but is useful |
* anywhere. |
* |
* The syntax is pretty strict; there can be no spaces between the |
* option name, the equals, and the first double-quote; the value |
* must be surrounded by double-quotes. You can escape characters in |
* the value with a backslash, and the backslash will be stripped for |
* you. |
* |
* @access public |
* |
* @param string $text The "attributes" portion of markup. |
* |
* @return array An associative array of key-value pairs where the |
* key is the option name and the value is the option value. |
* |
*/ |
function getAttrs($text) |
{ |
// find the =" sections; |
$tmp = explode('="', trim($text)); |
// basic setup |
$k = count($tmp) - 1; |
$attrs = array(); |
$key = null; |
// loop through the sections |
foreach ($tmp as $i => $val) { |
// first element is always the first key |
if ($i == 0) { |
$key = trim($val); |
continue; |
} |
// find the last double-quote in the value. |
// the part to the left is the value for the last key, |
// the part to the right is the next key name |
$pos = strrpos($val, '"'); |
$attrs[$key] = stripslashes(substr($val, 0, $pos)); |
$key = trim(substr($val, $pos+1)); |
} |
return $attrs; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render.php |
---|
New file |
0,0 → 1,167 |
<?php |
class Text_Wiki_Render { |
/** |
* |
* Configuration options for this render rule. |
* |
* @access public |
* |
* @var string |
* |
*/ |
var $conf = array(); |
/** |
* |
* The name of this rule's format. |
* |
* @access public |
* |
* @var string |
* |
*/ |
var $format = null; |
/** |
* |
* The name of this rule's token array elements. |
* |
* @access public |
* |
* @var string |
* |
*/ |
var $rule = null; |
/** |
* |
* A reference to the calling Text_Wiki object. |
* |
* This is needed so that each rule has access to the same source |
* text, token set, URLs, interwiki maps, page names, etc. |
* |
* @access public |
* |
* @var object |
*/ |
var $wiki = null; |
/** |
* |
* Constructor for this render format or rule. |
* |
* @access public |
* |
* @param object &$obj The calling "parent" Text_Wiki object. |
* |
*/ |
function Text_Wiki_Render(&$obj) |
{ |
// keep a reference to the calling Text_Wiki object |
$this->wiki =& $obj; |
// get the config-key-name for this object, |
// strip the Text_Wiki_Render_ part |
// 01234567890123456 |
$tmp = get_class($this); |
$tmp = substr($tmp, 17); |
// split into pieces at the _ mark. |
// first part is format, second part is rule. |
$part = explode('_', $tmp); |
$this->format = isset($part[0]) ? ucwords(strtolower($part[0])) : null; |
$this->rule = isset($part[1]) ? ucwords(strtolower($part[1])) : null; |
// is there a format but no rule? |
// then this is the "main" render object, with |
// pre() and post() methods. |
if ($this->format && ! $this->rule && |
isset($this->wiki->formatConf[$this->format]) && |
is_array($this->wiki->formatConf[$this->format])) { |
// this is a format render object |
$this->conf = array_merge( |
$this->conf, |
$this->wiki->formatConf[$this->format] |
); |
} |
// is there a format and a rule? |
if ($this->format && $this->rule && |
isset($this->wiki->renderConf[$this->format][$this->rule]) && |
is_array($this->wiki->renderConf[$this->format][$this->rule])) { |
// this is a rule render object |
$this->conf = array_merge( |
$this->conf, |
$this->wiki->renderConf[$this->format][$this->rule] |
); |
} |
} |
/** |
* |
* Simple method to safely get configuration key values. |
* |
* @access public |
* |
* @param string $key The configuration key. |
* |
* @param mixed $default If the key does not exist, return this value |
* instead. |
* |
* @return mixed The configuration key value (if it exists) or the |
* default value (if not). |
* |
*/ |
function getConf($key, $default = null) |
{ |
if (isset($this->conf[$key])) { |
return $this->conf[$key]; |
} else { |
return $default; |
} |
} |
/** |
* |
* Simple method to wrap a configuration in an sprintf() format. |
* |
* @access public |
* |
* @param string $key The configuration key. |
* |
* @param string $format The sprintf() format string. |
* |
* @return mixed The formatted configuration key value (if it exists) |
* or null (if it does not). |
* |
*/ |
function formatConf($format, $key) |
{ |
if (isset($this->conf[$key])) { |
return sprintf($format, $this->conf[$key]); |
} else { |
return null; |
} |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Parse/Toc.php |
---|
New file |
0,0 → 1,112 |
<?php |
// $Id: Toc.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* This class implements a Text_Wiki_Parse to find all heading tokens and |
* build a table of contents. The [[toc]] tag gets replaced with a list |
* of all the level-2 through level-6 headings. |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Toc extends Text_Wiki_Parse { |
/** |
* |
* The regular expression used to parse the source text and find |
* matches conforming to this rule. Used by the parse() method. |
* |
* @access public |
* |
* @var string |
* |
* @see parse() |
* |
*/ |
var $regex = "/\n\[\[toc( .*)?\]\]\n/m"; |
/** |
* |
* Generates a replacement for the matched text. |
* |
* Token options are: |
* |
* 'type' => ['list_start'|'list_end'|'item_start'|'item_end'|'target'] |
* |
* 'level' => The heading level (1-6). |
* |
* 'count' => Which entry number this is in the list. |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return string A token indicating the TOC collection point. |
* |
*/ |
function process(&$matches) |
{ |
$count = 0; |
if (isset($matches[1])) { |
$attr = $this->getAttrs(trim($matches[1])); |
} else { |
$attr = array(); |
} |
$output = $this->wiki->addToken( |
$this->rule, |
array( |
'type' => 'list_start', |
'level' => 0, |
'attr' => $attr |
) |
); |
foreach ($this->wiki->getTokens('Heading') as $key => $val) { |
if ($val[1]['type'] != 'start') { |
continue; |
} |
$options = array( |
'type' => 'item_start', |
'id' => $val[1]['id'], |
'level' => $val[1]['level'], |
'count' => $count ++ |
); |
$output .= $this->wiki->addToken($this->rule, $options); |
$output .= $val[1]['text']; |
$output .= $this->wiki->addToken( |
$this->rule, |
array( |
'type' => 'item_end', |
'level' => $val[1]['level'] |
) |
); |
} |
$output .= $this->wiki->addToken( |
$this->rule, array( |
'type' => 'list_end', |
'level' => 0 |
) |
); |
return $output; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Parse/Table.php |
---|
New file |
0,0 → 1,208 |
<?php |
// $Id: Table.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* This class implements a Text_Wiki_Parse to find source text marked as a |
* set of table rows, where a line start and ends with double-pipes (||) |
* and uses double-pipes to separate table cells. The rows must be on |
* sequential lines (no blank lines between them) -- a blank line |
* indicates the beginning of a new table. |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Table extends Text_Wiki_Parse { |
/** |
* |
* The regular expression used to parse the source text and find |
* matches conforming to this rule. Used by the parse() method. |
* |
* @access public |
* |
* @var string |
* |
* @see parse() |
* |
*/ |
var $regex = '/\n((\|\|).*)(\n)(?!(\|\|))/Us'; |
/** |
* |
* Generates a replacement for the matched text. |
* |
* Token options are: |
* |
* 'type' => |
* 'table_start' : the start of a bullet list |
* 'table_end' : the end of a bullet list |
* 'row_start' : the start of a number list |
* 'row_end' : the end of a number list |
* 'cell_start' : the start of item text (bullet or number) |
* 'cell_end' : the end of item text (bullet or number) |
* |
* 'cols' => the number of columns in the table (for 'table_start') |
* |
* 'rows' => the number of rows in the table (for 'table_start') |
* |
* 'span' => column span (for 'cell_start') |
* |
* 'attr' => column attribute flag (for 'cell_start') |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return A series of text and delimited tokens marking the different |
* table elements and cell text. |
* |
*/ |
function process(&$matches) |
{ |
// our eventual return value |
$return = ''; |
// the number of columns in the table |
$num_cols = 0; |
// the number of rows in the table |
$num_rows = 0; |
// rows are separated by newlines in the matched text |
$rows = explode("\n", $matches[1]); |
// loop through each row |
foreach ($rows as $row) { |
// increase the row count |
$num_rows ++; |
// start a new row |
$return .= $this->wiki->addToken( |
$this->rule, |
array('type' => 'row_start') |
); |
// cells are separated by double-pipes |
$cell = explode("||", $row); |
// get the number of cells (columns) in this row |
$last = count($cell) - 1; |
// is this more than the current column count? |
// (we decrease by 1 because we never use cell zero) |
if ($last - 1 > $num_cols) { |
// increase the column count |
$num_cols = $last - 1; |
} |
// by default, cells span only one column (their own) |
$span = 1; |
// ignore cell zero, and ignore the "last" cell; cell zero |
// is before the first double-pipe, and the "last" cell is |
// after the last double-pipe. both are always empty. |
for ($i = 1; $i < $last; $i ++) { |
// if there is no content at all, then it's an instance |
// of two sets of || next to each other, indicating a |
// span. |
if ($cell[$i] == '') { |
// add to the span and loop to the next cell |
$span += 1; |
continue; |
} else { |
// this cell has content. |
// find any special "attr"ibute cell markers |
if (substr($cell[$i], 0, 2) == '> ') { |
// right-align |
$attr = 'right'; |
$cell[$i] = substr($cell[$i], 2); |
} elseif (substr($cell[$i], 0, 2) == '= ') { |
// center-align |
$attr = 'center'; |
$cell[$i] = substr($cell[$i], 2); |
} elseif (substr($cell[$i], 0, 2) == '< ') { |
// left-align |
$attr = 'left'; |
$cell[$i] = substr($cell[$i], 2); |
} elseif (substr($cell[$i], 0, 2) == '~ ') { |
$attr = 'header'; |
$cell[$i] = substr($cell[$i], 2); |
} else { |
$attr = null; |
} |
// start a new cell... |
$return .= $this->wiki->addToken( |
$this->rule, |
array ( |
'type' => 'cell_start', |
'attr' => $attr, |
'span' => $span |
) |
); |
// ...add the content... |
$return .= trim($cell[$i]); |
// ...and end the cell. |
$return .= $this->wiki->addToken( |
$this->rule, |
array ( |
'type' => 'cell_end', |
'attr' => $attr, |
'span' => $span |
) |
); |
// reset the span. |
$span = 1; |
} |
} |
// end the row |
$return .= $this->wiki->addToken( |
$this->rule, |
array('type' => 'row_end') |
); |
} |
// wrap the return value in start and end tokens |
$return = |
$this->wiki->addToken( |
$this->rule, |
array( |
'type' => 'table_start', |
'rows' => $num_rows, |
'cols' => $num_cols |
) |
) |
. $return . |
$this->wiki->addToken( |
$this->rule, |
array( |
'type' => 'table_end' |
) |
); |
// we're done! |
return "\n$return\n\n"; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Parse/Tt.php |
---|
New file |
0,0 → 1,69 |
<?php |
/** |
* |
* Find source text marked for teletype (monospace). |
* |
* Defined by text surrounded by two curly braces. On parsing, the text |
* itself is left in place, but the starting and ending instances of |
* curly braces are replaced with tokens. |
* |
* Token options are: |
* |
* 'type' => ['start'|'end'] The starting or ending point of the |
* teletype text. The text itself is left in the source. |
* |
* |
* $Id: Tt.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Tt extends Text_Wiki_Parse { |
/** |
* |
* The regular expression used to parse the source text. |
* |
* @access public |
* |
* @var string |
* |
* @see parse() |
* |
*/ |
var $regex = "/{{({*?.*}*?)}}/U"; |
/** |
* |
* Generates a replacement for the matched text. |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return string A pair of delimited tokens to be used as a |
* placeholder in the source text surrounding the teletype text. |
* |
*/ |
function process(&$matches) |
{ |
$start = $this->wiki->addToken( |
$this->rule, array('type' => 'start') |
); |
$end = $this->wiki->addToken( |
$this->rule, array('type' => 'end') |
); |
return $start . $matches[1] . $end; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Parse/Raw.php |
---|
New file |
0,0 → 1,55 |
<?php |
// $Id: Raw.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* This class implements a Text_Wiki rule to find sections of the source |
* text that are not to be processed by Text_Wiki. These blocks of "raw" |
* text will be rendered as they were found. |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Raw extends Text_Wiki_Parse { |
/** |
* |
* The regular expression used to find source text matching this |
* rule. |
* |
* @access public |
* |
* @var string |
* |
*/ |
var $regex = "/``(.*)``/U"; |
/** |
* |
* Generates a token entry for the matched text. Token options are: |
* |
* 'text' => The full matched text. |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return A delimited token number to be used as a placeholder in |
* the source text. |
* |
*/ |
function process(&$matches) |
{ |
$options = array('text' => $matches[1]); |
return $this->wiki->addToken($this->rule, $options); |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Parse/Deflist.php |
---|
New file |
0,0 → 1,104 |
<?php |
// $Id: Deflist.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* This class implements a Text_Wiki_Parse to find source text marked as a |
* definition list. In short, if a line starts with ':' then it is a |
* definition list item; another ':' on the same lines indicates the end |
* of the definition term and the beginning of the definition narrative. |
* The list items must be on sequential lines (no blank lines between |
* them) -- a blank line indicates the beginning of a new list. |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Deflist extends Text_Wiki_Parse { |
/** |
* |
* The regular expression used to parse the source text and find |
* matches conforming to this rule. Used by the parse() method. |
* |
* @access public |
* |
* @var string |
* |
* @see parse() |
* |
*/ |
var $regex = '/\n((: ).*\n)(?!(: |\n))/Us'; |
/** |
* |
* Generates a replacement for the matched text. Token options are: |
* |
* 'type' => |
* 'list_start' : the start of a definition list |
* 'list_end' : the end of a definition list |
* 'term_start' : the start of a definition term |
* 'term_end' : the end of a definition term |
* 'narr_start' : the start of definition narrative |
* 'narr_end' : the end of definition narrative |
* 'unknown' : unknown type of definition portion |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return A series of text and delimited tokens marking the different |
* list text and list elements. |
* |
*/ |
function process(&$matches) |
{ |
// the replacement text we will return to parse() |
$return = ''; |
// the list of post-processing matches |
$list = array(); |
// start the deflist |
$options = array('type' => 'list_start'); |
$return .= $this->wiki->addToken($this->rule, $options); |
// $matches[1] is the text matched as a list set by parse(); |
// create an array called $list that contains a new set of |
// matches for the various definition-list elements. |
preg_match_all( |
'/^(: )(.*)?( : )(.*)?$/Ums', |
$matches[1], |
$list, |
PREG_SET_ORDER |
); |
// add each term and narrative |
foreach ($list as $key => $val) { |
$return .= ( |
$this->wiki->addToken($this->rule, array('type' => 'term_start')) . |
trim($val[2]) . |
$this->wiki->addToken($this->rule, array('type' => 'term_end')) . |
$this->wiki->addToken($this->rule, array('type' => 'narr_start')) . |
trim($val[4]) . |
$this->wiki->addToken($this->rule, array('type' => 'narr_end')) |
); |
} |
// end the deflist |
$options = array('type' => 'list_end'); |
$return .= $this->wiki->addToken($this->rule, $options); |
// done! |
return "\n" . $return . "\n\n"; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Parse/Horiz.php |
---|
New file |
0,0 → 1,52 |
<?php |
// $Id: Horiz.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* This class implements a Text_Wiki_Parse to find source text marked to |
* be a horizontal rule, as defined by four dashed on their own line. |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Horiz extends Text_Wiki_Parse { |
/** |
* |
* The regular expression used to parse the source text and find |
* matches conforming to this rule. Used by the parse() method. |
* |
* @access public |
* |
* @var string |
* |
* @see parse() |
* |
*/ |
var $regex = '/^([-]{4,})$/m'; |
/** |
* |
* Generates a replacement token for the matched text. |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return string A token marking the horizontal rule. |
* |
*/ |
function process(&$matches) |
{ |
return $this->wiki->addToken($this->rule); |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Parse/Prefilter.php |
---|
New file |
0,0 → 1,62 |
<?php |
// $Id: Prefilter.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* "Pre-filter" the source text. |
* |
* Convert DOS and Mac line endings to Unix, concat lines ending in a |
* backslash \ with the next line, convert tabs to 4-spaces, add newlines |
* to the top and end of the source text, compress 3 or more newlines to |
* 2 newlines. |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Prefilter extends Text_Wiki_Parse { |
/** |
* |
* Simple parsing method. |
* |
* @access public |
* |
*/ |
function parse() |
{ |
// convert DOS line endings |
$this->wiki->source = str_replace("\r\n", "\n", |
$this->wiki->source); |
// convert Macintosh line endings |
$this->wiki->source = str_replace("\r", "\n", |
$this->wiki->source); |
// concat lines ending in a backslash |
$this->wiki->source = str_replace("\\\n", "", |
$this->wiki->source); |
// convert tabs to four-spaces |
$this->wiki->source = str_replace("\t", " ", |
$this->wiki->source); |
// add extra newlines at the top and end; this |
// seems to help many rules. |
$this->wiki->source = "\n" . $this->wiki->source . "\n\n"; |
// finally, compress all instances of 3 or more newlines |
// down to two newlines. |
$find = "/\n{3,}/m"; |
$replace = "\n\n"; |
$this->wiki->source = preg_replace($find, $replace, |
$this->wiki->source); |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Parse/Revise.php |
---|
New file |
0,0 → 1,130 |
<?php |
// $Id: Revise.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* This class implements a Text_Wiki_Parse to find source text marked for |
* revision. |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Revise extends Text_Wiki_Parse { |
/** |
* |
* The regular expression used to parse the source text and find |
* matches conforming to this rule. Used by the parse() method. |
* |
* @access public |
* |
* @var string |
* |
* @see parse() |
* |
*/ |
var $regex = "/\@\@({*?.*}*?)\@\@/U"; |
/** |
* |
* Config options. |
* |
* @access public |
* |
* @var array |
* |
*/ |
var $conf = array( |
'delmark' => '---', |
'insmark' => '+++' |
); |
/** |
* |
* Generates a replacement for the matched text. Token options are: |
* |
* 'type' => ['start'|'end'] The starting or ending point of the |
* inserted text. The text itself is left in the source. |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return string A pair of delimited tokens to be used as a |
* placeholder in the source text surrounding the teletype text. |
* |
*/ |
function process(&$matches) |
{ |
$output = ''; |
$src = $matches[1]; |
$delmark = $this->getConf('delmark'); // --- |
$insmark = $this->getConf('insmark'); // +++ |
// '---' must be before '+++' (if they both appear) |
$del = strpos($src, $delmark); |
$ins = strpos($src, $insmark); |
// if neither is found, return right away |
if ($del === false && $ins === false) { |
return $matches[0]; |
} |
// handle text to be deleted |
if ($del !== false) { |
// move forward to the end of the deletion mark |
$del += strlen($delmark); |
if ($ins === false) { |
// there is no insertion text following |
$text = substr($src, $del); |
} else { |
// there is insertion text following, |
// mitigate the length |
$text = substr($src, $del, $ins - $del); |
} |
$output .= $this->wiki->addToken( |
$this->rule, array('type' => 'del_start') |
); |
$output .= $text; |
$output .= $this->wiki->addToken( |
$this->rule, array('type' => 'del_end') |
); |
} |
// handle text to be inserted |
if ($ins !== false) { |
// move forward to the end of the insert mark |
$ins += strlen($insmark); |
$text = substr($src, $ins); |
$output .= $this->wiki->addToken( |
$this->rule, array('type' => 'ins_start') |
); |
$output .= $text; |
$output .= $this->wiki->addToken( |
$this->rule, array('type' => 'ins_end') |
); |
} |
return $output; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Parse/Freelink.php |
---|
New file |
0,0 → 1,111 |
<?php |
// $Id: Freelink.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* This class implements a Text_Wiki_Parse to find source text marked as a |
* wiki freelink, and automatically create a link to that page. |
* |
* A freelink is any page name not conforming to the standard |
* StudlyCapsStyle for a wiki page name. For example, a page normally |
* named MyHomePage can be renamed and referred to as ((My Home Page)) -- |
* note the spaces in the page name. You can also make a "nice-looking" |
* link without renaming the target page; e.g., ((MyHomePage|My Home |
* Page)). Finally, you can use named anchors on the target page: |
* ((MyHomePage|My Home Page#Section1)). |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Freelink extends Text_Wiki_Parse { |
/** |
* |
* Constructor. We override the Text_Wiki_Parse constructor so we can |
* explicitly comment each part of the $regex property. |
* |
* @access public |
* |
* @param object &$obj The calling "parent" Text_Wiki object. |
* |
*/ |
function Text_Wiki_Parse_Freelink(&$obj) |
{ |
parent::Text_Wiki_Parse($obj); |
$this->regex = |
'/' . // START regex |
"\\(\\(" . // double open-parens |
"(" . // START freelink page patter |
"[-A-Za-z0-9 _+\\/.,;:!?'\"\\[\\]\\{\\}&\xc0-\xff]+" . // 1 or more of just about any character |
")" . // END freelink page pattern |
"(" . // START display-name |
"\|" . // a pipe to start the display name |
"[-A-Za-z0-9 _+\\/.,;:!?'\"\\[\\]\\{\\}&\xc0-\xff]+" . // 1 or more of just about any character |
")?" . // END display-name pattern 0 or 1 |
"(" . // START pattern for named anchors |
"\#" . // a hash mark |
"[A-Za-z]" . // 1 alpha |
"[-A-Za-z0-9_:.]*" . // 0 or more alpha, digit, underscore |
")?" . // END named anchors pattern 0 or 1 |
"()\\)\\)" . // double close-parens |
'/'; // END regex |
} |
/** |
* |
* Generates a replacement for the matched text. Token options are: |
* |
* 'page' => the wiki page name (e.g., HomePage). |
* |
* 'text' => alternative text to be displayed in place of the wiki |
* page name. |
* |
* 'anchor' => a named anchor on the target wiki page |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return A delimited token to be used as a placeholder in |
* the source text, plus any text priot to the match. |
* |
*/ |
function process(&$matches) |
{ |
// use nice variable names |
$page = $matches[1]; |
$text = $matches[2]; |
// get rid of the leading # from the anchor, if any |
$anchor = substr($matches[3], 1); |
// is the page given a new text appearance? |
if (trim($text) == '') { |
// no |
$text = $page; |
} else { |
// yes, strip the leading | character |
$text = substr($text, 1); |
} |
// set the options |
$options = array( |
'page' => $page, |
'text' => $text, |
'anchor' => $anchor |
); |
// return a token placeholder |
return $this->wiki->addToken($this->rule, $options); |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Parse/Heading.php |
---|
New file |
0,0 → 1,89 |
<?php |
// $Id: Heading.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* This class implements a Text_Wiki_Parse to find source text marked to |
* be a heading element, as defined by text on a line by itself prefixed |
* with a number of plus signs (+). The heading text itself is left in |
* the source, but is prefixed and suffixed with delimited tokens marking |
* the start and end of the heading. |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Heading extends Text_Wiki_Parse { |
/** |
* |
* The regular expression used to parse the source text and find |
* matches conforming to this rule. Used by the parse() method. |
* |
* @access public |
* |
* @var string |
* |
* @see parse() |
* |
*/ |
var $regex = '/^(\+{1,6}) (.*)/m'; |
var $conf = array( |
'id_prefix' => 'toc' |
); |
/** |
* |
* Generates a replacement for the matched text. Token options are: |
* |
* 'type' => ['start'|'end'] The starting or ending point of the |
* heading text. The text itself is left in the source. |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return string A pair of delimited tokens to be used as a |
* placeholder in the source text surrounding the heading text. |
* |
*/ |
function process(&$matches) |
{ |
// keep a running count for header IDs. we use this later |
// when constructing TOC entries, etc. |
static $id; |
if (! isset($id)) { |
$id = 0; |
} |
$prefix = htmlspecialchars($this->getConf('id_prefix')); |
$start = $this->wiki->addToken( |
$this->rule, |
array( |
'type' => 'start', |
'level' => strlen($matches[1]), |
'text' => $matches[2], |
'id' => $prefix . $id ++ |
) |
); |
$end = $this->wiki->addToken( |
$this->rule, |
array( |
'type' => 'end', |
'level' => strlen($matches[1]) |
) |
); |
return $start . $matches[2] . $end . "\n"; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Parse/Tighten.php |
---|
New file |
0,0 → 1,32 |
<?php |
// $Id: Tighten.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* The rule removes all remaining newlines. |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Tighten extends Text_Wiki_Parse { |
/** |
* |
* Apply tightening directly to the source text. |
* |
* @access public |
* |
*/ |
function parse() |
{ |
$this->wiki->source = str_replace("\n", '', |
$this->wiki->source); |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Parse/Paragraph.php |
---|
New file |
0,0 → 1,128 |
<?php |
// $Id: Paragraph.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* This class implements a Text_Wiki rule to find sections of the source |
* text that are paragraphs. A para is any line not starting with a token |
* delimiter, followed by two newlines. |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Paragraph extends Text_Wiki_Parse { |
/** |
* |
* The regular expression used to find source text matching this |
* rule. |
* |
* @access public |
* |
* @var string |
* |
*/ |
var $regex = "/^.*?\n\n/m"; |
var $conf = array( |
'skip' => array( |
'blockquote', // are we sure about this one? |
'code', |
'heading', |
'horiz', |
'deflist', |
'table', |
'list', |
'toc' |
) |
); |
/** |
* |
* Generates a token entry for the matched text. Token options are: |
* |
* 'start' => The starting point of the paragraph. |
* |
* 'end' => The ending point of the paragraph. |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return A delimited token number to be used as a placeholder in |
* the source text. |
* |
*/ |
function process(&$matches) |
{ |
$delim = $this->wiki->delim; |
// was anything there? |
if (trim($matches[0]) == '') { |
return ''; |
} |
// does the match start with a delimiter? |
if (substr($matches[0], 0, 1) != $delim) { |
// no. |
$start = $this->wiki->addToken( |
$this->rule, array('type' => 'start') |
); |
$end = $this->wiki->addToken( |
$this->rule, array('type' => 'end') |
); |
return $start . trim($matches[0]) . $end; |
} |
// the line starts with a delimiter. read in the delimited |
// token number, check the token, and see if we should |
// skip it. |
// loop starting at the second character (we already know |
// the first is a delimiter) until we find another |
// delimiter; the text between them is a token key number. |
$key = ''; |
$len = strlen($matches[0]); |
for ($i = 1; $i < $len; $i++) { |
$char = $matches[0]{$i}; |
if ($char == $delim) { |
break; |
} else { |
$key .= $char; |
} |
} |
// look at the token and see if it's skippable (if we skip, |
// it will not be marked as a paragraph) |
$token_type = strtolower($this->wiki->tokens[$key][0]); |
$skip = $this->getConf('skip', array()); |
if (in_array($token_type, $skip)) { |
// this type of token should not have paragraphs applied to it. |
// return the entire matched text. |
return $matches[0]; |
} else { |
$start = $this->wiki->addToken( |
$this->rule, array('type' => 'start') |
); |
$end = $this->wiki->addToken( |
$this->rule, array('type' => 'end') |
); |
return $start . trim($matches[0]) . $end; |
} |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Parse/Interwiki.php |
---|
New file |
0,0 → 1,120 |
<?php |
// $Id: Interwiki.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* This class implements a Text_Wiki_Parse to find source text marked as |
* an Interwiki link. See the regex for a detailed explanation of the |
* text matching procedure; e.g., "InterWikiName:PageName". |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Interwiki extends Text_Wiki_Parse { |
var $regex = '([A-Za-z0-9_]+):([\/=&~#A-Za-z0-9_]+)'; |
/** |
* |
* Parser. We override the standard parser so we can |
* find both described interwiki links and standalone links. |
* |
* @access public |
* |
* @return void |
* |
*/ |
function parse() |
{ |
// described interwiki links |
$tmp_regex = '/\[' . $this->regex . ' (.+?)\]/'; |
$this->wiki->source = preg_replace_callback( |
$tmp_regex, |
array(&$this, 'processDescr'), |
$this->wiki->source |
); |
// standalone interwiki links |
$tmp_regex = '/' . $this->regex . '/'; |
$this->wiki->source = preg_replace_callback( |
$tmp_regex, |
array(&$this, 'process'), |
$this->wiki->source |
); |
} |
/** |
* |
* Generates a replacement for the matched standalone interwiki text. |
* Token options are: |
* |
* 'site' => The key name for the Text_Wiki interwiki array map, |
* usually the name of the interwiki site. |
* |
* 'page' => The page on the target interwiki to link to. |
* |
* 'text' => The text to display as the link. |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return A delimited token to be used as a placeholder in |
* the source text, plus any text priot to the match. |
* |
*/ |
function process(&$matches) |
{ |
$options = array( |
'site' => $matches[1], |
'page' => $matches[2], |
'text' => $matches[0] |
); |
return $this->wiki->addToken($this->rule, $options); |
} |
/** |
* |
* Generates a replacement for described interwiki links. Token |
* options are: |
* |
* 'site' => The key name for the Text_Wiki interwiki array map, |
* usually the name of the interwiki site. |
* |
* 'page' => The page on the target interwiki to link to. |
* |
* 'text' => The text to display as the link. |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return A delimited token to be used as a placeholder in |
* the source text, plus any text priot to the match. |
* |
*/ |
function processDescr(&$matches) |
{ |
$options = array( |
'site' => $matches[1], |
'page' => $matches[2], |
'text' => $matches[3] |
); |
return $this->wiki->addToken($this->rule, $options); |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Parse/Emphasis.php |
---|
New file |
0,0 → 1,67 |
<?php |
// $Id: Emphasis.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* This class implements a Text_Wiki_Parse to find source text marked for |
* emphasis (italics) as defined by text surrounded by two single-quotes. |
* On parsing, the text itself is left in place, but the starting and ending |
* instances of two single-quotes are replaced with tokens. |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_emphasis extends Text_Wiki_Parse { |
/** |
* |
* The regular expression used to parse the source text and find |
* matches conforming to this rule. Used by the parse() method. |
* |
* @access public |
* |
* @var string |
* |
* @see parse() |
* |
*/ |
var $regex = "/\/\/(()|.*)\/\//U"; |
/** |
* |
* Generates a replacement for the matched text. Token options are: |
* |
* 'type' => ['start'|'end'] The starting or ending point of the |
* emphasized text. The text itself is left in the source. |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return string A pair of delimited tokens to be used as a |
* placeholder in the source text surrounding the text to be |
* emphasized. |
* |
*/ |
function process(&$matches) |
{ |
$start = $this->wiki->addToken( |
$this->rule, array('type' => 'start') |
); |
$end = $this->wiki->addToken( |
$this->rule, array('type' => 'end') |
); |
return $start . $matches[1] . $end; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Parse/Code.php |
---|
New file |
0,0 → 1,72 |
<?php |
// $Id: Code.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* This class implements a Text_Wiki_Parse to find sections marked as code |
* examples. Blocks are marked as the string <code> on a line by itself, |
* followed by the inline code example, and terminated with the string |
* </code> on a line by itself. The code example is run through the |
* native PHP highlight_string() function to colorize it, then surrounded |
* with <pre>...</pre> tags when rendered as XHTML. |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Code extends Text_Wiki_Parse { |
/** |
* |
* The regular expression used to find source text matching this |
* rule. |
* |
* @access public |
* |
* @var string |
* |
*/ |
var $regex = '/^(\<code( .+)?\>)\n(.+)\n(\<\/code\>)(\s|$)/Umsi'; |
/** |
* |
* Generates a token entry for the matched text. Token options are: |
* |
* 'text' => The full matched text, not including the <code></code> tags. |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return A delimited token number to be used as a placeholder in |
* the source text. |
* |
*/ |
function process(&$matches) |
{ |
// are there additional attribute arguments? |
$args = trim($matches[2]); |
if ($args == '') { |
$options = array( |
'text' => $matches[3], |
'attr' => array('type' => '') |
); |
} else { |
$options = array( |
'text' => $matches[3], |
'attr' => $this->getAttrs($args) |
); |
} |
return $this->wiki->addToken($this->rule, $options) . $matches[5]; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Parse/Strong.php |
---|
New file |
0,0 → 1,67 |
<?php |
// $Id: Strong.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* This class implements a Text_Wiki_Parse to find source text marked for |
* strong emphasis (bold) as defined by text surrounded by three |
* single-quotes. On parsing, the text itself is left in place, but the |
* starting and ending instances of three single-quotes are replaced with |
* tokens. |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Strong extends Text_Wiki_Parse { |
/** |
* |
* The regular expression used to parse the source text and find |
* matches conforming to this rule. Used by the parse() method. |
* |
* @access public |
* |
* @var string |
* |
* @see parse() |
* |
*/ |
var $regex = "/\*\*(()|.*)\*\*/U"; |
/** |
* |
* Generates a replacement for the matched text. Token options are: |
* |
* 'type' => ['start'|'end'] The starting or ending point of the |
* emphasized text. The text itself is left in the source. |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return A pair of delimited tokens to be used as a placeholder in |
* the source text surrounding the text to be emphasized. |
* |
*/ |
function process(&$matches) |
{ |
$start = $this->wiki->addToken( |
$this->rule, array('type' => 'start') |
); |
$end = $this->wiki->addToken( |
$this->rule, array('type' => 'end') |
); |
return $start . $matches[1] . $end; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Parse/Embed.php |
---|
New file |
0,0 → 1,88 |
<?php |
// $Id: Embed.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* This class implements a Text_Wiki_Parse to embed the contents of a URL |
* inside the page at render-time. Typically used to get script output. |
* This differs from the 'include' rule, which incorporates results at |
* parse-time; 'embed' output does not get parsed by Text_Wiki, while |
* 'include' ouput does. |
* |
* This rule is inherently not secure; it allows cross-site scripting to |
* occur if the embedded output has <script> or other similar tags. Be |
* careful. |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Embed extends Text_Wiki_Parse { |
var $conf = array( |
'base' => '/path/to/scripts/' |
); |
var $file = null; |
var $output = null; |
var $vars = null; |
/** |
* |
* The regular expression used to find source text matching this |
* rule. |
* |
* @access public |
* |
* @var string |
* |
*/ |
var $regex = '/(\[\[embed )(.+?)( .+?)?(\]\])/i'; |
/** |
* |
* Generates a token entry for the matched text. Token options are: |
* |
* 'text' => The full matched text, not including the <code></code> tags. |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return A delimited token number to be used as a placeholder in |
* the source text. |
* |
*/ |
function process(&$matches) |
{ |
// save the file location |
$this->file = $this->getConf('base', './') . $matches[2]; |
// extract attribs as variables in the local space |
$this->vars = $this->getAttrs($matches[3]); |
unset($this->vars['this']); |
extract($this->vars); |
// run the script |
ob_start(); |
include($this->file); |
$this->output = ob_get_contents(); |
ob_end_clean(); |
// done, place the script output directly in the source |
return $this->wiki->addToken( |
$this->rule, |
array('text' => $this->output) |
); |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Parse/Delimiter.php |
---|
New file |
0,0 → 1,62 |
<?php |
// $Id: Delimiter.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* This class implements a Text_Wiki_Parse to find instances of the delimiter |
* character already embedded in the source text; it extracts them and replaces |
* them with a delimited token, then renders them as the delimiter itself |
* when the target format is XHTML. |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Delimiter extends Text_Wiki_Parse { |
/** |
* |
* Constructor. Overrides the Text_Wiki_Parse constructor so that we |
* can set the $regex property dynamically (we need to include the |
* Text_Wiki $delim character. |
* |
* @param object &$obj The calling "parent" Text_Wiki object. |
* |
* @param string $name The token name to use for this rule. |
* |
*/ |
function Text_Wiki_Parse_delimiter(&$obj) |
{ |
parent::Text_Wiki_Parse($obj); |
$this->regex = '/' . $this->wiki->delim . '/'; |
} |
/** |
* |
* Generates a token entry for the matched text. Token options are: |
* |
* 'text' => The full matched text. |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return A delimited token number to be used as a placeholder in |
* the source text. |
* |
*/ |
function process(&$matches) |
{ |
return $this->wiki->addToken( |
$this->rule, |
array('text' => $this->wiki->delim) |
); |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Parse/Center.php |
---|
New file |
0,0 → 1,60 |
<?php |
// $Id: Center.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* This class implements a Text_Wiki_Parse to find lines marked for centering. |
* The line must start with "= " (i.e., an equal-sign followed by a space). |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Center extends Text_Wiki_Parse { |
/** |
* |
* The regular expression used to find source text matching this |
* rule. |
* |
* @access public |
* |
* @var string |
* |
*/ |
var $regex = '/\n\= (.*?)\n/'; |
/** |
* |
* Generates a token entry for the matched text. |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return A delimited token number to be used as a placeholder in |
* the source text. |
* |
*/ |
function process(&$matches) |
{ |
$start = $this->wiki->addToken( |
$this->rule, |
array('type' => 'start') |
); |
$end = $this->wiki->addToken( |
$this->rule, |
array('type' => 'end') |
); |
return "\n" . $start . $matches[1] . $end . "\n"; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Parse/Image.php |
---|
New file |
0,0 → 1,76 |
<?php |
// $Id: Image.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* This class implements a Text_Wiki_Parse to embed the contents of a URL |
* inside the page. Typically used to get script output. |
* |
* This rule is inherently not secure; it allows cross-site scripting to |
* occur if the embedded output has <script> or other similar tags. Be |
* careful. |
* |
* In the future, we'll add a rule config options to set the base embed |
* path so that it is limited to one directory. |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Image extends Text_Wiki_Parse { |
/** |
* |
* The regular expression used to find source text matching this |
* rule. |
* |
* @access public |
* |
* @var string |
* |
*/ |
var $regex = '/(\[\[image )(.+?)(\]\])/i'; |
/** |
* |
* Generates a token entry for the matched text. Token options are: |
* |
* 'src' => The image source, typically a relative path name. |
* |
* 'opts' => Any macro options following the source. |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return A delimited token number to be used as a placeholder in |
* the source text. |
* |
*/ |
function process(&$matches) |
{ |
$pos = strpos($matches[2], ' '); |
if ($pos === false) { |
$options = array( |
'src' => $matches[2], |
'attr' => array()); |
} else { |
// everything after the space is attribute arguments |
$options = array( |
'src' => substr($matches[2], 0, $pos), |
'attr' => $this->getAttrs(substr($matches[2], $pos+1)) |
); |
} |
return $this->wiki->addToken($this->rule, $options); |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Parse/Function.php |
---|
New file |
0,0 → 1,115 |
<?php |
// $Id: Function.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
class Text_Wiki_Parse_Function extends Text_Wiki_Parse { |
var $regex = '/^(\<function\>)\n(.+)\n(\<\/function\>)(\s|$)/Umsi'; |
function process(&$matches) |
{ |
// default options |
$opts = array( |
'name' => null, |
'access' => null, |
'return' => null, |
'params' => array(), |
'throws' => array() |
); |
// split apart the markup lines and loop through them |
$lines = explode("\n", $matches[2]); |
foreach ($lines as $line) { |
// skip blank lines |
if (trim($line) == '') { |
continue; |
} |
// find the first ':' on the line; the left part is the |
// type, the right part is the value. skip lines without |
// a ':' on them. |
$pos = strpos($line, ':'); |
if ($pos === false) { |
continue; |
} |
// $type is the line type: name, access, return, param, throws |
// 012345678901234 |
// name: something |
$type = trim(substr($line, 0, $pos)); |
$val = trim(substr($line, $pos+1)); |
switch($type) { |
case 'a': |
case 'access': |
$opts['access'] = $val; |
break; |
case 'n': |
case 'name': |
$opts['name'] = $val; |
break; |
case 'p': |
case 'param': |
$tmp = explode(',', $val); |
$k = count($tmp); |
if ($k == 1) { |
$opts['params'][] = array( |
'type' => $tmp[0], |
'descr' => null, |
'default' => null |
); |
} elseif ($k == 2) { |
$opts['params'][] = array( |
'type' => $tmp[0], |
'descr' => $tmp[1], |
'default' => null |
); |
} else { |
$opts['params'][] = array( |
'type' => $tmp[0], |
'descr' => $tmp[1], |
'default' => $tmp[2] |
); |
} |
break; |
case 'r': |
case 'return': |
case 'returns': |
$opts['return'] = $val; |
break; |
case 't': |
case 'throws': |
$tmp = explode(',', $val); |
$k = count($tmp); |
if ($k == 1) { |
$opts['throws'][] = array( |
'type' => $tmp[0], |
'descr' => null |
); |
} else { |
$opts['throws'][] = array( |
'type' => $tmp[0], |
'descr' => $tmp[1] |
); |
} |
break; |
default: |
$opts[$type] = $val; |
break; |
} |
} |
// add the token back in place |
return $this->wiki->addToken($this->rule, $opts) . $matches[4]; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Parse/Newline.php |
---|
New file |
0,0 → 1,57 |
<?php |
// $Id: Newline.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* This class implements a Text_Wiki_Parse to mark implied line breaks in the |
* source text, usually a single carriage return in the middle of a paragraph |
* or block-quoted text. |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Newline extends Text_Wiki_Parse { |
/** |
* |
* The regular expression used to parse the source text and find |
* matches conforming to this rule. Used by the parse() method. |
* |
* @access public |
* |
* @var string |
* |
* @see parse() |
* |
*/ |
var $regex = '/([^\n])\n([^\n])/m'; |
/** |
* |
* Generates a replacement token for the matched text. |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return string A delimited token to be used as a placeholder in |
* the source text. |
* |
*/ |
function process(&$matches) |
{ |
return $matches[1] . |
$this->wiki->addToken($this->rule) . |
$matches[2]; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Parse/Url.php |
---|
New file |
0,0 → 1,265 |
<?php |
/** |
* |
* Parse for URLS in the source text. |
* |
* Various URL markings are supported: inline (the URL by itself), |
* numbered or footnote reference (where the URL is enclosed in square brackets), and |
* named reference (where the URL is enclosed in square brackets and has a |
* name included inside the brackets). E.g.: |
* |
* inline -- http://example.com |
* numbered -- [http://example.com] |
* described -- [http://example.com Example Description] |
* |
* When rendering a URL token, this will convert URLs pointing to a .gif, |
* .jpg, or .png image into an inline <img /> tag (for the 'xhtml' |
* format). |
* |
* Token options are: |
* |
* 'type' => ['inline'|'footnote'|'descr'] the type of URL |
* |
* 'href' => the URL link href portion |
* |
* 'text' => the displayed text of the URL link |
* |
* $Id: Url.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Url extends Text_Wiki_Parse { |
/** |
* |
* Keeps a running count of numbered-reference URLs. |
* |
* @access public |
* |
* @var int |
* |
*/ |
var $footnoteCount = 0; |
/** |
* |
* URL schemes recognized by this rule. |
* |
* @access public |
* |
* @var array |
* |
*/ |
var $conf = array( |
'schemes' => array( |
'http://', |
'https://', |
'ftp://', |
'gopher://', |
'news://', |
'mailto:' |
) |
); |
/** |
* |
* Constructor. |
* |
* We override the constructor so we can comment the regex nicely. |
* |
* @access public |
* |
*/ |
function Text_Wiki_Parse_Url(&$obj) |
{ |
parent::Text_Wiki_Parse($obj); |
// convert the list of recognized schemes to a regex-safe string, |
// where the pattern delim is a slash |
$tmp = array(); |
$list = $this->getConf('schemes', array()); |
foreach ($list as $val) { |
$tmp[] = preg_quote($val, '/'); |
} |
$schemes = implode('|', $tmp); |
// build the regex |
$this->regex = |
"($schemes)" . // allowed schemes |
"(" . // start pattern |
"[^ \\/\"\'{$this->wiki->delim}]*\\/" . // no spaces, backslashes, slashes, double-quotes, single quotes, or delimiters; |
")*" . // end pattern |
"[^ \\t\\n\\/\"\'{$this->wiki->delim}]*" . |
"[A-Za-z0-9\\/?=&~_]"; |
} |
/** |
* |
* Find three different kinds of URLs in the source text. |
* |
* @access public |
* |
*/ |
function parse() |
{ |
// ------------------------------------------------------------- |
// |
// Described-reference (named) URLs. |
// |
// the regular expression for this kind of URL |
$tmp_regex = '/\[(' . $this->regex . ') ([^\]]+)\]/'; |
// use a custom callback processing method to generate |
// the replacement text for matches. |
$this->wiki->source = preg_replace_callback( |
$tmp_regex, |
array(&$this, 'processDescr'), |
$this->wiki->source |
); |
// ------------------------------------------------------------- |
// |
// Numbered-reference (footnote-style) URLs. |
// |
// the regular expression for this kind of URL |
$tmp_regex = '/\[(' . $this->regex . ')\]/U'; |
// use a custom callback processing method to generate |
// the replacement text for matches. |
$this->wiki->source = preg_replace_callback( |
$tmp_regex, |
array(&$this, 'processFootnote'), |
$this->wiki->source |
); |
// ------------------------------------------------------------- |
// |
// Normal inline URLs. |
// |
// the regular expression for this kind of URL |
$tmp_regex = '/(^|[^A-Za-z])(' . $this->regex . ')(.*?)/'; |
// use the standard callback for inline URLs |
$this->wiki->source = preg_replace_callback( |
$tmp_regex, |
array(&$this, 'process'), |
$this->wiki->source |
); |
} |
/** |
* |
* Process inline URLs. |
* |
* @param array &$matches |
* |
* @param array $matches An array of matches from the parse() method |
* as generated by preg_replace_callback. $matches[0] is the full |
* matched string, $matches[1] is the first matched pattern, |
* $matches[2] is the second matched pattern, and so on. |
* |
* @return string The processed text replacement. |
* |
*/ |
function process(&$matches) |
{ |
// set options |
$options = array( |
'type' => 'inline', |
'href' => $matches[2], |
'text' => $matches[2] |
); |
// tokenize |
return $matches[1] . $this->wiki->addToken($this->rule, $options) . $matches[5]; |
} |
/** |
* |
* Process numbered (footnote) URLs. |
* |
* Token options are: |
* @param array &$matches |
* |
* @param array $matches An array of matches from the parse() method |
* as generated by preg_replace_callback. $matches[0] is the full |
* matched string, $matches[1] is the first matched pattern, |
* $matches[2] is the second matched pattern, and so on. |
* |
* @return string The processed text replacement. |
* |
*/ |
function processFootnote(&$matches) |
{ |
// keep a running count for footnotes |
$this->footnoteCount++; |
// set options |
$options = array( |
'type' => 'footnote', |
'href' => $matches[1], |
'text' => $this->footnoteCount |
); |
// tokenize |
return $this->wiki->addToken($this->rule, $options); |
} |
/** |
* |
* Process described-reference (named-reference) URLs. |
* |
* Token options are: |
* 'type' => ['inline'|'footnote'|'descr'] the type of URL |
* 'href' => the URL link href portion |
* 'text' => the displayed text of the URL link |
* |
* @param array &$matches |
* |
* @param array $matches An array of matches from the parse() method |
* as generated by preg_replace_callback. $matches[0] is the full |
* matched string, $matches[1] is the first matched pattern, |
* $matches[2] is the second matched pattern, and so on. |
* |
* @return string The processed text replacement. |
* |
*/ |
function processDescr(&$matches) |
{ |
// set options |
$options = array( |
'type' => 'descr', |
'href' => $matches[1], |
'text' => $matches[4] |
); |
// tokenize |
return $this->wiki->addToken($this->rule, $options); |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Parse/Html.php |
---|
New file |
0,0 → 1,57 |
<?php |
// $Id: Html.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* This class implements a Text_Wiki_Parse to find source text marked as |
* HTML to be redndred as-is. The block start is marked by <html> on its |
* own line, and the block end is marked by </html> on its own line. |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Html extends Text_Wiki_Parse { |
/** |
* |
* The regular expression used to parse the source text and find |
* matches conforming to this rule. Used by the parse() method. |
* |
* @access public |
* |
* @var string |
* |
* @see parse() |
* |
*/ |
var $regex = '/^\<html\>\n(.+)\n\<\/html\>(\s|$)/Umsi'; |
/** |
* |
* Generates a replacement for the matched text. Token options are: |
* |
* 'text' => The text of the HTML to be rendered as-is. |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return A delimited token to be used as a placeholder in |
* the source text, plus any text following the HTML block. |
* |
*/ |
function process(&$matches) |
{ |
$options = array('text' => $matches[1]); |
return $this->wiki->addToken($this->rule, $options) . $matches[2]; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Parse/Italic.php |
---|
New file |
0,0 → 1,67 |
<?php |
// $Id: Italic.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* This class implements a Text_Wiki_Parse to find source text marked for |
* emphasis (italics) as defined by text surrounded by two single-quotes. |
* On parsing, the text itself is left in place, but the starting and ending |
* instances of two single-quotes are replaced with tokens. |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Italic extends Text_Wiki_Parse { |
/** |
* |
* The regular expression used to parse the source text and find |
* matches conforming to this rule. Used by the parse() method. |
* |
* @access public |
* |
* @var string |
* |
* @see parse() |
* |
*/ |
var $regex = "/''(()|[^'].*)''/U"; |
/** |
* |
* Generates a replacement for the matched text. Token options are: |
* |
* 'type' => ['start'|'end'] The starting or ending point of the |
* emphasized text. The text itself is left in the source. |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return string A pair of delimited tokens to be used as a |
* placeholder in the source text surrounding the text to be |
* emphasized. |
* |
*/ |
function process(&$matches) |
{ |
$start = $this->wiki->addToken( |
$this->rule, array('type' => 'start') |
); |
$end = $this->wiki->addToken( |
$this->rule, array('type' => 'end') |
); |
return $start . $matches[1] . $end; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Parse/Blockquote.php |
---|
New file |
0,0 → 1,163 |
<?php |
/** |
* |
* Parse for block-quoted text. |
* |
* Find source text marked as a blockquote, identified by any number of |
* greater-than signs '>' at the start of the line, followed by a space, |
* and then the quote text; each '>' indicates an additional level of |
* quoting. |
* |
* $Id: Blockquote.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Blockquote extends Text_Wiki_Parse { |
/** |
* |
* Regex for parsing the source text. |
* |
* @access public |
* |
* @var string |
* |
* @see parse() |
* |
*/ |
var $regex = '/\n((\>).*\n)(?!(\>))/Us'; |
/** |
* |
* Generates a replacement for the matched text. |
* |
* Token options are: |
* |
* 'type' => |
* 'start' : the start of a blockquote |
* 'end' : the end of a blockquote |
* |
* 'level' => the indent level (0 for the first level, 1 for the |
* second, etc) |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return A series of text and delimited tokens marking the different |
* list text and list elements. |
* |
*/ |
function process(&$matches) |
{ |
// the replacement text we will return to parse() |
$return = ''; |
// the list of post-processing matches |
$list = array(); |
// $matches[1] is the text matched as a list set by parse(); |
// create an array called $list that contains a new set of |
// matches for the various list-item elements. |
preg_match_all( |
'=^(\>+) (.*\n)=Ums', |
$matches[1], |
$list, |
PREG_SET_ORDER |
); |
// a stack of starts and ends; we keep this so that we know what |
// indent level we're at. |
$stack = array(); |
// loop through each list-item element. |
foreach ($list as $key => $val) { |
// $val[0] is the full matched list-item line |
// $val[1] is the number of initial '>' chars (indent level) |
// $val[2] is the quote text |
// we number levels starting at 1, not zero |
$level = strlen($val[1]); |
// get the text of the line |
$text = $val[2]; |
// add a level to the list? |
while ($level > count($stack)) { |
// the current indent level is greater than the number |
// of stack elements, so we must be starting a new |
// level. push the new level onto the stack with a |
// dummy value (boolean true)... |
array_push($stack, true); |
$return .= "\n"; |
// ...and add a start token to the return. |
$return .= $this->wiki->addToken( |
$this->rule, |
array( |
'type' => 'start', |
'level' => $level - 1 |
) |
); |
$return .= "\n\n"; |
} |
// remove a level? |
while (count($stack) > $level) { |
// as long as the stack count is greater than the |
// current indent level, we need to end list types. |
// continue adding end-list tokens until the stack count |
// and the indent level are the same. |
array_pop($stack); |
$return .= "\n\n"; |
$return .= $this->wiki->addToken( |
$this->rule, |
array ( |
'type' => 'end', |
'level' => count($stack) |
) |
); |
$return .= "\n"; |
} |
// add the line text. |
$return .= $text; |
} |
// the last line may have been indented. go through the stack |
// and create end-tokens until the stack is empty. |
$return .= "\n"; |
while (count($stack) > 0) { |
array_pop($stack); |
$return .= $this->wiki->addToken( |
$this->rule, |
array ( |
'type' => 'end', |
'level' => count($stack) |
) |
); |
} |
// we're done! send back the replacement text. |
return "\n$return\n\n"; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Parse/Anchor.php |
---|
New file |
0,0 → 1,67 |
<?php |
/** |
* |
* This class implements a Text_Wiki_Parse to add an anchor target name |
* in the wiki page. |
* |
* @author Manuel Holtgrewe <purestorm at ggnore dot net> |
* |
* @author Paul M. Jones <pmjones at ciaweb dot net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Anchor extends Text_Wiki_Parse { |
/** |
* |
* The regular expression used to find source text matching this |
* rule. |
* |
* @access public |
* |
* @var string |
* |
*/ |
var $regex = '/(\[\[# )([-_A-Za-z0-9.]+?)( .+)?(\]\])/i'; |
/** |
* |
* Generates a token entry for the matched text. Token options are: |
* |
* 'text' => The full matched text, not including the <code></code> tags. |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return A delimited token number to be used as a placeholder in |
* the source text. |
* |
*/ |
function process(&$matches) { |
$name = $matches[2]; |
$text = $matches[3]; |
$start = $this->wiki->addToken( |
$this->rule, |
array('type' => 'start', 'name' => $name) |
); |
$end = $this->wiki->addToken( |
$this->rule, |
array('type' => 'end', 'name' => $name) |
); |
// done, place the script output directly in the source |
return $start . trim($text) . $end; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Parse/List.php |
---|
New file |
0,0 → 1,230 |
<?php |
// $Id: List.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* This class implements a Text_Wiki_Parse to find source text marked as |
* a bulleted or numbered list. In short, if a line starts with '* ' then |
* it is a bullet list item; if a line starts with '# ' then it is a |
* number list item. Spaces in front of the * or # indicate an indented |
* sub-list. The list items must be on sequential lines, and may be |
* separated by blank lines to improve readability. Using a non-* non-# |
* non-whitespace character at the beginning of a line ends the list. |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_List extends Text_Wiki_Parse { |
/** |
* |
* The regular expression used to parse the source text and find |
* matches conforming to this rule. Used by the parse() method. |
* |
* @access public |
* |
* @var string |
* |
* @see parse() |
* |
*/ |
var $regex = '/\n((\*|#) .*\n)(?! {0,}(\* |# |\n))/Us'; |
/** |
* |
* Generates a replacement for the matched text. Token options are: |
* |
* 'type' => |
* 'bullet_start' : the start of a bullet list |
* 'bullet_end' : the end of a bullet list |
* 'number_start' : the start of a number list |
* 'number_end' : the end of a number list |
* 'item_start' : the start of item text (bullet or number) |
* 'item_end' : the end of item text (bullet or number) |
* 'unknown' : unknown type of list or item |
* |
* 'level' => the indent level (0 for the first level, 1 for the |
* second, etc) |
* |
* 'count' => the list item number at this level. not needed for |
* xhtml, but very useful for PDF and RTF. |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return A series of text and delimited tokens marking the different |
* list text and list elements. |
* |
*/ |
function process(&$matches) |
{ |
// the replacement text we will return |
$return = ''; |
// the list of post-processing matches |
$list = array(); |
// a stack of list-start and list-end types; we keep this |
// so that we know what kind of list we're working with |
// (bullet or number) and what indent level we're at. |
$stack = array(); |
// the item count is the number of list items for any |
// given list-type on the stack |
$itemcount = array(); |
// have we processed the very first list item? |
$pastFirst = false; |
// populate $list with this set of matches. $matches[1] is the |
// text matched as a list set by parse(). |
preg_match_all( |
'=^( {0,})(\*|#) (.*)$=Ums', |
$matches[1], |
$list, |
PREG_SET_ORDER |
); |
// loop through each list-item element. |
foreach ($list as $key => $val) { |
// $val[0] is the full matched list-item line |
// $val[1] is the number of initial spaces (indent level) |
// $val[2] is the list item type (* or #) |
// $val[3] is the list item text |
// how many levels are we indented? (1 means the "root" |
// list level, no indenting.) |
$level = strlen($val[1]) + 1; |
// get the list item type |
if ($val[2] == '*') { |
$type = 'bullet'; |
} elseif ($val[2] == '#') { |
$type = 'number'; |
} else { |
$type = 'unknown'; |
} |
// get the text of the list item |
$text = $val[3]; |
// add a level to the list? |
if ($level > count($stack)) { |
// the current indent level is greater than the |
// number of stack elements, so we must be starting |
// a new list. push the new list type onto the |
// stack... |
array_push($stack, $type); |
// ...and add a list-start token to the return. |
$return .= $this->wiki->addToken( |
$this->rule, |
array( |
'type' => $type . '_list_start', |
'level' => $level - 1 |
) |
); |
} |
// remove a level from the list? |
while (count($stack) > $level) { |
// so we don't keep counting the stack, we set up a temp |
// var for the count. -1 becuase we're going to pop the |
// stack in the next command. $tmp will then equal the |
// current level of indent. |
$tmp = count($stack) - 1; |
// as long as the stack count is greater than the |
// current indent level, we need to end list types. |
// continue adding end-list tokens until the stack count |
// and the indent level are the same. |
$return .= $this->wiki->addToken( |
$this->rule, |
array ( |
'type' => array_pop($stack) . '_list_end', |
'level' => $tmp |
) |
); |
// reset to the current (previous) list type so that |
// the new list item matches the proper list type. |
$type = $stack[$tmp - 1]; |
// reset the item count for the popped indent level |
unset($itemcount[$tmp + 1]); |
} |
// add to the item count for this list (taking into account |
// which level we are at). |
if (! isset($itemcount[$level])) { |
// first count |
$itemcount[$level] = 0; |
} else { |
// increment count |
$itemcount[$level]++; |
} |
// is this the very first item in the list? |
if (! $pastFirst) { |
$first = true; |
$pastFirst = true; |
} else { |
$first = false; |
} |
// create a list-item starting token. |
$start = $this->wiki->addToken( |
$this->rule, |
array( |
'type' => $type . '_item_start', |
'level' => $level, |
'count' => $itemcount[$level], |
'first' => $first |
) |
); |
// create a list-item ending token. |
$end = $this->wiki->addToken( |
$this->rule, |
array( |
'type' => $type . '_item_end', |
'level' => $level, |
'count' => $itemcount[$level] |
) |
); |
// add the starting token, list-item text, and ending token |
// to the return. |
$return .= $start . $val[3] . $end; |
} |
// the last list-item may have been indented. go through the |
// list-type stack and create end-list tokens until the stack |
// is empty. |
while (count($stack) > 0) { |
$return .= $this->wiki->addToken( |
$this->rule, |
array ( |
'type' => array_pop($stack) . '_list_end', |
'level' => count($stack) |
) |
); |
} |
// we're done! send back the replacement text. |
return "\n" . $return . "\n\n"; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Parse/Bold.php |
---|
New file |
0,0 → 1,61 |
<?php |
// $Id: Bold.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* This class implements a Text_Wiki_Rule to find source text marked for |
* strong emphasis (bold) as defined by text surrounded by three |
* single-quotes. On parsing, the text itself is left in place, but the |
* starting and ending instances of three single-quotes are replaced with |
* tokens. |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Bold extends Text_Wiki_Parse { |
/** |
* |
* The regular expression used to parse the source text and find |
* matches conforming to this rule. Used by the parse() method. |
* |
* @access public |
* |
* @var string |
* |
* @see parse() |
* |
*/ |
var $regex = "/'''(()|[^'].*)'''/U"; |
/** |
* |
* Generates a replacement for the matched text. Token options are: |
* |
* 'type' => ['start'|'end'] The starting or ending point of the |
* emphasized text. The text itself is left in the source. |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return A pair of delimited tokens to be used as a placeholder in |
* the source text surrounding the text to be emphasized. |
* |
*/ |
function process(&$matches) |
{ |
$start = $this->wiki->addToken($this->rule, array('type' => 'start')); |
$end = $this->wiki->addToken($this->rule, array('type' => 'end')); |
return $start . $matches[1] . $end; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Parse/Wikilink.php |
---|
New file |
0,0 → 1,158 |
<?php |
/** |
* |
* Parse for links to wiki pages. |
* |
* Wiki page names are typically in StudlyCapsStyle made of |
* WordsSmashedTogether. |
* |
* You can also create described links to pages in this style: |
* [WikiPageName nice text link to use for display] |
* |
* The token options for this rule are: |
* |
* 'page' => the wiki page name. |
* |
* 'text' => the displayed link text. |
* |
* 'anchor' => a named anchor on the target wiki page. |
* |
* $Id: Wikilink.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Wikilink extends Text_Wiki_Parse { |
/** |
* |
* Constructor. |
* |
* We override the Text_Wiki_Parse constructor so we can |
* explicitly comment each part of the $regex property. |
* |
* @access public |
* |
* @param object &$obj The calling "parent" Text_Wiki object. |
* |
*/ |
function Text_Wiki_Parse_Wikilink(&$obj) |
{ |
parent::Text_Wiki_Parse($obj); |
// allows numbers as "lowercase letters" in the regex |
$this->regex = |
"(!?" . // START WikiPage pattern (1) |
"[A-Z]" . // 1 upper |
"[A-Za-z0-9]*" . // 0+ alpha or digit |
"[a-z0-9]+" . // 1+ lower or digit |
"[A-Z]" . // 1 upper |
"[A-Za-z0-9]*" . // 0+ or more alpha or digit |
")" . // END WikiPage pattern (/1) |
"((\#" . // START Anchor pattern (2)(3) |
"[A-Za-z]" . // 1 alpha |
"(" . // start sub pattern (4) |
"[-A-Za-z0-9_:.]*" . // 0+ dash, alpha, digit, underscore, colon, dot |
"[-A-Za-z0-9_]" . // 1 dash, alpha, digit, or underscore |
")?)?)"; // end subpatterns (/4)(/3)(/2) |
} |
/** |
* |
* First parses for described links, then for standalone links. |
* |
* @access public |
* |
* @return void |
* |
*/ |
function parse() |
{ |
// described wiki links |
$tmp_regex = '/\[' . $this->regex . ' (.+?)\]/'; |
$this->wiki->source = preg_replace_callback( |
$tmp_regex, |
array(&$this, 'processDescr'), |
$this->wiki->source |
); |
// standalone wiki links |
$tmp_regex = '/(^|[^A-Za-z0-9\-_])' . $this->regex . '/'; |
$this->wiki->source = preg_replace_callback( |
$tmp_regex, |
array(&$this, 'process'), |
$this->wiki->source |
); |
} |
/** |
* |
* Generate a replacement for described links. |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return A delimited token to be used as a placeholder in |
* the source text, plus any text priot to the match. |
* |
*/ |
function processDescr(&$matches) |
{ |
// set the options |
$options = array( |
'page' => $matches[1], |
'text' => $matches[5], |
'anchor' => $matches[3] |
); |
// create and return the replacement token and preceding text |
return $this->wiki->addToken($this->rule, $options); // . $matches[7]; |
} |
/** |
* |
* Generate a replacement for standalone links. |
* |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return A delimited token to be used as a placeholder in |
* the source text, plus any text prior to the match. |
* |
*/ |
function process(&$matches) |
{ |
// when prefixed with !, it's explicitly not a wiki link. |
// return everything as it was. |
if ($matches[2]{0} == '!') { |
return $matches[1] . substr($matches[2], 1) . $matches[3]; |
} |
// set the options |
$options = array( |
'page' => $matches[2], |
'text' => $matches[2] . $matches[3], |
'anchor' => $matches[3] |
); |
// create and return the replacement token and preceding text |
return $matches[1] . $this->wiki->addToken($this->rule, $options); |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Parse/Phplookup.php |
---|
New file |
0,0 → 1,58 |
<?php |
// $Id: Phplookup.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* Find source text marked for |
* lookup in the PHP online manual. |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Phplookup extends Text_Wiki_Parse { |
/** |
* |
* The regular expression used to parse the source text and find |
* matches conforming to this rule. Used by the parse() method. |
* |
* @access public |
* |
* @var string |
* |
* @see parse() |
* |
*/ |
var $regex = "/\[\[php (.+?)\]\]/"; |
/** |
* |
* Generates a replacement for the matched text. Token options are: |
* |
* 'type' => ['start'|'end'] The starting or ending point of the |
* teletype text. The text itself is left in the source. |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return string A pair of delimited tokens to be used as a |
* placeholder in the source text surrounding the teletype text. |
* |
*/ |
function process(&$matches) |
{ |
return $this->wiki->addToken( |
$this->rule, array('text' => $matches[1]) |
); |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Parse/Colortext.php |
---|
New file |
0,0 → 1,74 |
<?php |
// $Id: Colortext.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* This class implements a Text_Wiki_Parse to find source text marked for |
* coloring. |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Colortext extends Text_Wiki_Parse { |
/** |
* |
* The regular expression used to parse the source text and find |
* matches conforming to this rule. Used by the parse() method. |
* |
* @access public |
* |
* @var string |
* |
* @see parse() |
* |
*/ |
var $regex = "/\#\#(.+?)\|(.+?)\#\#/"; |
/** |
* |
* Generates a replacement for the matched text. Token options are: |
* |
* 'type' => ['start'|'end'] The starting or ending point of the |
* emphasized text. The text itself is left in the source. |
* |
* 'color' => the color indicator |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return string A pair of delimited tokens to be used as a |
* placeholder in the source text surrounding the text to be |
* emphasized. |
* |
*/ |
function process(&$matches) |
{ |
$start = $this->wiki->addToken( |
$this->rule, |
array( |
'type' => 'start', |
'color' => $matches[1] |
) |
); |
$end = $this->wiki->addToken( |
$this->rule, |
array( |
'type' => 'end', |
'color' => $matches[1] |
) |
); |
return $start . $matches[2] . $end; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Parse/Include.php |
---|
New file |
0,0 → 1,84 |
<?php |
// $Id: Include.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* This class implements a Text_Wiki_Parse to include the results of a |
* script directly into the source at parse-time; thus, the output of the |
* script will be parsed by Text_Wiki. This differs from the 'embed' |
* rule, which incorporates the results at render-time, meaning that the |
* 'embed' content is not parsed by Text_Wiki. |
* |
* DANGER! |
* |
* This rule is inherently not secure; it allows cross-site scripting to |
* occur if the embedded output has <script> or other similar tags. Be |
* careful. |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Include extends Text_Wiki_Parse { |
var $conf = array( |
'base' => '/path/to/scripts/' |
); |
var $file = null; |
var $output = null; |
var $vars = null; |
/** |
* |
* The regular expression used to find source text matching this |
* rule. |
* |
* @access public |
* |
* @var string |
* |
*/ |
var $regex = '/(\[\[include )(.+?)( .+?)?(\]\])/i'; |
/** |
* |
* Includes the results of the script directly into the source; the output |
* will subsequently be parsed by the remaining Text_Wiki rules. |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return The results of the included script. |
* |
*/ |
function process(&$matches) |
{ |
// save the file location |
$this->file = $this->getConf('base', './') . $matches[2]; |
// extract attribs as variables in the local space |
$this->vars = $this->getAttrs($matches[3]); |
unset($this->vars['this']); |
extract($this->vars); |
// run the script |
ob_start(); |
include($this->file); |
$this->output = ob_get_contents(); |
ob_end_clean(); |
// done, place the script output directly in the source |
return $this->output; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Parse/Superscript.php |
---|
New file |
0,0 → 1,67 |
<?php |
// $Id: Superscript.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* This class implements a Text_Wiki_Parse to find source text marked for |
* strong emphasis (bold) as defined by text surrounded by three |
* single-quotes. On parsing, the text itself is left in place, but the |
* starting and ending instances of three single-quotes are replaced with |
* tokens. |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Superscript extends Text_Wiki_Parse { |
/** |
* |
* The regular expression used to parse the source text and find |
* matches conforming to this rule. Used by the parse() method. |
* |
* @access public |
* |
* @var string |
* |
* @see parse() |
* |
*/ |
var $regex = "/\^\^(()|.*)\^\^/U"; |
/** |
* |
* Generates a replacement for the matched text. Token options are: |
* |
* 'type' => ['start'|'end'] The starting or ending point of the |
* emphasized text. The text itself is left in the source. |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return A pair of delimited tokens to be used as a placeholder in |
* the source text surrounding the text to be emphasized. |
* |
*/ |
function process(&$matches) |
{ |
$start = $this->wiki->addToken( |
$this->rule, array('type' => 'start') |
); |
$end = $this->wiki->addToken( |
$this->rule, array('type' => 'end') |
); |
return $start . $matches[1] . $end; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Parse/Break.php |
---|
New file |
0,0 → 1,54 |
<?php |
// $Id: Break.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* This class implements a Text_Wiki_Parse to mark forced line breaks in the |
* source text. |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Parse_Break extends Text_Wiki_Parse { |
/** |
* |
* The regular expression used to parse the source text and find |
* matches conforming to this rule. Used by the parse() method. |
* |
* @access public |
* |
* @var string |
* |
* @see parse() |
* |
*/ |
var $regex = '/ _\n/'; |
/** |
* |
* Generates a replacement token for the matched text. |
* |
* @access public |
* |
* @param array &$matches The array of matches from parse(). |
* |
* @return string A delimited token to be used as a placeholder in |
* the source text. |
* |
*/ |
function process(&$matches) |
{ |
return $this->wiki->addToken($this->rule); |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Plain.php |
---|
New file |
0,0 → 1,16 |
<?php |
class Text_Wiki_Render_Plain extends Text_Wiki_Render { |
function pre() |
{ |
return; |
} |
function post() |
{ |
return; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Xhtml/Newline.php |
---|
New file |
0,0 → 1,12 |
<?php |
class Text_Wiki_Render_Xhtml_Newline extends Text_Wiki_Render { |
function token($options) |
{ |
return "<br />\n"; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Xhtml/Url.php |
---|
New file |
0,0 → 1,91 |
<?php |
class Text_Wiki_Render_Xhtml_Url extends Text_Wiki_Render { |
var $conf = array( |
'target' => '_blank', |
'images' => true, |
'img_ext' => array('jpg', 'jpeg', 'gif', 'png'), |
'css_inline' => null, |
'css_footnote' => null, |
'css_descr' => null, |
'css_img' => null |
); |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
// create local variables from the options array (text, |
// href, type) |
extract($options); |
// find the rightmost dot and determine the filename |
// extension. |
$pos = strrpos($href, '.'); |
$ext = strtolower(substr($href, $pos + 1)); |
$href = htmlspecialchars($href); |
// does the filename extension indicate an image file? |
if ($this->getConf('images') && |
in_array($ext, $this->getConf('img_ext', array()))) { |
// create alt text for the image |
if (! isset($text) || $text == '') { |
$text = basename($href); |
$text = htmlspecialchars($text); |
} |
// generate an image tag |
$css = $this->formatConf(' class="%s"', 'css_img'); |
$output = "<img$css src=\"$href\" alt=\"$text\" />"; |
} else { |
// allow for alternative targets on non-anchor HREFs |
if ($href{0} == '#') { |
$target = ''; |
} else { |
$target = $this->getConf('target'); |
} |
// generate a regular link (not an image) |
$text = htmlspecialchars($text); |
$css = $this->formatConf(' class="%s"', "css_$type"); |
$output = "<a$css href=\"$href\""; |
if ($target) { |
// use a "popup" window. this is XHTML compliant, suggested by |
// Aaron Kalin. uses the $target as the new window name. |
$target = htmlspecialchars($target); |
$output .= " onclick=\"window.open(this.href, '$target');"; |
$output .= " return false;\""; |
} |
// finish up output |
$output .= ">$text</a>"; |
// make numbered references look like footnotes when no |
// CSS class specified, make them superscript by default |
if ($type == 'footnote' && ! $css) { |
$output = '<sup>' . $output . '</sup>'; |
} |
} |
return $output; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Xhtml/Html.php |
---|
New file |
0,0 → 1,24 |
<?php |
class Text_Wiki_Render_Xhtml_Html extends Text_Wiki_Render { |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
return $options['text']; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Xhtml/Italic.php |
---|
New file |
0,0 → 1,34 |
<?php |
class Text_Wiki_Render_Xhtml_Italic extends Text_Wiki_Render { |
var $conf = array( |
'css' => null |
); |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
if ($options['type'] == 'start') { |
$css = $this->formatConf(' class="%s"', 'css'); |
return "<i$css>"; |
} |
if ($options['type'] == 'end') { |
return '</i>'; |
} |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Xhtml/Blockquote.php |
---|
New file |
0,0 → 1,46 |
<?php |
class Text_Wiki_Render_Xhtml_Blockquote extends Text_Wiki_Render { |
var $conf = array( |
'css' => null |
); |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
$type = $options['type']; |
$level = $options['level']; |
// set up indenting so that the results look nice; we do this |
// in two steps to avoid str_pad mathematics. ;-) |
$pad = str_pad('', $level, "\t"); |
$pad = str_replace("\t", ' ', $pad); |
// pick the css type |
$css = $this->formatConf(' class="%s"', 'css'); |
// starting |
if ($type == 'start') { |
return "$pad<blockquote$css>"; |
} |
// ending |
if ($type == 'end') { |
return $pad . "</blockquote>\n"; |
} |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Xhtml/Anchor.php |
---|
New file |
0,0 → 1,37 |
<?php |
/** |
* |
* This class renders an anchor target name in XHTML. |
* |
* @author Manuel Holtgrewe <purestorm at ggnore dot net> |
* |
* @author Paul M. Jones <pmjones at ciaweb dot net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Render_Xhtml_Anchor extends Text_Wiki_Render { |
var $conf = array( |
'css' => null |
); |
function token($options) |
{ |
extract($options); // $type, $name |
if ($type == 'start') { |
$css = $this->formatConf(' class="%s"', 'css'); |
$format = "<a$css id=\"%s\">'"; |
return sprintf($format ,$name); |
} |
if ($type == 'end') { |
return '</a>'; |
} |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Xhtml/List.php |
---|
New file |
0,0 → 1,142 |
<?php |
class Text_Wiki_Render_Xhtml_List extends Text_Wiki_Render { |
var $conf = array( |
'css_ol' => null, |
'css_ol_li' => null, |
'css_ul' => null, |
'css_ul_li' => null |
); |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* This rendering method is syntactically and semantically compliant |
* with XHTML 1.1 in that sub-lists are part of the previous list item. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
// make nice variables (type, level, count) |
extract($options); |
// set up indenting so that the results look nice; we do this |
// in two steps to avoid str_pad mathematics. ;-) |
$pad = str_pad('', $level, "\t"); |
$pad = str_replace("\t", ' ', $pad); |
switch ($type) { |
case 'bullet_list_start': |
// build the base HTML |
$css = $this->formatConf(' class="%s"', 'css_ul'); |
$html = "<ul$css>"; |
// if this is the opening block for the list, |
// put an extra newline in front of it so the |
// output looks nice. |
if ($level == 0) { |
$html = "\n$html"; |
} |
// done! |
return $html; |
break; |
case 'bullet_list_end': |
// build the base HTML |
$html = "</li>\n$pad</ul>"; |
// if this is the closing block for the list, |
// put extra newlines after it so the output |
// looks nice. |
if ($level == 0) { |
$html .= "\n\n"; |
} |
// done! |
return $html; |
break; |
case 'number_list_start': |
// build the base HTML |
$css = $this->formatConf(' class="%s"', 'css_ol'); |
$html = "<ol$css>"; |
// if this is the opening block for the list, |
// put an extra newline in front of it so the |
// output looks nice. |
if ($level == 0) { |
$html = "\n$html"; |
} |
// done! |
return $html; |
break; |
case 'number_list_end': |
// build the base HTML |
$html = "</li>\n$pad</ol>"; |
// if this is the closing block for the list, |
// put extra newlines after it so the output |
// looks nice. |
if ($level == 0) { |
$html .= "\n\n"; |
} |
// done! |
return $html; |
break; |
case 'bullet_item_start': |
case 'number_item_start': |
// pick the proper CSS class |
if ($type == 'bullet_item_start') { |
$css = $this->formatConf(' class="%s"', 'css_ul_li'); |
} else { |
$css = $this->formatConf(' class="%s"', 'css_ol_li'); |
} |
// build the base HTML |
$html = "\n$pad<li$css>"; |
// for the very first item in the list, do nothing. |
// but for additional items, be sure to close the |
// previous item. |
if ($count > 0) { |
$html = "</li>$html"; |
} |
// done! |
return $html; |
break; |
case 'bullet_item_end': |
case 'number_item_end': |
default: |
// ignore item endings and all other types. |
// item endings are taken care of by the other types |
// depending on their place in the list. |
return ''; |
break; |
} |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Xhtml/Bold.php |
---|
New file |
0,0 → 1,34 |
<?php |
class Text_Wiki_Render_Xhtml_Bold extends Text_Wiki_Render { |
var $conf = array( |
'css' => null |
); |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
if ($options['type'] == 'start') { |
$css = $this->formatConf(' class="%s"', 'css'); |
return "<b$css>"; |
} |
if ($options['type'] == 'end') { |
return '</b>'; |
} |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Xhtml/Wikilink.php |
---|
New file |
0,0 → 1,122 |
<?php |
class Text_Wiki_Render_Xhtml_Wikilink extends Text_Wiki_Render { |
var $conf = array( |
'pages' => array(), // set to null or false to turn off page checks |
'view_url' => 'http://example.com/index.php?page=%s', |
'new_url' => 'http://example.com/new.php?page=%s', |
'new_text' => '?', |
'new_text_pos' => 'after', // 'before', 'after', or null/false |
'css' => null, |
'css_new' => null |
); |
/** |
* |
* Renders a token into XHTML. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
// make nice variable names (page, anchor, text) |
extract($options); |
// are we checking page existence? |
$list =& $this->getConf('pages'); |
if (is_array($list)) { |
// yes, check against the page list |
$exists = in_array($page, $list); |
} else { |
// no, assume it exists |
$exists = true; |
} |
// convert *after* checking against page names so as not to mess |
// up what the user typed and what we're checking. |
$page = htmlspecialchars($page); |
$anchor = htmlspecialchars($anchor); |
$text = htmlspecialchars($text); |
// does the page exist? |
if ($exists) { |
// PAGE EXISTS. |
// yes, link to the page view, but we have to build |
// the HREF. we support both the old form where |
// the page always comes at the end, and the new |
// form that uses %s for sprintf() |
$href = $this->getConf('view_url'); |
if (strpos($href, '%s') === false) { |
// use the old form (page-at-end) |
$href = $href . $page . $anchor; |
} else { |
// use the new form (sprintf format string) |
$href = sprintf($href, $page . $anchor); |
} |
// get the CSS class and generate output |
$css = $this->formatConf(' class="%s"', 'css'); |
$output = "<a$css href=\"$href\">$text</a>"; |
} else { |
// PAGE DOES NOT EXIST. |
// link to a create-page url, but only if new_url is set |
$href = $this->getConf('new_url', null); |
// set the proper HREF |
if (! $href || trim($href) == '') { |
// no useful href, return the text as it is |
$output = $text; |
} else { |
// yes, link to the new-page href, but we have to build |
// it. we support both the old form where |
// the page always comes at the end, and the new |
// form that uses sprintf() |
if (strpos($href, '%s') === false) { |
// use the old form |
$href = $href . $page; |
} else { |
// use the new form |
$href = sprintf($href, $page); |
} |
} |
// get the appropriate CSS class and new-link text |
$css = $this->formatConf(' class="%s"', 'css'); |
$new = $this->getConf('new_text'); |
// what kind of linking are we doing? |
$pos = $this->getConf('new_text_pos'); |
if (! $pos || ! $new) { |
// no position (or no new_text), use css only on the page name |
$output = "<a$css href=\"$href\">$page</a>"; |
} elseif ($pos == 'before') { |
// use the new_text BEFORE the page name |
$output = "<a$css href=\"$href\">$new</a>$text"; |
} else { |
// default, use the new_text link AFTER the page name |
$output = "$text<a$css href=\"$href\">$new</a>"; |
} |
} |
return $output; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Xhtml/Phplookup.php |
---|
New file |
0,0 → 1,59 |
<?php |
// $Id: Phplookup.php,v 1.1 2005-01-20 19:43:21 jpm Exp $ |
class Text_Wiki_Render_Xhtml_Phplookup extends Text_Wiki_Render { |
var $conf = array( |
'target' => '_blank', |
'css' => null |
); |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
$text = trim($options['text']); |
$css = $this->formatConf(' class="%s"', 'css'); |
// start the html |
$output = "<a$css"; |
// are we targeting another window? |
$target = $this->getConf('target', ''); |
if ($target) { |
// use a "popup" window. this is XHTML compliant, suggested by |
// Aaron Kalin. uses the $target as the new window name. |
$target = htmlspecialchars($target); |
$output .= " onclick=\"window.open(this.href, '$target');"; |
$output .= " return false;\""; |
} |
// take off the final parens for functions |
if (substr($text, -2) == '()') { |
$q = substr($text, 0, -2); |
} else { |
$q = $text; |
} |
$q = htmlspecialchars($q); |
$text = htmlspecialchars($text); |
// finish and return |
$output .= " href=\"http://php.net/$q\">$text</a>"; |
return $output; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Xhtml/Superscript.php |
---|
New file |
0,0 → 1,34 |
<?php |
class Text_Wiki_Render_Xhtml_Superscript extends Text_Wiki_Render { |
var $conf = array( |
'css' => null |
); |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
if ($options['type'] == 'start') { |
$css = $this->formatConf(' class="%s"', 'css'); |
return "<sup$css>"; |
} |
if ($options['type'] == 'end') { |
return '</sup>'; |
} |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Xhtml/Include.php |
---|
New file |
0,0 → 1,8 |
<?php |
class Text_Wiki_Render_Xhtml_Include extends Text_Wiki_Render { |
function token() |
{ |
return ''; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Xhtml/Colortext.php |
---|
New file |
0,0 → 1,56 |
<?php |
class Text_Wiki_Render_Xhtml_Colortext extends Text_Wiki_Render { |
var $colors = array( |
'aqua', |
'black', |
'blue', |
'fuchsia', |
'gray', |
'green', |
'lime', |
'maroon', |
'navy', |
'olive', |
'purple', |
'red', |
'silver', |
'teal', |
'white', |
'yellow' |
); |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
$type = $options['type']; |
$color = $options['color']; |
if (! in_array($color, $this->colors)) { |
$color = '#' . $color; |
} |
if ($type == 'start') { |
return "<span style=\"color: $color;\">"; |
} |
if ($options['type'] == 'end') { |
return '</span>'; |
} |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Xhtml/Break.php |
---|
New file |
0,0 → 1,29 |
<?php |
class Text_Wiki_Render_Xhtml_Break extends Text_Wiki_Render { |
var $conf = array( |
'css' => null |
); |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
$css = $this->formatConf(' class="%s"', 'css'); |
return "<br$css />\n"; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Xhtml/Toc.php |
---|
New file |
0,0 → 1,80 |
<?php |
// $Id: Toc.php,v 1.1 2005-01-20 19:43:21 jpm Exp $ |
class Text_Wiki_Render_Xhtml_Toc extends Text_Wiki_Render { |
var $conf = array( |
'css_list' => null, |
'css_item' => null, |
'title' => '<strong>Table of Contents</strong>', |
'div_id' => 'toc' |
); |
var $min = 2; |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
// type, id, level, count, attr |
extract($options); |
switch ($type) { |
case 'list_start': |
$html = '<div'; |
$css = $this->getConf('css_list'); |
if ($css) { |
$html .= " class=\"$css\""; |
} |
$div_id = $this->getConf('div_id'); |
if ($div_id) { |
$html .= " id=\"$div_id\""; |
} |
$html .= '>'; |
$html .= $this->getConf('title'); |
return $html; |
break; |
case 'list_end': |
return "</div>\n"; |
break; |
case 'item_start': |
$html = '<div'; |
$css = $this->getConf('css_item'); |
if ($css) { |
$html .= " class=\"$css\""; |
} |
$pad = ($level - $this->min); |
$html .= " style=\"margin-left: {$pad}em;\">"; |
$html .= "<a href=\"#$id\">"; |
return $html; |
break; |
case 'item_end': |
return "</a></div>\n"; |
break; |
} |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Xhtml/Tt.php |
---|
New file |
0,0 → 1,35 |
<?php |
class Text_Wiki_Render_Xhtml_tt extends Text_Wiki_Render { |
var $conf = array( |
'css' => null |
); |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
if ($options['type'] == 'start') { |
$css = $this->formatConf(' class="%s"', 'css'); |
return "<tt$css>"; |
} |
if ($options['type'] == 'end') { |
return '</tt>'; |
} |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Xhtml/Table.php |
---|
New file |
0,0 → 1,98 |
<?php |
class Text_Wiki_Render_Xhtml_Table extends Text_Wiki_Render { |
var $conf = array( |
'css_table' => null, |
'css_tr' => null, |
'css_th' => null, |
'css_td' => null |
); |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
// make nice variable names (type, attr, span) |
extract($options); |
$pad = ' '; |
switch ($type) { |
case 'table_start': |
$css = $this->formatConf(' class="%s"', 'css_table'); |
return "\n\n<table$css>\n"; |
break; |
case 'table_end': |
return "</table>\n\n"; |
break; |
case 'row_start': |
$css = $this->formatConf(' class="%s"', 'css_tr'); |
return "$pad<tr$css>\n"; |
break; |
case 'row_end': |
return "$pad</tr>\n"; |
break; |
case 'cell_start': |
// base html |
$html = $pad . $pad; |
// is this a TH or TD cell? |
if ($attr == 'header') { |
// start a header cell |
$css = $this->formatConf(' class="%s"', 'css_th'); |
$html .= "<th$css"; |
} else { |
// start a normal cell |
$css = $this->formatConf(' class="%s"', 'css_td'); |
$html .= "<td$css"; |
} |
// add the column span |
if ($span > 1) { |
$html .= " colspan=\"$span\""; |
} |
// add alignment |
if ($attr != 'header' && $attr != '') { |
$html .= " style=\"text-align: $attr;\""; |
} |
// done! |
$html .= '>'; |
return $html; |
break; |
case 'cell_end': |
if ($attr == 'header') { |
return "</th>\n"; |
} else { |
return "</td>\n"; |
} |
break; |
default: |
return ''; |
} |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Xhtml/Raw.php |
---|
New file |
0,0 → 1,23 |
<?php |
class Text_Wiki_Render_Xhtml_Raw extends Text_Wiki_Render { |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
return $options['text']; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Xhtml/Deflist.php |
---|
New file |
0,0 → 1,64 |
<?php |
class Text_Wiki_Render_Xhtml_Deflist extends Text_Wiki_Render { |
var $conf = array( |
'css_dl' => null, |
'css_dt' => null, |
'css_dd' => null |
); |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
$type = $options['type']; |
$pad = " "; |
switch ($type) { |
case 'list_start': |
$css = $this->formatConf(' class="%s"', 'css_dl'); |
return "<dl$css>\n"; |
break; |
case 'list_end': |
return "</dl>\n\n"; |
break; |
case 'term_start': |
$css = $this->formatConf(' class="%s"', 'css_dt'); |
return $pad . "<dt$css>"; |
break; |
case 'term_end': |
return "</dt>\n"; |
break; |
case 'narr_start': |
$css = $this->formatConf(' class="%s"', 'css_dd'); |
return $pad . $pad . "<dd$css>"; |
break; |
case 'narr_end': |
return "</dd>\n"; |
break; |
default: |
return ''; |
} |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Xhtml/Horiz.php |
---|
New file |
0,0 → 1,28 |
<?php |
class Text_Wiki_Render_Xhtml_Horiz extends Text_Wiki_Render { |
var $conf = array( |
'css' => null |
); |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
$css = $this->formatConf(' class="%s"', 'css'); |
return "<hr$css />\n"; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Xhtml/Prefilter.php |
---|
New file |
0,0 → 1,40 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +----------------------------------------------------------------------+ |
// | PHP version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2003 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Paul M. Jones <pmjones@ciaweb.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: Prefilter.php,v 1.1 2005-01-20 19:43:21 jpm Exp $ |
/** |
* |
* This class implements a Text_Wiki_Render_Xhtml to "pre-filter" source text so |
* that line endings are consistently \n, lines ending in a backslash \ |
* are concatenated with the next line, and tabs are converted to spaces. |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Render_Xhtml_Prefilter extends Text_Wiki_Render { |
function token() |
{ |
return ''; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Xhtml/Revise.php |
---|
New file |
0,0 → 1,45 |
<?php |
class Text_Wiki_Render_Xhtml_Revise extends Text_Wiki_Render { |
var $conf = array( |
'css_ins' => null, |
'css_del' => null |
); |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
if ($options['type'] == 'del_start') { |
$css = $this->formatConf(' class="%s"', 'css_del'); |
return "<del$css>"; |
} |
if ($options['type'] == 'del_end') { |
return "</del>"; |
} |
if ($options['type'] == 'ins_start') { |
$css = $this->formatConf(' class="%s"', 'css_ins'); |
return "<ins$css>"; |
} |
if ($options['type'] == 'ins_end') { |
return "</ins>"; |
} |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Xhtml/Freelink.php |
---|
New file |
0,0 → 1,9 |
<?php |
require_once 'Text/Wiki/Render/Xhtml/Wikilink.php'; |
class Text_Wiki_Render_Xhtml_Freelink extends Text_Wiki_Render_Xhtml_Wikilink { |
// renders identically to wikilinks, only the parsing is different :-) |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Xhtml/Heading.php |
---|
New file |
0,0 → 1,29 |
<?php |
class Text_Wiki_Render_Xhtml_Heading extends Text_Wiki_Render { |
var $conf = array( |
'css_h1' => null, |
'css_h2' => null, |
'css_h3' => null, |
'css_h4' => null, |
'css_h5' => null, |
'css_h6' => null |
); |
function token($options) |
{ |
// get nice variable names (id, type, level) |
extract($options); |
if ($type == 'start') { |
$css = $this->formatConf(' class="%s"', "css_h$level"); |
return "<h$level$css id=\"$id\">"; |
} |
if ($type == 'end') { |
return "</h$level>\n"; |
} |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Xhtml/Tighten.php |
---|
New file |
0,0 → 1,10 |
<?php |
class Text_Wiki_Render_Xhtml_Tighten extends Text_Wiki_Render { |
function token() |
{ |
return ''; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Xhtml/Interwiki.php |
---|
New file |
0,0 → 1,74 |
<?php |
class Text_Wiki_Render_Xhtml_Interwiki extends Text_Wiki_Render { |
var $conf = array( |
'sites' => array( |
'MeatBall' => 'http://www.usemod.com/cgi-bin/mb.pl?%s', |
'Advogato' => 'http://advogato.org/%s', |
'Wiki' => 'http://c2.com/cgi/wiki?%s' |
), |
'target' => '_blank', |
'css' => null |
); |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
$site = $options['site']; |
$page = $options['page']; |
$text = $options['text']; |
$css = $this->formatConf(' class="%s"', 'css'); |
if (isset($this->conf['sites'][$site])) { |
$href = $this->conf['sites'][$site]; |
} else { |
return $text; |
} |
// old form where page is at end, |
// or new form with %s placeholder for sprintf()? |
if (strpos($href, '%s') === false) { |
// use the old form |
$href = $href . $page; |
} else { |
// use the new form |
$href = sprintf($href, $page); |
} |
// allow for alternative targets |
$target = $this->getConf('target'); |
// build base link |
$text = htmlspecialchars($text); |
$output = "<a$css href=\"$href\""; |
// are we targeting a specific window? |
if ($target) { |
// this is XHTML compliant, suggested by Aaron Kalin. |
// code tip is actually from youngpup.net, and it |
// uses the $target as the new window name. |
$target = htmlspecialchars($target); |
$output .= " onClick=\"window.open(this.href, '$target');"; |
$output .= " return false;\""; |
} |
$output .= ">$text</a>"; |
return $output; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Xhtml/Paragraph.php |
---|
New file |
0,0 → 1,36 |
<?php |
class Text_Wiki_Render_Xhtml_Paragraph extends Text_Wiki_Render { |
var $conf = array( |
'css' => null |
); |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
extract($options); //type |
if ($type == 'start') { |
$css = $this->formatConf(' class="%s"', 'css'); |
return "<p$css>"; |
} |
if ($type == 'end') { |
return "</p>\n\n"; |
} |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Xhtml/Emphasis.php |
---|
New file |
0,0 → 1,35 |
<?php |
class Text_Wiki_Render_Xhtml_Emphasis extends Text_Wiki_Render { |
var $conf = array( |
'css' => null |
); |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
if ($options['type'] == 'start') { |
$css = $this->formatConf(' class="%s"', 'css'); |
return "<em$css>"; |
} |
if ($options['type'] == 'end') { |
return '</em>'; |
} |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Xhtml/Code.php |
---|
New file |
0,0 → 1,102 |
<?php |
class Text_Wiki_Render_Xhtml_Code extends Text_Wiki_Render { |
var $conf = array( |
'css' => null, // class for <pre> |
'css_code' => null, // class for generic <code> |
'css_php' => null, // class for PHP <code> |
'css_html' => null // class for HTML <code> |
); |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
$text = $options['text']; |
$attr = $options['attr']; |
$type = strtolower($attr['type']); |
$css = $this->formatConf(' class="%s"', 'css'); |
$css_code = $this->formatConf(' class="%s"', 'css_code'); |
$css_php = $this->formatConf(' class="%s"', 'css_php'); |
$css_html = $this->formatConf(' class="%s"', 'css_html'); |
if ($type == 'php') { |
// PHP code example: |
// add the PHP tags |
$text = "<?php\n" . $options['text'] . "\n?>"; // <?php |
// convert tabs to four spaces |
$text = str_replace("\t", " ", $text); |
// colorize the code block (also converts HTML entities and adds |
// <code>...</code> tags) |
ob_start(); |
highlight_string($text); |
$text = ob_get_contents(); |
ob_end_clean(); |
// replace <br /> tags with simple newlines. |
// replace non-breaking space with simple spaces. |
// translate HTML <font> and color to XHTML <span> and style. |
// courtesy of research by A. Kalin :-). |
$map = array( |
'<br />' => "\n", |
' ' => ' ', |
'<font' => '<span', |
'</font>' => '</span>', |
'color="' => 'style="color:' |
); |
$text = strtr($text, $map); |
// get rid of the last newline inside the code block |
// (becuase higlight_string puts one there) |
if (substr($text, -8) == "\n</code>") { |
$text = substr($text, 0, -8) . "</code>"; |
} |
// replace all <code> tags with classed tags |
if ($css_php) { |
$text = str_replace('<code>', "<code$css_php>", $text); |
} |
// done |
$text = "<pre$css>$text</pre>"; |
} elseif ($type == 'html' || $type == 'xhtml') { |
// HTML code example: |
// add <html> opening and closing tags, |
// convert tabs to four spaces, |
// convert entities. |
$text = str_replace("\t", " ", $text); |
$text = "<html>\n$text\n</html>"; |
$text = htmlentities($text); |
$text = "<pre$css><code$css_html>$text</code></pre>"; |
} else { |
// generic code example: |
// convert tabs to four spaces, |
// convert entities. |
$text = str_replace("\t", " ", $text); |
$text = htmlentities($text); |
$text = "<pre$css><code$css_code>$text</code></pre>"; |
} |
return "\n$text\n\n"; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Xhtml/Embed.php |
---|
New file |
0,0 → 1,23 |
<?php |
class Text_Wiki_Render_Xhtml_Embed extends Text_Wiki_Render { |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
return $options['text']; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Xhtml/Strong.php |
---|
New file |
0,0 → 1,35 |
<?php |
class Text_Wiki_Render_Xhtml_Strong extends Text_Wiki_Render { |
var $conf = array( |
'css' => null |
); |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
if ($options['type'] == 'start') { |
$css = $this->formatConf(' class="%s"', 'css'); |
return "<strong$css>"; |
} |
if ($options['type'] == 'end') { |
return '</strong>'; |
} |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Xhtml/Delimiter.php |
---|
New file |
0,0 → 1,23 |
<?php |
class Text_Wiki_Render_Xhtml_Delimiter extends Text_Wiki_Render { |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
return $options['text']; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Xhtml/Center.php |
---|
New file |
0,0 → 1,29 |
<?php |
class Text_Wiki_Render_Xhtml_Center extends Text_Wiki_Render { |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
if ($options['type'] == 'start') { |
return '<div style="text-align: center;">'; |
} |
if ($options['type'] == 'end') { |
return '</div>'; |
} |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Xhtml/Image.php |
---|
New file |
0,0 → 1,151 |
<?php |
class Text_Wiki_Render_Xhtml_Image extends Text_Wiki_Render { |
var $conf = array( |
'base' => '/', |
'css' => null, |
'css_link' => null |
); |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
// note the image source |
$src = $options['src']; |
// is the source a local file or URL? |
if (strpos($src, '://') === false) { |
// the source refers to a local file. |
// add the URL base to it. |
$src = $this->getConf('base', '/') . $src; |
} |
// stephane@metacites.net |
// is the image clickable? |
if (isset($options['attr']['link'])) { |
// yes, the image is clickable. |
// are we linked to a URL or a wiki page? |
if (strpos($options['attr']['link'], '://')) { |
// it's a URL |
$href = $options['attr']['link']; |
} else { |
// it's a WikiPage; assume it exists. |
/** @todo This needs to honor sprintf wikilinks (pmjones) */ |
/** @todo This needs to honor interwiki (pmjones) */ |
/** @todo This needs to honor freelinks (pmjones) */ |
$href = $this->wiki->getRenderConf('xhtml', 'wikilink', 'view_url') . |
$options['attr']['link']; |
} |
} else { |
// image is not clickable. |
$href = null; |
} |
// unset so it won't show up as an attribute |
unset($options['attr']['link']); |
// stephane@metacites.net -- 25/07/2004 |
// we make up an align="center" value for the <img> tag. |
if (isset($options['attr']['align']) && |
$options['attr']['align'] == 'center') { |
// unset so it won't show up as an attribute |
unset($options['attr']['align']); |
// make sure we have a style attribute |
if (! isset($options['attr']['style'])) { |
// no style, set up a blank one |
$options['attr']['style'] = ''; |
} else { |
// style exists, add a space |
$options['attr']['style'] .= ' '; |
} |
// add a "center" style to the existing style. |
$options['attr']['style'] .= |
'display: block; margin-left: auto; margin-right: auto;'; |
} |
// stephane@metacites.net -- 25/07/2004 |
// try to guess width and height |
if (! isset($options['attr']['width']) && |
! isset($options['attr']['height'])) { |
// does the source refer to a local file or a URL? |
if (strpos($src,'://')) { |
// is a URL link |
$imageFile = $src; |
} else { |
// is a local file |
$imageFile = $_SERVER['DOCUMENT_ROOT'] . $src; |
} |
// attempt to get the image size |
$imageSize = @getimagesize($imageFile); |
if (is_array($imageSize)) { |
$options['attr']['width'] = $imageSize[0]; |
$options['attr']['height'] = $imageSize[1]; |
} |
} |
// start the HTML output |
$output = '<img src="' . htmlspecialchars($src) . '"'; |
// get the CSS class but don't add it yet |
$css = $this->formatConf(' class="%s"', 'css'); |
// add the attributes to the output, and be sure to |
// track whether or not we find an "alt" attribute |
$alt = false; |
foreach ($options['attr'] as $key => $val) { |
// track the 'alt' attribute |
if (strtolower($key) == 'alt') { |
$alt = true; |
} |
// the 'class' attribute overrides the CSS class conf |
if (strtolower($key) == 'class') { |
$css = null; |
} |
$key = htmlspecialchars($key); |
$val = htmlspecialchars($val); |
$output .= " $key=\"$val\""; |
} |
// always add an "alt" attribute per Stephane Solliec |
if (! $alt) { |
$alt = htmlspecialchars(basename($options['src'])); |
$output .= " alt=\"$alt\""; |
} |
// end the image tag with the automatic CSS class (if any) |
$output .= "$css />"; |
// was the image clickable? |
if ($href) { |
// yes, add the href and return |
$href = htmlspecialchars($href); |
$css = $this->formatConf(' class="%s"', 'css_link'); |
$output = "<a$css href=\"$href\">$output</a>"; |
} |
return $output; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Xhtml/Function.php |
---|
New file |
0,0 → 1,87 |
<?php |
// $Id: Function.php,v 1.1 2005-01-20 19:43:21 jpm Exp $ |
class Text_Wiki_Render_Xhtml_Function extends Text_Wiki_Render { |
var $conf = array( |
// list separator for params and throws |
'list_sep' => ', ', |
// the "main" format string |
'format_main' => '%access %return <b>%name</b> ( %params ) %throws', |
// the looped format string for required params |
'format_param' => '%type <i>%descr</i>', |
// the looped format string for params with default values |
'format_paramd' => '[%type <i>%descr</i> default %default]', |
// the looped format string for throws |
'format_throws' => '<b>throws</b> %type <i>%descr</i>' |
); |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
extract($options); // name, access, return, params, throws |
// build the baseline output |
$output = $this->conf['format_main']; |
$output = str_replace('%access', htmlspecialchars($access), $output); |
$output = str_replace('%return', htmlspecialchars($return), $output); |
$output = str_replace('%name', htmlspecialchars($name), $output); |
// build the set of params |
$list = array(); |
foreach ($params as $key => $val) { |
// is there a default value? |
if ($val['default']) { |
$tmp = $this->conf['format_paramd']; |
} else { |
$tmp = $this->conf['format_param']; |
} |
// add the param elements |
$tmp = str_replace('%type', htmlspecialchars($val['type']), $tmp); |
$tmp = str_replace('%descr', htmlspecialchars($val['descr']), $tmp); |
$tmp = str_replace('%default', htmlspecialchars($val['default']), $tmp); |
$list[] = $tmp; |
} |
// insert params into output |
$tmp = implode($this->conf['list_sep'], $list); |
$output = str_replace('%params', $tmp, $output); |
// build the set of throws |
$list = array(); |
foreach ($throws as $key => $val) { |
$tmp = $this->conf['format_throws']; |
$tmp = str_replace('%type', htmlspecialchars($val['type']), $tmp); |
$tmp = str_replace('%descr', htmlspecialchars($val['descr']), $tmp); |
$list[] = $tmp; |
} |
// insert throws into output |
$tmp = implode($this->conf['list_sep'], $list); |
$output = str_replace('%throws', $tmp, $output); |
// close the div and return the output |
$output .= '</div>'; |
return "\n$output\n\n"; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Latex/Newline.php |
---|
New file |
0,0 → 1,12 |
<?php |
class Text_Wiki_Render_Latex_Newline extends Text_Wiki_Render { |
function token($options) |
{ |
return "\n"; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Latex/Url.php |
---|
New file |
0,0 → 1,35 |
<?php |
class Text_Wiki_Render_Latex_Url extends Text_Wiki_Render { |
var $conf = array( |
'target' => false, |
'images' => true, |
'img_ext' => array('jpg', 'jpeg', 'gif', 'png') |
); |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
// create local variables from the options array (text, |
// href, type) |
extract($options); |
return " $text\\footnote\{$href}"; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Latex/Html.php |
---|
New file |
0,0 → 1,25 |
<?php |
class Text_Wiki_Render_Latex_Html extends Text_Wiki_Render { |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
print_r($this); |
return ''; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Latex/Italic.php |
---|
New file |
0,0 → 1,5 |
<?php |
class Text_Wiki_Render_Latex_Italic extends Text_Wiki_Render_Latex_Emphasis { |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Latex/Blockquote.php |
---|
New file |
0,0 → 1,36 |
<?php |
class Text_Wiki_Render_Latex_Blockquote extends Text_Wiki_Render { |
var $conf = array('css' => null); |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
$type = $options['type']; |
$level = $options['level']; |
// starting |
if ($type == 'start') { |
return "\\begin{quote}\n"; |
} |
// ending |
if ($type == 'end') { |
return "\\end{quote}\n\n"; |
} |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Latex/Anchor.php |
---|
New file |
0,0 → 1,33 |
<?php |
/** |
* |
* This class renders an anchor target name in LaTeX. |
* |
* $Id: Anchor.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
* |
* @author Jeremy Cowgar <jeremy@cowgar.com> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Render_Latex_Anchor extends Text_Wiki_Render { |
function token($options) |
{ |
extract($options); // $type, $name |
if ($type == 'start') { |
//return sprintf('<a id="%s">',$name); |
return ''; |
} |
if ($type == 'end') { |
//return '</a>'; |
return ''; |
} |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Latex/List.php |
---|
New file |
0,0 → 1,57 |
<?php |
class Text_Wiki_Render_Latex_List extends Text_Wiki_Render { |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* This rendering method is syntactically and semantically compliant |
* with XHTML 1.1 in that sub-lists are part of the previous list item. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
// make nice variables (type, level, count) |
extract($options); |
switch ($type) |
{ |
case 'bullet_list_start': |
return "\\begin{itemize}\n"; |
case 'bullet_list_end': |
return "\\end{itemize}\n"; |
case 'number_list_start': |
return "\\begin{enumerate}\n"; |
case 'number_list_end': |
return "\\end{enumerate}\n"; |
case 'bullet_item_start': |
case 'number_item_start': |
return "\\item{"; |
case 'bullet_item_end': |
case 'number_item_end': |
return "}\n"; |
default: |
// ignore item endings and all other types. |
// item endings are taken care of by the other types |
// depending on their place in the list. |
return ''; |
break; |
} |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Latex/Bold.php |
---|
New file |
0,0 → 1,4 |
<?php |
class Text_Wiki_Render_Latex_Bold extends Text_Wiki_Render_Latex_Strong {} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Latex/Wikilink.php |
---|
New file |
0,0 → 1,60 |
<?php |
class Text_Wiki_Render_Latex_Wikilink extends Text_Wiki_Render { |
var $conf = array( |
'pages' => array(), |
'view_url' => 'http://example.com/index.php?page=%s', |
'new_url' => 'http://example.com/new.php?page=%s', |
'new_text' => '?' |
); |
/** |
* |
* Renders a token into XHTML. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
// make nice variable names (page, anchor, text) |
extract($options); |
// are we checking page existence? |
$list =& $this->getConf('pages'); |
if (is_array($list)) { |
// yes, check against the page list |
$exists = in_array($page, $list); |
} else { |
// no, assume it exists |
$exists = true; |
} |
// convert *after* checking against page names so as not to mess |
// up what the user typed and what we're checking. |
$page = htmlspecialchars($page); |
$anchor = htmlspecialchars($anchor); |
$text = htmlspecialchars($text); |
$href = $this->getConf('view_url'); |
if (strpos($href, '%s') === false) { |
// use the old form (page-at-end) |
$href = $href . $page . $anchor; |
} else { |
// use the new form (sprintf format string) |
$href = sprintf($href, $page . $anchor); |
} |
// get the CSS class and generate output |
$css = $this->formatConf(' class="%s"', 'css'); |
return "$text\\footnote\{$href}"; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Latex/Phplookup.php |
---|
New file |
0,0 → 1,34 |
<?php |
class Text_Wiki_Render_Latex_Phplookup extends Text_Wiki_Render { |
var $conf = array('target' => '_blank'); |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
return 'Phplookup: NI'; |
$text = trim($options['text']); |
$target = $this->getConf('target', ''); |
if ($target) { |
$target = " target=\"$target\""; |
} |
return "<a$target href=\"http://php.net/$text\">$text</a>"; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Latex/Superscript.php |
---|
New file |
0,0 → 1,31 |
<?php |
class Text_Wiki_Render_Latex_Superscript extends Text_Wiki_Render { |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
return 'Superscript: NI'; |
if ($options['type'] == 'start') { |
return '<sup>'; |
} |
if ($options['type'] == 'end') { |
return '</sup>'; |
} |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Latex/Include.php |
---|
New file |
0,0 → 1,8 |
<?php |
class Text_Wiki_Render_Latex_Include extends Text_Wiki_Render { |
function token() |
{ |
return ''; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Latex/Colortext.php |
---|
New file |
0,0 → 1,58 |
<?php |
class Text_Wiki_Render_Latex_Colortext extends Text_Wiki_Render { |
var $colors = array( |
'aqua', |
'black', |
'blue', |
'fuchsia', |
'gray', |
'green', |
'lime', |
'maroon', |
'navy', |
'olive', |
'purple', |
'red', |
'silver', |
'teal', |
'white', |
'yellow' |
); |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
return 'Colortext: NI'; |
$type = $options['type']; |
$color = $options['color']; |
if (! in_array($color, $this->colors)) { |
$color = '#' . $color; |
} |
if ($type == 'start') { |
return "<span style=\"color: $color;\">"; |
} |
if ($options['type'] == 'end') { |
return '</span>'; |
} |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Latex/Break.php |
---|
New file |
0,0 → 1,24 |
<?php |
class Text_Wiki_Render_Latex_Break extends Text_Wiki_Render { |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
return "\\newline\n"; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Latex/Toc.php |
---|
New file |
0,0 → 1,30 |
<?php |
class Text_Wiki_Render_Latex_Toc extends Text_Wiki_Render { |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
if($options['type'] == 'list_start') { |
return "\\tableofcontents\n\n"; |
} |
return ''; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Latex/Tt.php |
---|
New file |
0,0 → 1,30 |
<?php |
class Text_Wiki_Render_Latex_tt extends Text_Wiki_Render { |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
if ($options['type'] == 'start') { |
return '\texttt{'; |
} |
if ($options['type'] == 'end') { |
return '}'; |
} |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Latex/Table.php |
---|
New file |
0,0 → 1,93 |
<?php |
class Text_Wiki_Render_Latex_Table extends Text_Wiki_Render { |
var $cell_id = 0; |
var $cell_count = 0; |
var $is_spanning = false; |
var $conf = array( |
'css_table' => null, |
'css_tr' => null, |
'css_th' => null, |
'css_td' => null |
); |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
// make nice variable names (type, attr, span) |
extract($options); |
switch ($type) |
{ |
case 'table_start': |
$this->cell_count = $cols; |
$tbl_start = '\begin{tabular}{|'; |
for ($a=0; $a < $this->cell_count; $a++) { |
$tbl_start .= 'l|'; |
} |
$tbl_start .= "}\n"; |
return $tbl_start; |
case 'table_end': |
return "\\hline\n\\end{tabular}\n"; |
case 'row_start': |
$this->is_spanning = false; |
$this->cell_id = 0; |
return "\\hline\n"; |
case 'row_end': |
return "\\\\\n"; |
case 'cell_start': |
if ($span > 1) { |
$col_spec = ''; |
if ($this->cell_id == 0) { |
$col_spec = '|'; |
} |
$col_spec .= 'l|'; |
$this->cell_id += $span; |
$this->is_spanning = true; |
return "\\multicolumn\{$span}\{$col_spec}{"; |
} |
$this->cell_id += 1; |
return ''; |
case 'cell_end': |
$out = ''; |
if ($this->is_spanning) { |
$this->is_spanning = false; |
$out = '}'; |
} |
if ($this->cell_id != $this->cell_count) { |
$out .= ' & '; |
} |
return $out; |
default: |
return ''; |
} |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Latex/Raw.php |
---|
New file |
0,0 → 1,23 |
<?php |
class Text_Wiki_Render_Latex_Raw extends Text_Wiki_Render { |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
return "Raw: ".$options['text']; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Latex/Deflist.php |
---|
New file |
0,0 → 1,53 |
<?php |
class Text_Wiki_Render_Latex_Deflist extends Text_Wiki_Render { |
var $conf = array( |
'css_dl' => null, |
'css_dt' => null, |
'css_dd' => null |
); |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
$type = $options['type']; |
switch ($type) |
{ |
case 'list_start': |
return "\\begin{description}\n"; |
case 'list_end': |
return "\\end{description}\n\n"; |
case 'term_start': |
return '\item['; |
case 'term_end': |
return '] '; |
case 'narr_start': |
return '{'; |
case 'narr_end': |
return "}\n"; |
default: |
return ''; |
} |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Latex/Horiz.php |
---|
New file |
0,0 → 1,23 |
<?php |
class Text_Wiki_Render_Latex_Horiz extends Text_Wiki_Render { |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
return "\n\\noindent\\rule{\\textwidth}{1pt}\n"; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Latex/Prefilter.php |
---|
New file |
0,0 → 1,40 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +----------------------------------------------------------------------+ |
// | PHP version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2003 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Jeremy Cowgar <jeremy@cowgar.com> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: Prefilter.php,v 1.1 2005-01-20 19:43:20 jpm Exp $ |
/** |
* |
* This class implements a Text_Wiki_Render_Latex to "pre-filter" source text so |
* that line endings are consistently \n, lines ending in a backslash \ |
* are concatenated with the next line, and tabs are converted to spaces. |
* |
* @author Jeremy Cowgar <jeremy@cowgar.com> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Render_Latex_Prefilter extends Text_Wiki_Render { |
function token() |
{ |
return ''; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Latex/Revise.php |
---|
New file |
0,0 → 1,38 |
<?php |
class Text_Wiki_Render_Latex_Revise extends Text_Wiki_Render { |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
if ($options['type'] == 'del_start') { |
return '\sout{'; |
} |
if ($options['type'] == 'del_end') { |
return '}'; |
} |
if ($options['type'] == 'ins_start') { |
return '\underline{'; |
} |
if ($options['type'] == 'ins_end') { |
return '}'; |
} |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Latex/Freelink.php |
---|
New file |
0,0 → 1,34 |
<?php |
class Text_Wiki_Render_Latex_Freelink extends Text_Wiki_Render { |
var $conf = array( |
'pages' => array(), |
'view_url' => 'http://example.com/index.php?page=%s', |
'new_url' => 'http://example.com/new.php?page=%s', |
'new_text' => '?' |
); |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
// get nice variable names (page, text, anchor) |
extract($options); |
return "$text\\footnote\{$anchor} "; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Latex/Heading.php |
---|
New file |
0,0 → 1,33 |
<?php |
class Text_Wiki_Render_Latex_Heading extends Text_Wiki_Render { |
function token($options) |
{ |
// get nice variable names (type, level) |
extract($options); |
if ($type == 'start') { |
switch ($level) |
{ |
case '1': |
return '\part{'; |
case '2': |
return '\section{'; |
case '3': |
return '\subsection{'; |
case '4': |
return '\subsubsection{'; |
case '5': |
return '\paragraph{'; |
case '6': |
return '\subparagraph{'; |
} |
} |
if ($type == 'end') { |
return "}\n"; |
} |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Latex/Tighten.php |
---|
New file |
0,0 → 1,9 |
<?php |
class Text_Wiki_Render_Latex_Tighten extends Text_Wiki_Render { |
function token() |
{ |
return ''; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Latex/Interwiki.php |
---|
New file |
0,0 → 1,60 |
<?php |
class Text_Wiki_Render_Latex_Interwiki extends Text_Wiki_Render { |
var $conf = array( |
'sites' => array( |
'MeatBall' => 'http://www.usemod.com/cgi-bin/mb.pl?%s', |
'Advogato' => 'http://advogato.org/%s', |
'Wiki' => 'http://c2.com/cgi/wiki?%s' |
), |
'target' => '_blank' |
); |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
$site = $options['site']; |
$page = $options['page']; |
$text = $options['text']; |
if (isset($this->conf['sites'][$site])) { |
$href = $this->conf['sites'][$site]; |
} else { |
return $text; |
} |
// old form where page is at end, |
// or new form with %s placeholder for sprintf()? |
if (strpos($href, '%s') === false) { |
// use the old form |
$href = $href . $page; |
} else { |
// use the new form |
$href = sprintf($href, $page); |
} |
// allow for alternative targets |
$target = $this->getConf('target', ''); |
if ($target && trim($target) != '') { |
$target = " target=\"$target\""; |
} |
return "$text\\footnote\{$href}"; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Latex/Paragraph.php |
---|
New file |
0,0 → 1,31 |
<?php |
class Text_Wiki_Render_Latex_Paragraph extends Text_Wiki_Render { |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
extract($options); //type |
if ($type == 'start') { |
return ''; |
} |
if ($type == 'end') { |
return "\n\n"; |
} |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Latex/Emphasis.php |
---|
New file |
0,0 → 1,29 |
<?php |
class Text_Wiki_Render_Latex_Emphasis extends Text_Wiki_Render { |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
if ($options['type'] == 'start') { |
return '\textsl{'; |
} |
if ($options['type'] == 'end') { |
return '}'; |
} |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Latex/Code.php |
---|
New file |
0,0 → 1,26 |
<?php |
class Text_Wiki_Render_Latex_Code extends Text_Wiki_Render { |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
$text = $options['text']; |
return "\\begin{verbatim}\n$text\n\\end{verbatim}\n\n"; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Latex/Embed.php |
---|
New file |
0,0 → 1,23 |
<?php |
class Text_Wiki_Render_Latex_Embed extends Text_Wiki_Render { |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
return "Embed: ".$options['text']; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Latex/Strong.php |
---|
New file |
0,0 → 1,30 |
<?php |
class Text_Wiki_Render_Latex_Strong extends Text_Wiki_Render { |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
if ($options['type'] == 'start') { |
return '\textbf{'; |
} |
if ($options['type'] == 'end') { |
return '}'; |
} |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Latex/Delimiter.php |
---|
New file |
0,0 → 1,25 |
<?php |
class Text_Wiki_Render_Latex_Delimiter extends Text_Wiki_Render { |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
// TODO: Is this where I can do some LaTeX escaping for items |
// such as $ { } _ ? |
return "Delimiter: ".$options['text']; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Latex/Center.php |
---|
New file |
0,0 → 1,33 |
<?php |
class Text_Wiki_Render_Latex_Center extends Text_Wiki_Render { |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
return 'Center: NI'; |
if ($options['type'] == 'start') { |
//return "\n<center>\n"; |
return '<div style="text-align: center;">'; |
} |
if ($options['type'] == 'end') { |
//return "</center>\n"; |
return '</div>'; |
} |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Latex/Image.php |
---|
New file |
0,0 → 1,70 |
<?php |
class Text_Wiki_Render_Latex_Image extends Text_Wiki_Render { |
var $conf = array( |
'base' => '/' |
); |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
return 'Image: NI'; |
$src = '"' . |
$this->getConf('base', '/') . |
$options['src'] . '"'; |
if (isset($options['attr']['link'])) { |
// this image has a link |
if (strpos($options['attr']['link'], '://')) { |
// it's a URL |
$href = $options['attr']['link']; |
} else { |
$href = $this->wiki->getRenderConf('xhtml', 'wikilink', 'view_url') . |
$options['attr']['link']; |
} |
} else { |
// image is not linked |
$href = null; |
} |
// unset these so they don't show up as attributes |
unset($options['attr']['link']); |
$attr = ''; |
$alt = false; |
foreach ($options['attr'] as $key => $val) { |
if (strtolower($key) == 'alt') { |
$alt = true; |
} |
$attr .= " $key=\"$val\""; |
} |
// always add an "alt" attribute per Stephane Solliec |
if (! $alt) { |
$attr .= ' alt="' . basename($options['src']) . '"'; |
} |
if ($href) { |
return "<a href=\"$href\"><img src=$src$attr/></a>"; |
} else { |
return "<img src=$src$attr/>"; |
} |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Latex/Function.php |
---|
New file |
0,0 → 1,23 |
<?php |
class Text_Wiki_Render_Latex_Function extends Text_Wiki_Render { |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
return "Function: NI"; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Xhtml.php |
---|
New file |
0,0 → 1,33 |
<?php |
class Text_Wiki_Render_Xhtml extends Text_Wiki_Render { |
var $conf = array('translate' => HTML_ENTITIES); |
function pre() |
{ |
// attempt to translate HTML entities in the source before continuing. |
$type = $this->getConf('translate', null); |
// are we translating html? |
if ($type) { |
// yes! get the translation table. |
$xlate = get_html_translation_table($type); |
// remove the delimiter character it doesn't get translated |
unset($xlate[$this->wiki->delim]); |
// translate! |
$this->wiki->source = strtr($this->wiki->source, $xlate); |
} |
} |
function post() |
{ |
return; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Latex.php |
---|
New file |
0,0 → 1,90 |
<?php |
/** |
* |
* Formats parsed Text_Wiki for LaTeX rendering. |
* |
* $Id: Latex.php,v 1.1 2005-01-20 19:44:30 jpm Exp $ |
* |
* @author Jeremy Cowgar <jeremy@cowgar.com> |
* |
* @package Text_Wiki |
* |
* @todo [http://google.com] becomes 1 with a LaTeX footnote in subscript. |
* This should be a normal LaTeX footnote associated with the |
* previous word? |
* |
* @todo parse "..." to be ``...'' |
* |
* @todo parse '...' to be `...' |
* |
* @todo move escape_latex to a static function, move escaping to the |
* individual .php files they are associated with |
* |
* @todo allow the user to add conf items to do things like |
* + A custom document header |
* + Custom page headings |
* + Include packages |
* + Set Title, Author, Date |
* + Include a title page |
* + Not output Document Head/Foot (maybe combinding many pages?) |
* |
*/ |
class Text_Wiki_Render_Latex extends Text_Wiki_Render { |
function escape_latex ($txt) { |
$txt = str_replace("\\", "\\\\", $txt); |
$txt = str_replace('#', '\#', $txt); |
$txt = str_replace('$', '\$', $txt); |
$txt = str_replace('%', '\%', $txt); |
$txt = str_replace('^', '\^', $txt); |
$txt = str_replace('&', '\&', $txt); |
$txt = str_replace('_', '\_', $txt); |
$txt = str_replace('{', '\{', $txt); |
$txt = str_replace('}', '\}', $txt); |
// Typeset things a bit prettier than normas |
$txt = str_replace('~', '$\sim$', $txt); |
$txt = str_replace('...', '\ldots', $txt); |
return $txt; |
} |
function escape($tok, $ele) { |
if (isset($tok[$ele])) { |
$tok[$ele] = $this->escape_latex($tok[$ele]); |
} |
return $tok; |
} |
function pre() |
{ |
foreach ($this->wiki->tokens as $k => $tok) { |
if ($tok[0] == 'Code') { |
continue; |
} |
$tok[1] = $this->escape($tok[1], 'text'); |
$tok[1] = $this->escape($tok[1], 'page'); |
$tok[1] = $this->escape($tok[1], 'href'); |
$this->wiki->tokens[$k] = $tok; |
} |
$this->wiki->source = $this->escape_latex($this->wiki->source); |
return |
"\\documentclass{article}\n". |
"\\usepackage{ulem}\n". |
"\\pagestyle{headings}\n". |
"\\begin{document}\n"; |
} |
function post() |
{ |
return "\\end{document}\n"; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Plain/Emphasis.php |
---|
New file |
0,0 → 1,23 |
<?php |
class Text_Wiki_Render_Plain_Emphasis extends Text_Wiki_Render { |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
return; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Plain/Code.php |
---|
New file |
0,0 → 1,24 |
<?php |
class Text_Wiki_Render_Plain_Code extends Text_Wiki_Render { |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
return "\n" . $options['text'] . "\n\n"; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Plain/Embed.php |
---|
New file |
0,0 → 1,23 |
<?php |
class Text_Wiki_Render_Plain_Embed extends Text_Wiki_Render { |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
return strip_tags($options['text']); |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Plain/Strong.php |
---|
New file |
0,0 → 1,24 |
<?php |
class Text_Wiki_Render_Plain_Strong extends Text_Wiki_Render { |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
return; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Plain/Delimiter.php |
---|
New file |
0,0 → 1,23 |
<?php |
class Text_Wiki_Render_Plain_Delimiter extends Text_Wiki_Render { |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
return; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Plain/Center.php |
---|
New file |
0,0 → 1,23 |
<?php |
class Text_Wiki_Render_Plain_Center extends Text_Wiki_Render { |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
return; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Plain/Image.php |
---|
New file |
0,0 → 1,22 |
<?php |
class Text_Wiki_Render_Plain_Image extends Text_Wiki_Render { |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
return; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Plain/Function.php |
---|
New file |
0,0 → 1,39 |
<?php |
// $Id: Function.php,v 1.1 2005-01-20 19:43:21 jpm Exp $ |
class Text_Wiki_Render_Plain_Function extends Text_Wiki_Render { |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
extract($options); // access, return, name, params, throws |
$output = "$access $return $name ( "; |
foreach ($params as $key => $val) { |
$output .= "{$val['type']} {$val['descr']} {$val['default']} "; |
} |
$output .= ') '; |
foreach ($throws as $key => $val) { |
$output .= "{$val['type']} {$val['descr']} "; |
} |
return $output; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Plain/Newline.php |
---|
New file |
0,0 → 1,12 |
<?php |
class Text_Wiki_Render_Plain_Newline extends Text_Wiki_Render { |
function token($options) |
{ |
return "\n"; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Plain/Url.php |
---|
New file |
0,0 → 1,25 |
<?php |
class Text_Wiki_Render_Plain_Url extends Text_Wiki_Render { |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
return $options['text']; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Plain/Html.php |
---|
New file |
0,0 → 1,24 |
<?php |
class Text_Wiki_Render_Plain_Html extends Text_Wiki_Render { |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
return strip_tags($options['text']); |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Plain/Italic.php |
---|
New file |
0,0 → 1,23 |
<?php |
class Text_Wiki_Render_Plain_Italic extends Text_Wiki_Render { |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
return; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Plain/Blockquote.php |
---|
New file |
0,0 → 1,39 |
<?php |
class Text_Wiki_Render_Plain_Blockquote extends Text_Wiki_Render { |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
$type = $options['type']; |
$level = $options['level']; |
// set up indenting so that the results look nice; we do this |
// in two steps to avoid str_pad mathematics. ;-) |
$pad = str_pad('', $level + 1, "\t"); |
$pad = str_replace("\t", ' ', $pad); |
// starting |
if ($type == 'start') { |
return "\n$pad"; |
} |
// ending |
if ($type == 'end') { |
return "\n$pad"; |
} |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Plain/Anchor.php |
---|
New file |
0,0 → 1,23 |
<?php |
/** |
* |
* This class renders an anchor target name in XHTML. |
* |
* @author Manuel Holtgrewe <purestorm at ggnore dot net> |
* |
* @author Paul M. Jones <pmjones at ciaweb dot net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Render_Plain_Anchor extends Text_Wiki_Render { |
function token($options) |
{ |
return $options['name']; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Plain/List.php |
---|
New file |
0,0 → 1,68 |
<?php |
class Text_Wiki_Render_Plain_List extends Text_Wiki_Render { |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* This rendering method is syntactically and semantically compliant |
* with XHTML 1.1 in that sub-lists are part of the previous list item. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
// make nice variables (type, level, count) |
extract($options); |
// set up indenting so that the results look nice; we do this |
// in two steps to avoid str_pad mathematics. ;-) |
$pad = str_pad('', $level, "\t"); |
$pad = str_replace("\t", ' ', $pad); |
switch ($type) { |
case 'bullet_list_start': |
break; |
case 'bullet_list_end': |
if ($level == 0) { |
return "\n\n"; |
} |
break; |
case 'number_list_start': |
break; |
case 'number_list_end': |
if ($level == 0) { |
return "\n\n"; |
} |
break; |
case 'bullet_item_start': |
case 'number_item_start': |
return "\n$pad"; |
break; |
case 'bullet_item_end': |
case 'number_item_end': |
default: |
// ignore item endings and all other types. |
// item endings are taken care of by the other types |
// depending on their place in the list. |
return; |
break; |
} |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Plain/Bold.php |
---|
New file |
0,0 → 1,23 |
<?php |
class Text_Wiki_Render_Plain_Bold extends Text_Wiki_Render { |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
return; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Plain/Phplookup.php |
---|
New file |
0,0 → 1,25 |
<?php |
class Text_Wiki_Render_Plain_Phplookup extends Text_Wiki_Render { |
var $conf = array('target' => '_blank'); |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
return trim($options['text']); |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Plain/Wikilink.php |
---|
New file |
0,0 → 1,24 |
<?php |
class Text_Wiki_Render_Plain_Wikilink extends Text_Wiki_Render { |
/** |
* |
* Renders a token into plain text. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
return $options['text']; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Plain/Colortext.php |
---|
New file |
0,0 → 1,23 |
<?php |
class Text_Wiki_Render_Plain_Colortext extends Text_Wiki_Render { |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
return; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Plain/Include.php |
---|
New file |
0,0 → 1,8 |
<?php |
class Text_Wiki_Render_Plain_Include extends Text_Wiki_Render { |
function token() |
{ |
return ''; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Plain/Superscript.php |
---|
New file |
0,0 → 1,23 |
<?php |
class Text_Wiki_Render_Plain_Superscript extends Text_Wiki_Render { |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
return; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Plain/Break.php |
---|
New file |
0,0 → 1,24 |
<?php |
class Text_Wiki_Render_Plain_Break extends Text_Wiki_Render { |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
return "\n"; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Plain/Toc.php |
---|
New file |
0,0 → 1,39 |
<?php |
class Text_Wiki_Render_Plain_Toc extends Text_Wiki_Render { |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
// type, count, level |
extract($options); |
if ($type == 'item_start') { |
// build some indenting spaces for the text |
$indent = ($level - 2) * 4; |
$pad = str_pad('', $indent); |
return $pad; |
} |
if ($type == 'item_end') { |
return "\n"; |
} |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Plain/Table.php |
---|
New file |
0,0 → 1,57 |
<?php |
class Text_Wiki_Render_Plain_Table extends Text_Wiki_Render { |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
// make nice variable names (type, attr, span) |
extract($options); |
$pad = ' '; |
switch ($type) { |
case 'table_start': |
return; |
break; |
case 'table_end': |
return; |
break; |
case 'row_start': |
return; |
break; |
case 'row_end': |
return " ||\n"; |
break; |
case 'cell_start': |
return " || "; |
break; |
case 'cell_end': |
return; |
break; |
default: |
return ''; |
} |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Plain/Tt.php |
---|
New file |
0,0 → 1,24 |
<?php |
class Text_Wiki_Render_Plain_tt extends Text_Wiki_Render { |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
return; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Plain/Raw.php |
---|
New file |
0,0 → 1,23 |
<?php |
class Text_Wiki_Render_Plain_Raw extends Text_Wiki_Render { |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
return $options['text']; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Plain/Deflist.php |
---|
New file |
0,0 → 1,59 |
<?php |
class Text_Wiki_Render_Plain_Deflist extends Text_Wiki_Render { |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
$type = $options['type']; |
$pad = " "; |
switch ($type) { |
case 'list_start': |
return "\n"; |
break; |
case 'list_end': |
return "\n\n"; |
break; |
case 'term_start': |
// done! |
return $pad; |
break; |
case 'term_end': |
return "\n"; |
break; |
case 'narr_start': |
// done! |
return $pad . $pad; |
break; |
case 'narr_end': |
return "\n"; |
break; |
default: |
return ''; |
} |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Plain/Horiz.php |
---|
New file |
0,0 → 1,23 |
<?php |
class Text_Wiki_Render_Plain_Horiz extends Text_Wiki_Render { |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
return "\n"; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Plain/Prefilter.php |
---|
New file |
0,0 → 1,40 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +----------------------------------------------------------------------+ |
// | PHP version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2003 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Paul M. Jones <pmjones@ciaweb.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: Prefilter.php,v 1.1 2005-01-20 19:43:21 jpm Exp $ |
/** |
* |
* This class implements a Text_Wiki_Render_Xhtml to "pre-filter" source text so |
* that line endings are consistently \n, lines ending in a backslash \ |
* are concatenated with the next line, and tabs are converted to spaces. |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
*/ |
class Text_Wiki_Render_Plain_Prefilter extends Text_Wiki_Render { |
function token() |
{ |
return ''; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Plain/Revise.php |
---|
New file |
0,0 → 1,24 |
<?php |
class Text_Wiki_Render_Plain_Revise extends Text_Wiki_Render { |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
return; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Plain/Heading.php |
---|
New file |
0,0 → 1,14 |
<?php |
class Text_Wiki_Render_Plain_Heading extends Text_Wiki_Render { |
function token($options) |
{ |
if ($options['type'] == 'end') { |
return "\n\n"; |
} else { |
return "\n"; |
} |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Plain/Freelink.php |
---|
New file |
0,0 → 1,23 |
<?php |
class Text_Wiki_Render_Plain_Freelink extends Text_Wiki_Render { |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
return $options['text']; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Plain/Tighten.php |
---|
New file |
0,0 → 1,10 |
<?php |
class Text_Wiki_Render_Plain_Tighten extends Text_Wiki_Render { |
function token() |
{ |
return ''; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Plain/Paragraph.php |
---|
New file |
0,0 → 1,31 |
<?php |
class Text_Wiki_Render_Plain_Paragraph extends Text_Wiki_Render { |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
extract($options); //type |
if ($type == 'start') { |
return ''; |
} |
if ($type == 'end') { |
return "\n\n"; |
} |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki/Render/Plain/Interwiki.php |
---|
New file |
0,0 → 1,23 |
<?php |
class Text_Wiki_Render_Plain_Interwiki extends Text_Wiki_Render { |
/** |
* |
* Renders a token into text matching the requested format. |
* |
* @access public |
* |
* @param array $options The "options" portion of the token (second |
* element). |
* |
* @return string The text rendered from the token options. |
* |
*/ |
function token($options) |
{ |
return $options['text']; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Text/Wiki.php |
---|
New file |
0,0 → 1,1258 |
<?php |
/** |
* The baseline abstract parser class. |
*/ |
require_once 'Wiki/Parse.php'; |
/** |
* The baseline abstract render class. |
*/ |
require_once 'Wiki/Render.php'; |
/** |
* |
* Parse structured wiki text and render into arbitrary formats such as XHTML. |
* |
* This is the "master" class for handling the management and convenience |
* functions to transform Wiki-formatted text. |
* |
* $Id: Wiki.php,v 1.2 2005-06-24 10:47:09 jpm Exp $ |
* |
* @author Paul M. Jones <pmjones@ciaweb.net> |
* |
* @package Text_Wiki |
* |
* @version 0.23.1 |
* |
* @license LGPL |
* |
*/ |
class Text_Wiki { |
/** |
* |
* The default list of rules, in order, to apply to the source text. |
* |
* @access public |
* |
* @var array |
* |
*/ |
var $rules = array( |
'Prefilter', |
'Delimiter', |
'Code', |
'Function', |
'Html', |
'Raw', |
'Include', |
'Embed', |
'Anchor', |
'Heading', |
'Toc', |
'Horiz', |
'Break', |
'Blockquote', |
'List', |
'Deflist', |
'Table', |
'Image', |
'Phplookup', |
'Center', |
'Newline', |
'Paragraph', |
'Url', |
'Freelink', |
'Interwiki', |
'Wikilink', |
'Colortext', |
'Strong', |
'Bold', |
'Emphasis', |
'Italic', |
'Tt', |
'Superscript', |
'Revise', |
'Tighten' |
); |
/** |
* |
* The list of rules to not-apply to the source text. |
* |
* @access public |
* |
* @var array |
* |
*/ |
var $disable = array( |
'Html', |
'Include', |
'Embed' |
); |
/** |
* |
* Custom configuration for rules at the parsing stage. |
* |
* In this array, the key is the parsing rule name, and the value is |
* an array of key-value configuration pairs corresponding to the $conf |
* property in the target parsing rule. |
* |
* For example: |
* |
* <code> |
* $parseConf = array( |
* 'Include' => array( |
* 'base' => '/path/to/scripts/' |
* ) |
* ); |
* </code> |
* |
* Note that most default rules do not need any parsing configuration. |
* |
* @access public |
* |
* @var array |
* |
*/ |
var $parseConf = array(); |
/** |
* |
* Custom configuration for rules at the rendering stage. |
* |
* Because rendering may be different for each target format, the |
* first-level element in this array is always a format name (e.g., |
* 'Xhtml'). |
* |
* Within that first level element, the subsequent elements match the |
* $parseConf format. That is, the sub-key is the rendering rule name, |
* and the sub-value is an array of key-value configuration pairs |
* corresponding to the $conf property in the target rendering rule. |
* |
* @access public |
* |
* @var array |
* |
*/ |
var $renderConf = array( |
'Docbook' => array(), |
'Latex' => array(), |
'Pdf' => array(), |
'Plain' => array(), |
'Rtf' => array(), |
'Xhtml' => array() |
); |
/** |
* |
* Custom configuration for the output format itself. |
* |
* Even though Text_Wiki will render the tokens from parsed text, |
* the format itself may require some configuration. For example, |
* RTF needs to know font names and sizes, PDF requires page layout |
* information, and DocBook needs a section hierarchy. This array |
* matches the $conf property of the the format-level renderer |
* (e.g., Text_Wiki_Render_Xhtml). |
* |
* In this array, the key is the rendering format name, and the value is |
* an array of key-value configuration pairs corresponding to the $conf |
* property in the rendering format rule. |
* |
* @access public |
* |
* @var array |
* |
*/ |
var $formatConf = array( |
'Docbook' => array(), |
'Latex' => array(), |
'Pdf' => array(), |
'Plain' => array(), |
'Rtf' => array(), |
'Xhtml' => array() |
); |
/** |
* |
* The delimiter for token numbers of parsed elements in source text. |
* |
* @access public |
* |
* @var string |
* |
*/ |
var $delim = "\xFF"; |
/** |
* |
* The tokens generated by rules as the source text is parsed. |
* |
* As Text_Wiki applies rule classes to the source text, it will |
* replace portions of the text with a delimited token number. This |
* is the array of those tokens, representing the replaced text and |
* any options set by the parser for that replaced text. |
* |
* The tokens array is sequential; each element is itself a sequential |
* array where element 0 is the name of the rule that generated the |
* token, and element 1 is an associative array where the key is an |
* option name and the value is an option value. |
* |
* @access private |
* |
* @var array |
* |
*/ |
var $tokens = array(); |
/** |
* |
* The source text to which rules will be applied. |
* |
* This text will be transformed in-place, which means that it will |
* change as the rules are applied. |
* |
* @access private |
* |
* @var string |
* |
*/ |
var $source = ''; |
/** |
* |
* Array of rule parsers. |
* |
* Text_Wiki creates one instance of every rule that is applied to |
* the source text; this array holds those instances. The array key |
* is the rule name, and the array value is an instance of the rule |
* class. |
* |
* @access private |
* |
* @var array |
* |
*/ |
var $parseObj = array(); |
/** |
* |
* Array of rule renderers. |
* |
* Text_Wiki creates one instance of every rule that is applied to |
* the source text; this array holds those instances. The array key |
* is the rule name, and the array value is an instance of the rule |
* class. |
* |
* @access private |
* |
* @var array |
* |
*/ |
var $renderObj = array(); |
/** |
* |
* Array of format renderers. |
* |
* @access private |
* |
* @var array |
* |
*/ |
var $formatObj = array(); |
/** |
* |
* Array of paths to search, in order, for parsing and rendering rules. |
* |
* @access private |
* |
* @var array |
* |
*/ |
var $path = array( |
'parse' => array(), |
'render' => array() |
); |
/** |
* |
* The directory separator character. |
* |
* @access private |
* |
* @var string |
* |
*/ |
var $_dirSep = DIRECTORY_SEPARATOR; |
/** |
* |
* Constructor. |
* |
* @access public |
* |
* @param array $rules The set of rules to load for this object. |
* |
*/ |
function Text_Wiki($rules = null) |
{ |
if (is_array($rules)) { |
$this->rules = $rules; |
} |
$this->addPath( |
'parse', |
$this->fixPath(dirname(__FILE__)) . 'Wiki/Parse/' |
); |
$this->addPath( |
'render', |
$this->fixPath(dirname(__FILE__)) . 'Wiki/Render/' |
); |
} |
/** |
* |
* Set parser configuration for a specific rule and key. |
* |
* @access public |
* |
* @param string $rule The parse rule to set config for. |
* |
* @param array|string $arg1 The full config array to use for the |
* parse rule, or a conf key in that array. |
* |
* @param string $arg2 The config value for the key. |
* |
* @return void |
* |
*/ |
function setParseConf($rule, $arg1, $arg2 = null) |
{ |
$rule = ucwords(strtolower($rule)); |
if (! isset($this->parseConf[$rule])) { |
$this->parseConf[$rule] = array(); |
} |
// if first arg is an array, use it as the entire |
// conf array for the rule. otherwise, treat arg1 |
// as a key and arg2 as a value for the rule conf. |
if (is_array($arg1)) { |
$this->parseConf[$rule] = $arg1; |
} else { |
$this->parseConf[$rule][$arg1] = $arg2; |
} |
} |
/** |
* |
* Get parser configuration for a specific rule and key. |
* |
* @access public |
* |
* @param string $rule The parse rule to get config for. |
* |
* @param string $key A key in the conf array; if null, |
* returns the entire conf array. |
* |
* @return mixed The whole conf array if no key is specified, |
* or the specific conf key value. |
* |
*/ |
function getParseConf($rule, $key = null) |
{ |
$rule = ucwords(strtolower($rule)); |
// the rule does not exist |
if (! isset($this->parseConf[$rule])) { |
return null; |
} |
// no key requested, return the whole array |
if (is_null($key)) { |
return $this->parseConf[$rule]; |
} |
// does the requested key exist? |
if (isset($this->parseConf[$rule][$key])) { |
// yes, return that value |
return $this->parseConf[$rule][$key]; |
} else { |
// no |
return null; |
} |
} |
/** |
* |
* Set renderer configuration for a specific format, rule, and key. |
* |
* @access public |
* |
* @param string $format The render format to set config for. |
* |
* @param string $rule The render rule to set config for in the format. |
* |
* @param array|string $arg1 The config array, or the config key |
* within the render rule. |
* |
* @param string $arg2 The config value for the key. |
* |
* @return void |
* |
*/ |
function setRenderConf($format, $rule, $arg1, $arg2 = null) |
{ |
$format = ucwords(strtolower($format)); |
$rule = ucwords(strtolower($rule)); |
if (! isset($this->renderConf[$format])) { |
$this->renderConf[$format] = array(); |
} |
if (! isset($this->renderConf[$format][$rule])) { |
$this->renderConf[$format][$rule] = array(); |
} |
// if first arg is an array, use it as the entire |
// conf array for the render rule. otherwise, treat arg1 |
// as a key and arg2 as a value for the render rule conf. |
if (is_array($arg1)) { |
$this->renderConf[$format][$rule] = $arg1; |
} else { |
$this->renderConf[$format][$rule][$arg1] = $arg2; |
} |
} |
/** |
* |
* Get renderer configuration for a specific format, rule, and key. |
* |
* @access public |
* |
* @param string $format The render format to get config for. |
* |
* @param string $rule The render format rule to get config for. |
* |
* @param string $key A key in the conf array; if null, |
* returns the entire conf array. |
* |
* @return mixed The whole conf array if no key is specified, |
* or the specific conf key value. |
* |
*/ |
function getRenderConf($format, $rule, $key = null) |
{ |
$format = ucwords(strtolower($format)); |
$rule = ucwords(strtolower($rule)); |
if (! isset($this->renderConf[$format]) || |
! isset($this->renderConf[$format][$rule])) { |
return null; |
} |
// no key requested, return the whole array |
if (is_null($key)) { |
return $this->renderConf[$format][$rule]; |
} |
// does the requested key exist? |
if (isset($this->renderConf[$format][$rule][$key])) { |
// yes, return that value |
return $this->renderConf[$format][$rule][$key]; |
} else { |
// no |
return null; |
} |
} |
/** |
* |
* Set format configuration for a specific rule and key. |
* |
* @access public |
* |
* @param string $format The format to set config for. |
* |
* @param string $key The config key within the format. |
* |
* @param string $val The config value for the key. |
* |
* @return void |
* |
*/ |
function setFormatConf($format, $arg1, $arg2 = null) |
{ |
if (! is_array($this->formatConf[$format])) { |
$this->formatConf[$format] = array(); |
} |
// if first arg is an array, use it as the entire |
// conf array for the format. otherwise, treat arg1 |
// as a key and arg2 as a value for the format conf. |
if (is_array($arg1)) { |
$this->formatConf[$format] = $arg1; |
} else { |
$this->formatConf[$format][$arg1] = $arg2; |
} |
} |
/** |
* |
* Get configuration for a specific format and key. |
* |
* @access public |
* |
* @param string $format The format to get config for. |
* |
* @param mixed $key A key in the conf array; if null, |
* returns the entire conf array. |
* |
* @return mixed The whole conf array if no key is specified, |
* or the specific conf key value. |
* |
*/ |
function getFormatConf($format, $key = null) |
{ |
// the format does not exist |
if (! isset($this->formatConf[$format])) { |
return null; |
} |
// no key requested, return the whole array |
if (is_null($key)) { |
return $this->formatConf[$format]; |
} |
// does the requested key exist? |
if (isset($this->formatConf[$format][$key])) { |
// yes, return that value |
return $this->formatConf[$format][$key]; |
} else { |
// no |
return null; |
} |
} |
/** |
* |
* Inserts a rule into to the rule set. |
* |
* @access public |
* |
* @param string $name The name of the rule. Should be different from |
* all other keys in the rule set. |
* |
* @param string $tgt The rule after which to insert this new rule. By |
* default (null) the rule is inserted at the end; if set to '', inserts |
* at the beginning. |
* |
* @return void |
* |
*/ |
function insertRule($name, $tgt = null) |
{ |
$name = ucwords(strtolower($name)); |
if (! is_null($tgt)) { |
$tgt = ucwords(strtolower($tgt)); |
} |
// does the rule name to be inserted already exist? |
if (in_array($name, $this->rules)) { |
// yes, return |
return null; |
} |
// the target name is not null, and not '', but does not exist |
// in the list of rules. this means we're trying to insert after |
// a target key, but the target key isn't there. |
if (! is_null($tgt) && $tgt != '' && |
! in_array($tgt, $this->rules)) { |
return false; |
} |
// if $tgt is null, insert at the end. We know this is at the |
// end (instead of resetting an existing rule) becuase we exited |
// at the top of this method if the rule was already in place. |
if (is_null($tgt)) { |
$this->rules[] = $name; |
return true; |
} |
// save a copy of the current rules, then reset the rule set |
// so we can insert in the proper place later. |
// where to insert the rule? |
if ($tgt == '') { |
// insert at the beginning |
array_unshift($this->rules, $name); |
return true; |
} |
// insert after the named rule |
$tmp = $this->rules; |
$this->rules = array(); |
foreach ($tmp as $val) { |
$this->rules[] = $val; |
if ($val == $tgt) { |
$this->rules[] = $name; |
} |
} |
return true; |
} |
/** |
* |
* Delete (remove or unset) a rule from the $rules property. |
* |
* @access public |
* |
* @param string $rule The name of the rule to remove. |
* |
* @return void |
* |
*/ |
function deleteRule($name) |
{ |
$name = ucwords(strtolower($name)); |
$key = array_search($name, $this->rules); |
if ($key !== false) { |
unset($this->rules[$key]); |
} |
} |
/** |
* |
* Change from one rule to another in-place. |
* |
* @access public |
* |
* @param string $old The name of the rule to change from. |
* |
* @param string $new The name of the rule to change to. |
* |
* @return void |
* |
*/ |
function changeRule($old, $new) |
{ |
$old = ucwords(strtolower($old)); |
$new = ucwords(strtolower($new)); |
$key = array_search($old, $this->rules); |
if ($key !== false) { |
$this->rules[$old] = $new; |
} |
} |
/** |
* |
* Enables a rule so that it is applied when parsing. |
* |
* @access public |
* |
* @param string $rule The name of the rule to enable. |
* |
* @return void |
* |
*/ |
function enableRule($name) |
{ |
$name = ucwords(strtolower($name)); |
$key = array_search($name, $this->disable); |
if ($key !== false) { |
unset($this->disable[$key]); |
} |
} |
/** |
* |
* Disables a rule so that it is not applied when parsing. |
* |
* @access public |
* |
* @param string $rule The name of the rule to disable. |
* |
* @return void |
* |
*/ |
function disableRule($name) |
{ |
$name = ucwords(strtolower($name)); |
$key = array_search($name, $this->disable); |
if ($key === false) { |
$this->disable[] = $name; |
} |
} |
/** |
* |
* Parses and renders the text passed to it, and returns the results. |
* |
* First, the method parses the source text, applying rules to the |
* text as it goes. These rules will modify the source text |
* in-place, replacing some text with delimited tokens (and |
* populating the $this->tokens array as it goes). |
* |
* Next, the method renders the in-place tokens into the requested |
* output format. |
* |
* Finally, the method returns the transformed text. Note that the |
* source text is transformed in place; once it is transformed, it is |
* no longer the same as the original source text. |
* |
* @access public |
* |
* @param string $text The source text to which wiki rules should be |
* applied, both for parsing and for rendering. |
* |
* @param string $format The target output format, typically 'xhtml'. |
* If a rule does not support a given format, the output from that |
* rule is rule-specific. |
* |
* @return string The transformed wiki text. |
* |
*/ |
function transform($text, $format = 'Xhtml') |
{ |
$this->parse($text); |
return $this->render($format); |
} |
/** |
* |
* Sets the $_source text property, then parses it in place and |
* retains tokens in the $_tokens array property. |
* |
* @access public |
* |
* @param string $text The source text to which wiki rules should be |
* applied, both for parsing and for rendering. |
* |
* @return void |
* |
*/ |
function parse($text) |
{ |
// set the object property for the source text |
$this->source = $text; |
// reset the tokens. |
$this->tokens = array(); |
// apply the parse() method of each requested rule to the source |
// text. |
foreach ($this->rules as $name) { |
// do not parse the rules listed in $disable |
if (! in_array($name, $this->disable)) { |
// load the parsing object |
$this->loadParseObj($name); |
// load may have failed; only parse if |
// an object is in the array now |
if (is_object($this->parseObj[$name])) { |
$this->parseObj[$name]->parse(); |
} |
} |
} |
} |
/** |
* |
* Renders tokens back into the source text, based on the requested format. |
* |
* @access public |
* |
* @param string $format The target output format, typically 'xhtml'. |
* If a rule does not support a given format, the output from that |
* rule is rule-specific. |
* |
* @return string The transformed wiki text. |
* |
*/ |
function render($format = 'Xhtml') |
{ |
// the rendering method we're going to use from each rule |
$format = ucwords(strtolower($format)); |
// the eventual output text |
$output = ''; |
// when passing through the parsed source text, keep track of when |
// we are in a delimited section |
$in_delim = false; |
// when in a delimited section, capture the token key number |
$key = ''; |
// load the format object |
$this->loadFormatObj($format); |
// pre-rendering activity |
if (is_object($this->formatObj[$format])) { |
$output .= $this->formatObj[$format]->pre(); |
} |
// load the render objects |
foreach (array_keys($this->parseObj) as $rule) { |
$this->loadRenderObj($format, $rule); |
} |
// pass through the parsed source text character by character |
$k = strlen($this->source); |
for ($i = 0; $i < $k; $i++) { |
// the current character |
$char = $this->source{$i}; |
// are alredy in a delimited section? |
if ($in_delim) { |
// yes; are we ending the section? |
if ($char == $this->delim) { |
// yes, get the replacement text for the delimited |
// token number and unset the flag. |
$key = (int)$key; |
$rule = $this->tokens[$key][0]; |
$opts = $this->tokens[$key][1]; |
$output .= $this->renderObj[$rule]->token($opts); |
$in_delim = false; |
} else { |
// no, add to the dlimited token key number |
$key .= $char; |
} |
} else { |
// not currently in a delimited section. |
// are we starting into a delimited section? |
if ($char == $this->delim) { |
// yes, reset the previous key and |
// set the flag. |
$key = ''; |
$in_delim = true; |
} else { |
// no, add to the output as-is |
$output .= $char; |
} |
} |
} |
// post-rendering activity |
if (is_object($this->formatObj[$format])) { |
$output .= $this->formatObj[$format]->post(); |
} |
// return the rendered source text. |
return $output; |
} |
/** |
* |
* Returns the parsed source text with delimited token placeholders. |
* |
* @access public |
* |
* @return string The parsed source text. |
* |
*/ |
function getSource() |
{ |
return $this->source; |
} |
/** |
* |
* Returns tokens that have been parsed out of the source text. |
* |
* @access public |
* |
* @param array $rules If an array of rule names is passed, only return |
* tokens matching these rule names. If no array is passed, return all |
* tokens. |
* |
* @return array An array of tokens. |
* |
*/ |
function getTokens($rules = null) |
{ |
if (is_null($rules)) { |
return $this->tokens; |
} else { |
settype($rules, 'array'); |
$result = array(); |
foreach ($this->tokens as $key => $val) { |
if (in_array($val[0], $rules)) { |
$result[] = $val; |
} |
} |
return $result; |
} |
} |
/** |
* |
* Add a token to the Text_Wiki tokens array, and return a delimited |
* token number. |
* |
* @access public |
* |
* @param array $options An associative array of options for the new |
* token array element. The keys and values are specific to the |
* rule, and may or may not be common to other rule options. Typical |
* options keys are 'text' and 'type' but may include others. |
* |
* @param boolean $id_only If true, return only the token number, not |
* a delimited token string. |
* |
* @return string|int By default, return the number of the |
* newly-created token array element with a delimiter prefix and |
* suffix; however, if $id_only is set to true, return only the token |
* number (no delimiters). |
* |
*/ |
function addToken($rule, $options = array(), $id_only = false) |
{ |
// increment the token ID number. note that if you parse |
// multiple times with the same Text_Wiki object, the ID number |
// will not reset to zero. |
static $id; |
if (! isset($id)) { |
$id = 0; |
} else { |
$id ++; |
} |
// force the options to be an array |
settype($options, 'array'); |
// add the token |
$this->tokens[$id] = array( |
0 => $rule, |
1 => $options |
); |
// return a value |
if ($id_only) { |
// return the last token number |
return $id; |
} else { |
// return the token number with delimiters |
return $this->delim . $id . $this->delim; |
} |
} |
/** |
* |
* Set or re-set a token with specific information, overwriting any |
* previous rule name and rule options. |
* |
* @access public |
* |
* @param int $id The token number to reset. |
* |
* @param int $rule The rule name to use. |
* |
* @param array $options An associative array of options for the |
* token array element. The keys and values are specific to the |
* rule, and may or may not be common to other rule options. Typical |
* options keys are 'text' and 'type' but may include others. |
* |
* @return void |
* |
*/ |
function setToken($id, $rule, $options = array()) |
{ |
// reset the token |
$this->tokens[$id] = array( |
0 => $rule, |
1 => $options |
); |
} |
/** |
* |
* Load a rule parser class file. |
* |
* @access public |
* |
* @return bool True if loaded, false if not. |
* |
*/ |
function loadParseObj($rule) |
{ |
$rule = ucwords(strtolower($rule)); |
$file = $rule . '.php'; |
$class = "Text_Wiki_Parse_$rule"; |
if (! class_exists($class)) { |
$loc = $this->findFile('parse', $file); |
if ($loc) { |
// found the class |
include_once $loc; |
} else { |
// can't find the class |
$this->parseObj[$rule] = null; |
return false; |
} |
} |
$this->parseObj[$rule] =& new $class($this); |
} |
/** |
* |
* Load a rule-render class file. |
* |
* @access public |
* |
* @return bool True if loaded, false if not. |
* |
*/ |
function loadRenderObj($format, $rule) |
{ |
$format = ucwords(strtolower($format)); |
$rule = ucwords(strtolower($rule)); |
$file = "$format/$rule.php"; |
$class = "Text_Wiki_Render_$format" . "_$rule"; |
if (! class_exists($class)) { |
// load the class |
$loc = $this->findFile('render', $file); |
if ($loc) { |
// found the class |
include_once $loc; |
} else { |
// can't find the class |
return false; |
} |
} |
$this->renderObj[$rule] =& new $class($this); |
} |
/** |
* |
* Load a format-render class file. |
* |
* @access public |
* |
* @return bool True if loaded, false if not. |
* |
*/ |
function loadFormatObj($format) |
{ |
$format = ucwords(strtolower($format)); |
$file = $format . '.php'; |
$class = "Text_Wiki_Render_$format"; |
if (! class_exists($class)) { |
$loc = $this->findFile('render', $file); |
if ($loc) { |
// found the class |
include_once $loc; |
} else { |
// can't find the class |
return false; |
} |
} |
$this->formatObj[$format] =& new $class($this); |
} |
/** |
* |
* Add a path to a path array. |
* |
* @access public |
* |
* @param string $type The path-type to add (parse or render). |
* |
* @param string $dir The directory to add to the path-type. |
* |
* @return void |
* |
*/ |
function addPath($type, $dir) |
{ |
$dir = $this->fixPath($dir); |
if (! isset($this->path[$type])) { |
$this->path[$type] = array($dir); |
} else { |
array_unshift($this->path[$type], $dir); |
} |
} |
/** |
* |
* Get the current path array for a path-type. |
* |
* @access public |
* |
* @param string $type The path-type to look up (plugin, filter, or |
* template). If not set, returns all path types. |
* |
* @return array The array of paths for the requested type. |
* |
*/ |
function getPath($type = null) |
{ |
if (is_null($type)) { |
return $this->path; |
} elseif (! isset($this->path[$type])) { |
return array(); |
} else { |
return $this->path[$type]; |
} |
} |
/** |
* |
* Searches a series of paths for a given file. |
* |
* @param array $type The type of paths to search (template, plugin, |
* or filter). |
* |
* @param string $file The file name to look for. |
* |
* @return string|bool The full path and file name for the target file, |
* or boolean false if the file is not found in any of the paths. |
* |
*/ |
function findFile($type, $file) |
{ |
// get the set of paths |
$set = $this->getPath($type); |
// start looping through them |
foreach ($set as $path) { |
$fullname = $path . $file; |
if (file_exists($fullname) && is_readable($fullname)) { |
return $fullname; |
} |
} |
// could not find the file in the set of paths |
return false; |
} |
/** |
* |
* Append a trailing '/' to paths, unless the path is empty. |
* |
* @access private |
* |
* @param string $path The file path to fix |
* |
* @return string The fixed file path |
* |
*/ |
function fixPath($path) |
{ |
$len = strlen($this->_dirSep); |
if (! empty($path) && |
substr($path, -1 * $len, $len) != $this->_dirSep) { |
return $path . $this->_dirSep; |
} else { |
return $path; |
} |
} |
} |
?> |
/branches/v1.0-menes/api/pear/DB/oci8.php |
---|
New file |
0,0 → 1,1117 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ |
/** |
* The PEAR DB driver for PHP's oci8 extension |
* for interacting with Oracle databases |
* |
* PHP versions 4 and 5 |
* |
* LICENSE: This source file is subject to version 3.0 of the PHP license |
* that is available through the world-wide-web at the following URI: |
* http://www.php.net/license/3_0.txt. If you did not receive a copy of |
* the PHP License and are unable to obtain it through the web, please |
* send a note to license@php.net so we can mail you a copy immediately. |
* |
* @category Database |
* @package DB |
* @author James L. Pine <jlp@valinux.com> |
* @author Daniel Convissor <danielc@php.net> |
* @copyright 1997-2005 The PHP Group |
* @license http://www.php.net/license/3_0.txt PHP License 3.0 |
* @version CVS: $Id: oci8.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $ |
* @link http://pear.php.net/package/DB |
*/ |
/** |
* Obtain the DB_common class so it can be extended from |
*/ |
require_once 'DB/common.php'; |
/** |
* The methods PEAR DB uses to interact with PHP's oci8 extension |
* for interacting with Oracle databases |
* |
* Definitely works with versions 8 and 9 of Oracle. |
* |
* These methods overload the ones declared in DB_common. |
* |
* Be aware... OCIError() only appears to return anything when given a |
* statement, so functions return the generic DB_ERROR instead of more |
* useful errors that have to do with feedback from the database. |
* |
* @category Database |
* @package DB |
* @author James L. Pine <jlp@valinux.com> |
* @author Daniel Convissor <danielc@php.net> |
* @copyright 1997-2005 The PHP Group |
* @license http://www.php.net/license/3_0.txt PHP License 3.0 |
* @version Release: @package_version@ |
* @link http://pear.php.net/package/DB |
*/ |
class DB_oci8 extends DB_common |
{ |
// {{{ properties |
/** |
* The DB driver type (mysql, oci8, odbc, etc.) |
* @var string |
*/ |
var $phptype = 'oci8'; |
/** |
* The database syntax variant to be used (db2, access, etc.), if any |
* @var string |
*/ |
var $dbsyntax = 'oci8'; |
/** |
* The capabilities of this DB implementation |
* |
* The 'new_link' element contains the PHP version that first provided |
* new_link support for this DBMS. Contains false if it's unsupported. |
* |
* Meaning of the 'limit' element: |
* + 'emulate' = emulate with fetch row by number |
* + 'alter' = alter the query |
* + false = skip rows |
* |
* @var array |
*/ |
var $features = array( |
'limit' => 'alter', |
'new_link' => '5.0.0', |
'numrows' => 'subquery', |
'pconnect' => true, |
'prepare' => true, |
'ssl' => false, |
'transactions' => true, |
); |
/** |
* A mapping of native error codes to DB error codes |
* @var array |
*/ |
var $errorcode_map = array( |
1 => DB_ERROR_CONSTRAINT, |
900 => DB_ERROR_SYNTAX, |
904 => DB_ERROR_NOSUCHFIELD, |
913 => DB_ERROR_VALUE_COUNT_ON_ROW, |
921 => DB_ERROR_SYNTAX, |
923 => DB_ERROR_SYNTAX, |
942 => DB_ERROR_NOSUCHTABLE, |
955 => DB_ERROR_ALREADY_EXISTS, |
1400 => DB_ERROR_CONSTRAINT_NOT_NULL, |
1401 => DB_ERROR_INVALID, |
1407 => DB_ERROR_CONSTRAINT_NOT_NULL, |
1418 => DB_ERROR_NOT_FOUND, |
1476 => DB_ERROR_DIVZERO, |
1722 => DB_ERROR_INVALID_NUMBER, |
2289 => DB_ERROR_NOSUCHTABLE, |
2291 => DB_ERROR_CONSTRAINT, |
2292 => DB_ERROR_CONSTRAINT, |
2449 => DB_ERROR_CONSTRAINT, |
); |
/** |
* The raw database connection created by PHP |
* @var resource |
*/ |
var $connection; |
/** |
* The DSN information for connecting to a database |
* @var array |
*/ |
var $dsn = array(); |
/** |
* Should data manipulation queries be committed automatically? |
* @var bool |
* @access private |
*/ |
var $autocommit = true; |
/** |
* Stores the $data passed to execute() in the oci8 driver |
* |
* Gets reset to array() when simpleQuery() is run. |
* |
* Needed in case user wants to call numRows() after prepare/execute |
* was used. |
* |
* @var array |
* @access private |
*/ |
var $_data = array(); |
/** |
* The result or statement handle from the most recently executed query |
* @var resource |
*/ |
var $last_stmt; |
/** |
* Is the given prepared statement a data manipulation query? |
* @var array |
* @access private |
*/ |
var $manip_query = array(); |
// }}} |
// {{{ constructor |
/** |
* This constructor calls <kbd>$this->DB_common()</kbd> |
* |
* @return void |
*/ |
function DB_oci8() |
{ |
$this->DB_common(); |
} |
// }}} |
// {{{ connect() |
/** |
* Connect to the database server, log in and open the database |
* |
* Don't call this method directly. Use DB::connect() instead. |
* |
* If PHP is at version 5.0.0 or greater: |
* + Generally, oci_connect() or oci_pconnect() are used. |
* + But if the new_link DSN option is set to true, oci_new_connect() |
* is used. |
* |
* When using PHP version 4.x, OCILogon() or OCIPLogon() are used. |
* |
* PEAR DB's oci8 driver supports the following extra DSN options: |
* + charset The character set to be used on the connection. |
* Only used if PHP is at version 5.0.0 or greater |
* and the Oracle server is at 9.2 or greater. |
* Available since PEAR DB 1.7.0. |
* + new_link If set to true, causes subsequent calls to |
* connect() to return a new connection link |
* instead of the existing one. WARNING: this is |
* not portable to other DBMS's. |
* Available since PEAR DB 1.7.0. |
* |
* @param array $dsn the data source name |
* @param bool $persistent should the connection be persistent? |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
*/ |
function connect($dsn, $persistent = false) |
{ |
if (!PEAR::loadExtension('oci8')) { |
return $this->raiseError(DB_ERROR_EXTENSION_NOT_FOUND); |
} |
$this->dsn = $dsn; |
if ($dsn['dbsyntax']) { |
$this->dbsyntax = $dsn['dbsyntax']; |
} |
if (function_exists('oci_connect')) { |
if (isset($dsn['new_link']) |
&& ($dsn['new_link'] == 'true' || $dsn['new_link'] === true)) |
{ |
$connect_function = 'oci_new_connect'; |
} else { |
$connect_function = $persistent ? 'oci_pconnect' |
: 'oci_connect'; |
} |
// Backwards compatibility with DB < 1.7.0 |
if (empty($dsn['database']) && !empty($dsn['hostspec'])) { |
$db = $dsn['hostspec']; |
} else { |
$db = $dsn['database']; |
} |
$char = empty($dsn['charset']) ? null : $dsn['charset']; |
$this->connection = @$connect_function($dsn['username'], |
$dsn['password'], |
$db, |
$char); |
$error = OCIError(); |
if (!empty($error) && $error['code'] == 12541) { |
// Couldn't find TNS listener. Try direct connection. |
$this->connection = @$connect_function($dsn['username'], |
$dsn['password'], |
null, |
$char); |
} |
} else { |
$connect_function = $persistent ? 'OCIPLogon' : 'OCILogon'; |
if ($dsn['hostspec']) { |
$this->connection = @$connect_function($dsn['username'], |
$dsn['password'], |
$dsn['hostspec']); |
} elseif ($dsn['username'] || $dsn['password']) { |
$this->connection = @$connect_function($dsn['username'], |
$dsn['password']); |
} |
} |
if (!$this->connection) { |
$error = OCIError(); |
$error = (is_array($error)) ? $error['message'] : null; |
return $this->raiseError(DB_ERROR_CONNECT_FAILED, |
null, null, null, |
$error); |
} |
return DB_OK; |
} |
// }}} |
// {{{ disconnect() |
/** |
* Disconnects from the database server |
* |
* @return bool TRUE on success, FALSE on failure |
*/ |
function disconnect() |
{ |
if (function_exists('oci_close')) { |
$ret = @oci_close($this->connection); |
} else { |
$ret = @OCILogOff($this->connection); |
} |
$this->connection = null; |
return $ret; |
} |
// }}} |
// {{{ simpleQuery() |
/** |
* Sends a query to the database server |
* |
* To determine how many rows of a result set get buffered using |
* ocisetprefetch(), see the "result_buffering" option in setOptions(). |
* This option was added in Release 1.7.0. |
* |
* @param string the SQL query string |
* |
* @return mixed + a PHP result resrouce for successful SELECT queries |
* + the DB_OK constant for other successful queries |
* + a DB_Error object on failure |
*/ |
function simpleQuery($query) |
{ |
$this->_data = array(); |
$this->last_parameters = array(); |
$this->last_query = $query; |
$query = $this->modifyQuery($query); |
$result = @OCIParse($this->connection, $query); |
if (!$result) { |
return $this->oci8RaiseError(); |
} |
if ($this->autocommit) { |
$success = @OCIExecute($result,OCI_COMMIT_ON_SUCCESS); |
} else { |
$success = @OCIExecute($result,OCI_DEFAULT); |
} |
if (!$success) { |
return $this->oci8RaiseError($result); |
} |
$this->last_stmt = $result; |
if (DB::isManip($query)) { |
return DB_OK; |
} else { |
@ocisetprefetch($result, $this->options['result_buffering']); |
return $result; |
} |
} |
// }}} |
// {{{ nextResult() |
/** |
* Move the internal oracle result pointer to the next available result |
* |
* @param a valid oci8 result resource |
* |
* @access public |
* |
* @return true if a result is available otherwise return false |
*/ |
function nextResult($result) |
{ |
return false; |
} |
// }}} |
// {{{ fetchInto() |
/** |
* Places a row from the result set into the given array |
* |
* Formating of the array and the data therein are configurable. |
* See DB_result::fetchInto() for more information. |
* |
* This method is not meant to be called directly. Use |
* DB_result::fetchInto() instead. It can't be declared "protected" |
* because DB_result is a separate object. |
* |
* @param resource $result the query result resource |
* @param array $arr the referenced array to put the data in |
* @param int $fetchmode how the resulting array should be indexed |
* @param int $rownum the row number to fetch (0 = first row) |
* |
* @return mixed DB_OK on success, NULL when the end of a result set is |
* reached or on failure |
* |
* @see DB_result::fetchInto() |
*/ |
function fetchInto($result, &$arr, $fetchmode, $rownum = null) |
{ |
if ($rownum !== null) { |
return $this->raiseError(DB_ERROR_NOT_CAPABLE); |
} |
if ($fetchmode & DB_FETCHMODE_ASSOC) { |
$moredata = @OCIFetchInto($result,$arr,OCI_ASSOC+OCI_RETURN_NULLS+OCI_RETURN_LOBS); |
if ($this->options['portability'] & DB_PORTABILITY_LOWERCASE && |
$moredata) |
{ |
$arr = array_change_key_case($arr, CASE_LOWER); |
} |
} else { |
$moredata = OCIFetchInto($result,$arr,OCI_RETURN_NULLS+OCI_RETURN_LOBS); |
} |
if (!$moredata) { |
return null; |
} |
if ($this->options['portability'] & DB_PORTABILITY_RTRIM) { |
$this->_rtrimArrayValues($arr); |
} |
if ($this->options['portability'] & DB_PORTABILITY_NULL_TO_EMPTY) { |
$this->_convertNullArrayValuesToEmpty($arr); |
} |
return DB_OK; |
} |
// }}} |
// {{{ freeResult() |
/** |
* Deletes the result set and frees the memory occupied by the result set |
* |
* This method is not meant to be called directly. Use |
* DB_result::free() instead. It can't be declared "protected" |
* because DB_result is a separate object. |
* |
* @param resource $result PHP's query result resource |
* |
* @return bool TRUE on success, FALSE if $result is invalid |
* |
* @see DB_result::free() |
*/ |
function freeResult($result) |
{ |
return @OCIFreeStatement($result); |
} |
/** |
* Frees the internal resources associated with a prepared query |
* |
* @param resource $stmt the prepared statement's resource |
* @param bool $free_resource should the PHP resource be freed too? |
* Use false if you need to get data |
* from the result set later. |
* |
* @return bool TRUE on success, FALSE if $result is invalid |
* |
* @see DB_oci8::prepare() |
*/ |
function freePrepared($stmt, $free_resource = true) |
{ |
if (!is_resource($stmt)) { |
return false; |
} |
if ($free_resource) { |
@ocifreestatement($stmt); |
} |
if (isset($this->prepare_types[(int)$stmt])) { |
unset($this->prepare_types[(int)$stmt]); |
unset($this->manip_query[(int)$stmt]); |
} else { |
return false; |
} |
return true; |
} |
// }}} |
// {{{ numRows() |
/** |
* Gets the number of rows in a result set |
* |
* Only works if the DB_PORTABILITY_NUMROWS portability option |
* is turned on. |
* |
* This method is not meant to be called directly. Use |
* DB_result::numRows() instead. It can't be declared "protected" |
* because DB_result is a separate object. |
* |
* @param resource $result PHP's query result resource |
* |
* @return int the number of rows. A DB_Error object on failure. |
* |
* @see DB_result::numRows(), DB_common::setOption() |
*/ |
function numRows($result) |
{ |
// emulate numRows for Oracle. yuck. |
if ($this->options['portability'] & DB_PORTABILITY_NUMROWS && |
$result === $this->last_stmt) |
{ |
$countquery = 'SELECT COUNT(*) FROM ('.$this->last_query.')'; |
$save_query = $this->last_query; |
$save_stmt = $this->last_stmt; |
if (count($this->_data)) { |
$smt = $this->prepare('SELECT COUNT(*) FROM ('.$this->last_query.')'); |
$count = $this->execute($smt, $this->_data); |
} else { |
$count =& $this->query($countquery); |
} |
if (DB::isError($count) || |
DB::isError($row = $count->fetchRow(DB_FETCHMODE_ORDERED))) |
{ |
$this->last_query = $save_query; |
$this->last_stmt = $save_stmt; |
return $this->raiseError(DB_ERROR_NOT_CAPABLE); |
} |
return $row[0]; |
} |
return $this->raiseError(DB_ERROR_NOT_CAPABLE); |
} |
// }}} |
// {{{ numCols() |
/** |
* Gets the number of columns in a result set |
* |
* This method is not meant to be called directly. Use |
* DB_result::numCols() instead. It can't be declared "protected" |
* because DB_result is a separate object. |
* |
* @param resource $result PHP's query result resource |
* |
* @return int the number of columns. A DB_Error object on failure. |
* |
* @see DB_result::numCols() |
*/ |
function numCols($result) |
{ |
$cols = @OCINumCols($result); |
if (!$cols) { |
return $this->oci8RaiseError($result); |
} |
return $cols; |
} |
// }}} |
// {{{ prepare() |
/** |
* Prepares a query for multiple execution with execute(). |
* |
* With oci8, this is emulated. |
* |
* prepare() requires a generic query as string like <code> |
* INSERT INTO numbers VALUES (?, ?, ?) |
* </code>. The <kbd>?</kbd> characters are placeholders. |
* |
* Three types of placeholders can be used: |
* + <kbd>?</kbd> a quoted scalar value, i.e. strings, integers |
* + <kbd>!</kbd> value is inserted 'as is' |
* + <kbd>&</kbd> requires a file name. The file's contents get |
* inserted into the query (i.e. saving binary |
* data in a db) |
* |
* Use backslashes to escape placeholder characters if you don't want |
* them to be interpreted as placeholders. Example: <code> |
* "UPDATE foo SET col=? WHERE col='over \& under'" |
* </code> |
* |
* @param string $query the query to be prepared |
* |
* @return mixed DB statement resource on success. DB_Error on failure. |
* |
* @see DB_oci8::execute() |
*/ |
function prepare($query) |
{ |
$tokens = preg_split('/((?<!\\\)[&?!])/', $query, -1, |
PREG_SPLIT_DELIM_CAPTURE); |
$binds = count($tokens) - 1; |
$token = 0; |
$types = array(); |
$newquery = ''; |
foreach ($tokens as $key => $val) { |
switch ($val) { |
case '?': |
$types[$token++] = DB_PARAM_SCALAR; |
unset($tokens[$key]); |
break; |
case '&': |
$types[$token++] = DB_PARAM_OPAQUE; |
unset($tokens[$key]); |
break; |
case '!': |
$types[$token++] = DB_PARAM_MISC; |
unset($tokens[$key]); |
break; |
default: |
$tokens[$key] = preg_replace('/\\\([&?!])/', "\\1", $val); |
if ($key != $binds) { |
$newquery .= $tokens[$key] . ':bind' . $token; |
} else { |
$newquery .= $tokens[$key]; |
} |
} |
} |
$this->last_query = $query; |
$newquery = $this->modifyQuery($newquery); |
if (!$stmt = @OCIParse($this->connection, $newquery)) { |
return $this->oci8RaiseError(); |
} |
$this->prepare_types[(int)$stmt] = $types; |
$this->manip_query[(int)$stmt] = DB::isManip($query); |
return $stmt; |
} |
// }}} |
// {{{ execute() |
/** |
* Executes a DB statement prepared with prepare(). |
* |
* To determine how many rows of a result set get buffered using |
* ocisetprefetch(), see the "result_buffering" option in setOptions(). |
* This option was added in Release 1.7.0. |
* |
* @param resource $stmt a DB statement resource returned from prepare() |
* @param mixed $data array, string or numeric data to be used in |
* execution of the statement. Quantity of items |
* passed must match quantity of placeholders in |
* query: meaning 1 for non-array items or the |
* quantity of elements in the array. |
* |
* @return mixed returns an oic8 result resource for successful SELECT |
* queries, DB_OK for other successful queries. |
* A DB error object is returned on failure. |
* |
* @see DB_oci8::prepare() |
*/ |
function &execute($stmt, $data = array()) |
{ |
$data = (array)$data; |
$this->last_parameters = $data; |
$this->_data = $data; |
$types =& $this->prepare_types[(int)$stmt]; |
if (count($types) != count($data)) { |
$tmp =& $this->raiseError(DB_ERROR_MISMATCH); |
return $tmp; |
} |
$i = 0; |
foreach ($data as $key => $value) { |
if ($types[$i] == DB_PARAM_MISC) { |
/* |
* Oracle doesn't seem to have the ability to pass a |
* parameter along unchanged, so strip off quotes from start |
* and end, plus turn two single quotes to one single quote, |
* in order to avoid the quotes getting escaped by |
* Oracle and ending up in the database. |
*/ |
$data[$key] = preg_replace("/^'(.*)'$/", "\\1", $data[$key]); |
$data[$key] = str_replace("''", "'", $data[$key]); |
} elseif ($types[$i] == DB_PARAM_OPAQUE) { |
$fp = @fopen($data[$key], 'rb'); |
if (!$fp) { |
$tmp =& $this->raiseError(DB_ERROR_ACCESS_VIOLATION); |
return $tmp; |
} |
$data[$key] = fread($fp, filesize($data[$key])); |
fclose($fp); |
} |
if (!@OCIBindByName($stmt, ':bind' . $i, $data[$key], -1)) { |
$tmp = $this->oci8RaiseError($stmt); |
return $tmp; |
} |
$i++; |
} |
if ($this->autocommit) { |
$success = @OCIExecute($stmt, OCI_COMMIT_ON_SUCCESS); |
} else { |
$success = @OCIExecute($stmt, OCI_DEFAULT); |
} |
if (!$success) { |
$tmp = $this->oci8RaiseError($stmt); |
return $tmp; |
} |
$this->last_stmt = $stmt; |
if ($this->manip_query[(int)$stmt]) { |
$tmp = DB_OK; |
} else { |
@ocisetprefetch($stmt, $this->options['result_buffering']); |
$tmp =& new DB_result($this, $stmt); |
} |
return $tmp; |
} |
// }}} |
// {{{ autoCommit() |
/** |
* Enables or disables automatic commits |
* |
* @param bool $onoff true turns it on, false turns it off |
* |
* @return int DB_OK on success. A DB_Error object if the driver |
* doesn't support auto-committing transactions. |
*/ |
function autoCommit($onoff = false) |
{ |
$this->autocommit = (bool)$onoff;; |
return DB_OK; |
} |
// }}} |
// {{{ commit() |
/** |
* Commits the current transaction |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
*/ |
function commit() |
{ |
$result = @OCICommit($this->connection); |
if (!$result) { |
return $this->oci8RaiseError(); |
} |
return DB_OK; |
} |
// }}} |
// {{{ rollback() |
/** |
* Reverts the current transaction |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
*/ |
function rollback() |
{ |
$result = @OCIRollback($this->connection); |
if (!$result) { |
return $this->oci8RaiseError(); |
} |
return DB_OK; |
} |
// }}} |
// {{{ affectedRows() |
/** |
* Determines the number of rows affected by a data maniuplation query |
* |
* 0 is returned for queries that don't manipulate data. |
* |
* @return int the number of rows. A DB_Error object on failure. |
*/ |
function affectedRows() |
{ |
if ($this->last_stmt === false) { |
return $this->oci8RaiseError(); |
} |
$result = @OCIRowCount($this->last_stmt); |
if ($result === false) { |
return $this->oci8RaiseError($this->last_stmt); |
} |
return $result; |
} |
// }}} |
// {{{ modifyQuery() |
/** |
* Changes a query string for various DBMS specific reasons |
* |
* "SELECT 2+2" must be "SELECT 2+2 FROM dual" in Oracle. |
* |
* @param string $query the query string to modify |
* |
* @return string the modified query string |
* |
* @access protected |
*/ |
function modifyQuery($query) |
{ |
if (preg_match('/^\s*SELECT/i', $query) && |
!preg_match('/\sFROM\s/i', $query)) { |
$query .= ' FROM dual'; |
} |
return $query; |
} |
// }}} |
// {{{ modifyLimitQuery() |
/** |
* Adds LIMIT clauses to a query string according to current DBMS standards |
* |
* @param string $query the query to modify |
* @param int $from the row to start to fetching (0 = the first row) |
* @param int $count the numbers of rows to fetch |
* @param mixed $params array, string or numeric data to be used in |
* execution of the statement. Quantity of items |
* passed must match quantity of placeholders in |
* query: meaning 1 placeholder for non-array |
* parameters or 1 placeholder per array element. |
* |
* @return string the query string with LIMIT clauses added |
* |
* @access protected |
*/ |
function modifyLimitQuery($query, $from, $count, $params = array()) |
{ |
// Let Oracle return the name of the columns instead of |
// coding a "home" SQL parser |
if (count($params)) { |
$result = $this->prepare("SELECT * FROM ($query) " |
. 'WHERE NULL = NULL'); |
$tmp =& $this->execute($result, $params); |
} else { |
$q_fields = "SELECT * FROM ($query) WHERE NULL = NULL"; |
if (!$result = @OCIParse($this->connection, $q_fields)) { |
$this->last_query = $q_fields; |
return $this->oci8RaiseError(); |
} |
if (!@OCIExecute($result, OCI_DEFAULT)) { |
$this->last_query = $q_fields; |
return $this->oci8RaiseError($result); |
} |
} |
$ncols = OCINumCols($result); |
$cols = array(); |
for ( $i = 1; $i <= $ncols; $i++ ) { |
$cols[] = '"' . OCIColumnName($result, $i) . '"'; |
} |
$fields = implode(', ', $cols); |
// XXX Test that (tip by John Lim) |
//if (preg_match('/^\s*SELECT\s+/is', $query, $match)) { |
// // Introduce the FIRST_ROWS Oracle query optimizer |
// $query = substr($query, strlen($match[0]), strlen($query)); |
// $query = "SELECT /* +FIRST_ROWS */ " . $query; |
//} |
// Construct the query |
// more at: http://marc.theaimsgroup.com/?l=php-db&m=99831958101212&w=2 |
// Perhaps this could be optimized with the use of Unions |
$query = "SELECT $fields FROM". |
" (SELECT rownum as linenum, $fields FROM". |
" ($query)". |
' WHERE rownum <= '. ($from + $count) . |
') WHERE linenum >= ' . ++$from; |
return $query; |
} |
// }}} |
// {{{ nextId() |
/** |
* Returns the next free id in a sequence |
* |
* @param string $seq_name name of the sequence |
* @param boolean $ondemand when true, the seqence is automatically |
* created if it does not exist |
* |
* @return int the next id number in the sequence. |
* A DB_Error object on failure. |
* |
* @see DB_common::nextID(), DB_common::getSequenceName(), |
* DB_oci8::createSequence(), DB_oci8::dropSequence() |
*/ |
function nextId($seq_name, $ondemand = true) |
{ |
$seqname = $this->getSequenceName($seq_name); |
$repeat = 0; |
do { |
$this->expectError(DB_ERROR_NOSUCHTABLE); |
$result =& $this->query("SELECT ${seqname}.nextval FROM dual"); |
$this->popExpect(); |
if ($ondemand && DB::isError($result) && |
$result->getCode() == DB_ERROR_NOSUCHTABLE) { |
$repeat = 1; |
$result = $this->createSequence($seq_name); |
if (DB::isError($result)) { |
return $this->raiseError($result); |
} |
} else { |
$repeat = 0; |
} |
} while ($repeat); |
if (DB::isError($result)) { |
return $this->raiseError($result); |
} |
$arr = $result->fetchRow(DB_FETCHMODE_ORDERED); |
return $arr[0]; |
} |
/** |
* Creates a new sequence |
* |
* @param string $seq_name name of the new sequence |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
* |
* @see DB_common::createSequence(), DB_common::getSequenceName(), |
* DB_oci8::nextID(), DB_oci8::dropSequence() |
*/ |
function createSequence($seq_name) |
{ |
return $this->query('CREATE SEQUENCE ' |
. $this->getSequenceName($seq_name)); |
} |
// }}} |
// {{{ dropSequence() |
/** |
* Deletes a sequence |
* |
* @param string $seq_name name of the sequence to be deleted |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
* |
* @see DB_common::dropSequence(), DB_common::getSequenceName(), |
* DB_oci8::nextID(), DB_oci8::createSequence() |
*/ |
function dropSequence($seq_name) |
{ |
return $this->query('DROP SEQUENCE ' |
. $this->getSequenceName($seq_name)); |
} |
// }}} |
// {{{ oci8RaiseError() |
/** |
* Produces a DB_Error object regarding the current problem |
* |
* @param int $errno if the error is being manually raised pass a |
* DB_ERROR* constant here. If this isn't passed |
* the error information gathered from the DBMS. |
* |
* @return object the DB_Error object |
* |
* @see DB_common::raiseError(), |
* DB_oci8::errorNative(), DB_oci8::errorCode() |
*/ |
function oci8RaiseError($errno = null) |
{ |
if ($errno === null) { |
$error = @OCIError($this->connection); |
return $this->raiseError($this->errorCode($error['code']), |
null, null, null, $error['message']); |
} elseif (is_resource($errno)) { |
$error = @OCIError($errno); |
return $this->raiseError($this->errorCode($error['code']), |
null, null, null, $error['message']); |
} |
return $this->raiseError($this->errorCode($errno)); |
} |
// }}} |
// {{{ errorNative() |
/** |
* Gets the DBMS' native error code produced by the last query |
* |
* @return int the DBMS' error code. FALSE if the code could not be |
* determined |
*/ |
function errorNative() |
{ |
if (is_resource($this->last_stmt)) { |
$error = @OCIError($this->last_stmt); |
} else { |
$error = @OCIError($this->connection); |
} |
if (is_array($error)) { |
return $error['code']; |
} |
return false; |
} |
// }}} |
// {{{ tableInfo() |
/** |
* Returns information about a table or a result set |
* |
* NOTE: only supports 'table' and 'flags' if <var>$result</var> |
* is a table name. |
* |
* NOTE: flags won't contain index information. |
* |
* @param object|string $result DB_result object from a query or a |
* string containing the name of a table. |
* While this also accepts a query result |
* resource identifier, this behavior is |
* deprecated. |
* @param int $mode a valid tableInfo mode |
* |
* @return array an associative array with the information requested. |
* A DB_Error object on failure. |
* |
* @see DB_common::tableInfo() |
*/ |
function tableInfo($result, $mode = null) |
{ |
if ($this->options['portability'] & DB_PORTABILITY_LOWERCASE) { |
$case_func = 'strtolower'; |
} else { |
$case_func = 'strval'; |
} |
$res = array(); |
if (is_string($result)) { |
/* |
* Probably received a table name. |
* Create a result resource identifier. |
*/ |
$result = strtoupper($result); |
$q_fields = 'SELECT column_name, data_type, data_length, ' |
. 'nullable ' |
. 'FROM user_tab_columns ' |
. "WHERE table_name='$result' ORDER BY column_id"; |
$this->last_query = $q_fields; |
if (!$stmt = @OCIParse($this->connection, $q_fields)) { |
return $this->oci8RaiseError(DB_ERROR_NEED_MORE_DATA); |
} |
if (!@OCIExecute($stmt, OCI_DEFAULT)) { |
return $this->oci8RaiseError($stmt); |
} |
$i = 0; |
while (@OCIFetch($stmt)) { |
$res[$i] = array( |
'table' => $case_func($result), |
'name' => $case_func(@OCIResult($stmt, 1)), |
'type' => @OCIResult($stmt, 2), |
'len' => @OCIResult($stmt, 3), |
'flags' => (@OCIResult($stmt, 4) == 'N') ? 'not_null' : '', |
); |
if ($mode & DB_TABLEINFO_ORDER) { |
$res['order'][$res[$i]['name']] = $i; |
} |
if ($mode & DB_TABLEINFO_ORDERTABLE) { |
$res['ordertable'][$res[$i]['table']][$res[$i]['name']] = $i; |
} |
$i++; |
} |
if ($mode) { |
$res['num_fields'] = $i; |
} |
@OCIFreeStatement($stmt); |
} else { |
if (isset($result->result)) { |
/* |
* Probably received a result object. |
* Extract the result resource identifier. |
*/ |
$result = $result->result; |
} |
$res = array(); |
if ($result === $this->last_stmt) { |
$count = @OCINumCols($result); |
if ($mode) { |
$res['num_fields'] = $count; |
} |
for ($i = 0; $i < $count; $i++) { |
$res[$i] = array( |
'table' => '', |
'name' => $case_func(@OCIColumnName($result, $i+1)), |
'type' => @OCIColumnType($result, $i+1), |
'len' => @OCIColumnSize($result, $i+1), |
'flags' => '', |
); |
if ($mode & DB_TABLEINFO_ORDER) { |
$res['order'][$res[$i]['name']] = $i; |
} |
if ($mode & DB_TABLEINFO_ORDERTABLE) { |
$res['ordertable'][$res[$i]['table']][$res[$i]['name']] = $i; |
} |
} |
} else { |
return $this->raiseError(DB_ERROR_NOT_CAPABLE); |
} |
} |
return $res; |
} |
// }}} |
// {{{ getSpecialQuery() |
/** |
* Obtains the query string needed for listing a given type of objects |
* |
* @param string $type the kind of objects you want to retrieve |
* |
* @return string the SQL query string or null if the driver doesn't |
* support the object type requested |
* |
* @access protected |
* @see DB_common::getListOf() |
*/ |
function getSpecialQuery($type) |
{ |
switch ($type) { |
case 'tables': |
return 'SELECT table_name FROM user_tables'; |
case 'synonyms': |
return 'SELECT synonym_name FROM user_synonyms'; |
default: |
return null; |
} |
} |
// }}} |
} |
/* |
* Local variables: |
* tab-width: 4 |
* c-basic-offset: 4 |
* End: |
*/ |
?> |
/branches/v1.0-menes/api/pear/DB/ibase.php |
---|
New file |
0,0 → 1,1071 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ |
/** |
* The PEAR DB driver for PHP's interbase extension |
* for interacting with Interbase and Firebird databases |
* |
* While this class works with PHP 4, PHP's InterBase extension is |
* unstable in PHP 4. Use PHP 5. |
* |
* PHP versions 4 and 5 |
* |
* LICENSE: This source file is subject to version 3.0 of the PHP license |
* that is available through the world-wide-web at the following URI: |
* http://www.php.net/license/3_0.txt. If you did not receive a copy of |
* the PHP License and are unable to obtain it through the web, please |
* send a note to license@php.net so we can mail you a copy immediately. |
* |
* @category Database |
* @package DB |
* @author Sterling Hughes <sterling@php.net> |
* @author Daniel Convissor <danielc@php.net> |
* @copyright 1997-2005 The PHP Group |
* @license http://www.php.net/license/3_0.txt PHP License 3.0 |
* @version CVS: $Id: ibase.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $ |
* @link http://pear.php.net/package/DB |
*/ |
/** |
* Obtain the DB_common class so it can be extended from |
*/ |
require_once 'DB/common.php'; |
/** |
* The methods PEAR DB uses to interact with PHP's interbase extension |
* for interacting with Interbase and Firebird databases |
* |
* These methods overload the ones declared in DB_common. |
* |
* While this class works with PHP 4, PHP's InterBase extension is |
* unstable in PHP 4. Use PHP 5. |
* |
* NOTICE: limitQuery() only works for Firebird. |
* |
* @category Database |
* @package DB |
* @author Sterling Hughes <sterling@php.net> |
* @author Daniel Convissor <danielc@php.net> |
* @copyright 1997-2005 The PHP Group |
* @license http://www.php.net/license/3_0.txt PHP License 3.0 |
* @version Release: @package_version@ |
* @link http://pear.php.net/package/DB |
* @since Class became stable in Release 1.7.0 |
*/ |
class DB_ibase extends DB_common |
{ |
// {{{ properties |
/** |
* The DB driver type (mysql, oci8, odbc, etc.) |
* @var string |
*/ |
var $phptype = 'ibase'; |
/** |
* The database syntax variant to be used (db2, access, etc.), if any |
* @var string |
*/ |
var $dbsyntax = 'ibase'; |
/** |
* The capabilities of this DB implementation |
* |
* The 'new_link' element contains the PHP version that first provided |
* new_link support for this DBMS. Contains false if it's unsupported. |
* |
* Meaning of the 'limit' element: |
* + 'emulate' = emulate with fetch row by number |
* + 'alter' = alter the query |
* + false = skip rows |
* |
* NOTE: only firebird supports limit. |
* |
* @var array |
*/ |
var $features = array( |
'limit' => false, |
'new_link' => false, |
'numrows' => 'emulate', |
'pconnect' => true, |
'prepare' => true, |
'ssl' => false, |
'transactions' => true, |
); |
/** |
* A mapping of native error codes to DB error codes |
* @var array |
*/ |
var $errorcode_map = array( |
-104 => DB_ERROR_SYNTAX, |
-150 => DB_ERROR_ACCESS_VIOLATION, |
-151 => DB_ERROR_ACCESS_VIOLATION, |
-155 => DB_ERROR_NOSUCHTABLE, |
-157 => DB_ERROR_NOSUCHFIELD, |
-158 => DB_ERROR_VALUE_COUNT_ON_ROW, |
-170 => DB_ERROR_MISMATCH, |
-171 => DB_ERROR_MISMATCH, |
-172 => DB_ERROR_INVALID, |
// -204 => // Covers too many errors, need to use regex on msg |
-205 => DB_ERROR_NOSUCHFIELD, |
-206 => DB_ERROR_NOSUCHFIELD, |
-208 => DB_ERROR_INVALID, |
-219 => DB_ERROR_NOSUCHTABLE, |
-297 => DB_ERROR_CONSTRAINT, |
-303 => DB_ERROR_INVALID, |
-413 => DB_ERROR_INVALID_NUMBER, |
-530 => DB_ERROR_CONSTRAINT, |
-551 => DB_ERROR_ACCESS_VIOLATION, |
-552 => DB_ERROR_ACCESS_VIOLATION, |
// -607 => // Covers too many errors, need to use regex on msg |
-625 => DB_ERROR_CONSTRAINT_NOT_NULL, |
-803 => DB_ERROR_CONSTRAINT, |
-804 => DB_ERROR_VALUE_COUNT_ON_ROW, |
-904 => DB_ERROR_CONNECT_FAILED, |
-922 => DB_ERROR_NOSUCHDB, |
-923 => DB_ERROR_CONNECT_FAILED, |
-924 => DB_ERROR_CONNECT_FAILED |
); |
/** |
* The raw database connection created by PHP |
* @var resource |
*/ |
var $connection; |
/** |
* The DSN information for connecting to a database |
* @var array |
*/ |
var $dsn = array(); |
/** |
* The number of rows affected by a data manipulation query |
* @var integer |
* @access private |
*/ |
var $affected = 0; |
/** |
* Should data manipulation queries be committed automatically? |
* @var bool |
* @access private |
*/ |
var $autocommit = true; |
/** |
* The prepared statement handle from the most recently executed statement |
* |
* {@internal Mainly here because the InterBase/Firebird API is only |
* able to retrieve data from result sets if the statemnt handle is |
* still in scope.}} |
* |
* @var resource |
*/ |
var $last_stmt; |
/** |
* Is the given prepared statement a data manipulation query? |
* @var array |
* @access private |
*/ |
var $manip_query = array(); |
// }}} |
// {{{ constructor |
/** |
* This constructor calls <kbd>$this->DB_common()</kbd> |
* |
* @return void |
*/ |
function DB_ibase() |
{ |
$this->DB_common(); |
} |
// }}} |
// {{{ connect() |
/** |
* Connect to the database server, log in and open the database |
* |
* Don't call this method directly. Use DB::connect() instead. |
* |
* PEAR DB's ibase driver supports the following extra DSN options: |
* + buffers The number of database buffers to allocate for the |
* server-side cache. |
* + charset The default character set for a database. |
* + dialect The default SQL dialect for any statement |
* executed within a connection. Defaults to the |
* highest one supported by client libraries. |
* Functional only with InterBase 6 and up. |
* + role Functional only with InterBase 5 and up. |
* |
* @param array $dsn the data source name |
* @param bool $persistent should the connection be persistent? |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
*/ |
function connect($dsn, $persistent = false) |
{ |
if (!PEAR::loadExtension('interbase')) { |
return $this->raiseError(DB_ERROR_EXTENSION_NOT_FOUND); |
} |
$this->dsn = $dsn; |
if ($dsn['dbsyntax']) { |
$this->dbsyntax = $dsn['dbsyntax']; |
} |
if ($this->dbsyntax == 'firebird') { |
$this->features['limit'] = 'alter'; |
} |
$params = array( |
$dsn['hostspec'] |
? ($dsn['hostspec'] . ':' . $dsn['database']) |
: $dsn['database'], |
$dsn['username'] ? $dsn['username'] : null, |
$dsn['password'] ? $dsn['password'] : null, |
isset($dsn['charset']) ? $dsn['charset'] : null, |
isset($dsn['buffers']) ? $dsn['buffers'] : null, |
isset($dsn['dialect']) ? $dsn['dialect'] : null, |
isset($dsn['role']) ? $dsn['role'] : null, |
); |
$connect_function = $persistent ? 'ibase_pconnect' : 'ibase_connect'; |
$this->connection = @call_user_func_array($connect_function, $params); |
if (!$this->connection) { |
return $this->ibaseRaiseError(DB_ERROR_CONNECT_FAILED); |
} |
return DB_OK; |
} |
// }}} |
// {{{ disconnect() |
/** |
* Disconnects from the database server |
* |
* @return bool TRUE on success, FALSE on failure |
*/ |
function disconnect() |
{ |
$ret = @ibase_close($this->connection); |
$this->connection = null; |
return $ret; |
} |
// }}} |
// {{{ simpleQuery() |
/** |
* Sends a query to the database server |
* |
* @param string the SQL query string |
* |
* @return mixed + a PHP result resrouce for successful SELECT queries |
* + the DB_OK constant for other successful queries |
* + a DB_Error object on failure |
*/ |
function simpleQuery($query) |
{ |
$ismanip = DB::isManip($query); |
$this->last_query = $query; |
$query = $this->modifyQuery($query); |
$result = @ibase_query($this->connection, $query); |
if (!$result) { |
return $this->ibaseRaiseError(); |
} |
if ($this->autocommit && $ismanip) { |
@ibase_commit($this->connection); |
} |
if ($ismanip) { |
$this->affected = $result; |
return DB_OK; |
} else { |
$this->affected = 0; |
return $result; |
} |
} |
// }}} |
// {{{ modifyLimitQuery() |
/** |
* Adds LIMIT clauses to a query string according to current DBMS standards |
* |
* Only works with Firebird. |
* |
* @param string $query the query to modify |
* @param int $from the row to start to fetching (0 = the first row) |
* @param int $count the numbers of rows to fetch |
* @param mixed $params array, string or numeric data to be used in |
* execution of the statement. Quantity of items |
* passed must match quantity of placeholders in |
* query: meaning 1 placeholder for non-array |
* parameters or 1 placeholder per array element. |
* |
* @return string the query string with LIMIT clauses added |
* |
* @access protected |
*/ |
function modifyLimitQuery($query, $from, $count, $params = array()) |
{ |
if ($this->dsn['dbsyntax'] == 'firebird') { |
$query = preg_replace('/^([\s(])*SELECT/i', |
"SELECT FIRST $count SKIP $from", $query); |
} |
return $query; |
} |
// }}} |
// {{{ nextResult() |
/** |
* Move the internal ibase result pointer to the next available result |
* |
* @param a valid fbsql result resource |
* |
* @access public |
* |
* @return true if a result is available otherwise return false |
*/ |
function nextResult($result) |
{ |
return false; |
} |
// }}} |
// {{{ fetchInto() |
/** |
* Places a row from the result set into the given array |
* |
* Formating of the array and the data therein are configurable. |
* See DB_result::fetchInto() for more information. |
* |
* This method is not meant to be called directly. Use |
* DB_result::fetchInto() instead. It can't be declared "protected" |
* because DB_result is a separate object. |
* |
* @param resource $result the query result resource |
* @param array $arr the referenced array to put the data in |
* @param int $fetchmode how the resulting array should be indexed |
* @param int $rownum the row number to fetch (0 = first row) |
* |
* @return mixed DB_OK on success, NULL when the end of a result set is |
* reached or on failure |
* |
* @see DB_result::fetchInto() |
*/ |
function fetchInto($result, &$arr, $fetchmode, $rownum = null) |
{ |
if ($rownum !== null) { |
return $this->ibaseRaiseError(DB_ERROR_NOT_CAPABLE); |
} |
if ($fetchmode & DB_FETCHMODE_ASSOC) { |
if (function_exists('ibase_fetch_assoc')) { |
$arr = @ibase_fetch_assoc($result); |
} else { |
$arr = get_object_vars(ibase_fetch_object($result)); |
} |
if ($this->options['portability'] & DB_PORTABILITY_LOWERCASE && $arr) { |
$arr = array_change_key_case($arr, CASE_LOWER); |
} |
} else { |
$arr = @ibase_fetch_row($result); |
} |
if (!$arr) { |
return null; |
} |
if ($this->options['portability'] & DB_PORTABILITY_RTRIM) { |
$this->_rtrimArrayValues($arr); |
} |
if ($this->options['portability'] & DB_PORTABILITY_NULL_TO_EMPTY) { |
$this->_convertNullArrayValuesToEmpty($arr); |
} |
return DB_OK; |
} |
// }}} |
// {{{ freeResult() |
/** |
* Deletes the result set and frees the memory occupied by the result set |
* |
* This method is not meant to be called directly. Use |
* DB_result::free() instead. It can't be declared "protected" |
* because DB_result is a separate object. |
* |
* @param resource $result PHP's query result resource |
* |
* @return bool TRUE on success, FALSE if $result is invalid |
* |
* @see DB_result::free() |
*/ |
function freeResult($result) |
{ |
return @ibase_free_result($result); |
} |
// }}} |
// {{{ freeQuery() |
function freeQuery($query) |
{ |
@ibase_free_query($query); |
return true; |
} |
// }}} |
// {{{ affectedRows() |
/** |
* Determines the number of rows affected by a data maniuplation query |
* |
* 0 is returned for queries that don't manipulate data. |
* |
* @return int the number of rows. A DB_Error object on failure. |
*/ |
function affectedRows() |
{ |
if (is_integer($this->affected)) { |
return $this->affected; |
} |
return $this->ibaseRaiseError(DB_ERROR_NOT_CAPABLE); |
} |
// }}} |
// {{{ numCols() |
/** |
* Gets the number of columns in a result set |
* |
* This method is not meant to be called directly. Use |
* DB_result::numCols() instead. It can't be declared "protected" |
* because DB_result is a separate object. |
* |
* @param resource $result PHP's query result resource |
* |
* @return int the number of columns. A DB_Error object on failure. |
* |
* @see DB_result::numCols() |
*/ |
function numCols($result) |
{ |
$cols = @ibase_num_fields($result); |
if (!$cols) { |
return $this->ibaseRaiseError(); |
} |
return $cols; |
} |
// }}} |
// {{{ prepare() |
/** |
* Prepares a query for multiple execution with execute(). |
* |
* prepare() requires a generic query as string like <code> |
* INSERT INTO numbers VALUES (?, ?, ?) |
* </code>. The <kbd>?</kbd> characters are placeholders. |
* |
* Three types of placeholders can be used: |
* + <kbd>?</kbd> a quoted scalar value, i.e. strings, integers |
* + <kbd>!</kbd> value is inserted 'as is' |
* + <kbd>&</kbd> requires a file name. The file's contents get |
* inserted into the query (i.e. saving binary |
* data in a db) |
* |
* Use backslashes to escape placeholder characters if you don't want |
* them to be interpreted as placeholders. Example: <code> |
* "UPDATE foo SET col=? WHERE col='over \& under'" |
* </code> |
* |
* @param string $query query to be prepared |
* @return mixed DB statement resource on success. DB_Error on failure. |
*/ |
function prepare($query) |
{ |
$tokens = preg_split('/((?<!\\\)[&?!])/', $query, -1, |
PREG_SPLIT_DELIM_CAPTURE); |
$token = 0; |
$types = array(); |
$newquery = ''; |
foreach ($tokens as $key => $val) { |
switch ($val) { |
case '?': |
$types[$token++] = DB_PARAM_SCALAR; |
break; |
case '&': |
$types[$token++] = DB_PARAM_OPAQUE; |
break; |
case '!': |
$types[$token++] = DB_PARAM_MISC; |
break; |
default: |
$tokens[$key] = preg_replace('/\\\([&?!])/', "\\1", $val); |
$newquery .= $tokens[$key] . '?'; |
} |
} |
$newquery = substr($newquery, 0, -1); |
$this->last_query = $query; |
$newquery = $this->modifyQuery($newquery); |
$stmt = @ibase_prepare($this->connection, $newquery); |
$this->prepare_types[(int)$stmt] = $types; |
$this->manip_query[(int)$stmt] = DB::isManip($query); |
return $stmt; |
} |
// }}} |
// {{{ execute() |
/** |
* Executes a DB statement prepared with prepare(). |
* |
* @param resource $stmt a DB statement resource returned from prepare() |
* @param mixed $data array, string or numeric data to be used in |
* execution of the statement. Quantity of items |
* passed must match quantity of placeholders in |
* query: meaning 1 for non-array items or the |
* quantity of elements in the array. |
* @return object a new DB_Result or a DB_Error when fail |
* @see DB_ibase::prepare() |
* @access public |
*/ |
function &execute($stmt, $data = array()) |
{ |
$data = (array)$data; |
$this->last_parameters = $data; |
$types =& $this->prepare_types[(int)$stmt]; |
if (count($types) != count($data)) { |
$tmp =& $this->raiseError(DB_ERROR_MISMATCH); |
return $tmp; |
} |
$i = 0; |
foreach ($data as $key => $value) { |
if ($types[$i] == DB_PARAM_MISC) { |
/* |
* ibase doesn't seem to have the ability to pass a |
* parameter along unchanged, so strip off quotes from start |
* and end, plus turn two single quotes to one single quote, |
* in order to avoid the quotes getting escaped by |
* ibase and ending up in the database. |
*/ |
$data[$key] = preg_replace("/^'(.*)'$/", "\\1", $data[$key]); |
$data[$key] = str_replace("''", "'", $data[$key]); |
} elseif ($types[$i] == DB_PARAM_OPAQUE) { |
$fp = @fopen($data[$key], 'rb'); |
if (!$fp) { |
$tmp =& $this->raiseError(DB_ERROR_ACCESS_VIOLATION); |
return $tmp; |
} |
$data[$key] = fread($fp, filesize($data[$key])); |
fclose($fp); |
} |
$i++; |
} |
array_unshift($data, $stmt); |
$res = call_user_func_array('ibase_execute', $data); |
if (!$res) { |
$tmp =& $this->ibaseRaiseError(); |
return $tmp; |
} |
/* XXX need this? |
if ($this->autocommit && $this->manip_query[(int)$stmt]) { |
@ibase_commit($this->connection); |
}*/ |
$this->last_stmt = $stmt; |
if ($this->manip_query[(int)$stmt]) { |
$tmp = DB_OK; |
} else { |
$tmp =& new DB_result($this, $res); |
} |
return $tmp; |
} |
/** |
* Frees the internal resources associated with a prepared query |
* |
* @param resource $stmt the prepared statement's PHP resource |
* @param bool $free_resource should the PHP resource be freed too? |
* Use false if you need to get data |
* from the result set later. |
* |
* @return bool TRUE on success, FALSE if $result is invalid |
* |
* @see DB_ibase::prepare() |
*/ |
function freePrepared($stmt, $free_resource = true) |
{ |
if (!is_resource($stmt)) { |
return false; |
} |
if ($free_resource) { |
@ibase_free_query($stmt); |
} |
unset($this->prepare_tokens[(int)$stmt]); |
unset($this->prepare_types[(int)$stmt]); |
unset($this->manip_query[(int)$stmt]); |
return true; |
} |
// }}} |
// {{{ autoCommit() |
/** |
* Enables or disables automatic commits |
* |
* @param bool $onoff true turns it on, false turns it off |
* |
* @return int DB_OK on success. A DB_Error object if the driver |
* doesn't support auto-committing transactions. |
*/ |
function autoCommit($onoff = false) |
{ |
$this->autocommit = $onoff ? 1 : 0; |
return DB_OK; |
} |
// }}} |
// {{{ commit() |
/** |
* Commits the current transaction |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
*/ |
function commit() |
{ |
return @ibase_commit($this->connection); |
} |
// }}} |
// {{{ rollback() |
/** |
* Reverts the current transaction |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
*/ |
function rollback() |
{ |
return @ibase_rollback($this->connection); |
} |
// }}} |
// {{{ transactionInit() |
function transactionInit($trans_args = 0) |
{ |
return $trans_args |
? @ibase_trans($trans_args, $this->connection) |
: @ibase_trans(); |
} |
// }}} |
// {{{ nextId() |
/** |
* Returns the next free id in a sequence |
* |
* @param string $seq_name name of the sequence |
* @param boolean $ondemand when true, the seqence is automatically |
* created if it does not exist |
* |
* @return int the next id number in the sequence. |
* A DB_Error object on failure. |
* |
* @see DB_common::nextID(), DB_common::getSequenceName(), |
* DB_ibase::createSequence(), DB_ibase::dropSequence() |
*/ |
function nextId($seq_name, $ondemand = true) |
{ |
$sqn = strtoupper($this->getSequenceName($seq_name)); |
$repeat = 0; |
do { |
$this->pushErrorHandling(PEAR_ERROR_RETURN); |
$result =& $this->query("SELECT GEN_ID(${sqn}, 1) " |
. 'FROM RDB$GENERATORS ' |
. "WHERE RDB\$GENERATOR_NAME='${sqn}'"); |
$this->popErrorHandling(); |
if ($ondemand && DB::isError($result)) { |
$repeat = 1; |
$result = $this->createSequence($seq_name); |
if (DB::isError($result)) { |
return $result; |
} |
} else { |
$repeat = 0; |
} |
} while ($repeat); |
if (DB::isError($result)) { |
return $this->raiseError($result); |
} |
$arr = $result->fetchRow(DB_FETCHMODE_ORDERED); |
$result->free(); |
return $arr[0]; |
} |
// }}} |
// {{{ createSequence() |
/** |
* Creates a new sequence |
* |
* @param string $seq_name name of the new sequence |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
* |
* @see DB_common::createSequence(), DB_common::getSequenceName(), |
* DB_ibase::nextID(), DB_ibase::dropSequence() |
*/ |
function createSequence($seq_name) |
{ |
$sqn = strtoupper($this->getSequenceName($seq_name)); |
$this->pushErrorHandling(PEAR_ERROR_RETURN); |
$result = $this->query("CREATE GENERATOR ${sqn}"); |
$this->popErrorHandling(); |
return $result; |
} |
// }}} |
// {{{ dropSequence() |
/** |
* Deletes a sequence |
* |
* @param string $seq_name name of the sequence to be deleted |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
* |
* @see DB_common::dropSequence(), DB_common::getSequenceName(), |
* DB_ibase::nextID(), DB_ibase::createSequence() |
*/ |
function dropSequence($seq_name) |
{ |
return $this->query('DELETE FROM RDB$GENERATORS ' |
. "WHERE RDB\$GENERATOR_NAME='" |
. strtoupper($this->getSequenceName($seq_name)) |
. "'"); |
} |
// }}} |
// {{{ _ibaseFieldFlags() |
/** |
* Get the column's flags |
* |
* Supports "primary_key", "unique_key", "not_null", "default", |
* "computed" and "blob". |
* |
* @param string $field_name the name of the field |
* @param string $table_name the name of the table |
* |
* @return string the flags |
* |
* @access private |
*/ |
function _ibaseFieldFlags($field_name, $table_name) |
{ |
$sql = 'SELECT R.RDB$CONSTRAINT_TYPE CTYPE' |
.' FROM RDB$INDEX_SEGMENTS I' |
.' JOIN RDB$RELATION_CONSTRAINTS R ON I.RDB$INDEX_NAME=R.RDB$INDEX_NAME' |
.' WHERE I.RDB$FIELD_NAME=\'' . $field_name . '\'' |
.' AND UPPER(R.RDB$RELATION_NAME)=\'' . strtoupper($table_name) . '\''; |
$result = @ibase_query($this->connection, $sql); |
if (!$result) { |
return $this->ibaseRaiseError(); |
} |
$flags = ''; |
if ($obj = @ibase_fetch_object($result)) { |
@ibase_free_result($result); |
if (isset($obj->CTYPE) && trim($obj->CTYPE) == 'PRIMARY KEY') { |
$flags .= 'primary_key '; |
} |
if (isset($obj->CTYPE) && trim($obj->CTYPE) == 'UNIQUE') { |
$flags .= 'unique_key '; |
} |
} |
$sql = 'SELECT R.RDB$NULL_FLAG AS NFLAG,' |
.' R.RDB$DEFAULT_SOURCE AS DSOURCE,' |
.' F.RDB$FIELD_TYPE AS FTYPE,' |
.' F.RDB$COMPUTED_SOURCE AS CSOURCE' |
.' FROM RDB$RELATION_FIELDS R ' |
.' JOIN RDB$FIELDS F ON R.RDB$FIELD_SOURCE=F.RDB$FIELD_NAME' |
.' WHERE UPPER(R.RDB$RELATION_NAME)=\'' . strtoupper($table_name) . '\'' |
.' AND R.RDB$FIELD_NAME=\'' . $field_name . '\''; |
$result = @ibase_query($this->connection, $sql); |
if (!$result) { |
return $this->ibaseRaiseError(); |
} |
if ($obj = @ibase_fetch_object($result)) { |
@ibase_free_result($result); |
if (isset($obj->NFLAG)) { |
$flags .= 'not_null '; |
} |
if (isset($obj->DSOURCE)) { |
$flags .= 'default '; |
} |
if (isset($obj->CSOURCE)) { |
$flags .= 'computed '; |
} |
if (isset($obj->FTYPE) && $obj->FTYPE == 261) { |
$flags .= 'blob '; |
} |
} |
return trim($flags); |
} |
// }}} |
// {{{ ibaseRaiseError() |
/** |
* Produces a DB_Error object regarding the current problem |
* |
* @param int $errno if the error is being manually raised pass a |
* DB_ERROR* constant here. If this isn't passed |
* the error information gathered from the DBMS. |
* |
* @return object the DB_Error object |
* |
* @see DB_common::raiseError(), |
* DB_ibase::errorNative(), DB_ibase::errorCode() |
*/ |
function &ibaseRaiseError($errno = null) |
{ |
if ($errno === null) { |
$errno = $this->errorCode($this->errorNative()); |
} |
$tmp =& $this->raiseError($errno, null, null, null, @ibase_errmsg()); |
return $tmp; |
} |
// }}} |
// {{{ errorNative() |
/** |
* Gets the DBMS' native error code produced by the last query |
* |
* @return int the DBMS' error code. NULL if there is no error code. |
* |
* @since Method available since Release 1.7.0 |
*/ |
function errorNative() |
{ |
if (function_exists('ibase_errcode')) { |
return @ibase_errcode(); |
} |
if (preg_match('/^Dynamic SQL Error SQL error code = ([0-9-]+)/i', |
@ibase_errmsg(), $m)) { |
return (int)$m[1]; |
} |
return null; |
} |
// }}} |
// {{{ errorCode() |
/** |
* Maps native error codes to DB's portable ones |
* |
* @param int $nativecode the error code returned by the DBMS |
* |
* @return int the portable DB error code. Return DB_ERROR if the |
* current driver doesn't have a mapping for the |
* $nativecode submitted. |
* |
* @since Method available since Release 1.7.0 |
*/ |
function errorCode($nativecode = null) |
{ |
if (isset($this->errorcode_map[$nativecode])) { |
return $this->errorcode_map[$nativecode]; |
} |
static $error_regexps; |
if (!isset($error_regexps)) { |
$error_regexps = array( |
'/generator .* is not defined/' |
=> DB_ERROR_SYNTAX, // for compat. w ibase_errcode() |
'/table.*(not exist|not found|unknown)/i' |
=> DB_ERROR_NOSUCHTABLE, |
'/table .* already exists/i' |
=> DB_ERROR_ALREADY_EXISTS, |
'/unsuccessful metadata update .* failed attempt to store duplicate value/i' |
=> DB_ERROR_ALREADY_EXISTS, |
'/unsuccessful metadata update .* not found/i' |
=> DB_ERROR_NOT_FOUND, |
'/validation error for column .* value "\*\*\* null/i' |
=> DB_ERROR_CONSTRAINT_NOT_NULL, |
'/violation of [\w ]+ constraint/i' |
=> DB_ERROR_CONSTRAINT, |
'/conversion error from string/i' |
=> DB_ERROR_INVALID_NUMBER, |
'/no permission for/i' |
=> DB_ERROR_ACCESS_VIOLATION, |
'/arithmetic exception, numeric overflow, or string truncation/i' |
=> DB_ERROR_INVALID, |
); |
} |
$errormsg = @ibase_errmsg(); |
foreach ($error_regexps as $regexp => $code) { |
if (preg_match($regexp, $errormsg)) { |
return $code; |
} |
} |
return DB_ERROR; |
} |
// }}} |
// {{{ tableInfo() |
/** |
* Returns information about a table or a result set |
* |
* NOTE: only supports 'table' and 'flags' if <var>$result</var> |
* is a table name. |
* |
* @param object|string $result DB_result object from a query or a |
* string containing the name of a table. |
* While this also accepts a query result |
* resource identifier, this behavior is |
* deprecated. |
* @param int $mode a valid tableInfo mode |
* |
* @return array an associative array with the information requested. |
* A DB_Error object on failure. |
* |
* @see DB_common::tableInfo() |
*/ |
function tableInfo($result, $mode = null) |
{ |
if (is_string($result)) { |
/* |
* Probably received a table name. |
* Create a result resource identifier. |
*/ |
$id = @ibase_query($this->connection, |
"SELECT * FROM $result WHERE 1=0"); |
$got_string = true; |
} elseif (isset($result->result)) { |
/* |
* Probably received a result object. |
* Extract the result resource identifier. |
*/ |
$id = $result->result; |
$got_string = false; |
} else { |
/* |
* Probably received a result resource identifier. |
* Copy it. |
* Deprecated. Here for compatibility only. |
*/ |
$id = $result; |
$got_string = false; |
} |
if (!is_resource($id)) { |
return $this->ibaseRaiseError(DB_ERROR_NEED_MORE_DATA); |
} |
if ($this->options['portability'] & DB_PORTABILITY_LOWERCASE) { |
$case_func = 'strtolower'; |
} else { |
$case_func = 'strval'; |
} |
$count = @ibase_num_fields($id); |
$res = array(); |
if ($mode) { |
$res['num_fields'] = $count; |
} |
for ($i = 0; $i < $count; $i++) { |
$info = @ibase_field_info($id, $i); |
$res[$i] = array( |
'table' => $got_string ? $case_func($result) : '', |
'name' => $case_func($info['name']), |
'type' => $info['type'], |
'len' => $info['length'], |
'flags' => ($got_string) |
? $this->_ibaseFieldFlags($info['name'], $result) |
: '', |
); |
if ($mode & DB_TABLEINFO_ORDER) { |
$res['order'][$res[$i]['name']] = $i; |
} |
if ($mode & DB_TABLEINFO_ORDERTABLE) { |
$res['ordertable'][$res[$i]['table']][$res[$i]['name']] = $i; |
} |
} |
// free the result only if we were called on a table |
if ($got_string) { |
@ibase_free_result($id); |
} |
return $res; |
} |
// }}} |
// {{{ getSpecialQuery() |
/** |
* Obtains the query string needed for listing a given type of objects |
* |
* @param string $type the kind of objects you want to retrieve |
* |
* @return string the SQL query string or null if the driver doesn't |
* support the object type requested |
* |
* @access protected |
* @see DB_common::getListOf() |
*/ |
function getSpecialQuery($type) |
{ |
switch ($type) { |
case 'tables': |
return 'SELECT DISTINCT R.RDB$RELATION_NAME FROM ' |
. 'RDB$RELATION_FIELDS R WHERE R.RDB$SYSTEM_FLAG=0'; |
case 'views': |
return 'SELECT DISTINCT RDB$VIEW_NAME from RDB$VIEW_RELATIONS'; |
case 'users': |
return 'SELECT DISTINCT RDB$USER FROM RDB$USER_PRIVILEGES'; |
default: |
return null; |
} |
} |
// }}} |
} |
/* |
* Local variables: |
* tab-width: 4 |
* c-basic-offset: 4 |
* End: |
*/ |
?> |
/branches/v1.0-menes/api/pear/DB/storage.php |
---|
New file |
0,0 → 1,504 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ |
/** |
* Provides an object interface to a table row |
* |
* PHP versions 4 and 5 |
* |
* LICENSE: This source file is subject to version 3.0 of the PHP license |
* that is available through the world-wide-web at the following URI: |
* http://www.php.net/license/3_0.txt. If you did not receive a copy of |
* the PHP License and are unable to obtain it through the web, please |
* send a note to license@php.net so we can mail you a copy immediately. |
* |
* @category Database |
* @package DB |
* @author Stig Bakken <stig@php.net> |
* @copyright 1997-2005 The PHP Group |
* @license http://www.php.net/license/3_0.txt PHP License 3.0 |
* @version CVS: $Id: storage.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $ |
* @link http://pear.php.net/package/DB |
*/ |
/** |
* Obtain the DB class so it can be extended from |
*/ |
require_once 'DB.php'; |
/** |
* Provides an object interface to a table row |
* |
* It lets you add, delete and change rows using objects rather than SQL |
* statements. |
* |
* @category Database |
* @package DB |
* @author Stig Bakken <stig@php.net> |
* @copyright 1997-2005 The PHP Group |
* @license http://www.php.net/license/3_0.txt PHP License 3.0 |
* @version Release: @package_version@ |
* @link http://pear.php.net/package/DB |
*/ |
class DB_storage extends PEAR |
{ |
// {{{ properties |
/** the name of the table (or view, if the backend database supports |
updates in views) we hold data from */ |
var $_table = null; |
/** which column(s) in the table contains primary keys, can be a |
string for single-column primary keys, or an array of strings |
for multiple-column primary keys */ |
var $_keycolumn = null; |
/** DB connection handle used for all transactions */ |
var $_dbh = null; |
/** an assoc with the names of database fields stored as properties |
in this object */ |
var $_properties = array(); |
/** an assoc with the names of the properties in this object that |
have been changed since they were fetched from the database */ |
var $_changes = array(); |
/** flag that decides if data in this object can be changed. |
objects that don't have their table's key column in their |
property lists will be flagged as read-only. */ |
var $_readonly = false; |
/** function or method that implements a validator for fields that |
are set, this validator function returns true if the field is |
valid, false if not */ |
var $_validator = null; |
// }}} |
// {{{ constructor |
/** |
* Constructor |
* |
* @param $table string the name of the database table |
* |
* @param $keycolumn mixed string with name of key column, or array of |
* strings if the table has a primary key of more than one column |
* |
* @param $dbh object database connection object |
* |
* @param $validator mixed function or method used to validate |
* each new value, called with three parameters: the name of the |
* field/column that is changing, a reference to the new value and |
* a reference to this object |
* |
*/ |
function DB_storage($table, $keycolumn, &$dbh, $validator = null) |
{ |
$this->PEAR('DB_Error'); |
$this->_table = $table; |
$this->_keycolumn = $keycolumn; |
$this->_dbh = $dbh; |
$this->_readonly = false; |
$this->_validator = $validator; |
} |
// }}} |
// {{{ _makeWhere() |
/** |
* Utility method to build a "WHERE" clause to locate ourselves in |
* the table. |
* |
* XXX future improvement: use rowids? |
* |
* @access private |
*/ |
function _makeWhere($keyval = null) |
{ |
if (is_array($this->_keycolumn)) { |
if ($keyval === null) { |
for ($i = 0; $i < sizeof($this->_keycolumn); $i++) { |
$keyval[] = $this->{$this->_keycolumn[$i]}; |
} |
} |
$whereclause = ''; |
for ($i = 0; $i < sizeof($this->_keycolumn); $i++) { |
if ($i > 0) { |
$whereclause .= ' AND '; |
} |
$whereclause .= $this->_keycolumn[$i]; |
if (is_null($keyval[$i])) { |
// there's not much point in having a NULL key, |
// but we support it anyway |
$whereclause .= ' IS NULL'; |
} else { |
$whereclause .= ' = ' . $this->_dbh->quote($keyval[$i]); |
} |
} |
} else { |
if ($keyval === null) { |
$keyval = @$this->{$this->_keycolumn}; |
} |
$whereclause = $this->_keycolumn; |
if (is_null($keyval)) { |
// there's not much point in having a NULL key, |
// but we support it anyway |
$whereclause .= ' IS NULL'; |
} else { |
$whereclause .= ' = ' . $this->_dbh->quote($keyval); |
} |
} |
return $whereclause; |
} |
// }}} |
// {{{ setup() |
/** |
* Method used to initialize a DB_storage object from the |
* configured table. |
* |
* @param $keyval mixed the key[s] of the row to fetch (string or array) |
* |
* @return int DB_OK on success, a DB error if not |
*/ |
function setup($keyval) |
{ |
$whereclause = $this->_makeWhere($keyval); |
$query = 'SELECT * FROM ' . $this->_table . ' WHERE ' . $whereclause; |
$sth = $this->_dbh->query($query); |
if (DB::isError($sth)) { |
return $sth; |
} |
$row = $sth->fetchRow(DB_FETCHMODE_ASSOC); |
if (DB::isError($row)) { |
return $row; |
} |
if (!$row) { |
return $this->raiseError(null, DB_ERROR_NOT_FOUND, null, null, |
$query, null, true); |
} |
foreach ($row as $key => $value) { |
$this->_properties[$key] = true; |
$this->$key = $value; |
} |
return DB_OK; |
} |
// }}} |
// {{{ insert() |
/** |
* Create a new (empty) row in the configured table for this |
* object. |
*/ |
function insert($newpk) |
{ |
if (is_array($this->_keycolumn)) { |
$primarykey = $this->_keycolumn; |
} else { |
$primarykey = array($this->_keycolumn); |
} |
settype($newpk, "array"); |
for ($i = 0; $i < sizeof($primarykey); $i++) { |
$pkvals[] = $this->_dbh->quote($newpk[$i]); |
} |
$sth = $this->_dbh->query("INSERT INTO $this->_table (" . |
implode(",", $primarykey) . ") VALUES(" . |
implode(",", $pkvals) . ")"); |
if (DB::isError($sth)) { |
return $sth; |
} |
if (sizeof($newpk) == 1) { |
$newpk = $newpk[0]; |
} |
$this->setup($newpk); |
} |
// }}} |
// {{{ toString() |
/** |
* Output a simple description of this DB_storage object. |
* @return string object description |
*/ |
function toString() |
{ |
$info = strtolower(get_class($this)); |
$info .= " (table="; |
$info .= $this->_table; |
$info .= ", keycolumn="; |
if (is_array($this->_keycolumn)) { |
$info .= "(" . implode(",", $this->_keycolumn) . ")"; |
} else { |
$info .= $this->_keycolumn; |
} |
$info .= ", dbh="; |
if (is_object($this->_dbh)) { |
$info .= $this->_dbh->toString(); |
} else { |
$info .= "null"; |
} |
$info .= ")"; |
if (sizeof($this->_properties)) { |
$info .= " [loaded, key="; |
$keyname = $this->_keycolumn; |
if (is_array($keyname)) { |
$info .= "("; |
for ($i = 0; $i < sizeof($keyname); $i++) { |
if ($i > 0) { |
$info .= ","; |
} |
$info .= $this->$keyname[$i]; |
} |
$info .= ")"; |
} else { |
$info .= $this->$keyname; |
} |
$info .= "]"; |
} |
if (sizeof($this->_changes)) { |
$info .= " [modified]"; |
} |
return $info; |
} |
// }}} |
// {{{ dump() |
/** |
* Dump the contents of this object to "standard output". |
*/ |
function dump() |
{ |
foreach ($this->_properties as $prop => $foo) { |
print "$prop = "; |
print htmlentities($this->$prop); |
print "<br />\n"; |
} |
} |
// }}} |
// {{{ &create() |
/** |
* Static method used to create new DB storage objects. |
* @param $data assoc. array where the keys are the names |
* of properties/columns |
* @return object a new instance of DB_storage or a subclass of it |
*/ |
function &create($table, &$data) |
{ |
$classname = strtolower(get_class($this)); |
$obj =& new $classname($table); |
foreach ($data as $name => $value) { |
$obj->_properties[$name] = true; |
$obj->$name = &$value; |
} |
return $obj; |
} |
// }}} |
// {{{ loadFromQuery() |
/** |
* Loads data into this object from the given query. If this |
* object already contains table data, changes will be saved and |
* the object re-initialized first. |
* |
* @param $query SQL query |
* |
* @param $params parameter list in case you want to use |
* prepare/execute mode |
* |
* @return int DB_OK on success, DB_WARNING_READ_ONLY if the |
* returned object is read-only (because the object's specified |
* key column was not found among the columns returned by $query), |
* or another DB error code in case of errors. |
*/ |
// XXX commented out for now |
/* |
function loadFromQuery($query, $params = null) |
{ |
if (sizeof($this->_properties)) { |
if (sizeof($this->_changes)) { |
$this->store(); |
$this->_changes = array(); |
} |
$this->_properties = array(); |
} |
$rowdata = $this->_dbh->getRow($query, DB_FETCHMODE_ASSOC, $params); |
if (DB::isError($rowdata)) { |
return $rowdata; |
} |
reset($rowdata); |
$found_keycolumn = false; |
while (list($key, $value) = each($rowdata)) { |
if ($key == $this->_keycolumn) { |
$found_keycolumn = true; |
} |
$this->_properties[$key] = true; |
$this->$key = &$value; |
unset($value); // have to unset, or all properties will |
// refer to the same value |
} |
if (!$found_keycolumn) { |
$this->_readonly = true; |
return DB_WARNING_READ_ONLY; |
} |
return DB_OK; |
} |
*/ |
// }}} |
// {{{ set() |
/** |
* Modify an attriute value. |
*/ |
function set($property, $newvalue) |
{ |
// only change if $property is known and object is not |
// read-only |
if ($this->_readonly) { |
return $this->raiseError(null, DB_WARNING_READ_ONLY, null, |
null, null, null, true); |
} |
if (@isset($this->_properties[$property])) { |
if (empty($this->_validator)) { |
$valid = true; |
} else { |
$valid = @call_user_func($this->_validator, |
$this->_table, |
$property, |
$newvalue, |
$this->$property, |
$this); |
} |
if ($valid) { |
$this->$property = $newvalue; |
if (empty($this->_changes[$property])) { |
$this->_changes[$property] = 0; |
} else { |
$this->_changes[$property]++; |
} |
} else { |
return $this->raiseError(null, DB_ERROR_INVALID, null, |
null, "invalid field: $property", |
null, true); |
} |
return true; |
} |
return $this->raiseError(null, DB_ERROR_NOSUCHFIELD, null, |
null, "unknown field: $property", |
null, true); |
} |
// }}} |
// {{{ &get() |
/** |
* Fetch an attribute value. |
* |
* @param string attribute name |
* |
* @return attribute contents, or null if the attribute name is |
* unknown |
*/ |
function &get($property) |
{ |
// only return if $property is known |
if (isset($this->_properties[$property])) { |
return $this->$property; |
} |
$tmp = null; |
return $tmp; |
} |
// }}} |
// {{{ _DB_storage() |
/** |
* Destructor, calls DB_storage::store() if there are changes |
* that are to be kept. |
*/ |
function _DB_storage() |
{ |
if (sizeof($this->_changes)) { |
$this->store(); |
} |
$this->_properties = array(); |
$this->_changes = array(); |
$this->_table = null; |
} |
// }}} |
// {{{ store() |
/** |
* Stores changes to this object in the database. |
* |
* @return DB_OK or a DB error |
*/ |
function store() |
{ |
foreach ($this->_changes as $name => $foo) { |
$params[] = &$this->$name; |
$vars[] = $name . ' = ?'; |
} |
if ($vars) { |
$query = 'UPDATE ' . $this->_table . ' SET ' . |
implode(', ', $vars) . ' WHERE ' . |
$this->_makeWhere(); |
$stmt = $this->_dbh->prepare($query); |
$res = $this->_dbh->execute($stmt, $params); |
if (DB::isError($res)) { |
return $res; |
} |
$this->_changes = array(); |
} |
return DB_OK; |
} |
// }}} |
// {{{ remove() |
/** |
* Remove the row represented by this object from the database. |
* |
* @return mixed DB_OK or a DB error |
*/ |
function remove() |
{ |
if ($this->_readonly) { |
return $this->raiseError(null, DB_WARNING_READ_ONLY, null, |
null, null, null, true); |
} |
$query = 'DELETE FROM ' . $this->_table .' WHERE '. |
$this->_makeWhere(); |
$res = $this->_dbh->query($query); |
if (DB::isError($res)) { |
return $res; |
} |
foreach ($this->_properties as $prop => $foo) { |
unset($this->$prop); |
} |
$this->_properties = array(); |
$this->_changes = array(); |
return DB_OK; |
} |
// }}} |
} |
/* |
* Local variables: |
* tab-width: 4 |
* c-basic-offset: 4 |
* End: |
*/ |
?> |
/branches/v1.0-menes/api/pear/DB/mysql.php |
---|
New file |
0,0 → 1,1034 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ |
/** |
* The PEAR DB driver for PHP's mysql extension |
* for interacting with MySQL databases |
* |
* PHP versions 4 and 5 |
* |
* LICENSE: This source file is subject to version 3.0 of the PHP license |
* that is available through the world-wide-web at the following URI: |
* http://www.php.net/license/3_0.txt. If you did not receive a copy of |
* the PHP License and are unable to obtain it through the web, please |
* send a note to license@php.net so we can mail you a copy immediately. |
* |
* @category Database |
* @package DB |
* @author Stig Bakken <ssb@php.net> |
* @author Daniel Convissor <danielc@php.net> |
* @copyright 1997-2005 The PHP Group |
* @license http://www.php.net/license/3_0.txt PHP License 3.0 |
* @version CVS: $Id: mysql.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $ |
* @link http://pear.php.net/package/DB |
*/ |
/** |
* Obtain the DB_common class so it can be extended from |
*/ |
require_once 'DB/common.php'; |
/** |
* The methods PEAR DB uses to interact with PHP's mysql extension |
* for interacting with MySQL databases |
* |
* These methods overload the ones declared in DB_common. |
* |
* @category Database |
* @package DB |
* @author Stig Bakken <ssb@php.net> |
* @author Daniel Convissor <danielc@php.net> |
* @copyright 1997-2005 The PHP Group |
* @license http://www.php.net/license/3_0.txt PHP License 3.0 |
* @version Release: @package_version@ |
* @link http://pear.php.net/package/DB |
*/ |
class DB_mysql extends DB_common |
{ |
// {{{ properties |
/** |
* The DB driver type (mysql, oci8, odbc, etc.) |
* @var string |
*/ |
var $phptype = 'mysql'; |
/** |
* The database syntax variant to be used (db2, access, etc.), if any |
* @var string |
*/ |
var $dbsyntax = 'mysql'; |
/** |
* The capabilities of this DB implementation |
* |
* The 'new_link' element contains the PHP version that first provided |
* new_link support for this DBMS. Contains false if it's unsupported. |
* |
* Meaning of the 'limit' element: |
* + 'emulate' = emulate with fetch row by number |
* + 'alter' = alter the query |
* + false = skip rows |
* |
* @var array |
*/ |
var $features = array( |
'limit' => 'alter', |
'new_link' => '4.2.0', |
'numrows' => true, |
'pconnect' => true, |
'prepare' => false, |
'ssl' => false, |
'transactions' => true, |
); |
/** |
* A mapping of native error codes to DB error codes |
* @var array |
*/ |
var $errorcode_map = array( |
1004 => DB_ERROR_CANNOT_CREATE, |
1005 => DB_ERROR_CANNOT_CREATE, |
1006 => DB_ERROR_CANNOT_CREATE, |
1007 => DB_ERROR_ALREADY_EXISTS, |
1008 => DB_ERROR_CANNOT_DROP, |
1022 => DB_ERROR_ALREADY_EXISTS, |
1044 => DB_ERROR_ACCESS_VIOLATION, |
1046 => DB_ERROR_NODBSELECTED, |
1048 => DB_ERROR_CONSTRAINT, |
1049 => DB_ERROR_NOSUCHDB, |
1050 => DB_ERROR_ALREADY_EXISTS, |
1051 => DB_ERROR_NOSUCHTABLE, |
1054 => DB_ERROR_NOSUCHFIELD, |
1061 => DB_ERROR_ALREADY_EXISTS, |
1062 => DB_ERROR_ALREADY_EXISTS, |
1064 => DB_ERROR_SYNTAX, |
1091 => DB_ERROR_NOT_FOUND, |
1100 => DB_ERROR_NOT_LOCKED, |
1136 => DB_ERROR_VALUE_COUNT_ON_ROW, |
1142 => DB_ERROR_ACCESS_VIOLATION, |
1146 => DB_ERROR_NOSUCHTABLE, |
1216 => DB_ERROR_CONSTRAINT, |
1217 => DB_ERROR_CONSTRAINT, |
); |
/** |
* The raw database connection created by PHP |
* @var resource |
*/ |
var $connection; |
/** |
* The DSN information for connecting to a database |
* @var array |
*/ |
var $dsn = array(); |
/** |
* Should data manipulation queries be committed automatically? |
* @var bool |
* @access private |
*/ |
var $autocommit = true; |
/** |
* The quantity of transactions begun |
* |
* {@internal While this is private, it can't actually be designated |
* private in PHP 5 because it is directly accessed in the test suite.}} |
* |
* @var integer |
* @access private |
*/ |
var $transaction_opcount = 0; |
/** |
* The database specified in the DSN |
* |
* It's a fix to allow calls to different databases in the same script. |
* |
* @var string |
* @access private |
*/ |
var $_db = ''; |
// }}} |
// {{{ constructor |
/** |
* This constructor calls <kbd>$this->DB_common()</kbd> |
* |
* @return void |
*/ |
function DB_mysql() |
{ |
$this->DB_common(); |
} |
// }}} |
// {{{ connect() |
/** |
* Connect to the database server, log in and open the database |
* |
* Don't call this method directly. Use DB::connect() instead. |
* |
* PEAR DB's mysql driver supports the following extra DSN options: |
* + new_link If set to true, causes subsequent calls to connect() |
* to return a new connection link instead of the |
* existing one. WARNING: this is not portable to |
* other DBMS's. Available since PEAR DB 1.7.0. |
* + client_flags Any combination of MYSQL_CLIENT_* constants. |
* Only used if PHP is at version 4.3.0 or greater. |
* Available since PEAR DB 1.7.0. |
* |
* @param array $dsn the data source name |
* @param bool $persistent should the connection be persistent? |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
*/ |
function connect($dsn, $persistent = false) |
{ |
if (!PEAR::loadExtension('mysql')) { |
return $this->raiseError(DB_ERROR_EXTENSION_NOT_FOUND); |
} |
$this->dsn = $dsn; |
if ($dsn['dbsyntax']) { |
$this->dbsyntax = $dsn['dbsyntax']; |
} |
$params = array(); |
if ($dsn['protocol'] && $dsn['protocol'] == 'unix') { |
$params[0] = ':' . $dsn['socket']; |
} else { |
$params[0] = $dsn['hostspec'] ? $dsn['hostspec'] |
: 'localhost'; |
if ($dsn['port']) { |
$params[0] .= ':' . $dsn['port']; |
} |
} |
$params[] = $dsn['username'] ? $dsn['username'] : null; |
$params[] = $dsn['password'] ? $dsn['password'] : null; |
if (!$persistent) { |
if (isset($dsn['new_link']) |
&& ($dsn['new_link'] == 'true' || $dsn['new_link'] === true)) |
{ |
$params[] = true; |
} else { |
$params[] = false; |
} |
} |
if (version_compare(phpversion(), '4.3.0', '>=')) { |
$params[] = isset($dsn['client_flags']) |
? $dsn['client_flags'] : null; |
} |
$connect_function = $persistent ? 'mysql_pconnect' : 'mysql_connect'; |
$ini = ini_get('track_errors'); |
$php_errormsg = ''; |
if ($ini) { |
$this->connection = @call_user_func_array($connect_function, |
$params); |
} else { |
ini_set('track_errors', 1); |
$this->connection = @call_user_func_array($connect_function, |
$params); |
ini_set('track_errors', $ini); |
} |
if (!$this->connection) { |
if (($err = @mysql_error()) != '') { |
return $this->raiseError(DB_ERROR_CONNECT_FAILED, |
null, null, null, |
$err); |
} else { |
return $this->raiseError(DB_ERROR_CONNECT_FAILED, |
null, null, null, |
$php_errormsg); |
} |
} |
if ($dsn['database']) { |
if (!@mysql_select_db($dsn['database'], $this->connection)) { |
return $this->mysqlRaiseError(); |
} |
$this->_db = $dsn['database']; |
} |
return DB_OK; |
} |
// }}} |
// {{{ disconnect() |
/** |
* Disconnects from the database server |
* |
* @return bool TRUE on success, FALSE on failure |
*/ |
function disconnect() |
{ |
$ret = @mysql_close($this->connection); |
$this->connection = null; |
return $ret; |
} |
// }}} |
// {{{ simpleQuery() |
/** |
* Sends a query to the database server |
* |
* Generally uses mysql_query(). If you want to use |
* mysql_unbuffered_query() set the "result_buffering" option to 0 using |
* setOptions(). This option was added in Release 1.7.0. |
* |
* @param string the SQL query string |
* |
* @return mixed + a PHP result resrouce for successful SELECT queries |
* + the DB_OK constant for other successful queries |
* + a DB_Error object on failure |
*/ |
function simpleQuery($query) |
{ |
$ismanip = DB::isManip($query); |
$this->last_query = $query; |
$query = $this->modifyQuery($query); |
if ($this->_db) { |
if (!@mysql_select_db($this->_db, $this->connection)) { |
return $this->mysqlRaiseError(DB_ERROR_NODBSELECTED); |
} |
} |
if (!$this->autocommit && $ismanip) { |
if ($this->transaction_opcount == 0) { |
$result = @mysql_query('SET AUTOCOMMIT=0', $this->connection); |
$result = @mysql_query('BEGIN', $this->connection); |
if (!$result) { |
return $this->mysqlRaiseError(); |
} |
} |
$this->transaction_opcount++; |
} |
if (!$this->options['result_buffering']) { |
$result = @mysql_unbuffered_query($query, $this->connection); |
} else { |
$result = @mysql_query($query, $this->connection); |
} |
if (!$result) { |
return $this->mysqlRaiseError(); |
} |
if (is_resource($result)) { |
return $result; |
} |
return DB_OK; |
} |
// }}} |
// {{{ nextResult() |
/** |
* Move the internal mysql result pointer to the next available result |
* |
* This method has not been implemented yet. |
* |
* @param a valid sql result resource |
* |
* @return false |
*/ |
function nextResult($result) |
{ |
return false; |
} |
// }}} |
// {{{ fetchInto() |
/** |
* Places a row from the result set into the given array |
* |
* Formating of the array and the data therein are configurable. |
* See DB_result::fetchInto() for more information. |
* |
* This method is not meant to be called directly. Use |
* DB_result::fetchInto() instead. It can't be declared "protected" |
* because DB_result is a separate object. |
* |
* @param resource $result the query result resource |
* @param array $arr the referenced array to put the data in |
* @param int $fetchmode how the resulting array should be indexed |
* @param int $rownum the row number to fetch (0 = first row) |
* |
* @return mixed DB_OK on success, NULL when the end of a result set is |
* reached or on failure |
* |
* @see DB_result::fetchInto() |
*/ |
function fetchInto($result, &$arr, $fetchmode, $rownum = null) |
{ |
if ($rownum !== null) { |
if (!@mysql_data_seek($result, $rownum)) { |
return null; |
} |
} |
if ($fetchmode & DB_FETCHMODE_ASSOC) { |
$arr = @mysql_fetch_array($result, MYSQL_ASSOC); |
if ($this->options['portability'] & DB_PORTABILITY_LOWERCASE && $arr) { |
$arr = array_change_key_case($arr, CASE_LOWER); |
} |
} else { |
$arr = @mysql_fetch_row($result); |
} |
if (!$arr) { |
return null; |
} |
if ($this->options['portability'] & DB_PORTABILITY_RTRIM) { |
/* |
* Even though this DBMS already trims output, we do this because |
* a field might have intentional whitespace at the end that |
* gets removed by DB_PORTABILITY_RTRIM under another driver. |
*/ |
$this->_rtrimArrayValues($arr); |
} |
if ($this->options['portability'] & DB_PORTABILITY_NULL_TO_EMPTY) { |
$this->_convertNullArrayValuesToEmpty($arr); |
} |
return DB_OK; |
} |
// }}} |
// {{{ freeResult() |
/** |
* Deletes the result set and frees the memory occupied by the result set |
* |
* This method is not meant to be called directly. Use |
* DB_result::free() instead. It can't be declared "protected" |
* because DB_result is a separate object. |
* |
* @param resource $result PHP's query result resource |
* |
* @return bool TRUE on success, FALSE if $result is invalid |
* |
* @see DB_result::free() |
*/ |
function freeResult($result) |
{ |
return @mysql_free_result($result); |
} |
// }}} |
// {{{ numCols() |
/** |
* Gets the number of columns in a result set |
* |
* This method is not meant to be called directly. Use |
* DB_result::numCols() instead. It can't be declared "protected" |
* because DB_result is a separate object. |
* |
* @param resource $result PHP's query result resource |
* |
* @return int the number of columns. A DB_Error object on failure. |
* |
* @see DB_result::numCols() |
*/ |
function numCols($result) |
{ |
$cols = @mysql_num_fields($result); |
if (!$cols) { |
return $this->mysqlRaiseError(); |
} |
return $cols; |
} |
// }}} |
// {{{ numRows() |
/** |
* Gets the number of rows in a result set |
* |
* This method is not meant to be called directly. Use |
* DB_result::numRows() instead. It can't be declared "protected" |
* because DB_result is a separate object. |
* |
* @param resource $result PHP's query result resource |
* |
* @return int the number of rows. A DB_Error object on failure. |
* |
* @see DB_result::numRows() |
*/ |
function numRows($result) |
{ |
$rows = @mysql_num_rows($result); |
if ($rows === null) { |
return $this->mysqlRaiseError(); |
} |
return $rows; |
} |
// }}} |
// {{{ autoCommit() |
/** |
* Enables or disables automatic commits |
* |
* @param bool $onoff true turns it on, false turns it off |
* |
* @return int DB_OK on success. A DB_Error object if the driver |
* doesn't support auto-committing transactions. |
*/ |
function autoCommit($onoff = false) |
{ |
// XXX if $this->transaction_opcount > 0, we should probably |
// issue a warning here. |
$this->autocommit = $onoff ? true : false; |
return DB_OK; |
} |
// }}} |
// {{{ commit() |
/** |
* Commits the current transaction |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
*/ |
function commit() |
{ |
if ($this->transaction_opcount > 0) { |
if ($this->_db) { |
if (!@mysql_select_db($this->_db, $this->connection)) { |
return $this->mysqlRaiseError(DB_ERROR_NODBSELECTED); |
} |
} |
$result = @mysql_query('COMMIT', $this->connection); |
$result = @mysql_query('SET AUTOCOMMIT=1', $this->connection); |
$this->transaction_opcount = 0; |
if (!$result) { |
return $this->mysqlRaiseError(); |
} |
} |
return DB_OK; |
} |
// }}} |
// {{{ rollback() |
/** |
* Reverts the current transaction |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
*/ |
function rollback() |
{ |
if ($this->transaction_opcount > 0) { |
if ($this->_db) { |
if (!@mysql_select_db($this->_db, $this->connection)) { |
return $this->mysqlRaiseError(DB_ERROR_NODBSELECTED); |
} |
} |
$result = @mysql_query('ROLLBACK', $this->connection); |
$result = @mysql_query('SET AUTOCOMMIT=1', $this->connection); |
$this->transaction_opcount = 0; |
if (!$result) { |
return $this->mysqlRaiseError(); |
} |
} |
return DB_OK; |
} |
// }}} |
// {{{ affectedRows() |
/** |
* Determines the number of rows affected by a data maniuplation query |
* |
* 0 is returned for queries that don't manipulate data. |
* |
* @return int the number of rows. A DB_Error object on failure. |
*/ |
function affectedRows() |
{ |
if (DB::isManip($this->last_query)) { |
return @mysql_affected_rows($this->connection); |
} else { |
return 0; |
} |
} |
// }}} |
// {{{ nextId() |
/** |
* Returns the next free id in a sequence |
* |
* @param string $seq_name name of the sequence |
* @param boolean $ondemand when true, the seqence is automatically |
* created if it does not exist |
* |
* @return int the next id number in the sequence. |
* A DB_Error object on failure. |
* |
* @see DB_common::nextID(), DB_common::getSequenceName(), |
* DB_mysql::createSequence(), DB_mysql::dropSequence() |
*/ |
function nextId($seq_name, $ondemand = true) |
{ |
$seqname = $this->getSequenceName($seq_name); |
do { |
$repeat = 0; |
$this->pushErrorHandling(PEAR_ERROR_RETURN); |
$result = $this->query("UPDATE ${seqname} ". |
'SET id=LAST_INSERT_ID(id+1)'); |
$this->popErrorHandling(); |
if ($result === DB_OK) { |
// COMMON CASE |
$id = @mysql_insert_id($this->connection); |
if ($id != 0) { |
return $id; |
} |
// EMPTY SEQ TABLE |
// Sequence table must be empty for some reason, so fill |
// it and return 1 and obtain a user-level lock |
$result = $this->getOne("SELECT GET_LOCK('${seqname}_lock',10)"); |
if (DB::isError($result)) { |
return $this->raiseError($result); |
} |
if ($result == 0) { |
// Failed to get the lock |
return $this->mysqlRaiseError(DB_ERROR_NOT_LOCKED); |
} |
// add the default value |
$result = $this->query("REPLACE INTO ${seqname} (id) VALUES (0)"); |
if (DB::isError($result)) { |
return $this->raiseError($result); |
} |
// Release the lock |
$result = $this->getOne('SELECT RELEASE_LOCK(' |
. "'${seqname}_lock')"); |
if (DB::isError($result)) { |
return $this->raiseError($result); |
} |
// We know what the result will be, so no need to try again |
return 1; |
} elseif ($ondemand && DB::isError($result) && |
$result->getCode() == DB_ERROR_NOSUCHTABLE) |
{ |
// ONDEMAND TABLE CREATION |
$result = $this->createSequence($seq_name); |
if (DB::isError($result)) { |
return $this->raiseError($result); |
} else { |
$repeat = 1; |
} |
} elseif (DB::isError($result) && |
$result->getCode() == DB_ERROR_ALREADY_EXISTS) |
{ |
// BACKWARDS COMPAT |
// see _BCsequence() comment |
$result = $this->_BCsequence($seqname); |
if (DB::isError($result)) { |
return $this->raiseError($result); |
} |
$repeat = 1; |
} |
} while ($repeat); |
return $this->raiseError($result); |
} |
// }}} |
// {{{ createSequence() |
/** |
* Creates a new sequence |
* |
* @param string $seq_name name of the new sequence |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
* |
* @see DB_common::createSequence(), DB_common::getSequenceName(), |
* DB_mysql::nextID(), DB_mysql::dropSequence() |
*/ |
function createSequence($seq_name) |
{ |
$seqname = $this->getSequenceName($seq_name); |
$res = $this->query('CREATE TABLE ' . $seqname |
. ' (id INTEGER UNSIGNED AUTO_INCREMENT NOT NULL,' |
. ' PRIMARY KEY(id))'); |
if (DB::isError($res)) { |
return $res; |
} |
// insert yields value 1, nextId call will generate ID 2 |
$res = $this->query("INSERT INTO ${seqname} (id) VALUES (0)"); |
if (DB::isError($res)) { |
return $res; |
} |
// so reset to zero |
return $this->query("UPDATE ${seqname} SET id = 0"); |
} |
// }}} |
// {{{ dropSequence() |
/** |
* Deletes a sequence |
* |
* @param string $seq_name name of the sequence to be deleted |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
* |
* @see DB_common::dropSequence(), DB_common::getSequenceName(), |
* DB_mysql::nextID(), DB_mysql::createSequence() |
*/ |
function dropSequence($seq_name) |
{ |
return $this->query('DROP TABLE ' . $this->getSequenceName($seq_name)); |
} |
// }}} |
// {{{ _BCsequence() |
/** |
* Backwards compatibility with old sequence emulation implementation |
* (clean up the dupes) |
* |
* @param string $seqname the sequence name to clean up |
* |
* @return bool true on success. A DB_Error object on failure. |
* |
* @access private |
*/ |
function _BCsequence($seqname) |
{ |
// Obtain a user-level lock... this will release any previous |
// application locks, but unlike LOCK TABLES, it does not abort |
// the current transaction and is much less frequently used. |
$result = $this->getOne("SELECT GET_LOCK('${seqname}_lock',10)"); |
if (DB::isError($result)) { |
return $result; |
} |
if ($result == 0) { |
// Failed to get the lock, can't do the conversion, bail |
// with a DB_ERROR_NOT_LOCKED error |
return $this->mysqlRaiseError(DB_ERROR_NOT_LOCKED); |
} |
$highest_id = $this->getOne("SELECT MAX(id) FROM ${seqname}"); |
if (DB::isError($highest_id)) { |
return $highest_id; |
} |
// This should kill all rows except the highest |
// We should probably do something if $highest_id isn't |
// numeric, but I'm at a loss as how to handle that... |
$result = $this->query('DELETE FROM ' . $seqname |
. " WHERE id <> $highest_id"); |
if (DB::isError($result)) { |
return $result; |
} |
// If another thread has been waiting for this lock, |
// it will go thru the above procedure, but will have no |
// real effect |
$result = $this->getOne("SELECT RELEASE_LOCK('${seqname}_lock')"); |
if (DB::isError($result)) { |
return $result; |
} |
return true; |
} |
// }}} |
// {{{ quoteIdentifier() |
/** |
* Quotes a string so it can be safely used as a table or column name |
* |
* MySQL can't handle the backtick character (<kbd>`</kbd>) in |
* table or column names. |
* |
* @param string $str identifier name to be quoted |
* |
* @return string quoted identifier string |
* |
* @see DB_common::quoteIdentifier() |
* @since Method available since Release 1.6.0 |
*/ |
function quoteIdentifier($str) |
{ |
return '`' . $str . '`'; |
} |
// }}} |
// {{{ quote() |
/** |
* @deprecated Deprecated in release 1.6.0 |
*/ |
function quote($str) |
{ |
return $this->quoteSmart($str); |
} |
// }}} |
// {{{ escapeSimple() |
/** |
* Escapes a string according to the current DBMS's standards |
* |
* @param string $str the string to be escaped |
* |
* @return string the escaped string |
* |
* @see DB_common::quoteSmart() |
* @since Method available since Release 1.6.0 |
*/ |
function escapeSimple($str) |
{ |
if (function_exists('mysql_real_escape_string')) { |
return @mysql_real_escape_string($str, $this->connection); |
} else { |
return @mysql_escape_string($str); |
} |
} |
// }}} |
// {{{ modifyQuery() |
/** |
* Changes a query string for various DBMS specific reasons |
* |
* This little hack lets you know how many rows were deleted |
* when running a "DELETE FROM table" query. Only implemented |
* if the DB_PORTABILITY_DELETE_COUNT portability option is on. |
* |
* @param string $query the query string to modify |
* |
* @return string the modified query string |
* |
* @access protected |
* @see DB_common::setOption() |
*/ |
function modifyQuery($query) |
{ |
if ($this->options['portability'] & DB_PORTABILITY_DELETE_COUNT) { |
// "DELETE FROM table" gives 0 affected rows in MySQL. |
// This little hack lets you know how many rows were deleted. |
if (preg_match('/^\s*DELETE\s+FROM\s+(\S+)\s*$/i', $query)) { |
$query = preg_replace('/^\s*DELETE\s+FROM\s+(\S+)\s*$/', |
'DELETE FROM \1 WHERE 1=1', $query); |
} |
} |
return $query; |
} |
// }}} |
// {{{ modifyLimitQuery() |
/** |
* Adds LIMIT clauses to a query string according to current DBMS standards |
* |
* @param string $query the query to modify |
* @param int $from the row to start to fetching (0 = the first row) |
* @param int $count the numbers of rows to fetch |
* @param mixed $params array, string or numeric data to be used in |
* execution of the statement. Quantity of items |
* passed must match quantity of placeholders in |
* query: meaning 1 placeholder for non-array |
* parameters or 1 placeholder per array element. |
* |
* @return string the query string with LIMIT clauses added |
* |
* @access protected |
*/ |
function modifyLimitQuery($query, $from, $count, $params = array()) |
{ |
if (DB::isManip($query)) { |
return $query . " LIMIT $count"; |
} else { |
return $query . " LIMIT $from, $count"; |
} |
} |
// }}} |
// {{{ mysqlRaiseError() |
/** |
* Produces a DB_Error object regarding the current problem |
* |
* @param int $errno if the error is being manually raised pass a |
* DB_ERROR* constant here. If this isn't passed |
* the error information gathered from the DBMS. |
* |
* @return object the DB_Error object |
* |
* @see DB_common::raiseError(), |
* DB_mysql::errorNative(), DB_common::errorCode() |
*/ |
function mysqlRaiseError($errno = null) |
{ |
if ($errno === null) { |
if ($this->options['portability'] & DB_PORTABILITY_ERRORS) { |
$this->errorcode_map[1022] = DB_ERROR_CONSTRAINT; |
$this->errorcode_map[1048] = DB_ERROR_CONSTRAINT_NOT_NULL; |
$this->errorcode_map[1062] = DB_ERROR_CONSTRAINT; |
} else { |
// Doing this in case mode changes during runtime. |
$this->errorcode_map[1022] = DB_ERROR_ALREADY_EXISTS; |
$this->errorcode_map[1048] = DB_ERROR_CONSTRAINT; |
$this->errorcode_map[1062] = DB_ERROR_ALREADY_EXISTS; |
} |
$errno = $this->errorCode(mysql_errno($this->connection)); |
} |
return $this->raiseError($errno, null, null, null, |
@mysql_errno($this->connection) . ' ** ' . |
@mysql_error($this->connection)); |
} |
// }}} |
// {{{ errorNative() |
/** |
* Gets the DBMS' native error code produced by the last query |
* |
* @return int the DBMS' error code |
*/ |
function errorNative() |
{ |
return @mysql_errno($this->connection); |
} |
// }}} |
// {{{ tableInfo() |
/** |
* Returns information about a table or a result set |
* |
* @param object|string $result DB_result object from a query or a |
* string containing the name of a table. |
* While this also accepts a query result |
* resource identifier, this behavior is |
* deprecated. |
* @param int $mode a valid tableInfo mode |
* |
* @return array an associative array with the information requested. |
* A DB_Error object on failure. |
* |
* @see DB_common::tableInfo() |
*/ |
function tableInfo($result, $mode = null) |
{ |
if (is_string($result)) { |
/* |
* Probably received a table name. |
* Create a result resource identifier. |
*/ |
$id = @mysql_list_fields($this->dsn['database'], |
$result, $this->connection); |
$got_string = true; |
} elseif (isset($result->result)) { |
/* |
* Probably received a result object. |
* Extract the result resource identifier. |
*/ |
$id = $result->result; |
$got_string = false; |
} else { |
/* |
* Probably received a result resource identifier. |
* Copy it. |
* Deprecated. Here for compatibility only. |
*/ |
$id = $result; |
$got_string = false; |
} |
if (!is_resource($id)) { |
return $this->mysqlRaiseError(DB_ERROR_NEED_MORE_DATA); |
} |
if ($this->options['portability'] & DB_PORTABILITY_LOWERCASE) { |
$case_func = 'strtolower'; |
} else { |
$case_func = 'strval'; |
} |
$count = @mysql_num_fields($id); |
$res = array(); |
if ($mode) { |
$res['num_fields'] = $count; |
} |
for ($i = 0; $i < $count; $i++) { |
$res[$i] = array( |
'table' => $case_func(@mysql_field_table($id, $i)), |
'name' => $case_func(@mysql_field_name($id, $i)), |
'type' => @mysql_field_type($id, $i), |
'len' => @mysql_field_len($id, $i), |
'flags' => @mysql_field_flags($id, $i), |
); |
if ($mode & DB_TABLEINFO_ORDER) { |
$res['order'][$res[$i]['name']] = $i; |
} |
if ($mode & DB_TABLEINFO_ORDERTABLE) { |
$res['ordertable'][$res[$i]['table']][$res[$i]['name']] = $i; |
} |
} |
// free the result only if we were called on a table |
if ($got_string) { |
@mysql_free_result($id); |
} |
return $res; |
} |
// }}} |
// {{{ getSpecialQuery() |
/** |
* Obtains the query string needed for listing a given type of objects |
* |
* @param string $type the kind of objects you want to retrieve |
* |
* @return string the SQL query string or null if the driver doesn't |
* support the object type requested |
* |
* @access protected |
* @see DB_common::getListOf() |
*/ |
function getSpecialQuery($type) |
{ |
switch ($type) { |
case 'tables': |
return 'SHOW TABLES'; |
case 'users': |
return 'SELECT DISTINCT User FROM mysql.user'; |
case 'databases': |
return 'SHOW DATABASES'; |
default: |
return null; |
} |
} |
// }}} |
} |
/* |
* Local variables: |
* tab-width: 4 |
* c-basic-offset: 4 |
* End: |
*/ |
?> |
/branches/v1.0-menes/api/pear/DB/ifx.php |
---|
New file |
0,0 → 1,681 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ |
/** |
* The PEAR DB driver for PHP's ifx extension |
* for interacting with Informix databases |
* |
* PHP versions 4 and 5 |
* |
* LICENSE: This source file is subject to version 3.0 of the PHP license |
* that is available through the world-wide-web at the following URI: |
* http://www.php.net/license/3_0.txt. If you did not receive a copy of |
* the PHP License and are unable to obtain it through the web, please |
* send a note to license@php.net so we can mail you a copy immediately. |
* |
* @category Database |
* @package DB |
* @author Tomas V.V.Cox <cox@idecnet.com> |
* @author Daniel Convissor <danielc@php.net> |
* @copyright 1997-2005 The PHP Group |
* @license http://www.php.net/license/3_0.txt PHP License 3.0 |
* @version CVS: $Id: ifx.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $ |
* @link http://pear.php.net/package/DB |
*/ |
/** |
* Obtain the DB_common class so it can be extended from |
*/ |
require_once 'DB/common.php'; |
/** |
* The methods PEAR DB uses to interact with PHP's ifx extension |
* for interacting with Informix databases |
* |
* These methods overload the ones declared in DB_common. |
* |
* More info on Informix errors can be found at: |
* http://www.informix.com/answers/english/ierrors.htm |
* |
* TODO: |
* - set needed env Informix vars on connect |
* - implement native prepare/execute |
* |
* @category Database |
* @package DB |
* @author Tomas V.V.Cox <cox@idecnet.com> |
* @author Daniel Convissor <danielc@php.net> |
* @copyright 1997-2005 The PHP Group |
* @license http://www.php.net/license/3_0.txt PHP License 3.0 |
* @version Release: @package_version@ |
* @link http://pear.php.net/package/DB |
*/ |
class DB_ifx extends DB_common |
{ |
// {{{ properties |
/** |
* The DB driver type (mysql, oci8, odbc, etc.) |
* @var string |
*/ |
var $phptype = 'ifx'; |
/** |
* The database syntax variant to be used (db2, access, etc.), if any |
* @var string |
*/ |
var $dbsyntax = 'ifx'; |
/** |
* The capabilities of this DB implementation |
* |
* The 'new_link' element contains the PHP version that first provided |
* new_link support for this DBMS. Contains false if it's unsupported. |
* |
* Meaning of the 'limit' element: |
* + 'emulate' = emulate with fetch row by number |
* + 'alter' = alter the query |
* + false = skip rows |
* |
* @var array |
*/ |
var $features = array( |
'limit' => 'emulate', |
'new_link' => false, |
'numrows' => 'emulate', |
'pconnect' => true, |
'prepare' => false, |
'ssl' => false, |
'transactions' => true, |
); |
/** |
* A mapping of native error codes to DB error codes |
* @var array |
*/ |
var $errorcode_map = array( |
'-201' => DB_ERROR_SYNTAX, |
'-206' => DB_ERROR_NOSUCHTABLE, |
'-217' => DB_ERROR_NOSUCHFIELD, |
'-236' => DB_ERROR_VALUE_COUNT_ON_ROW, |
'-239' => DB_ERROR_CONSTRAINT, |
'-253' => DB_ERROR_SYNTAX, |
'-292' => DB_ERROR_CONSTRAINT_NOT_NULL, |
'-310' => DB_ERROR_ALREADY_EXISTS, |
'-316' => DB_ERROR_ALREADY_EXISTS, |
'-319' => DB_ERROR_NOT_FOUND, |
'-329' => DB_ERROR_NODBSELECTED, |
'-346' => DB_ERROR_CONSTRAINT, |
'-386' => DB_ERROR_CONSTRAINT_NOT_NULL, |
'-391' => DB_ERROR_CONSTRAINT_NOT_NULL, |
'-554' => DB_ERROR_SYNTAX, |
'-691' => DB_ERROR_CONSTRAINT, |
'-692' => DB_ERROR_CONSTRAINT, |
'-703' => DB_ERROR_CONSTRAINT_NOT_NULL, |
'-1204' => DB_ERROR_INVALID_DATE, |
'-1205' => DB_ERROR_INVALID_DATE, |
'-1206' => DB_ERROR_INVALID_DATE, |
'-1209' => DB_ERROR_INVALID_DATE, |
'-1210' => DB_ERROR_INVALID_DATE, |
'-1212' => DB_ERROR_INVALID_DATE, |
'-1213' => DB_ERROR_INVALID_NUMBER, |
); |
/** |
* The raw database connection created by PHP |
* @var resource |
*/ |
var $connection; |
/** |
* The DSN information for connecting to a database |
* @var array |
*/ |
var $dsn = array(); |
/** |
* Should data manipulation queries be committed automatically? |
* @var bool |
* @access private |
*/ |
var $autocommit = true; |
/** |
* The quantity of transactions begun |
* |
* {@internal While this is private, it can't actually be designated |
* private in PHP 5 because it is directly accessed in the test suite.}} |
* |
* @var integer |
* @access private |
*/ |
var $transaction_opcount = 0; |
/** |
* The number of rows affected by a data manipulation query |
* @var integer |
* @access private |
*/ |
var $affected = 0; |
// }}} |
// {{{ constructor |
/** |
* This constructor calls <kbd>$this->DB_common()</kbd> |
* |
* @return void |
*/ |
function DB_ifx() |
{ |
$this->DB_common(); |
} |
// }}} |
// {{{ connect() |
/** |
* Connect to the database server, log in and open the database |
* |
* Don't call this method directly. Use DB::connect() instead. |
* |
* @param array $dsn the data source name |
* @param bool $persistent should the connection be persistent? |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
*/ |
function connect($dsn, $persistent = false) |
{ |
if (!PEAR::loadExtension('informix') && |
!PEAR::loadExtension('Informix')) |
{ |
return $this->raiseError(DB_ERROR_EXTENSION_NOT_FOUND); |
} |
$this->dsn = $dsn; |
if ($dsn['dbsyntax']) { |
$this->dbsyntax = $dsn['dbsyntax']; |
} |
$dbhost = $dsn['hostspec'] ? '@' . $dsn['hostspec'] : ''; |
$dbname = $dsn['database'] ? $dsn['database'] . $dbhost : ''; |
$user = $dsn['username'] ? $dsn['username'] : ''; |
$pw = $dsn['password'] ? $dsn['password'] : ''; |
$connect_function = $persistent ? 'ifx_pconnect' : 'ifx_connect'; |
$this->connection = @$connect_function($dbname, $user, $pw); |
if (!is_resource($this->connection)) { |
return $this->ifxRaiseError(DB_ERROR_CONNECT_FAILED); |
} |
return DB_OK; |
} |
// }}} |
// {{{ disconnect() |
/** |
* Disconnects from the database server |
* |
* @return bool TRUE on success, FALSE on failure |
*/ |
function disconnect() |
{ |
$ret = @ifx_close($this->connection); |
$this->connection = null; |
return $ret; |
} |
// }}} |
// {{{ simpleQuery() |
/** |
* Sends a query to the database server |
* |
* @param string the SQL query string |
* |
* @return mixed + a PHP result resrouce for successful SELECT queries |
* + the DB_OK constant for other successful queries |
* + a DB_Error object on failure |
*/ |
function simpleQuery($query) |
{ |
$ismanip = DB::isManip($query); |
$this->last_query = $query; |
$this->affected = null; |
if (preg_match('/(SELECT)/i', $query)) { //TESTME: Use !DB::isManip()? |
// the scroll is needed for fetching absolute row numbers |
// in a select query result |
$result = @ifx_query($query, $this->connection, IFX_SCROLL); |
} else { |
if (!$this->autocommit && $ismanip) { |
if ($this->transaction_opcount == 0) { |
$result = @ifx_query('BEGIN WORK', $this->connection); |
if (!$result) { |
return $this->ifxRaiseError(); |
} |
} |
$this->transaction_opcount++; |
} |
$result = @ifx_query($query, $this->connection); |
} |
if (!$result) { |
return $this->ifxRaiseError(); |
} |
$this->affected = @ifx_affected_rows($result); |
// Determine which queries should return data, and which |
// should return an error code only. |
if (preg_match('/(SELECT)/i', $query)) { |
return $result; |
} |
// XXX Testme: free results inside a transaction |
// may cause to stop it and commit the work? |
// Result has to be freed even with a insert or update |
@ifx_free_result($result); |
return DB_OK; |
} |
// }}} |
// {{{ nextResult() |
/** |
* Move the internal ifx result pointer to the next available result |
* |
* @param a valid fbsql result resource |
* |
* @access public |
* |
* @return true if a result is available otherwise return false |
*/ |
function nextResult($result) |
{ |
return false; |
} |
// }}} |
// {{{ affectedRows() |
/** |
* Determines the number of rows affected by a data maniuplation query |
* |
* 0 is returned for queries that don't manipulate data. |
* |
* @return int the number of rows. A DB_Error object on failure. |
*/ |
function affectedRows() |
{ |
if (DB::isManip($this->last_query)) { |
return $this->affected; |
} else { |
return 0; |
} |
} |
// }}} |
// {{{ fetchInto() |
/** |
* Places a row from the result set into the given array |
* |
* Formating of the array and the data therein are configurable. |
* See DB_result::fetchInto() for more information. |
* |
* This method is not meant to be called directly. Use |
* DB_result::fetchInto() instead. It can't be declared "protected" |
* because DB_result is a separate object. |
* |
* @param resource $result the query result resource |
* @param array $arr the referenced array to put the data in |
* @param int $fetchmode how the resulting array should be indexed |
* @param int $rownum the row number to fetch (0 = first row) |
* |
* @return mixed DB_OK on success, NULL when the end of a result set is |
* reached or on failure |
* |
* @see DB_result::fetchInto() |
*/ |
function fetchInto($result, &$arr, $fetchmode, $rownum = null) |
{ |
if (($rownum !== null) && ($rownum < 0)) { |
return null; |
} |
if ($rownum === null) { |
/* |
* Even though fetch_row() should return the next row if |
* $rownum is null, it doesn't in all cases. Bug 598. |
*/ |
$rownum = 'NEXT'; |
} else { |
// Index starts at row 1, unlike most DBMS's starting at 0. |
$rownum++; |
} |
if (!$arr = @ifx_fetch_row($result, $rownum)) { |
return null; |
} |
if ($fetchmode !== DB_FETCHMODE_ASSOC) { |
$i=0; |
$order = array(); |
foreach ($arr as $val) { |
$order[$i++] = $val; |
} |
$arr = $order; |
} elseif ($fetchmode == DB_FETCHMODE_ASSOC && |
$this->options['portability'] & DB_PORTABILITY_LOWERCASE) |
{ |
$arr = array_change_key_case($arr, CASE_LOWER); |
} |
if ($this->options['portability'] & DB_PORTABILITY_RTRIM) { |
$this->_rtrimArrayValues($arr); |
} |
if ($this->options['portability'] & DB_PORTABILITY_NULL_TO_EMPTY) { |
$this->_convertNullArrayValuesToEmpty($arr); |
} |
return DB_OK; |
} |
// }}} |
// {{{ numCols() |
/** |
* Gets the number of columns in a result set |
* |
* This method is not meant to be called directly. Use |
* DB_result::numCols() instead. It can't be declared "protected" |
* because DB_result is a separate object. |
* |
* @param resource $result PHP's query result resource |
* |
* @return int the number of columns. A DB_Error object on failure. |
* |
* @see DB_result::numCols() |
*/ |
function numCols($result) |
{ |
if (!$cols = @ifx_num_fields($result)) { |
return $this->ifxRaiseError(); |
} |
return $cols; |
} |
// }}} |
// {{{ freeResult() |
/** |
* Deletes the result set and frees the memory occupied by the result set |
* |
* This method is not meant to be called directly. Use |
* DB_result::free() instead. It can't be declared "protected" |
* because DB_result is a separate object. |
* |
* @param resource $result PHP's query result resource |
* |
* @return bool TRUE on success, FALSE if $result is invalid |
* |
* @see DB_result::free() |
*/ |
function freeResult($result) |
{ |
return @ifx_free_result($result); |
} |
// }}} |
// {{{ autoCommit() |
/** |
* Enables or disables automatic commits |
* |
* @param bool $onoff true turns it on, false turns it off |
* |
* @return int DB_OK on success. A DB_Error object if the driver |
* doesn't support auto-committing transactions. |
*/ |
function autoCommit($onoff = true) |
{ |
// XXX if $this->transaction_opcount > 0, we should probably |
// issue a warning here. |
$this->autocommit = $onoff ? true : false; |
return DB_OK; |
} |
// }}} |
// {{{ commit() |
/** |
* Commits the current transaction |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
*/ |
function commit() |
{ |
if ($this->transaction_opcount > 0) { |
$result = @ifx_query('COMMIT WORK', $this->connection); |
$this->transaction_opcount = 0; |
if (!$result) { |
return $this->ifxRaiseError(); |
} |
} |
return DB_OK; |
} |
// }}} |
// {{{ rollback() |
/** |
* Reverts the current transaction |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
*/ |
function rollback() |
{ |
if ($this->transaction_opcount > 0) { |
$result = @ifx_query('ROLLBACK WORK', $this->connection); |
$this->transaction_opcount = 0; |
if (!$result) { |
return $this->ifxRaiseError(); |
} |
} |
return DB_OK; |
} |
// }}} |
// {{{ ifxRaiseError() |
/** |
* Produces a DB_Error object regarding the current problem |
* |
* @param int $errno if the error is being manually raised pass a |
* DB_ERROR* constant here. If this isn't passed |
* the error information gathered from the DBMS. |
* |
* @return object the DB_Error object |
* |
* @see DB_common::raiseError(), |
* DB_ifx::errorNative(), DB_ifx::errorCode() |
*/ |
function ifxRaiseError($errno = null) |
{ |
if ($errno === null) { |
$errno = $this->errorCode(ifx_error()); |
} |
return $this->raiseError($errno, null, null, null, |
$this->errorNative()); |
} |
// }}} |
// {{{ errorNative() |
/** |
* Gets the DBMS' native error code and message produced by the last query |
* |
* @return string the DBMS' error code and message |
*/ |
function errorNative() |
{ |
return @ifx_error() . ' ' . @ifx_errormsg(); |
} |
// }}} |
// {{{ errorCode() |
/** |
* Maps native error codes to DB's portable ones. |
* |
* Requires that the DB implementation's constructor fills |
* in the <var>$errorcode_map</var> property. |
* |
* @param string $nativecode error code returned by the database |
* @return int a portable DB error code, or DB_ERROR if this DB |
* implementation has no mapping for the given error code. |
*/ |
function errorCode($nativecode) |
{ |
if (ereg('SQLCODE=(.*)]', $nativecode, $match)) { |
$code = $match[1]; |
if (isset($this->errorcode_map[$code])) { |
return $this->errorcode_map[$code]; |
} |
} |
return DB_ERROR; |
} |
// }}} |
// {{{ tableInfo() |
/** |
* Returns information about a table or a result set |
* |
* NOTE: only supports 'table' if <var>$result</var> is a table name. |
* |
* If analyzing a query result and the result has duplicate field names, |
* an error will be raised saying |
* <samp>can't distinguish duplicate field names</samp>. |
* |
* @param object|string $result DB_result object from a query or a |
* string containing the name of a table. |
* While this also accepts a query result |
* resource identifier, this behavior is |
* deprecated. |
* @param int $mode a valid tableInfo mode |
* |
* @return array an associative array with the information requested. |
* A DB_Error object on failure. |
* |
* @see DB_common::tableInfo() |
* @since Method available since Release 1.6.0 |
*/ |
function tableInfo($result, $mode = null) |
{ |
if (is_string($result)) { |
/* |
* Probably received a table name. |
* Create a result resource identifier. |
*/ |
$id = @ifx_query("SELECT * FROM $result WHERE 1=0", |
$this->connection); |
$got_string = true; |
} elseif (isset($result->result)) { |
/* |
* Probably received a result object. |
* Extract the result resource identifier. |
*/ |
$id = $result->result; |
$got_string = false; |
} else { |
/* |
* Probably received a result resource identifier. |
* Copy it. |
*/ |
$id = $result; |
$got_string = false; |
} |
if (!is_resource($id)) { |
return $this->ifxRaiseError(DB_ERROR_NEED_MORE_DATA); |
} |
$flds = @ifx_fieldproperties($id); |
$count = @ifx_num_fields($id); |
if (count($flds) != $count) { |
return $this->raiseError("can't distinguish duplicate field names"); |
} |
if ($this->options['portability'] & DB_PORTABILITY_LOWERCASE) { |
$case_func = 'strtolower'; |
} else { |
$case_func = 'strval'; |
} |
$i = 0; |
$res = array(); |
if ($mode) { |
$res['num_fields'] = $count; |
} |
foreach ($flds as $key => $value) { |
$props = explode(';', $value); |
$res[$i] = array( |
'table' => $got_string ? $case_func($result) : '', |
'name' => $case_func($key), |
'type' => $props[0], |
'len' => $props[1], |
'flags' => $props[4] == 'N' ? 'not_null' : '', |
); |
if ($mode & DB_TABLEINFO_ORDER) { |
$res['order'][$res[$i]['name']] = $i; |
} |
if ($mode & DB_TABLEINFO_ORDERTABLE) { |
$res['ordertable'][$res[$i]['table']][$res[$i]['name']] = $i; |
} |
$i++; |
} |
// free the result only if we were called on a table |
if ($got_string) { |
@ifx_free_result($id); |
} |
return $res; |
} |
// }}} |
// {{{ getSpecialQuery() |
/** |
* Obtains the query string needed for listing a given type of objects |
* |
* @param string $type the kind of objects you want to retrieve |
* |
* @return string the SQL query string or null if the driver doesn't |
* support the object type requested |
* |
* @access protected |
* @see DB_common::getListOf() |
*/ |
function getSpecialQuery($type) |
{ |
switch ($type) { |
case 'tables': |
return 'SELECT tabname FROM systables WHERE tabid >= 100'; |
default: |
return null; |
} |
} |
// }}} |
} |
/* |
* Local variables: |
* tab-width: 4 |
* c-basic-offset: 4 |
* End: |
*/ |
?> |
/branches/v1.0-menes/api/pear/DB/pgsql.php |
---|
New file |
0,0 → 1,1097 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ |
/** |
* The PEAR DB driver for PHP's pgsql extension |
* for interacting with PostgreSQL databases |
* |
* PHP versions 4 and 5 |
* |
* LICENSE: This source file is subject to version 3.0 of the PHP license |
* that is available through the world-wide-web at the following URI: |
* http://www.php.net/license/3_0.txt. If you did not receive a copy of |
* the PHP License and are unable to obtain it through the web, please |
* send a note to license@php.net so we can mail you a copy immediately. |
* |
* @category Database |
* @package DB |
* @author Rui Hirokawa <hirokawa@php.net> |
* @author Stig Bakken <ssb@php.net> |
* @author Daniel Convissor <danielc@php.net> |
* @copyright 1997-2005 The PHP Group |
* @license http://www.php.net/license/3_0.txt PHP License 3.0 |
* @version CVS: $Id: pgsql.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $ |
* @link http://pear.php.net/package/DB |
*/ |
/** |
* Obtain the DB_common class so it can be extended from |
*/ |
require_once 'DB/common.php'; |
/** |
* The methods PEAR DB uses to interact with PHP's pgsql extension |
* for interacting with PostgreSQL databases |
* |
* These methods overload the ones declared in DB_common. |
* |
* @category Database |
* @package DB |
* @author Rui Hirokawa <hirokawa@php.net> |
* @author Stig Bakken <ssb@php.net> |
* @author Daniel Convissor <danielc@php.net> |
* @copyright 1997-2005 The PHP Group |
* @license http://www.php.net/license/3_0.txt PHP License 3.0 |
* @version Release: @package_version@ |
* @link http://pear.php.net/package/DB |
*/ |
class DB_pgsql extends DB_common |
{ |
// {{{ properties |
/** |
* The DB driver type (mysql, oci8, odbc, etc.) |
* @var string |
*/ |
var $phptype = 'pgsql'; |
/** |
* The database syntax variant to be used (db2, access, etc.), if any |
* @var string |
*/ |
var $dbsyntax = 'pgsql'; |
/** |
* The capabilities of this DB implementation |
* |
* The 'new_link' element contains the PHP version that first provided |
* new_link support for this DBMS. Contains false if it's unsupported. |
* |
* Meaning of the 'limit' element: |
* + 'emulate' = emulate with fetch row by number |
* + 'alter' = alter the query |
* + false = skip rows |
* |
* @var array |
*/ |
var $features = array( |
'limit' => 'alter', |
'new_link' => '4.3.0', |
'numrows' => true, |
'pconnect' => true, |
'prepare' => false, |
'ssl' => true, |
'transactions' => true, |
); |
/** |
* A mapping of native error codes to DB error codes |
* @var array |
*/ |
var $errorcode_map = array( |
); |
/** |
* The raw database connection created by PHP |
* @var resource |
*/ |
var $connection; |
/** |
* The DSN information for connecting to a database |
* @var array |
*/ |
var $dsn = array(); |
/** |
* Should data manipulation queries be committed automatically? |
* @var bool |
* @access private |
*/ |
var $autocommit = true; |
/** |
* The quantity of transactions begun |
* |
* {@internal While this is private, it can't actually be designated |
* private in PHP 5 because it is directly accessed in the test suite.}} |
* |
* @var integer |
* @access private |
*/ |
var $transaction_opcount = 0; |
/** |
* The number of rows affected by a data manipulation query |
* @var integer |
*/ |
var $affected = 0; |
/** |
* The current row being looked at in fetchInto() |
* @var array |
* @access private |
*/ |
var $row = array(); |
/** |
* The number of rows in a given result set |
* @var array |
* @access private |
*/ |
var $_num_rows = array(); |
// }}} |
// {{{ constructor |
/** |
* This constructor calls <kbd>$this->DB_common()</kbd> |
* |
* @return void |
*/ |
function DB_pgsql() |
{ |
$this->DB_common(); |
} |
// }}} |
// {{{ connect() |
/** |
* Connect to the database server, log in and open the database |
* |
* Don't call this method directly. Use DB::connect() instead. |
* |
* PEAR DB's pgsql driver supports the following extra DSN options: |
* + connect_timeout How many seconds to wait for a connection to |
* be established. Available since PEAR DB 1.7.0. |
* + new_link If set to true, causes subsequent calls to |
* connect() to return a new connection link |
* instead of the existing one. WARNING: this is |
* not portable to other DBMS's. Available only |
* if PHP is >= 4.3.0 and PEAR DB is >= 1.7.0. |
* + options Command line options to be sent to the server. |
* Available since PEAR DB 1.6.4. |
* + service Specifies a service name in pg_service.conf that |
* holds additional connection parameters. |
* Available since PEAR DB 1.7.0. |
* + sslmode How should SSL be used when connecting? Values: |
* disable, allow, prefer or require. |
* Available since PEAR DB 1.7.0. |
* + tty This was used to specify where to send server |
* debug output. Available since PEAR DB 1.6.4. |
* |
* Example of connecting to a new link via a socket: |
* <code> |
* require_once 'DB.php'; |
* |
* $dsn = 'pgsql://user:pass@unix(/tmp)/dbname?new_link=true'; |
* $options = array( |
* 'portability' => DB_PORTABILITY_ALL, |
* ); |
* |
* $db =& DB::connect($dsn, $options); |
* if (PEAR::isError($db)) { |
* die($db->getMessage()); |
* } |
* </code> |
* |
* @param array $dsn the data source name |
* @param bool $persistent should the connection be persistent? |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
* |
* @link http://www.postgresql.org/docs/current/static/libpq.html#LIBPQ-CONNECT |
*/ |
function connect($dsn, $persistent = false) |
{ |
if (!PEAR::loadExtension('pgsql')) { |
return $this->raiseError(DB_ERROR_EXTENSION_NOT_FOUND); |
} |
$this->dsn = $dsn; |
if ($dsn['dbsyntax']) { |
$this->dbsyntax = $dsn['dbsyntax']; |
} |
$protocol = $dsn['protocol'] ? $dsn['protocol'] : 'tcp'; |
$params = array(''); |
if ($protocol == 'tcp') { |
if ($dsn['hostspec']) { |
$params[0] .= 'host=' . $dsn['hostspec']; |
} |
if ($dsn['port']) { |
$params[0] .= ' port=' . $dsn['port']; |
} |
} elseif ($protocol == 'unix') { |
// Allow for pg socket in non-standard locations. |
if ($dsn['socket']) { |
$params[0] .= 'host=' . $dsn['socket']; |
} |
if ($dsn['port']) { |
$params[0] .= ' port=' . $dsn['port']; |
} |
} |
if ($dsn['database']) { |
$params[0] .= ' dbname=\'' . addslashes($dsn['database']) . '\''; |
} |
if ($dsn['username']) { |
$params[0] .= ' user=\'' . addslashes($dsn['username']) . '\''; |
} |
if ($dsn['password']) { |
$params[0] .= ' password=\'' . addslashes($dsn['password']) . '\''; |
} |
if (!empty($dsn['options'])) { |
$params[0] .= ' options=' . $dsn['options']; |
} |
if (!empty($dsn['tty'])) { |
$params[0] .= ' tty=' . $dsn['tty']; |
} |
if (!empty($dsn['connect_timeout'])) { |
$params[0] .= ' connect_timeout=' . $dsn['connect_timeout']; |
} |
if (!empty($dsn['sslmode'])) { |
$params[0] .= ' sslmode=' . $dsn['sslmode']; |
} |
if (!empty($dsn['service'])) { |
$params[0] .= ' service=' . $dsn['service']; |
} |
if (isset($dsn['new_link']) |
&& ($dsn['new_link'] == 'true' || $dsn['new_link'] === true)) |
{ |
if (version_compare(phpversion(), '4.3.0', '>=')) { |
$params[] = PGSQL_CONNECT_FORCE_NEW; |
} |
} |
$connect_function = $persistent ? 'pg_pconnect' : 'pg_connect'; |
$ini = ini_get('track_errors'); |
$php_errormsg = ''; |
if ($ini) { |
$this->connection = @call_user_func_array($connect_function, |
$params); |
} else { |
ini_set('track_errors', 1); |
$this->connection = @call_user_func_array($connect_function, |
$params); |
ini_set('track_errors', $ini); |
} |
if (!$this->connection) { |
return $this->raiseError(DB_ERROR_CONNECT_FAILED, |
null, null, null, |
$php_errormsg); |
} |
return DB_OK; |
} |
// }}} |
// {{{ disconnect() |
/** |
* Disconnects from the database server |
* |
* @return bool TRUE on success, FALSE on failure |
*/ |
function disconnect() |
{ |
$ret = @pg_close($this->connection); |
$this->connection = null; |
return $ret; |
} |
// }}} |
// {{{ simpleQuery() |
/** |
* Sends a query to the database server |
* |
* @param string the SQL query string |
* |
* @return mixed + a PHP result resrouce for successful SELECT queries |
* + the DB_OK constant for other successful queries |
* + a DB_Error object on failure |
*/ |
function simpleQuery($query) |
{ |
$ismanip = DB::isManip($query); |
$this->last_query = $query; |
$query = $this->modifyQuery($query); |
if (!$this->autocommit && $ismanip) { |
if ($this->transaction_opcount == 0) { |
$result = @pg_exec($this->connection, 'begin;'); |
if (!$result) { |
return $this->pgsqlRaiseError(); |
} |
} |
$this->transaction_opcount++; |
} |
$result = @pg_exec($this->connection, $query); |
if (!$result) { |
return $this->pgsqlRaiseError(); |
} |
// Determine which queries that should return data, and which |
// should return an error code only. |
if ($ismanip) { |
$this->affected = @pg_affected_rows($result); |
return DB_OK; |
} elseif (preg_match('/^\s*\(*\s*(SELECT|EXPLAIN|SHOW)\s/si', $query)) { |
/* PostgreSQL commands: |
ABORT, ALTER, BEGIN, CLOSE, CLUSTER, COMMIT, COPY, |
CREATE, DECLARE, DELETE, DROP TABLE, EXPLAIN, FETCH, |
GRANT, INSERT, LISTEN, LOAD, LOCK, MOVE, NOTIFY, RESET, |
REVOKE, ROLLBACK, SELECT, SELECT INTO, SET, SHOW, |
UNLISTEN, UPDATE, VACUUM |
*/ |
$this->row[(int)$result] = 0; // reset the row counter. |
$numrows = $this->numRows($result); |
if (is_object($numrows)) { |
return $numrows; |
} |
$this->_num_rows[(int)$result] = $numrows; |
$this->affected = 0; |
return $result; |
} else { |
$this->affected = 0; |
return DB_OK; |
} |
} |
// }}} |
// {{{ nextResult() |
/** |
* Move the internal pgsql result pointer to the next available result |
* |
* @param a valid fbsql result resource |
* |
* @access public |
* |
* @return true if a result is available otherwise return false |
*/ |
function nextResult($result) |
{ |
return false; |
} |
// }}} |
// {{{ fetchInto() |
/** |
* Places a row from the result set into the given array |
* |
* Formating of the array and the data therein are configurable. |
* See DB_result::fetchInto() for more information. |
* |
* This method is not meant to be called directly. Use |
* DB_result::fetchInto() instead. It can't be declared "protected" |
* because DB_result is a separate object. |
* |
* @param resource $result the query result resource |
* @param array $arr the referenced array to put the data in |
* @param int $fetchmode how the resulting array should be indexed |
* @param int $rownum the row number to fetch (0 = first row) |
* |
* @return mixed DB_OK on success, NULL when the end of a result set is |
* reached or on failure |
* |
* @see DB_result::fetchInto() |
*/ |
function fetchInto($result, &$arr, $fetchmode, $rownum = null) |
{ |
$result_int = (int)$result; |
$rownum = ($rownum !== null) ? $rownum : $this->row[$result_int]; |
if ($rownum >= $this->_num_rows[$result_int]) { |
return null; |
} |
if ($fetchmode & DB_FETCHMODE_ASSOC) { |
$arr = @pg_fetch_array($result, $rownum, PGSQL_ASSOC); |
if ($this->options['portability'] & DB_PORTABILITY_LOWERCASE && $arr) { |
$arr = array_change_key_case($arr, CASE_LOWER); |
} |
} else { |
$arr = @pg_fetch_row($result, $rownum); |
} |
if (!$arr) { |
return null; |
} |
if ($this->options['portability'] & DB_PORTABILITY_RTRIM) { |
$this->_rtrimArrayValues($arr); |
} |
if ($this->options['portability'] & DB_PORTABILITY_NULL_TO_EMPTY) { |
$this->_convertNullArrayValuesToEmpty($arr); |
} |
$this->row[$result_int] = ++$rownum; |
return DB_OK; |
} |
// }}} |
// {{{ freeResult() |
/** |
* Deletes the result set and frees the memory occupied by the result set |
* |
* This method is not meant to be called directly. Use |
* DB_result::free() instead. It can't be declared "protected" |
* because DB_result is a separate object. |
* |
* @param resource $result PHP's query result resource |
* |
* @return bool TRUE on success, FALSE if $result is invalid |
* |
* @see DB_result::free() |
*/ |
function freeResult($result) |
{ |
if (is_resource($result)) { |
unset($this->row[(int)$result]); |
unset($this->_num_rows[(int)$result]); |
$this->affected = 0; |
return @pg_freeresult($result); |
} |
return false; |
} |
// }}} |
// {{{ quote() |
/** |
* @deprecated Deprecated in release 1.6.0 |
* @internal |
*/ |
function quote($str) |
{ |
return $this->quoteSmart($str); |
} |
// }}} |
// {{{ quoteSmart() |
/** |
* Formats input so it can be safely used in a query |
* |
* @param mixed $in the data to be formatted |
* |
* @return mixed the formatted data. The format depends on the input's |
* PHP type: |
* + null = the string <samp>NULL</samp> |
* + boolean = string <samp>TRUE</samp> or <samp>FALSE</samp> |
* + integer or double = the unquoted number |
* + other (including strings and numeric strings) = |
* the data escaped according to MySQL's settings |
* then encapsulated between single quotes |
* |
* @see DB_common::quoteSmart() |
* @since Method available since Release 1.6.0 |
*/ |
function quoteSmart($in) |
{ |
if (is_int($in) || is_double($in)) { |
return $in; |
} elseif (is_bool($in)) { |
return $in ? 'TRUE' : 'FALSE'; |
} elseif (is_null($in)) { |
return 'NULL'; |
} else { |
return "'" . $this->escapeSimple($in) . "'"; |
} |
} |
// }}} |
// {{{ escapeSimple() |
/** |
* Escapes a string according to the current DBMS's standards |
* |
* {@internal PostgreSQL treats a backslash as an escape character, |
* so they are escaped as well. |
* |
* Not using pg_escape_string() yet because it requires PostgreSQL |
* to be at version 7.2 or greater.}} |
* |
* @param string $str the string to be escaped |
* |
* @return string the escaped string |
* |
* @see DB_common::quoteSmart() |
* @since Method available since Release 1.6.0 |
*/ |
function escapeSimple($str) |
{ |
return str_replace("'", "''", str_replace('\\', '\\\\', $str)); |
} |
// }}} |
// {{{ numCols() |
/** |
* Gets the number of columns in a result set |
* |
* This method is not meant to be called directly. Use |
* DB_result::numCols() instead. It can't be declared "protected" |
* because DB_result is a separate object. |
* |
* @param resource $result PHP's query result resource |
* |
* @return int the number of columns. A DB_Error object on failure. |
* |
* @see DB_result::numCols() |
*/ |
function numCols($result) |
{ |
$cols = @pg_numfields($result); |
if (!$cols) { |
return $this->pgsqlRaiseError(); |
} |
return $cols; |
} |
// }}} |
// {{{ numRows() |
/** |
* Gets the number of rows in a result set |
* |
* This method is not meant to be called directly. Use |
* DB_result::numRows() instead. It can't be declared "protected" |
* because DB_result is a separate object. |
* |
* @param resource $result PHP's query result resource |
* |
* @return int the number of rows. A DB_Error object on failure. |
* |
* @see DB_result::numRows() |
*/ |
function numRows($result) |
{ |
$rows = @pg_numrows($result); |
if ($rows === null) { |
return $this->pgsqlRaiseError(); |
} |
return $rows; |
} |
// }}} |
// {{{ autoCommit() |
/** |
* Enables or disables automatic commits |
* |
* @param bool $onoff true turns it on, false turns it off |
* |
* @return int DB_OK on success. A DB_Error object if the driver |
* doesn't support auto-committing transactions. |
*/ |
function autoCommit($onoff = false) |
{ |
// XXX if $this->transaction_opcount > 0, we should probably |
// issue a warning here. |
$this->autocommit = $onoff ? true : false; |
return DB_OK; |
} |
// }}} |
// {{{ commit() |
/** |
* Commits the current transaction |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
*/ |
function commit() |
{ |
if ($this->transaction_opcount > 0) { |
// (disabled) hack to shut up error messages from libpq.a |
//@fclose(@fopen("php://stderr", "w")); |
$result = @pg_exec($this->connection, 'end;'); |
$this->transaction_opcount = 0; |
if (!$result) { |
return $this->pgsqlRaiseError(); |
} |
} |
return DB_OK; |
} |
// }}} |
// {{{ rollback() |
/** |
* Reverts the current transaction |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
*/ |
function rollback() |
{ |
if ($this->transaction_opcount > 0) { |
$result = @pg_exec($this->connection, 'abort;'); |
$this->transaction_opcount = 0; |
if (!$result) { |
return $this->pgsqlRaiseError(); |
} |
} |
return DB_OK; |
} |
// }}} |
// {{{ affectedRows() |
/** |
* Determines the number of rows affected by a data maniuplation query |
* |
* 0 is returned for queries that don't manipulate data. |
* |
* @return int the number of rows. A DB_Error object on failure. |
*/ |
function affectedRows() |
{ |
return $this->affected; |
} |
// }}} |
// {{{ nextId() |
/** |
* Returns the next free id in a sequence |
* |
* @param string $seq_name name of the sequence |
* @param boolean $ondemand when true, the seqence is automatically |
* created if it does not exist |
* |
* @return int the next id number in the sequence. |
* A DB_Error object on failure. |
* |
* @see DB_common::nextID(), DB_common::getSequenceName(), |
* DB_pgsql::createSequence(), DB_pgsql::dropSequence() |
*/ |
function nextId($seq_name, $ondemand = true) |
{ |
$seqname = $this->getSequenceName($seq_name); |
$repeat = false; |
do { |
$this->pushErrorHandling(PEAR_ERROR_RETURN); |
$result =& $this->query("SELECT NEXTVAL('${seqname}')"); |
$this->popErrorHandling(); |
if ($ondemand && DB::isError($result) && |
$result->getCode() == DB_ERROR_NOSUCHTABLE) { |
$repeat = true; |
$this->pushErrorHandling(PEAR_ERROR_RETURN); |
$result = $this->createSequence($seq_name); |
$this->popErrorHandling(); |
if (DB::isError($result)) { |
return $this->raiseError($result); |
} |
} else { |
$repeat = false; |
} |
} while ($repeat); |
if (DB::isError($result)) { |
return $this->raiseError($result); |
} |
$arr = $result->fetchRow(DB_FETCHMODE_ORDERED); |
$result->free(); |
return $arr[0]; |
} |
// }}} |
// {{{ createSequence() |
/** |
* Creates a new sequence |
* |
* @param string $seq_name name of the new sequence |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
* |
* @see DB_common::createSequence(), DB_common::getSequenceName(), |
* DB_pgsql::nextID(), DB_pgsql::dropSequence() |
*/ |
function createSequence($seq_name) |
{ |
$seqname = $this->getSequenceName($seq_name); |
$result = $this->query("CREATE SEQUENCE ${seqname}"); |
return $result; |
} |
// }}} |
// {{{ dropSequence() |
/** |
* Deletes a sequence |
* |
* @param string $seq_name name of the sequence to be deleted |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
* |
* @see DB_common::dropSequence(), DB_common::getSequenceName(), |
* DB_pgsql::nextID(), DB_pgsql::createSequence() |
*/ |
function dropSequence($seq_name) |
{ |
return $this->query('DROP SEQUENCE ' |
. $this->getSequenceName($seq_name)); |
} |
// }}} |
// {{{ modifyLimitQuery() |
/** |
* Adds LIMIT clauses to a query string according to current DBMS standards |
* |
* @param string $query the query to modify |
* @param int $from the row to start to fetching (0 = the first row) |
* @param int $count the numbers of rows to fetch |
* @param mixed $params array, string or numeric data to be used in |
* execution of the statement. Quantity of items |
* passed must match quantity of placeholders in |
* query: meaning 1 placeholder for non-array |
* parameters or 1 placeholder per array element. |
* |
* @return string the query string with LIMIT clauses added |
* |
* @access protected |
*/ |
function modifyLimitQuery($query, $from, $count, $params = array()) |
{ |
return "$query LIMIT $count OFFSET $from"; |
} |
// }}} |
// {{{ pgsqlRaiseError() |
/** |
* Produces a DB_Error object regarding the current problem |
* |
* @param int $errno if the error is being manually raised pass a |
* DB_ERROR* constant here. If this isn't passed |
* the error information gathered from the DBMS. |
* |
* @return object the DB_Error object |
* |
* @see DB_common::raiseError(), |
* DB_pgsql::errorNative(), DB_pgsql::errorCode() |
*/ |
function pgsqlRaiseError($errno = null) |
{ |
$native = $this->errorNative(); |
if ($errno === null) { |
$errno = $this->errorCode($native); |
} |
return $this->raiseError($errno, null, null, null, $native); |
} |
// }}} |
// {{{ errorNative() |
/** |
* Gets the DBMS' native error message produced by the last query |
* |
* {@internal Error messages are used instead of error codes |
* in order to support older versions of PostgreSQL.}} |
* |
* @return string the DBMS' error message |
*/ |
function errorNative() |
{ |
return @pg_errormessage($this->connection); |
} |
// }}} |
// {{{ errorCode() |
/** |
* Determines PEAR::DB error code from the database's text error message. |
* |
* @param string $errormsg error message returned from the database |
* @return integer an error number from a DB error constant |
*/ |
function errorCode($errormsg) |
{ |
static $error_regexps; |
if (!isset($error_regexps)) { |
$error_regexps = array( |
'/(relation|sequence|table).*does not exist|class .* not found/i' |
=> DB_ERROR_NOSUCHTABLE, |
'/index .* does not exist/' |
=> DB_ERROR_NOT_FOUND, |
'/column .* does not exist/i' |
=> DB_ERROR_NOSUCHFIELD, |
'/relation .* already exists/i' |
=> DB_ERROR_ALREADY_EXISTS, |
'/(divide|division) by zero$/i' |
=> DB_ERROR_DIVZERO, |
'/pg_atoi: error in .*: can\'t parse /i' |
=> DB_ERROR_INVALID_NUMBER, |
'/invalid input syntax for( type)? (integer|numeric)/i' |
=> DB_ERROR_INVALID_NUMBER, |
'/value .* is out of range for type \w*int/i' |
=> DB_ERROR_INVALID_NUMBER, |
'/integer out of range/i' |
=> DB_ERROR_INVALID_NUMBER, |
'/value too long for type character/i' |
=> DB_ERROR_INVALID, |
'/attribute .* not found|relation .* does not have attribute/i' |
=> DB_ERROR_NOSUCHFIELD, |
'/column .* specified in USING clause does not exist in (left|right) table/i' |
=> DB_ERROR_NOSUCHFIELD, |
'/parser: parse error at or near/i' |
=> DB_ERROR_SYNTAX, |
'/syntax error at/' |
=> DB_ERROR_SYNTAX, |
'/column reference .* is ambiguous/i' |
=> DB_ERROR_SYNTAX, |
'/permission denied/' |
=> DB_ERROR_ACCESS_VIOLATION, |
'/violates not-null constraint/' |
=> DB_ERROR_CONSTRAINT_NOT_NULL, |
'/violates [\w ]+ constraint/' |
=> DB_ERROR_CONSTRAINT, |
'/referential integrity violation/' |
=> DB_ERROR_CONSTRAINT, |
'/more expressions than target columns/i' |
=> DB_ERROR_VALUE_COUNT_ON_ROW, |
); |
} |
foreach ($error_regexps as $regexp => $code) { |
if (preg_match($regexp, $errormsg)) { |
return $code; |
} |
} |
// Fall back to DB_ERROR if there was no mapping. |
return DB_ERROR; |
} |
// }}} |
// {{{ tableInfo() |
/** |
* Returns information about a table or a result set |
* |
* NOTE: only supports 'table' and 'flags' if <var>$result</var> |
* is a table name. |
* |
* @param object|string $result DB_result object from a query or a |
* string containing the name of a table. |
* While this also accepts a query result |
* resource identifier, this behavior is |
* deprecated. |
* @param int $mode a valid tableInfo mode |
* |
* @return array an associative array with the information requested. |
* A DB_Error object on failure. |
* |
* @see DB_common::tableInfo() |
*/ |
function tableInfo($result, $mode = null) |
{ |
if (is_string($result)) { |
/* |
* Probably received a table name. |
* Create a result resource identifier. |
*/ |
$id = @pg_exec($this->connection, "SELECT * FROM $result LIMIT 0"); |
$got_string = true; |
} elseif (isset($result->result)) { |
/* |
* Probably received a result object. |
* Extract the result resource identifier. |
*/ |
$id = $result->result; |
$got_string = false; |
} else { |
/* |
* Probably received a result resource identifier. |
* Copy it. |
* Deprecated. Here for compatibility only. |
*/ |
$id = $result; |
$got_string = false; |
} |
if (!is_resource($id)) { |
return $this->pgsqlRaiseError(DB_ERROR_NEED_MORE_DATA); |
} |
if ($this->options['portability'] & DB_PORTABILITY_LOWERCASE) { |
$case_func = 'strtolower'; |
} else { |
$case_func = 'strval'; |
} |
$count = @pg_numfields($id); |
$res = array(); |
if ($mode) { |
$res['num_fields'] = $count; |
} |
for ($i = 0; $i < $count; $i++) { |
$res[$i] = array( |
'table' => $got_string ? $case_func($result) : '', |
'name' => $case_func(@pg_fieldname($id, $i)), |
'type' => @pg_fieldtype($id, $i), |
'len' => @pg_fieldsize($id, $i), |
'flags' => $got_string |
? $this->_pgFieldFlags($id, $i, $result) |
: '', |
); |
if ($mode & DB_TABLEINFO_ORDER) { |
$res['order'][$res[$i]['name']] = $i; |
} |
if ($mode & DB_TABLEINFO_ORDERTABLE) { |
$res['ordertable'][$res[$i]['table']][$res[$i]['name']] = $i; |
} |
} |
// free the result only if we were called on a table |
if ($got_string) { |
@pg_freeresult($id); |
} |
return $res; |
} |
// }}} |
// {{{ _pgFieldFlags() |
/** |
* Get a column's flags |
* |
* Supports "not_null", "default_value", "primary_key", "unique_key" |
* and "multiple_key". The default value is passed through |
* rawurlencode() in case there are spaces in it. |
* |
* @param int $resource the PostgreSQL result identifier |
* @param int $num_field the field number |
* |
* @return string the flags |
* |
* @access private |
*/ |
function _pgFieldFlags($resource, $num_field, $table_name) |
{ |
$field_name = @pg_fieldname($resource, $num_field); |
$result = @pg_exec($this->connection, "SELECT f.attnotnull, f.atthasdef |
FROM pg_attribute f, pg_class tab, pg_type typ |
WHERE tab.relname = typ.typname |
AND typ.typrelid = f.attrelid |
AND f.attname = '$field_name' |
AND tab.relname = '$table_name'"); |
if (@pg_numrows($result) > 0) { |
$row = @pg_fetch_row($result, 0); |
$flags = ($row[0] == 't') ? 'not_null ' : ''; |
if ($row[1] == 't') { |
$result = @pg_exec($this->connection, "SELECT a.adsrc |
FROM pg_attribute f, pg_class tab, pg_type typ, pg_attrdef a |
WHERE tab.relname = typ.typname AND typ.typrelid = f.attrelid |
AND f.attrelid = a.adrelid AND f.attname = '$field_name' |
AND tab.relname = '$table_name' AND f.attnum = a.adnum"); |
$row = @pg_fetch_row($result, 0); |
$num = preg_replace("/'(.*)'::\w+/", "\\1", $row[0]); |
$flags .= 'default_' . rawurlencode($num) . ' '; |
} |
} else { |
$flags = ''; |
} |
$result = @pg_exec($this->connection, "SELECT i.indisunique, i.indisprimary, i.indkey |
FROM pg_attribute f, pg_class tab, pg_type typ, pg_index i |
WHERE tab.relname = typ.typname |
AND typ.typrelid = f.attrelid |
AND f.attrelid = i.indrelid |
AND f.attname = '$field_name' |
AND tab.relname = '$table_name'"); |
$count = @pg_numrows($result); |
for ($i = 0; $i < $count ; $i++) { |
$row = @pg_fetch_row($result, $i); |
$keys = explode(' ', $row[2]); |
if (in_array($num_field + 1, $keys)) { |
$flags .= ($row[0] == 't' && $row[1] == 'f') ? 'unique_key ' : ''; |
$flags .= ($row[1] == 't') ? 'primary_key ' : ''; |
if (count($keys) > 1) |
$flags .= 'multiple_key '; |
} |
} |
return trim($flags); |
} |
// }}} |
// {{{ getSpecialQuery() |
/** |
* Obtains the query string needed for listing a given type of objects |
* |
* @param string $type the kind of objects you want to retrieve |
* |
* @return string the SQL query string or null if the driver doesn't |
* support the object type requested |
* |
* @access protected |
* @see DB_common::getListOf() |
*/ |
function getSpecialQuery($type) |
{ |
switch ($type) { |
case 'tables': |
return 'SELECT c.relname AS "Name"' |
. ' FROM pg_class c, pg_user u' |
. ' WHERE c.relowner = u.usesysid' |
. " AND c.relkind = 'r'" |
. ' AND NOT EXISTS' |
. ' (SELECT 1 FROM pg_views' |
. ' WHERE viewname = c.relname)' |
. " AND c.relname !~ '^(pg_|sql_)'" |
. ' UNION' |
. ' SELECT c.relname AS "Name"' |
. ' FROM pg_class c' |
. " WHERE c.relkind = 'r'" |
. ' AND NOT EXISTS' |
. ' (SELECT 1 FROM pg_views' |
. ' WHERE viewname = c.relname)' |
. ' AND NOT EXISTS' |
. ' (SELECT 1 FROM pg_user' |
. ' WHERE usesysid = c.relowner)' |
. " AND c.relname !~ '^pg_'"; |
case 'schema.tables': |
return "SELECT schemaname || '.' || tablename" |
. ' AS "Name"' |
. ' FROM pg_catalog.pg_tables' |
. ' WHERE schemaname NOT IN' |
. " ('pg_catalog', 'information_schema', 'pg_toast')"; |
case 'views': |
// Table cols: viewname | viewowner | definition |
return 'SELECT viewname from pg_views WHERE schemaname' |
. " NOT IN ('information_schema', 'pg_catalog')"; |
case 'users': |
// cols: usename |usesysid|usecreatedb|usetrace|usesuper|usecatupd|passwd |valuntil |
return 'SELECT usename FROM pg_user'; |
case 'databases': |
return 'SELECT datname FROM pg_database'; |
case 'functions': |
case 'procedures': |
return 'SELECT proname FROM pg_proc WHERE proowner <> 1'; |
default: |
return null; |
} |
} |
// }}} |
} |
/* |
* Local variables: |
* tab-width: 4 |
* c-basic-offset: 4 |
* End: |
*/ |
?> |
/branches/v1.0-menes/api/pear/DB/sybase.php |
---|
New file |
0,0 → 1,907 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ |
/** |
* The PEAR DB driver for PHP's sybase extension |
* for interacting with Sybase databases |
* |
* PHP versions 4 and 5 |
* |
* LICENSE: This source file is subject to version 3.0 of the PHP license |
* that is available through the world-wide-web at the following URI: |
* http://www.php.net/license/3_0.txt. If you did not receive a copy of |
* the PHP License and are unable to obtain it through the web, please |
* send a note to license@php.net so we can mail you a copy immediately. |
* |
* @category Database |
* @package DB |
* @author Sterling Hughes <sterling@php.net> |
* @author Antônio Carlos Venâncio Júnior <floripa@php.net> |
* @author Daniel Convissor <danielc@php.net> |
* @copyright 1997-2005 The PHP Group |
* @license http://www.php.net/license/3_0.txt PHP License 3.0 |
* @version CVS: $Id: sybase.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $ |
* @link http://pear.php.net/package/DB |
*/ |
/** |
* Obtain the DB_common class so it can be extended from |
*/ |
require_once 'DB/common.php'; |
/** |
* The methods PEAR DB uses to interact with PHP's sybase extension |
* for interacting with Sybase databases |
* |
* These methods overload the ones declared in DB_common. |
* |
* WARNING: This driver may fail with multiple connections under the |
* same user/pass/host and different databases. |
* |
* @category Database |
* @package DB |
* @author Sterling Hughes <sterling@php.net> |
* @author Antônio Carlos Venâncio Júnior <floripa@php.net> |
* @author Daniel Convissor <danielc@php.net> |
* @copyright 1997-2005 The PHP Group |
* @license http://www.php.net/license/3_0.txt PHP License 3.0 |
* @version Release: @package_version@ |
* @link http://pear.php.net/package/DB |
*/ |
class DB_sybase extends DB_common |
{ |
// {{{ properties |
/** |
* The DB driver type (mysql, oci8, odbc, etc.) |
* @var string |
*/ |
var $phptype = 'sybase'; |
/** |
* The database syntax variant to be used (db2, access, etc.), if any |
* @var string |
*/ |
var $dbsyntax = 'sybase'; |
/** |
* The capabilities of this DB implementation |
* |
* The 'new_link' element contains the PHP version that first provided |
* new_link support for this DBMS. Contains false if it's unsupported. |
* |
* Meaning of the 'limit' element: |
* + 'emulate' = emulate with fetch row by number |
* + 'alter' = alter the query |
* + false = skip rows |
* |
* @var array |
*/ |
var $features = array( |
'limit' => 'emulate', |
'new_link' => false, |
'numrows' => true, |
'pconnect' => true, |
'prepare' => false, |
'ssl' => false, |
'transactions' => true, |
); |
/** |
* A mapping of native error codes to DB error codes |
* @var array |
*/ |
var $errorcode_map = array( |
); |
/** |
* The raw database connection created by PHP |
* @var resource |
*/ |
var $connection; |
/** |
* The DSN information for connecting to a database |
* @var array |
*/ |
var $dsn = array(); |
/** |
* Should data manipulation queries be committed automatically? |
* @var bool |
* @access private |
*/ |
var $autocommit = true; |
/** |
* The quantity of transactions begun |
* |
* {@internal While this is private, it can't actually be designated |
* private in PHP 5 because it is directly accessed in the test suite.}} |
* |
* @var integer |
* @access private |
*/ |
var $transaction_opcount = 0; |
/** |
* The database specified in the DSN |
* |
* It's a fix to allow calls to different databases in the same script. |
* |
* @var string |
* @access private |
*/ |
var $_db = ''; |
// }}} |
// {{{ constructor |
/** |
* This constructor calls <kbd>$this->DB_common()</kbd> |
* |
* @return void |
*/ |
function DB_sybase() |
{ |
$this->DB_common(); |
} |
// }}} |
// {{{ connect() |
/** |
* Connect to the database server, log in and open the database |
* |
* Don't call this method directly. Use DB::connect() instead. |
* |
* PEAR DB's sybase driver supports the following extra DSN options: |
* + appname The application name to use on this connection. |
* Available since PEAR DB 1.7.0. |
* + charset The character set to use on this connection. |
* Available since PEAR DB 1.7.0. |
* |
* @param array $dsn the data source name |
* @param bool $persistent should the connection be persistent? |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
*/ |
function connect($dsn, $persistent = false) |
{ |
if (!PEAR::loadExtension('sybase') && |
!PEAR::loadExtension('sybase_ct')) |
{ |
return $this->raiseError(DB_ERROR_EXTENSION_NOT_FOUND); |
} |
$this->dsn = $dsn; |
if ($dsn['dbsyntax']) { |
$this->dbsyntax = $dsn['dbsyntax']; |
} |
$dsn['hostspec'] = $dsn['hostspec'] ? $dsn['hostspec'] : 'localhost'; |
$dsn['password'] = !empty($dsn['password']) ? $dsn['password'] : false; |
$dsn['charset'] = isset($dsn['charset']) ? $dsn['charset'] : false; |
$dsn['appname'] = isset($dsn['appname']) ? $dsn['appname'] : false; |
$connect_function = $persistent ? 'sybase_pconnect' : 'sybase_connect'; |
if ($dsn['username']) { |
$this->connection = @$connect_function($dsn['hostspec'], |
$dsn['username'], |
$dsn['password'], |
$dsn['charset'], |
$dsn['appname']); |
} else { |
return $this->raiseError(DB_ERROR_CONNECT_FAILED, |
null, null, null, |
'The DSN did not contain a username.'); |
} |
if (!$this->connection) { |
return $this->raiseError(DB_ERROR_CONNECT_FAILED, |
null, null, null, |
@sybase_get_last_message()); |
} |
if ($dsn['database']) { |
if (!@sybase_select_db($dsn['database'], $this->connection)) { |
return $this->raiseError(DB_ERROR_NODBSELECTED, |
null, null, null, |
@sybase_get_last_message()); |
} |
$this->_db = $dsn['database']; |
} |
return DB_OK; |
} |
// }}} |
// {{{ disconnect() |
/** |
* Disconnects from the database server |
* |
* @return bool TRUE on success, FALSE on failure |
*/ |
function disconnect() |
{ |
$ret = @sybase_close($this->connection); |
$this->connection = null; |
return $ret; |
} |
// }}} |
// {{{ simpleQuery() |
/** |
* Sends a query to the database server |
* |
* @param string the SQL query string |
* |
* @return mixed + a PHP result resrouce for successful SELECT queries |
* + the DB_OK constant for other successful queries |
* + a DB_Error object on failure |
*/ |
function simpleQuery($query) |
{ |
$ismanip = DB::isManip($query); |
$this->last_query = $query; |
if (!@sybase_select_db($this->_db, $this->connection)) { |
return $this->sybaseRaiseError(DB_ERROR_NODBSELECTED); |
} |
$query = $this->modifyQuery($query); |
if (!$this->autocommit && $ismanip) { |
if ($this->transaction_opcount == 0) { |
$result = @sybase_query('BEGIN TRANSACTION', $this->connection); |
if (!$result) { |
return $this->sybaseRaiseError(); |
} |
} |
$this->transaction_opcount++; |
} |
$result = @sybase_query($query, $this->connection); |
if (!$result) { |
return $this->sybaseRaiseError(); |
} |
if (is_resource($result)) { |
return $result; |
} |
// Determine which queries that should return data, and which |
// should return an error code only. |
return $ismanip ? DB_OK : $result; |
} |
// }}} |
// {{{ nextResult() |
/** |
* Move the internal sybase result pointer to the next available result |
* |
* @param a valid sybase result resource |
* |
* @access public |
* |
* @return true if a result is available otherwise return false |
*/ |
function nextResult($result) |
{ |
return false; |
} |
// }}} |
// {{{ fetchInto() |
/** |
* Places a row from the result set into the given array |
* |
* Formating of the array and the data therein are configurable. |
* See DB_result::fetchInto() for more information. |
* |
* This method is not meant to be called directly. Use |
* DB_result::fetchInto() instead. It can't be declared "protected" |
* because DB_result is a separate object. |
* |
* @param resource $result the query result resource |
* @param array $arr the referenced array to put the data in |
* @param int $fetchmode how the resulting array should be indexed |
* @param int $rownum the row number to fetch (0 = first row) |
* |
* @return mixed DB_OK on success, NULL when the end of a result set is |
* reached or on failure |
* |
* @see DB_result::fetchInto() |
*/ |
function fetchInto($result, &$arr, $fetchmode, $rownum = null) |
{ |
if ($rownum !== null) { |
if (!@sybase_data_seek($result, $rownum)) { |
return null; |
} |
} |
if ($fetchmode & DB_FETCHMODE_ASSOC) { |
if (function_exists('sybase_fetch_assoc')) { |
$arr = @sybase_fetch_assoc($result); |
} else { |
if ($arr = @sybase_fetch_array($result)) { |
foreach ($arr as $key => $value) { |
if (is_int($key)) { |
unset($arr[$key]); |
} |
} |
} |
} |
if ($this->options['portability'] & DB_PORTABILITY_LOWERCASE && $arr) { |
$arr = array_change_key_case($arr, CASE_LOWER); |
} |
} else { |
$arr = @sybase_fetch_row($result); |
} |
if (!$arr) { |
return null; |
} |
if ($this->options['portability'] & DB_PORTABILITY_RTRIM) { |
$this->_rtrimArrayValues($arr); |
} |
if ($this->options['portability'] & DB_PORTABILITY_NULL_TO_EMPTY) { |
$this->_convertNullArrayValuesToEmpty($arr); |
} |
return DB_OK; |
} |
// }}} |
// {{{ freeResult() |
/** |
* Deletes the result set and frees the memory occupied by the result set |
* |
* This method is not meant to be called directly. Use |
* DB_result::free() instead. It can't be declared "protected" |
* because DB_result is a separate object. |
* |
* @param resource $result PHP's query result resource |
* |
* @return bool TRUE on success, FALSE if $result is invalid |
* |
* @see DB_result::free() |
*/ |
function freeResult($result) |
{ |
return @sybase_free_result($result); |
} |
// }}} |
// {{{ numCols() |
/** |
* Gets the number of columns in a result set |
* |
* This method is not meant to be called directly. Use |
* DB_result::numCols() instead. It can't be declared "protected" |
* because DB_result is a separate object. |
* |
* @param resource $result PHP's query result resource |
* |
* @return int the number of columns. A DB_Error object on failure. |
* |
* @see DB_result::numCols() |
*/ |
function numCols($result) |
{ |
$cols = @sybase_num_fields($result); |
if (!$cols) { |
return $this->sybaseRaiseError(); |
} |
return $cols; |
} |
// }}} |
// {{{ numRows() |
/** |
* Gets the number of rows in a result set |
* |
* This method is not meant to be called directly. Use |
* DB_result::numRows() instead. It can't be declared "protected" |
* because DB_result is a separate object. |
* |
* @param resource $result PHP's query result resource |
* |
* @return int the number of rows. A DB_Error object on failure. |
* |
* @see DB_result::numRows() |
*/ |
function numRows($result) |
{ |
$rows = @sybase_num_rows($result); |
if ($rows === false) { |
return $this->sybaseRaiseError(); |
} |
return $rows; |
} |
// }}} |
// {{{ affectedRows() |
/** |
* Determines the number of rows affected by a data maniuplation query |
* |
* 0 is returned for queries that don't manipulate data. |
* |
* @return int the number of rows. A DB_Error object on failure. |
*/ |
function affectedRows() |
{ |
if (DB::isManip($this->last_query)) { |
$result = @sybase_affected_rows($this->connection); |
} else { |
$result = 0; |
} |
return $result; |
} |
// }}} |
// {{{ nextId() |
/** |
* Returns the next free id in a sequence |
* |
* @param string $seq_name name of the sequence |
* @param boolean $ondemand when true, the seqence is automatically |
* created if it does not exist |
* |
* @return int the next id number in the sequence. |
* A DB_Error object on failure. |
* |
* @see DB_common::nextID(), DB_common::getSequenceName(), |
* DB_sybase::createSequence(), DB_sybase::dropSequence() |
*/ |
function nextId($seq_name, $ondemand = true) |
{ |
$seqname = $this->getSequenceName($seq_name); |
if (!@sybase_select_db($this->_db, $this->connection)) { |
return $this->sybaseRaiseError(DB_ERROR_NODBSELECTED); |
} |
$repeat = 0; |
do { |
$this->pushErrorHandling(PEAR_ERROR_RETURN); |
$result = $this->query("INSERT INTO $seqname (vapor) VALUES (0)"); |
$this->popErrorHandling(); |
if ($ondemand && DB::isError($result) && |
($result->getCode() == DB_ERROR || $result->getCode() == DB_ERROR_NOSUCHTABLE)) |
{ |
$repeat = 1; |
$result = $this->createSequence($seq_name); |
if (DB::isError($result)) { |
return $this->raiseError($result); |
} |
} elseif (!DB::isError($result)) { |
$result =& $this->query("SELECT @@IDENTITY FROM $seqname"); |
$repeat = 0; |
} else { |
$repeat = false; |
} |
} while ($repeat); |
if (DB::isError($result)) { |
return $this->raiseError($result); |
} |
$result = $result->fetchRow(DB_FETCHMODE_ORDERED); |
return $result[0]; |
} |
/** |
* Creates a new sequence |
* |
* @param string $seq_name name of the new sequence |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
* |
* @see DB_common::createSequence(), DB_common::getSequenceName(), |
* DB_sybase::nextID(), DB_sybase::dropSequence() |
*/ |
function createSequence($seq_name) |
{ |
return $this->query('CREATE TABLE ' |
. $this->getSequenceName($seq_name) |
. ' (id numeric(10, 0) IDENTITY NOT NULL,' |
. ' vapor int NULL)'); |
} |
// }}} |
// {{{ dropSequence() |
/** |
* Deletes a sequence |
* |
* @param string $seq_name name of the sequence to be deleted |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
* |
* @see DB_common::dropSequence(), DB_common::getSequenceName(), |
* DB_sybase::nextID(), DB_sybase::createSequence() |
*/ |
function dropSequence($seq_name) |
{ |
return $this->query('DROP TABLE ' . $this->getSequenceName($seq_name)); |
} |
// }}} |
// {{{ autoCommit() |
/** |
* Enables or disables automatic commits |
* |
* @param bool $onoff true turns it on, false turns it off |
* |
* @return int DB_OK on success. A DB_Error object if the driver |
* doesn't support auto-committing transactions. |
*/ |
function autoCommit($onoff = false) |
{ |
// XXX if $this->transaction_opcount > 0, we should probably |
// issue a warning here. |
$this->autocommit = $onoff ? true : false; |
return DB_OK; |
} |
// }}} |
// {{{ commit() |
/** |
* Commits the current transaction |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
*/ |
function commit() |
{ |
if ($this->transaction_opcount > 0) { |
if (!@sybase_select_db($this->_db, $this->connection)) { |
return $this->sybaseRaiseError(DB_ERROR_NODBSELECTED); |
} |
$result = @sybase_query('COMMIT', $this->connection); |
$this->transaction_opcount = 0; |
if (!$result) { |
return $this->sybaseRaiseError(); |
} |
} |
return DB_OK; |
} |
// }}} |
// {{{ rollback() |
/** |
* Reverts the current transaction |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
*/ |
function rollback() |
{ |
if ($this->transaction_opcount > 0) { |
if (!@sybase_select_db($this->_db, $this->connection)) { |
return $this->sybaseRaiseError(DB_ERROR_NODBSELECTED); |
} |
$result = @sybase_query('ROLLBACK', $this->connection); |
$this->transaction_opcount = 0; |
if (!$result) { |
return $this->sybaseRaiseError(); |
} |
} |
return DB_OK; |
} |
// }}} |
// {{{ sybaseRaiseError() |
/** |
* Produces a DB_Error object regarding the current problem |
* |
* @param int $errno if the error is being manually raised pass a |
* DB_ERROR* constant here. If this isn't passed |
* the error information gathered from the DBMS. |
* |
* @return object the DB_Error object |
* |
* @see DB_common::raiseError(), |
* DB_sybase::errorNative(), DB_sybase::errorCode() |
*/ |
function sybaseRaiseError($errno = null) |
{ |
$native = $this->errorNative(); |
if ($errno === null) { |
$errno = $this->errorCode($native); |
} |
return $this->raiseError($errno, null, null, null, $native); |
} |
// }}} |
// {{{ errorNative() |
/** |
* Gets the DBMS' native error message produced by the last query |
* |
* @return string the DBMS' error message |
*/ |
function errorNative() |
{ |
return @sybase_get_last_message(); |
} |
// }}} |
// {{{ errorCode() |
/** |
* Determines PEAR::DB error code from the database's text error message. |
* |
* @param string $errormsg error message returned from the database |
* @return integer an error number from a DB error constant |
*/ |
function errorCode($errormsg) |
{ |
static $error_regexps; |
if (!isset($error_regexps)) { |
$error_regexps = array( |
'/Incorrect syntax near/' |
=> DB_ERROR_SYNTAX, |
'/^Unclosed quote before the character string [\"\'].*[\"\']\./' |
=> DB_ERROR_SYNTAX, |
'/Implicit conversion (from datatype|of NUMERIC value)/i' |
=> DB_ERROR_INVALID_NUMBER, |
'/Cannot drop the table [\"\'].+[\"\'], because it doesn\'t exist in the system catalogs\./' |
=> DB_ERROR_NOSUCHTABLE, |
'/Only the owner of object [\"\'].+[\"\'] or a user with System Administrator \(SA\) role can run this command\./' |
=> DB_ERROR_ACCESS_VIOLATION, |
'/^.+ permission denied on object .+, database .+, owner .+/' |
=> DB_ERROR_ACCESS_VIOLATION, |
'/^.* permission denied, database .+, owner .+/' |
=> DB_ERROR_ACCESS_VIOLATION, |
'/[^.*] not found\./' |
=> DB_ERROR_NOSUCHTABLE, |
'/There is already an object named/' |
=> DB_ERROR_ALREADY_EXISTS, |
'/Invalid column name/' |
=> DB_ERROR_NOSUCHFIELD, |
'/does not allow null values/' |
=> DB_ERROR_CONSTRAINT_NOT_NULL, |
'/Command has been aborted/' |
=> DB_ERROR_CONSTRAINT, |
'/^Cannot drop the index .* because it doesn\'t exist/i' |
=> DB_ERROR_NOT_FOUND, |
'/^There is already an index/i' |
=> DB_ERROR_ALREADY_EXISTS, |
'/^There are fewer columns in the INSERT statement than values specified/i' |
=> DB_ERROR_VALUE_COUNT_ON_ROW, |
); |
} |
foreach ($error_regexps as $regexp => $code) { |
if (preg_match($regexp, $errormsg)) { |
return $code; |
} |
} |
return DB_ERROR; |
} |
// }}} |
// {{{ tableInfo() |
/** |
* Returns information about a table or a result set |
* |
* NOTE: only supports 'table' and 'flags' if <var>$result</var> |
* is a table name. |
* |
* @param object|string $result DB_result object from a query or a |
* string containing the name of a table. |
* While this also accepts a query result |
* resource identifier, this behavior is |
* deprecated. |
* @param int $mode a valid tableInfo mode |
* |
* @return array an associative array with the information requested. |
* A DB_Error object on failure. |
* |
* @see DB_common::tableInfo() |
* @since Method available since Release 1.6.0 |
*/ |
function tableInfo($result, $mode = null) |
{ |
if (is_string($result)) { |
/* |
* Probably received a table name. |
* Create a result resource identifier. |
*/ |
if (!@sybase_select_db($this->_db, $this->connection)) { |
return $this->sybaseRaiseError(DB_ERROR_NODBSELECTED); |
} |
$id = @sybase_query("SELECT * FROM $result WHERE 1=0", |
$this->connection); |
$got_string = true; |
} elseif (isset($result->result)) { |
/* |
* Probably received a result object. |
* Extract the result resource identifier. |
*/ |
$id = $result->result; |
$got_string = false; |
} else { |
/* |
* Probably received a result resource identifier. |
* Copy it. |
* Deprecated. Here for compatibility only. |
*/ |
$id = $result; |
$got_string = false; |
} |
if (!is_resource($id)) { |
return $this->sybaseRaiseError(DB_ERROR_NEED_MORE_DATA); |
} |
if ($this->options['portability'] & DB_PORTABILITY_LOWERCASE) { |
$case_func = 'strtolower'; |
} else { |
$case_func = 'strval'; |
} |
$count = @sybase_num_fields($id); |
$res = array(); |
if ($mode) { |
$res['num_fields'] = $count; |
} |
for ($i = 0; $i < $count; $i++) { |
$f = @sybase_fetch_field($id, $i); |
// column_source is often blank |
$res[$i] = array( |
'table' => $got_string |
? $case_func($result) |
: $case_func($f->column_source), |
'name' => $case_func($f->name), |
'type' => $f->type, |
'len' => $f->max_length, |
'flags' => '', |
); |
if ($res[$i]['table']) { |
$res[$i]['flags'] = $this->_sybase_field_flags( |
$res[$i]['table'], $res[$i]['name']); |
} |
if ($mode & DB_TABLEINFO_ORDER) { |
$res['order'][$res[$i]['name']] = $i; |
} |
if ($mode & DB_TABLEINFO_ORDERTABLE) { |
$res['ordertable'][$res[$i]['table']][$res[$i]['name']] = $i; |
} |
} |
// free the result only if we were called on a table |
if ($got_string) { |
@sybase_free_result($id); |
} |
return $res; |
} |
// }}} |
// {{{ _sybase_field_flags() |
/** |
* Get the flags for a field |
* |
* Currently supports: |
* + <samp>unique_key</samp> (unique index, unique check or primary_key) |
* + <samp>multiple_key</samp> (multi-key index) |
* |
* @param string $table the table name |
* @param string $column the field name |
* |
* @return string space delimited string of flags. Empty string if none. |
* |
* @access private |
*/ |
function _sybase_field_flags($table, $column) |
{ |
static $tableName = null; |
static $flags = array(); |
if ($table != $tableName) { |
$flags = array(); |
$tableName = $table; |
// get unique/primary keys |
$res = $this->getAll("sp_helpindex $table", DB_FETCHMODE_ASSOC); |
if (!isset($res[0]['index_description'])) { |
return ''; |
} |
foreach ($res as $val) { |
$keys = explode(', ', trim($val['index_keys'])); |
if (sizeof($keys) > 1) { |
foreach ($keys as $key) { |
$this->_add_flag($flags[$key], 'multiple_key'); |
} |
} |
if (strpos($val['index_description'], 'unique')) { |
foreach ($keys as $key) { |
$this->_add_flag($flags[$key], 'unique_key'); |
} |
} |
} |
} |
if (array_key_exists($column, $flags)) { |
return(implode(' ', $flags[$column])); |
} |
return ''; |
} |
// }}} |
// {{{ _add_flag() |
/** |
* Adds a string to the flags array if the flag is not yet in there |
* - if there is no flag present the array is created |
* |
* @param array $array reference of flags array to add a value to |
* @param mixed $value value to add to the flag array |
* |
* @return void |
* |
* @access private |
*/ |
function _add_flag(&$array, $value) |
{ |
if (!is_array($array)) { |
$array = array($value); |
} elseif (!in_array($value, $array)) { |
array_push($array, $value); |
} |
} |
// }}} |
// {{{ getSpecialQuery() |
/** |
* Obtains the query string needed for listing a given type of objects |
* |
* @param string $type the kind of objects you want to retrieve |
* |
* @return string the SQL query string or null if the driver doesn't |
* support the object type requested |
* |
* @access protected |
* @see DB_common::getListOf() |
*/ |
function getSpecialQuery($type) |
{ |
switch ($type) { |
case 'tables': |
return "SELECT name FROM sysobjects WHERE type = 'U'" |
. ' ORDER BY name'; |
case 'views': |
return "SELECT name FROM sysobjects WHERE type = 'V'"; |
default: |
return null; |
} |
} |
// }}} |
} |
/* |
* Local variables: |
* tab-width: 4 |
* c-basic-offset: 4 |
* End: |
*/ |
?> |
/branches/v1.0-menes/api/pear/DB/fbsql.php |
---|
New file |
0,0 → 1,770 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ |
/** |
* The PEAR DB driver for PHP's fbsql extension |
* for interacting with FrontBase databases |
* |
* PHP versions 4 and 5 |
* |
* LICENSE: This source file is subject to version 3.0 of the PHP license |
* that is available through the world-wide-web at the following URI: |
* http://www.php.net/license/3_0.txt. If you did not receive a copy of |
* the PHP License and are unable to obtain it through the web, please |
* send a note to license@php.net so we can mail you a copy immediately. |
* |
* @category Database |
* @package DB |
* @author Frank M. Kromann <frank@frontbase.com> |
* @author Daniel Convissor <danielc@php.net> |
* @copyright 1997-2005 The PHP Group |
* @license http://www.php.net/license/3_0.txt PHP License 3.0 |
* @version CVS: $Id: fbsql.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $ |
* @link http://pear.php.net/package/DB |
*/ |
/** |
* Obtain the DB_common class so it can be extended from |
*/ |
require_once 'DB/common.php'; |
/** |
* The methods PEAR DB uses to interact with PHP's fbsql extension |
* for interacting with FrontBase databases |
* |
* These methods overload the ones declared in DB_common. |
* |
* @category Database |
* @package DB |
* @author Frank M. Kromann <frank@frontbase.com> |
* @author Daniel Convissor <danielc@php.net> |
* @copyright 1997-2005 The PHP Group |
* @license http://www.php.net/license/3_0.txt PHP License 3.0 |
* @version Release: @package_version@ |
* @link http://pear.php.net/package/DB |
* @since Class functional since Release 1.7.0 |
*/ |
class DB_fbsql extends DB_common |
{ |
// {{{ properties |
/** |
* The DB driver type (mysql, oci8, odbc, etc.) |
* @var string |
*/ |
var $phptype = 'fbsql'; |
/** |
* The database syntax variant to be used (db2, access, etc.), if any |
* @var string |
*/ |
var $dbsyntax = 'fbsql'; |
/** |
* The capabilities of this DB implementation |
* |
* The 'new_link' element contains the PHP version that first provided |
* new_link support for this DBMS. Contains false if it's unsupported. |
* |
* Meaning of the 'limit' element: |
* + 'emulate' = emulate with fetch row by number |
* + 'alter' = alter the query |
* + false = skip rows |
* |
* @var array |
*/ |
var $features = array( |
'limit' => 'alter', |
'new_link' => false, |
'numrows' => true, |
'pconnect' => true, |
'prepare' => false, |
'ssl' => false, |
'transactions' => true, |
); |
/** |
* A mapping of native error codes to DB error codes |
* @var array |
*/ |
var $errorcode_map = array( |
22 => DB_ERROR_SYNTAX, |
85 => DB_ERROR_ALREADY_EXISTS, |
108 => DB_ERROR_SYNTAX, |
116 => DB_ERROR_NOSUCHTABLE, |
124 => DB_ERROR_VALUE_COUNT_ON_ROW, |
215 => DB_ERROR_NOSUCHFIELD, |
217 => DB_ERROR_INVALID_NUMBER, |
226 => DB_ERROR_NOSUCHFIELD, |
231 => DB_ERROR_INVALID, |
239 => DB_ERROR_TRUNCATED, |
251 => DB_ERROR_SYNTAX, |
266 => DB_ERROR_NOT_FOUND, |
357 => DB_ERROR_CONSTRAINT_NOT_NULL, |
358 => DB_ERROR_CONSTRAINT, |
360 => DB_ERROR_CONSTRAINT, |
361 => DB_ERROR_CONSTRAINT, |
); |
/** |
* The raw database connection created by PHP |
* @var resource |
*/ |
var $connection; |
/** |
* The DSN information for connecting to a database |
* @var array |
*/ |
var $dsn = array(); |
// }}} |
// {{{ constructor |
/** |
* This constructor calls <kbd>$this->DB_common()</kbd> |
* |
* @return void |
*/ |
function DB_fbsql() |
{ |
$this->DB_common(); |
} |
// }}} |
// {{{ connect() |
/** |
* Connect to the database server, log in and open the database |
* |
* Don't call this method directly. Use DB::connect() instead. |
* |
* @param array $dsn the data source name |
* @param bool $persistent should the connection be persistent? |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
*/ |
function connect($dsn, $persistent = false) |
{ |
if (!PEAR::loadExtension('fbsql')) { |
return $this->raiseError(DB_ERROR_EXTENSION_NOT_FOUND); |
} |
$this->dsn = $dsn; |
if ($dsn['dbsyntax']) { |
$this->dbsyntax = $dsn['dbsyntax']; |
} |
$params = array( |
$dsn['hostspec'] ? $dsn['hostspec'] : 'localhost', |
$dsn['username'] ? $dsn['username'] : null, |
$dsn['password'] ? $dsn['password'] : null, |
); |
$connect_function = $persistent ? 'fbsql_pconnect' : 'fbsql_connect'; |
$ini = ini_get('track_errors'); |
$php_errormsg = ''; |
if ($ini) { |
$this->connection = @call_user_func_array($connect_function, |
$params); |
} else { |
ini_set('track_errors', 1); |
$this->connection = @call_user_func_array($connect_function, |
$params); |
ini_set('track_errors', $ini); |
} |
if (!$this->connection) { |
return $this->raiseError(DB_ERROR_CONNECT_FAILED, |
null, null, null, |
$php_errormsg); |
} |
if ($dsn['database']) { |
if (!@fbsql_select_db($dsn['database'], $this->connection)) { |
return $this->fbsqlRaiseError(); |
} |
} |
return DB_OK; |
} |
// }}} |
// {{{ disconnect() |
/** |
* Disconnects from the database server |
* |
* @return bool TRUE on success, FALSE on failure |
*/ |
function disconnect() |
{ |
$ret = @fbsql_close($this->connection); |
$this->connection = null; |
return $ret; |
} |
// }}} |
// {{{ simpleQuery() |
/** |
* Sends a query to the database server |
* |
* @param string the SQL query string |
* |
* @return mixed + a PHP result resrouce for successful SELECT queries |
* + the DB_OK constant for other successful queries |
* + a DB_Error object on failure |
*/ |
function simpleQuery($query) |
{ |
$this->last_query = $query; |
$query = $this->modifyQuery($query); |
$result = @fbsql_query("$query;", $this->connection); |
if (!$result) { |
return $this->fbsqlRaiseError(); |
} |
// Determine which queries that should return data, and which |
// should return an error code only. |
if (DB::isManip($query)) { |
return DB_OK; |
} |
return $result; |
} |
// }}} |
// {{{ nextResult() |
/** |
* Move the internal fbsql result pointer to the next available result |
* |
* @param a valid fbsql result resource |
* |
* @access public |
* |
* @return true if a result is available otherwise return false |
*/ |
function nextResult($result) |
{ |
return @fbsql_next_result($result); |
} |
// }}} |
// {{{ fetchInto() |
/** |
* Places a row from the result set into the given array |
* |
* Formating of the array and the data therein are configurable. |
* See DB_result::fetchInto() for more information. |
* |
* This method is not meant to be called directly. Use |
* DB_result::fetchInto() instead. It can't be declared "protected" |
* because DB_result is a separate object. |
* |
* @param resource $result the query result resource |
* @param array $arr the referenced array to put the data in |
* @param int $fetchmode how the resulting array should be indexed |
* @param int $rownum the row number to fetch (0 = first row) |
* |
* @return mixed DB_OK on success, NULL when the end of a result set is |
* reached or on failure |
* |
* @see DB_result::fetchInto() |
*/ |
function fetchInto($result, &$arr, $fetchmode, $rownum = null) |
{ |
if ($rownum !== null) { |
if (!@fbsql_data_seek($result, $rownum)) { |
return null; |
} |
} |
if ($fetchmode & DB_FETCHMODE_ASSOC) { |
$arr = @fbsql_fetch_array($result, FBSQL_ASSOC); |
if ($this->options['portability'] & DB_PORTABILITY_LOWERCASE && $arr) { |
$arr = array_change_key_case($arr, CASE_LOWER); |
} |
} else { |
$arr = @fbsql_fetch_row($result); |
} |
if (!$arr) { |
return null; |
} |
if ($this->options['portability'] & DB_PORTABILITY_RTRIM) { |
$this->_rtrimArrayValues($arr); |
} |
if ($this->options['portability'] & DB_PORTABILITY_NULL_TO_EMPTY) { |
$this->_convertNullArrayValuesToEmpty($arr); |
} |
return DB_OK; |
} |
// }}} |
// {{{ freeResult() |
/** |
* Deletes the result set and frees the memory occupied by the result set |
* |
* This method is not meant to be called directly. Use |
* DB_result::free() instead. It can't be declared "protected" |
* because DB_result is a separate object. |
* |
* @param resource $result PHP's query result resource |
* |
* @return bool TRUE on success, FALSE if $result is invalid |
* |
* @see DB_result::free() |
*/ |
function freeResult($result) |
{ |
return @fbsql_free_result($result); |
} |
// }}} |
// {{{ autoCommit() |
/** |
* Enables or disables automatic commits |
* |
* @param bool $onoff true turns it on, false turns it off |
* |
* @return int DB_OK on success. A DB_Error object if the driver |
* doesn't support auto-committing transactions. |
*/ |
function autoCommit($onoff=false) |
{ |
if ($onoff) { |
$this->query("SET COMMIT TRUE"); |
} else { |
$this->query("SET COMMIT FALSE"); |
} |
} |
// }}} |
// {{{ commit() |
/** |
* Commits the current transaction |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
*/ |
function commit() |
{ |
@fbsql_commit(); |
} |
// }}} |
// {{{ rollback() |
/** |
* Reverts the current transaction |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
*/ |
function rollback() |
{ |
@fbsql_rollback(); |
} |
// }}} |
// {{{ numCols() |
/** |
* Gets the number of columns in a result set |
* |
* This method is not meant to be called directly. Use |
* DB_result::numCols() instead. It can't be declared "protected" |
* because DB_result is a separate object. |
* |
* @param resource $result PHP's query result resource |
* |
* @return int the number of columns. A DB_Error object on failure. |
* |
* @see DB_result::numCols() |
*/ |
function numCols($result) |
{ |
$cols = @fbsql_num_fields($result); |
if (!$cols) { |
return $this->fbsqlRaiseError(); |
} |
return $cols; |
} |
// }}} |
// {{{ numRows() |
/** |
* Gets the number of rows in a result set |
* |
* This method is not meant to be called directly. Use |
* DB_result::numRows() instead. It can't be declared "protected" |
* because DB_result is a separate object. |
* |
* @param resource $result PHP's query result resource |
* |
* @return int the number of rows. A DB_Error object on failure. |
* |
* @see DB_result::numRows() |
*/ |
function numRows($result) |
{ |
$rows = @fbsql_num_rows($result); |
if ($rows === null) { |
return $this->fbsqlRaiseError(); |
} |
return $rows; |
} |
// }}} |
// {{{ affectedRows() |
/** |
* Determines the number of rows affected by a data maniuplation query |
* |
* 0 is returned for queries that don't manipulate data. |
* |
* @return int the number of rows. A DB_Error object on failure. |
*/ |
function affectedRows() |
{ |
if (DB::isManip($this->last_query)) { |
$result = @fbsql_affected_rows($this->connection); |
} else { |
$result = 0; |
} |
return $result; |
} |
// }}} |
// {{{ nextId() |
/** |
* Returns the next free id in a sequence |
* |
* @param string $seq_name name of the sequence |
* @param boolean $ondemand when true, the seqence is automatically |
* created if it does not exist |
* |
* @return int the next id number in the sequence. |
* A DB_Error object on failure. |
* |
* @see DB_common::nextID(), DB_common::getSequenceName(), |
* DB_fbsql::createSequence(), DB_fbsql::dropSequence() |
*/ |
function nextId($seq_name, $ondemand = true) |
{ |
$seqname = $this->getSequenceName($seq_name); |
do { |
$repeat = 0; |
$this->pushErrorHandling(PEAR_ERROR_RETURN); |
$result = $this->query('SELECT UNIQUE FROM ' . $seqname); |
$this->popErrorHandling(); |
if ($ondemand && DB::isError($result) && |
$result->getCode() == DB_ERROR_NOSUCHTABLE) { |
$repeat = 1; |
$result = $this->createSequence($seq_name); |
if (DB::isError($result)) { |
return $result; |
} |
} else { |
$repeat = 0; |
} |
} while ($repeat); |
if (DB::isError($result)) { |
return $this->fbsqlRaiseError(); |
} |
$result->fetchInto($tmp, DB_FETCHMODE_ORDERED); |
return $tmp[0]; |
} |
/** |
* Creates a new sequence |
* |
* @param string $seq_name name of the new sequence |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
* |
* @see DB_common::createSequence(), DB_common::getSequenceName(), |
* DB_fbsql::nextID(), DB_fbsql::dropSequence() |
*/ |
function createSequence($seq_name) |
{ |
$seqname = $this->getSequenceName($seq_name); |
$res = $this->query('CREATE TABLE ' . $seqname |
. ' (id INTEGER NOT NULL,' |
. ' PRIMARY KEY(id))'); |
if ($res) { |
$res = $this->query('SET UNIQUE = 0 FOR ' . $seqname); |
} |
return $res; |
} |
// }}} |
// {{{ dropSequence() |
/** |
* Deletes a sequence |
* |
* @param string $seq_name name of the sequence to be deleted |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
* |
* @see DB_common::dropSequence(), DB_common::getSequenceName(), |
* DB_fbsql::nextID(), DB_fbsql::createSequence() |
*/ |
function dropSequence($seq_name) |
{ |
return $this->query('DROP TABLE ' . $this->getSequenceName($seq_name) |
. ' RESTRICT'); |
} |
// }}} |
// {{{ modifyLimitQuery() |
/** |
* Adds LIMIT clauses to a query string according to current DBMS standards |
* |
* @param string $query the query to modify |
* @param int $from the row to start to fetching (0 = the first row) |
* @param int $count the numbers of rows to fetch |
* @param mixed $params array, string or numeric data to be used in |
* execution of the statement. Quantity of items |
* passed must match quantity of placeholders in |
* query: meaning 1 placeholder for non-array |
* parameters or 1 placeholder per array element. |
* |
* @return string the query string with LIMIT clauses added |
* |
* @access protected |
*/ |
function modifyLimitQuery($query, $from, $count, $params = array()) |
{ |
if (DB::isManip($query)) { |
return preg_replace('/^([\s(])*SELECT/i', |
"\\1SELECT TOP($count)", $query); |
} else { |
return preg_replace('/([\s(])*SELECT/i', |
"\\1SELECT TOP($from, $count)", $query); |
} |
} |
// }}} |
// {{{ quoteSmart() |
/** |
* Formats input so it can be safely used in a query |
* |
* @param mixed $in the data to be formatted |
* |
* @return mixed the formatted data. The format depends on the input's |
* PHP type: |
* + null = the string <samp>NULL</samp> |
* + boolean = string <samp>TRUE</samp> or <samp>FALSE</samp> |
* + integer or double = the unquoted number |
* + other (including strings and numeric strings) = |
* the data escaped according to FrontBase's settings |
* then encapsulated between single quotes |
* |
* @see DB_common::quoteSmart() |
* @since Method available since Release 1.6.0 |
*/ |
function quoteSmart($in) |
{ |
if (is_int($in) || is_double($in)) { |
return $in; |
} elseif (is_bool($in)) { |
return $in ? 'TRUE' : 'FALSE'; |
} elseif (is_null($in)) { |
return 'NULL'; |
} else { |
return "'" . $this->escapeSimple($in) . "'"; |
} |
} |
// }}} |
// {{{ fbsqlRaiseError() |
/** |
* Produces a DB_Error object regarding the current problem |
* |
* @param int $errno if the error is being manually raised pass a |
* DB_ERROR* constant here. If this isn't passed |
* the error information gathered from the DBMS. |
* |
* @return object the DB_Error object |
* |
* @see DB_common::raiseError(), |
* DB_fbsql::errorNative(), DB_common::errorCode() |
*/ |
function fbsqlRaiseError($errno = null) |
{ |
if ($errno === null) { |
$errno = $this->errorCode(fbsql_errno($this->connection)); |
} |
return $this->raiseError($errno, null, null, null, |
@fbsql_error($this->connection)); |
} |
// }}} |
// {{{ errorNative() |
/** |
* Gets the DBMS' native error code produced by the last query |
* |
* @return int the DBMS' error code |
*/ |
function errorNative() |
{ |
return @fbsql_errno($this->connection); |
} |
// }}} |
// {{{ tableInfo() |
/** |
* Returns information about a table or a result set |
* |
* @param object|string $result DB_result object from a query or a |
* string containing the name of a table. |
* While this also accepts a query result |
* resource identifier, this behavior is |
* deprecated. |
* @param int $mode a valid tableInfo mode |
* |
* @return array an associative array with the information requested. |
* A DB_Error object on failure. |
* |
* @see DB_common::tableInfo() |
*/ |
function tableInfo($result, $mode = null) |
{ |
if (is_string($result)) { |
/* |
* Probably received a table name. |
* Create a result resource identifier. |
*/ |
$id = @fbsql_list_fields($this->dsn['database'], |
$result, $this->connection); |
$got_string = true; |
} elseif (isset($result->result)) { |
/* |
* Probably received a result object. |
* Extract the result resource identifier. |
*/ |
$id = $result->result; |
$got_string = false; |
} else { |
/* |
* Probably received a result resource identifier. |
* Copy it. |
* Deprecated. Here for compatibility only. |
*/ |
$id = $result; |
$got_string = false; |
} |
if (!is_resource($id)) { |
return $this->fbsqlRaiseError(DB_ERROR_NEED_MORE_DATA); |
} |
if ($this->options['portability'] & DB_PORTABILITY_LOWERCASE) { |
$case_func = 'strtolower'; |
} else { |
$case_func = 'strval'; |
} |
$count = @fbsql_num_fields($id); |
$res = array(); |
if ($mode) { |
$res['num_fields'] = $count; |
} |
for ($i = 0; $i < $count; $i++) { |
$res[$i] = array( |
'table' => $case_func(@fbsql_field_table($id, $i)), |
'name' => $case_func(@fbsql_field_name($id, $i)), |
'type' => @fbsql_field_type($id, $i), |
'len' => @fbsql_field_len($id, $i), |
'flags' => @fbsql_field_flags($id, $i), |
); |
if ($mode & DB_TABLEINFO_ORDER) { |
$res['order'][$res[$i]['name']] = $i; |
} |
if ($mode & DB_TABLEINFO_ORDERTABLE) { |
$res['ordertable'][$res[$i]['table']][$res[$i]['name']] = $i; |
} |
} |
// free the result only if we were called on a table |
if ($got_string) { |
@fbsql_free_result($id); |
} |
return $res; |
} |
// }}} |
// {{{ getSpecialQuery() |
/** |
* Obtains the query string needed for listing a given type of objects |
* |
* @param string $type the kind of objects you want to retrieve |
* |
* @return string the SQL query string or null if the driver doesn't |
* support the object type requested |
* |
* @access protected |
* @see DB_common::getListOf() |
*/ |
function getSpecialQuery($type) |
{ |
switch ($type) { |
case 'tables': |
return 'SELECT "table_name" FROM information_schema.tables' |
. ' t0, information_schema.schemata t1' |
. ' WHERE t0.schema_pk=t1.schema_pk AND' |
. ' "table_type" = \'BASE TABLE\'' |
. ' AND "schema_name" = current_schema'; |
case 'views': |
return 'SELECT "table_name" FROM information_schema.tables' |
. ' t0, information_schema.schemata t1' |
. ' WHERE t0.schema_pk=t1.schema_pk AND' |
. ' "table_type" = \'VIEW\'' |
. ' AND "schema_name" = current_schema'; |
case 'users': |
return 'SELECT "user_name" from information_schema.users'; |
case 'functions': |
return 'SELECT "routine_name" FROM' |
. ' information_schema.psm_routines' |
. ' t0, information_schema.schemata t1' |
. ' WHERE t0.schema_pk=t1.schema_pk' |
. ' AND "routine_kind"=\'FUNCTION\'' |
. ' AND "schema_name" = current_schema'; |
case 'procedures': |
return 'SELECT "routine_name" FROM' |
. ' information_schema.psm_routines' |
. ' t0, information_schema.schemata t1' |
. ' WHERE t0.schema_pk=t1.schema_pk' |
. ' AND "routine_kind"=\'PROCEDURE\'' |
. ' AND "schema_name" = current_schema'; |
default: |
return null; |
} |
} |
// }}} |
} |
/* |
* Local variables: |
* tab-width: 4 |
* c-basic-offset: 4 |
* End: |
*/ |
?> |
/branches/v1.0-menes/api/pear/DB/odbc.php |
---|
New file |
0,0 → 1,883 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ |
/** |
* The PEAR DB driver for PHP's odbc extension |
* for interacting with databases via ODBC connections |
* |
* PHP versions 4 and 5 |
* |
* LICENSE: This source file is subject to version 3.0 of the PHP license |
* that is available through the world-wide-web at the following URI: |
* http://www.php.net/license/3_0.txt. If you did not receive a copy of |
* the PHP License and are unable to obtain it through the web, please |
* send a note to license@php.net so we can mail you a copy immediately. |
* |
* @category Database |
* @package DB |
* @author Stig Bakken <ssb@php.net> |
* @author Daniel Convissor <danielc@php.net> |
* @copyright 1997-2005 The PHP Group |
* @license http://www.php.net/license/3_0.txt PHP License 3.0 |
* @version CVS: $Id: odbc.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $ |
* @link http://pear.php.net/package/DB |
*/ |
/** |
* Obtain the DB_common class so it can be extended from |
*/ |
require_once 'DB/common.php'; |
/** |
* The methods PEAR DB uses to interact with PHP's odbc extension |
* for interacting with databases via ODBC connections |
* |
* These methods overload the ones declared in DB_common. |
* |
* More info on ODBC errors could be found here: |
* http://msdn.microsoft.com/library/default.asp?url=/library/en-us/trblsql/tr_err_odbc_5stz.asp |
* |
* @category Database |
* @package DB |
* @author Stig Bakken <ssb@php.net> |
* @author Daniel Convissor <danielc@php.net> |
* @copyright 1997-2005 The PHP Group |
* @license http://www.php.net/license/3_0.txt PHP License 3.0 |
* @version Release: @package_version@ |
* @link http://pear.php.net/package/DB |
*/ |
class DB_odbc extends DB_common |
{ |
// {{{ properties |
/** |
* The DB driver type (mysql, oci8, odbc, etc.) |
* @var string |
*/ |
var $phptype = 'odbc'; |
/** |
* The database syntax variant to be used (db2, access, etc.), if any |
* @var string |
*/ |
var $dbsyntax = 'sql92'; |
/** |
* The capabilities of this DB implementation |
* |
* The 'new_link' element contains the PHP version that first provided |
* new_link support for this DBMS. Contains false if it's unsupported. |
* |
* Meaning of the 'limit' element: |
* + 'emulate' = emulate with fetch row by number |
* + 'alter' = alter the query |
* + false = skip rows |
* |
* NOTE: The feature set of the following drivers are different than |
* the default: |
* + solid: 'transactions' = true |
* + navision: 'limit' = false |
* |
* @var array |
*/ |
var $features = array( |
'limit' => 'emulate', |
'new_link' => false, |
'numrows' => true, |
'pconnect' => true, |
'prepare' => false, |
'ssl' => false, |
'transactions' => false, |
); |
/** |
* A mapping of native error codes to DB error codes |
* @var array |
*/ |
var $errorcode_map = array( |
'01004' => DB_ERROR_TRUNCATED, |
'07001' => DB_ERROR_MISMATCH, |
'21S01' => DB_ERROR_VALUE_COUNT_ON_ROW, |
'21S02' => DB_ERROR_MISMATCH, |
'22001' => DB_ERROR_INVALID, |
'22003' => DB_ERROR_INVALID_NUMBER, |
'22005' => DB_ERROR_INVALID_NUMBER, |
'22008' => DB_ERROR_INVALID_DATE, |
'22012' => DB_ERROR_DIVZERO, |
'23000' => DB_ERROR_CONSTRAINT, |
'23502' => DB_ERROR_CONSTRAINT_NOT_NULL, |
'23503' => DB_ERROR_CONSTRAINT, |
'23504' => DB_ERROR_CONSTRAINT, |
'23505' => DB_ERROR_CONSTRAINT, |
'24000' => DB_ERROR_INVALID, |
'34000' => DB_ERROR_INVALID, |
'37000' => DB_ERROR_SYNTAX, |
'42000' => DB_ERROR_SYNTAX, |
'42601' => DB_ERROR_SYNTAX, |
'IM001' => DB_ERROR_UNSUPPORTED, |
'S0000' => DB_ERROR_NOSUCHTABLE, |
'S0001' => DB_ERROR_ALREADY_EXISTS, |
'S0002' => DB_ERROR_NOSUCHTABLE, |
'S0011' => DB_ERROR_ALREADY_EXISTS, |
'S0012' => DB_ERROR_NOT_FOUND, |
'S0021' => DB_ERROR_ALREADY_EXISTS, |
'S0022' => DB_ERROR_NOSUCHFIELD, |
'S1009' => DB_ERROR_INVALID, |
'S1090' => DB_ERROR_INVALID, |
'S1C00' => DB_ERROR_NOT_CAPABLE, |
); |
/** |
* The raw database connection created by PHP |
* @var resource |
*/ |
var $connection; |
/** |
* The DSN information for connecting to a database |
* @var array |
*/ |
var $dsn = array(); |
/** |
* The number of rows affected by a data manipulation query |
* @var integer |
* @access private |
*/ |
var $affected = 0; |
// }}} |
// {{{ constructor |
/** |
* This constructor calls <kbd>$this->DB_common()</kbd> |
* |
* @return void |
*/ |
function DB_odbc() |
{ |
$this->DB_common(); |
} |
// }}} |
// {{{ connect() |
/** |
* Connect to the database server, log in and open the database |
* |
* Don't call this method directly. Use DB::connect() instead. |
* |
* PEAR DB's odbc driver supports the following extra DSN options: |
* + cursor The type of cursor to be used for this connection. |
* |
* @param array $dsn the data source name |
* @param bool $persistent should the connection be persistent? |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
*/ |
function connect($dsn, $persistent = false) |
{ |
if (!PEAR::loadExtension('odbc')) { |
return $this->raiseError(DB_ERROR_EXTENSION_NOT_FOUND); |
} |
$this->dsn = $dsn; |
if ($dsn['dbsyntax']) { |
$this->dbsyntax = $dsn['dbsyntax']; |
} |
switch ($this->dbsyntax) { |
case 'access': |
case 'db2': |
case 'solid': |
$this->features['transactions'] = true; |
break; |
case 'navision': |
$this->features['limit'] = false; |
} |
/* |
* This is hear for backwards compatibility. Should have been using |
* 'database' all along, but prior to 1.6.0RC3 'hostspec' was used. |
*/ |
if ($dsn['database']) { |
$odbcdsn = $dsn['database']; |
} elseif ($dsn['hostspec']) { |
$odbcdsn = $dsn['hostspec']; |
} else { |
$odbcdsn = 'localhost'; |
} |
$connect_function = $persistent ? 'odbc_pconnect' : 'odbc_connect'; |
if (empty($dsn['cursor'])) { |
$this->connection = @$connect_function($odbcdsn, $dsn['username'], |
$dsn['password']); |
} else { |
$this->connection = @$connect_function($odbcdsn, $dsn['username'], |
$dsn['password'], |
$dsn['cursor']); |
} |
if (!is_resource($this->connection)) { |
return $this->raiseError(DB_ERROR_CONNECT_FAILED, |
null, null, null, |
$this->errorNative()); |
} |
return DB_OK; |
} |
// }}} |
// {{{ disconnect() |
/** |
* Disconnects from the database server |
* |
* @return bool TRUE on success, FALSE on failure |
*/ |
function disconnect() |
{ |
$err = @odbc_close($this->connection); |
$this->connection = null; |
return $err; |
} |
// }}} |
// {{{ simpleQuery() |
/** |
* Sends a query to the database server |
* |
* @param string the SQL query string |
* |
* @return mixed + a PHP result resrouce for successful SELECT queries |
* + the DB_OK constant for other successful queries |
* + a DB_Error object on failure |
*/ |
function simpleQuery($query) |
{ |
$this->last_query = $query; |
$query = $this->modifyQuery($query); |
$result = @odbc_exec($this->connection, $query); |
if (!$result) { |
return $this->odbcRaiseError(); // XXX ERRORMSG |
} |
// Determine which queries that should return data, and which |
// should return an error code only. |
if (DB::isManip($query)) { |
$this->affected = $result; // For affectedRows() |
return DB_OK; |
} |
$this->affected = 0; |
return $result; |
} |
// }}} |
// {{{ nextResult() |
/** |
* Move the internal odbc result pointer to the next available result |
* |
* @param a valid fbsql result resource |
* |
* @access public |
* |
* @return true if a result is available otherwise return false |
*/ |
function nextResult($result) |
{ |
return @odbc_next_result($result); |
} |
// }}} |
// {{{ fetchInto() |
/** |
* Places a row from the result set into the given array |
* |
* Formating of the array and the data therein are configurable. |
* See DB_result::fetchInto() for more information. |
* |
* This method is not meant to be called directly. Use |
* DB_result::fetchInto() instead. It can't be declared "protected" |
* because DB_result is a separate object. |
* |
* @param resource $result the query result resource |
* @param array $arr the referenced array to put the data in |
* @param int $fetchmode how the resulting array should be indexed |
* @param int $rownum the row number to fetch (0 = first row) |
* |
* @return mixed DB_OK on success, NULL when the end of a result set is |
* reached or on failure |
* |
* @see DB_result::fetchInto() |
*/ |
function fetchInto($result, &$arr, $fetchmode, $rownum = null) |
{ |
$arr = array(); |
if ($rownum !== null) { |
$rownum++; // ODBC first row is 1 |
if (version_compare(phpversion(), '4.2.0', 'ge')) { |
$cols = @odbc_fetch_into($result, $arr, $rownum); |
} else { |
$cols = @odbc_fetch_into($result, $rownum, $arr); |
} |
} else { |
$cols = @odbc_fetch_into($result, $arr); |
} |
if (!$cols) { |
return null; |
} |
if ($fetchmode !== DB_FETCHMODE_ORDERED) { |
for ($i = 0; $i < count($arr); $i++) { |
$colName = @odbc_field_name($result, $i+1); |
$a[$colName] = $arr[$i]; |
} |
if ($this->options['portability'] & DB_PORTABILITY_LOWERCASE) { |
$a = array_change_key_case($a, CASE_LOWER); |
} |
$arr = $a; |
} |
if ($this->options['portability'] & DB_PORTABILITY_RTRIM) { |
$this->_rtrimArrayValues($arr); |
} |
if ($this->options['portability'] & DB_PORTABILITY_NULL_TO_EMPTY) { |
$this->_convertNullArrayValuesToEmpty($arr); |
} |
return DB_OK; |
} |
// }}} |
// {{{ freeResult() |
/** |
* Deletes the result set and frees the memory occupied by the result set |
* |
* This method is not meant to be called directly. Use |
* DB_result::free() instead. It can't be declared "protected" |
* because DB_result is a separate object. |
* |
* @param resource $result PHP's query result resource |
* |
* @return bool TRUE on success, FALSE if $result is invalid |
* |
* @see DB_result::free() |
*/ |
function freeResult($result) |
{ |
return @odbc_free_result($result); |
} |
// }}} |
// {{{ numCols() |
/** |
* Gets the number of columns in a result set |
* |
* This method is not meant to be called directly. Use |
* DB_result::numCols() instead. It can't be declared "protected" |
* because DB_result is a separate object. |
* |
* @param resource $result PHP's query result resource |
* |
* @return int the number of columns. A DB_Error object on failure. |
* |
* @see DB_result::numCols() |
*/ |
function numCols($result) |
{ |
$cols = @odbc_num_fields($result); |
if (!$cols) { |
return $this->odbcRaiseError(); |
} |
return $cols; |
} |
// }}} |
// {{{ affectedRows() |
/** |
* Determines the number of rows affected by a data maniuplation query |
* |
* 0 is returned for queries that don't manipulate data. |
* |
* @return int the number of rows. A DB_Error object on failure. |
*/ |
function affectedRows() |
{ |
if (empty($this->affected)) { // In case of SELECT stms |
return 0; |
} |
$nrows = @odbc_num_rows($this->affected); |
if ($nrows == -1) { |
return $this->odbcRaiseError(); |
} |
return $nrows; |
} |
// }}} |
// {{{ numRows() |
/** |
* Gets the number of rows in a result set |
* |
* Not all ODBC drivers support this functionality. If they don't |
* a DB_Error object for DB_ERROR_UNSUPPORTED is returned. |
* |
* This method is not meant to be called directly. Use |
* DB_result::numRows() instead. It can't be declared "protected" |
* because DB_result is a separate object. |
* |
* @param resource $result PHP's query result resource |
* |
* @return int the number of rows. A DB_Error object on failure. |
* |
* @see DB_result::numRows() |
*/ |
function numRows($result) |
{ |
$nrows = @odbc_num_rows($result); |
if ($nrows == -1) { |
return $this->odbcRaiseError(DB_ERROR_UNSUPPORTED); |
} |
if ($nrows === false) { |
return $this->odbcRaiseError(); |
} |
return $nrows; |
} |
// }}} |
// {{{ quoteIdentifier() |
/** |
* Quotes a string so it can be safely used as a table or column name |
* |
* Use 'mssql' as the dbsyntax in the DB DSN only if you've unchecked |
* "Use ANSI quoted identifiers" when setting up the ODBC data source. |
* |
* @param string $str identifier name to be quoted |
* |
* @return string quoted identifier string |
* |
* @see DB_common::quoteIdentifier() |
* @since Method available since Release 1.6.0 |
*/ |
function quoteIdentifier($str) |
{ |
switch ($this->dsn['dbsyntax']) { |
case 'access': |
return '[' . $str . ']'; |
case 'mssql': |
case 'sybase': |
return '[' . str_replace(']', ']]', $str) . ']'; |
case 'mysql': |
case 'mysqli': |
return '`' . $str . '`'; |
default: |
return '"' . str_replace('"', '""', $str) . '"'; |
} |
} |
// }}} |
// {{{ quote() |
/** |
* @deprecated Deprecated in release 1.6.0 |
* @internal |
*/ |
function quote($str) |
{ |
return $this->quoteSmart($str); |
} |
// }}} |
// {{{ nextId() |
/** |
* Returns the next free id in a sequence |
* |
* @param string $seq_name name of the sequence |
* @param boolean $ondemand when true, the seqence is automatically |
* created if it does not exist |
* |
* @return int the next id number in the sequence. |
* A DB_Error object on failure. |
* |
* @see DB_common::nextID(), DB_common::getSequenceName(), |
* DB_odbc::createSequence(), DB_odbc::dropSequence() |
*/ |
function nextId($seq_name, $ondemand = true) |
{ |
$seqname = $this->getSequenceName($seq_name); |
$repeat = 0; |
do { |
$this->pushErrorHandling(PEAR_ERROR_RETURN); |
$result = $this->query("update ${seqname} set id = id + 1"); |
$this->popErrorHandling(); |
if ($ondemand && DB::isError($result) && |
$result->getCode() == DB_ERROR_NOSUCHTABLE) { |
$repeat = 1; |
$this->pushErrorHandling(PEAR_ERROR_RETURN); |
$result = $this->createSequence($seq_name); |
$this->popErrorHandling(); |
if (DB::isError($result)) { |
return $this->raiseError($result); |
} |
$result = $this->query("insert into ${seqname} (id) values(0)"); |
} else { |
$repeat = 0; |
} |
} while ($repeat); |
if (DB::isError($result)) { |
return $this->raiseError($result); |
} |
$result = $this->query("select id from ${seqname}"); |
if (DB::isError($result)) { |
return $result; |
} |
$row = $result->fetchRow(DB_FETCHMODE_ORDERED); |
if (DB::isError($row || !$row)) { |
return $row; |
} |
return $row[0]; |
} |
/** |
* Creates a new sequence |
* |
* @param string $seq_name name of the new sequence |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
* |
* @see DB_common::createSequence(), DB_common::getSequenceName(), |
* DB_odbc::nextID(), DB_odbc::dropSequence() |
*/ |
function createSequence($seq_name) |
{ |
return $this->query('CREATE TABLE ' |
. $this->getSequenceName($seq_name) |
. ' (id integer NOT NULL,' |
. ' PRIMARY KEY(id))'); |
} |
// }}} |
// {{{ dropSequence() |
/** |
* Deletes a sequence |
* |
* @param string $seq_name name of the sequence to be deleted |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
* |
* @see DB_common::dropSequence(), DB_common::getSequenceName(), |
* DB_odbc::nextID(), DB_odbc::createSequence() |
*/ |
function dropSequence($seq_name) |
{ |
return $this->query('DROP TABLE ' . $this->getSequenceName($seq_name)); |
} |
// }}} |
// {{{ autoCommit() |
/** |
* Enables or disables automatic commits |
* |
* @param bool $onoff true turns it on, false turns it off |
* |
* @return int DB_OK on success. A DB_Error object if the driver |
* doesn't support auto-committing transactions. |
*/ |
function autoCommit($onoff = false) |
{ |
if (!@odbc_autocommit($this->connection, $onoff)) { |
return $this->odbcRaiseError(); |
} |
return DB_OK; |
} |
// }}} |
// {{{ commit() |
/** |
* Commits the current transaction |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
*/ |
function commit() |
{ |
if (!@odbc_commit($this->connection)) { |
return $this->odbcRaiseError(); |
} |
return DB_OK; |
} |
// }}} |
// {{{ rollback() |
/** |
* Reverts the current transaction |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
*/ |
function rollback() |
{ |
if (!@odbc_rollback($this->connection)) { |
return $this->odbcRaiseError(); |
} |
return DB_OK; |
} |
// }}} |
// {{{ odbcRaiseError() |
/** |
* Produces a DB_Error object regarding the current problem |
* |
* @param int $errno if the error is being manually raised pass a |
* DB_ERROR* constant here. If this isn't passed |
* the error information gathered from the DBMS. |
* |
* @return object the DB_Error object |
* |
* @see DB_common::raiseError(), |
* DB_odbc::errorNative(), DB_common::errorCode() |
*/ |
function odbcRaiseError($errno = null) |
{ |
if ($errno === null) { |
switch ($this->dbsyntax) { |
case 'access': |
if ($this->options['portability'] & DB_PORTABILITY_ERRORS) { |
$this->errorcode_map['07001'] = DB_ERROR_NOSUCHFIELD; |
} else { |
// Doing this in case mode changes during runtime. |
$this->errorcode_map['07001'] = DB_ERROR_MISMATCH; |
} |
$native_code = odbc_error($this->connection); |
// S1000 is for "General Error." Let's be more specific. |
if ($native_code == 'S1000') { |
$errormsg = odbc_errormsg($this->connection); |
static $error_regexps; |
if (!isset($error_regexps)) { |
$error_regexps = array( |
'/includes related records.$/i' => DB_ERROR_CONSTRAINT, |
'/cannot contain a Null value/i' => DB_ERROR_CONSTRAINT_NOT_NULL, |
); |
} |
foreach ($error_regexps as $regexp => $code) { |
if (preg_match($regexp, $errormsg)) { |
return $this->raiseError($code, |
null, null, null, |
$native_code . ' ' . $errormsg); |
} |
} |
$errno = DB_ERROR; |
} else { |
$errno = $this->errorCode($native_code); |
} |
break; |
default: |
$errno = $this->errorCode(odbc_error($this->connection)); |
} |
} |
return $this->raiseError($errno, null, null, null, |
$this->errorNative()); |
} |
// }}} |
// {{{ errorNative() |
/** |
* Gets the DBMS' native error code and message produced by the last query |
* |
* @return string the DBMS' error code and message |
*/ |
function errorNative() |
{ |
if (!is_resource($this->connection)) { |
return @odbc_error() . ' ' . @odbc_errormsg(); |
} |
return @odbc_error($this->connection) . ' ' . @odbc_errormsg($this->connection); |
} |
// }}} |
// {{{ tableInfo() |
/** |
* Returns information about a table or a result set |
* |
* @param object|string $result DB_result object from a query or a |
* string containing the name of a table. |
* While this also accepts a query result |
* resource identifier, this behavior is |
* deprecated. |
* @param int $mode a valid tableInfo mode |
* |
* @return array an associative array with the information requested. |
* A DB_Error object on failure. |
* |
* @see DB_common::tableInfo() |
* @since Method available since Release 1.7.0 |
*/ |
function tableInfo($result, $mode = null) |
{ |
if (is_string($result)) { |
/* |
* Probably received a table name. |
* Create a result resource identifier. |
*/ |
$id = @odbc_exec($this->connection, "SELECT * FROM $result"); |
if (!$id) { |
return $this->odbcRaiseError(); |
} |
$got_string = true; |
} elseif (isset($result->result)) { |
/* |
* Probably received a result object. |
* Extract the result resource identifier. |
*/ |
$id = $result->result; |
$got_string = false; |
} else { |
/* |
* Probably received a result resource identifier. |
* Copy it. |
* Deprecated. Here for compatibility only. |
*/ |
$id = $result; |
$got_string = false; |
} |
if (!is_resource($id)) { |
return $this->odbcRaiseError(DB_ERROR_NEED_MORE_DATA); |
} |
if ($this->options['portability'] & DB_PORTABILITY_LOWERCASE) { |
$case_func = 'strtolower'; |
} else { |
$case_func = 'strval'; |
} |
$count = @odbc_num_fields($id); |
$res = array(); |
if ($mode) { |
$res['num_fields'] = $count; |
} |
for ($i = 0; $i < $count; $i++) { |
$col = $i + 1; |
$res[$i] = array( |
'table' => $got_string ? $case_func($result) : '', |
'name' => $case_func(@odbc_field_name($id, $col)), |
'type' => @odbc_field_type($id, $col), |
'len' => @odbc_field_len($id, $col), |
'flags' => '', |
); |
if ($mode & DB_TABLEINFO_ORDER) { |
$res['order'][$res[$i]['name']] = $i; |
} |
if ($mode & DB_TABLEINFO_ORDERTABLE) { |
$res['ordertable'][$res[$i]['table']][$res[$i]['name']] = $i; |
} |
} |
// free the result only if we were called on a table |
if ($got_string) { |
@odbc_free_result($id); |
} |
return $res; |
} |
// }}} |
// {{{ getSpecialQuery() |
/** |
* Obtains the query string needed for listing a given type of objects |
* |
* Thanks to symbol1@gmail.com and Philippe.Jausions@11abacus.com. |
* |
* @param string $type the kind of objects you want to retrieve |
* |
* @return string the list of objects requested |
* |
* @access protected |
* @see DB_common::getListOf() |
* @since Method available since Release 1.7.0 |
*/ |
function getSpecialQuery($type) |
{ |
switch ($type) { |
case 'databases': |
if (!function_exists('odbc_data_source')) { |
return null; |
} |
$res = @odbc_data_source($this->connection, SQL_FETCH_FIRST); |
if (is_array($res)) { |
$out = array($res['server']); |
while($res = @odbc_data_source($this->connection, |
SQL_FETCH_NEXT)) |
{ |
$out[] = $res['server']; |
} |
return $out; |
} else { |
return $this->odbcRaiseError(); |
} |
break; |
case 'tables': |
case 'schema.tables': |
$keep = 'TABLE'; |
break; |
case 'views': |
$keep = 'VIEW'; |
break; |
default: |
return null; |
} |
/* |
* Removing non-conforming items in the while loop rather than |
* in the odbc_tables() call because some backends choke on this: |
* odbc_tables($this->connection, '', '', '', 'TABLE') |
*/ |
$res = @odbc_tables($this->connection); |
if (!$res) { |
return $this->odbcRaiseError(); |
} |
$out = array(); |
while ($row = odbc_fetch_array($res)) { |
if ($row['TABLE_TYPE'] != $keep) { |
continue; |
} |
if ($type == 'schema.tables') { |
$out[] = $row['TABLE_SCHEM'] . '.' . $row['TABLE_NAME']; |
} else { |
$out[] = $row['TABLE_NAME']; |
} |
} |
return $out; |
} |
// }}} |
} |
/* |
* Local variables: |
* tab-width: 4 |
* c-basic-offset: 4 |
* End: |
*/ |
?> |
/branches/v1.0-menes/api/pear/DB/common.php |
---|
New file |
0,0 → 1,2157 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ |
/** |
* Contains the DB_common base class |
* |
* PHP versions 4 and 5 |
* |
* LICENSE: This source file is subject to version 3.0 of the PHP license |
* that is available through the world-wide-web at the following URI: |
* http://www.php.net/license/3_0.txt. If you did not receive a copy of |
* the PHP License and are unable to obtain it through the web, please |
* send a note to license@php.net so we can mail you a copy immediately. |
* |
* @category Database |
* @package DB |
* @author Stig Bakken <ssb@php.net> |
* @author Tomas V.V. Cox <cox@idecnet.com> |
* @author Daniel Convissor <danielc@php.net> |
* @copyright 1997-2005 The PHP Group |
* @license http://www.php.net/license/3_0.txt PHP License 3.0 |
* @version CVS: $Id: common.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $ |
* @link http://pear.php.net/package/DB |
*/ |
/** |
* Obtain the PEAR class so it can be extended from |
*/ |
require_once 'PEAR.php'; |
/** |
* DB_common is the base class from which each database driver class extends |
* |
* All common methods are declared here. If a given DBMS driver contains |
* a particular method, that method will overload the one here. |
* |
* @category Database |
* @package DB |
* @author Stig Bakken <ssb@php.net> |
* @author Tomas V.V. Cox <cox@idecnet.com> |
* @author Daniel Convissor <danielc@php.net> |
* @copyright 1997-2005 The PHP Group |
* @license http://www.php.net/license/3_0.txt PHP License 3.0 |
* @version Release: @package_version@ |
* @link http://pear.php.net/package/DB |
*/ |
class DB_common extends PEAR |
{ |
// {{{ properties |
/** |
* The current default fetch mode |
* @var integer |
*/ |
var $fetchmode = DB_FETCHMODE_ORDERED; |
/** |
* The name of the class into which results should be fetched when |
* DB_FETCHMODE_OBJECT is in effect |
* |
* @var string |
*/ |
var $fetchmode_object_class = 'stdClass'; |
/** |
* Was a connection present when the object was serialized()? |
* @var bool |
* @see DB_common::__sleep(), DB_common::__wake() |
*/ |
var $was_connected = null; |
/** |
* The most recently executed query |
* @var string |
*/ |
var $last_query = ''; |
/** |
* Run-time configuration options |
* |
* The 'optimize' option has been deprecated. Use the 'portability' |
* option instead. |
* |
* @var array |
* @see DB_common::setOption() |
*/ |
var $options = array( |
'result_buffering' => 500, |
'persistent' => false, |
'ssl' => false, |
'debug' => 0, |
'seqname_format' => '%s_seq', |
'autofree' => false, |
'portability' => DB_PORTABILITY_NONE, |
'optimize' => 'performance', // Deprecated. Use 'portability'. |
); |
/** |
* The parameters from the most recently executed query |
* @var array |
* @since Property available since Release 1.7.0 |
*/ |
var $last_parameters = array(); |
/** |
* The elements from each prepared statement |
* @var array |
*/ |
var $prepare_tokens = array(); |
/** |
* The data types of the various elements in each prepared statement |
* @var array |
*/ |
var $prepare_types = array(); |
/** |
* The prepared queries |
* @var array |
*/ |
var $prepared_queries = array(); |
// }}} |
// {{{ DB_common |
/** |
* This constructor calls <kbd>$this->PEAR('DB_Error')</kbd> |
* |
* @return void |
*/ |
function DB_common() |
{ |
$this->PEAR('DB_Error'); |
} |
// }}} |
// {{{ __sleep() |
/** |
* Automatically indicates which properties should be saved |
* when PHP's serialize() function is called |
* |
* @return array the array of properties names that should be saved |
*/ |
function __sleep() |
{ |
if ($this->connection) { |
// Don't disconnect(), people use serialize() for many reasons |
$this->was_connected = true; |
} else { |
$this->was_connected = false; |
} |
if (isset($this->autocommit)) { |
return array('autocommit', |
'dbsyntax', |
'dsn', |
'features', |
'fetchmode', |
'fetchmode_object_class', |
'options', |
'was_connected', |
); |
} else { |
return array('dbsyntax', |
'dsn', |
'features', |
'fetchmode', |
'fetchmode_object_class', |
'options', |
'was_connected', |
); |
} |
} |
// }}} |
// {{{ __wakeup() |
/** |
* Automatically reconnects to the database when PHP's unserialize() |
* function is called |
* |
* The reconnection attempt is only performed if the object was connected |
* at the time PHP's serialize() function was run. |
* |
* @return void |
*/ |
function __wakeup() |
{ |
if ($this->was_connected) { |
$this->connect($this->dsn, $this->options); |
} |
} |
// }}} |
// {{{ __toString() |
/** |
* Automatic string conversion for PHP 5 |
* |
* @return string a string describing the current PEAR DB object |
* |
* @since Method available since Release 1.7.0 |
*/ |
function __toString() |
{ |
$info = strtolower(get_class($this)); |
$info .= ': (phptype=' . $this->phptype . |
', dbsyntax=' . $this->dbsyntax . |
')'; |
if ($this->connection) { |
$info .= ' [connected]'; |
} |
return $info; |
} |
// }}} |
// {{{ toString() |
/** |
* DEPRECATED: String conversion method |
* |
* @return string a string describing the current PEAR DB object |
* |
* @deprecated Method deprecated in Release 1.7.0 |
*/ |
function toString() |
{ |
return $this->__toString(); |
} |
// }}} |
// {{{ quoteString() |
/** |
* DEPRECATED: Quotes a string so it can be safely used within string |
* delimiters in a query |
* |
* @param string $string the string to be quoted |
* |
* @return string the quoted string |
* |
* @see DB_common::quoteSmart(), DB_common::escapeSimple() |
* @deprecated Method deprecated some time before Release 1.2 |
*/ |
function quoteString($string) |
{ |
$string = $this->quote($string); |
if ($string{0} == "'") { |
return substr($string, 1, -1); |
} |
return $string; |
} |
// }}} |
// {{{ quote() |
/** |
* DEPRECATED: Quotes a string so it can be safely used in a query |
* |
* @param string $string the string to quote |
* |
* @return string the quoted string or the string <samp>NULL</samp> |
* if the value submitted is <kbd>null</kbd>. |
* |
* @see DB_common::quoteSmart(), DB_common::escapeSimple() |
* @deprecated Deprecated in release 1.6.0 |
*/ |
function quote($string = null) |
{ |
return ($string === null) ? 'NULL' |
: "'" . str_replace("'", "''", $string) . "'"; |
} |
// }}} |
// {{{ quoteIdentifier() |
/** |
* Quotes a string so it can be safely used as a table or column name |
* |
* Delimiting style depends on which database driver is being used. |
* |
* NOTE: just because you CAN use delimited identifiers doesn't mean |
* you SHOULD use them. In general, they end up causing way more |
* problems than they solve. |
* |
* Portability is broken by using the following characters inside |
* delimited identifiers: |
* + backtick (<kbd>`</kbd>) -- due to MySQL |
* + double quote (<kbd>"</kbd>) -- due to Oracle |
* + brackets (<kbd>[</kbd> or <kbd>]</kbd>) -- due to Access |
* |
* Delimited identifiers are known to generally work correctly under |
* the following drivers: |
* + mssql |
* + mysql |
* + mysqli |
* + oci8 |
* + odbc(access) |
* + odbc(db2) |
* + pgsql |
* + sqlite |
* + sybase (must execute <kbd>set quoted_identifier on</kbd> sometime |
* prior to use) |
* |
* InterBase doesn't seem to be able to use delimited identifiers |
* via PHP 4. They work fine under PHP 5. |
* |
* @param string $str the identifier name to be quoted |
* |
* @return string the quoted identifier |
* |
* @since Method available since Release 1.6.0 |
*/ |
function quoteIdentifier($str) |
{ |
return '"' . str_replace('"', '""', $str) . '"'; |
} |
// }}} |
// {{{ quoteSmart() |
/** |
* Formats input so it can be safely used in a query |
* |
* The output depends on the PHP data type of input and the database |
* type being used. |
* |
* @param mixed $in the data to be formatted |
* |
* @return mixed the formatted data. The format depends on the input's |
* PHP type: |
* <ul> |
* <li> |
* <kbd>input</kbd> -> <samp>returns</samp> |
* </li> |
* <li> |
* <kbd>null</kbd> -> the string <samp>NULL</samp> |
* </li> |
* <li> |
* <kbd>integer</kbd> or <kbd>double</kbd> -> the unquoted number |
* </li> |
* <li> |
* <kbd>bool</kbd> -> output depends on the driver in use |
* Most drivers return integers: <samp>1</samp> if |
* <kbd>true</kbd> or <samp>0</samp> if |
* <kbd>false</kbd>. |
* Some return strings: <samp>TRUE</samp> if |
* <kbd>true</kbd> or <samp>FALSE</samp> if |
* <kbd>false</kbd>. |
* Finally one returns strings: <samp>T</samp> if |
* <kbd>true</kbd> or <samp>F</samp> if |
* <kbd>false</kbd>. Here is a list of each DBMS, |
* the values returned and the suggested column type: |
* <ul> |
* <li> |
* <kbd>dbase</kbd> -> <samp>T/F</samp> |
* (<kbd>Logical</kbd>) |
* </li> |
* <li> |
* <kbd>fbase</kbd> -> <samp>TRUE/FALSE</samp> |
* (<kbd>BOOLEAN</kbd>) |
* </li> |
* <li> |
* <kbd>ibase</kbd> -> <samp>1/0</samp> |
* (<kbd>SMALLINT</kbd>) [1] |
* </li> |
* <li> |
* <kbd>ifx</kbd> -> <samp>1/0</samp> |
* (<kbd>SMALLINT</kbd>) [1] |
* </li> |
* <li> |
* <kbd>msql</kbd> -> <samp>1/0</samp> |
* (<kbd>INTEGER</kbd>) |
* </li> |
* <li> |
* <kbd>mssql</kbd> -> <samp>1/0</samp> |
* (<kbd>BIT</kbd>) |
* </li> |
* <li> |
* <kbd>mysql</kbd> -> <samp>1/0</samp> |
* (<kbd>TINYINT(1)</kbd>) |
* </li> |
* <li> |
* <kbd>mysqli</kbd> -> <samp>1/0</samp> |
* (<kbd>TINYINT(1)</kbd>) |
* </li> |
* <li> |
* <kbd>oci8</kbd> -> <samp>1/0</samp> |
* (<kbd>NUMBER(1)</kbd>) |
* </li> |
* <li> |
* <kbd>odbc</kbd> -> <samp>1/0</samp> |
* (<kbd>SMALLINT</kbd>) [1] |
* </li> |
* <li> |
* <kbd>pgsql</kbd> -> <samp>TRUE/FALSE</samp> |
* (<kbd>BOOLEAN</kbd>) |
* </li> |
* <li> |
* <kbd>sqlite</kbd> -> <samp>1/0</samp> |
* (<kbd>INTEGER</kbd>) |
* </li> |
* <li> |
* <kbd>sybase</kbd> -> <samp>1/0</samp> |
* (<kbd>TINYINT(1)</kbd>) |
* </li> |
* </ul> |
* [1] Accommodate the lowest common denominator because not all |
* versions of have <kbd>BOOLEAN</kbd>. |
* </li> |
* <li> |
* other (including strings and numeric strings) -> |
* the data with single quotes escaped by preceeding |
* single quotes, backslashes are escaped by preceeding |
* backslashes, then the whole string is encapsulated |
* between single quotes |
* </li> |
* </ul> |
* |
* @see DB_common::escapeSimple() |
* @since Method available since Release 1.6.0 |
*/ |
function quoteSmart($in) |
{ |
if (is_int($in) || is_double($in)) { |
return $in; |
} elseif (is_bool($in)) { |
return $in ? 1 : 0; |
} elseif (is_null($in)) { |
return 'NULL'; |
} else { |
return "'" . $this->escapeSimple($in) . "'"; |
} |
} |
// }}} |
// {{{ escapeSimple() |
/** |
* Escapes a string according to the current DBMS's standards |
* |
* In SQLite, this makes things safe for inserts/updates, but may |
* cause problems when performing text comparisons against columns |
* containing binary data. See the |
* {@link http://php.net/sqlite_escape_string PHP manual} for more info. |
* |
* @param string $str the string to be escaped |
* |
* @return string the escaped string |
* |
* @see DB_common::quoteSmart() |
* @since Method available since Release 1.6.0 |
*/ |
function escapeSimple($str) |
{ |
return str_replace("'", "''", $str); |
} |
// }}} |
// {{{ provides() |
/** |
* Tells whether the present driver supports a given feature |
* |
* @param string $feature the feature you're curious about |
* |
* @return bool whether this driver supports $feature |
*/ |
function provides($feature) |
{ |
return $this->features[$feature]; |
} |
// }}} |
// {{{ setFetchMode() |
/** |
* Sets the fetch mode that should be used by default for query results |
* |
* @param integer $fetchmode DB_FETCHMODE_ORDERED, DB_FETCHMODE_ASSOC |
* or DB_FETCHMODE_OBJECT |
* @param string $object_class the class name of the object to be returned |
* by the fetch methods when the |
* DB_FETCHMODE_OBJECT mode is selected. |
* If no class is specified by default a cast |
* to object from the assoc array row will be |
* done. There is also the posibility to use |
* and extend the 'DB_row' class. |
* |
* @see DB_FETCHMODE_ORDERED, DB_FETCHMODE_ASSOC, DB_FETCHMODE_OBJECT |
*/ |
function setFetchMode($fetchmode, $object_class = 'stdClass') |
{ |
switch ($fetchmode) { |
case DB_FETCHMODE_OBJECT: |
$this->fetchmode_object_class = $object_class; |
case DB_FETCHMODE_ORDERED: |
case DB_FETCHMODE_ASSOC: |
$this->fetchmode = $fetchmode; |
break; |
default: |
return $this->raiseError('invalid fetchmode mode'); |
} |
} |
// }}} |
// {{{ setOption() |
/** |
* Sets run-time configuration options for PEAR DB |
* |
* Options, their data types, default values and description: |
* <ul> |
* <li> |
* <var>autofree</var> <kbd>boolean</kbd> = <samp>false</samp> |
* <br />should results be freed automatically when there are no |
* more rows? |
* </li><li> |
* <var>result_buffering</var> <kbd>integer</kbd> = <samp>500</samp> |
* <br />how many rows of the result set should be buffered? |
* <br />In mysql: mysql_unbuffered_query() is used instead of |
* mysql_query() if this value is 0. (Release 1.7.0) |
* <br />In oci8: this value is passed to ocisetprefetch(). |
* (Release 1.7.0) |
* </li><li> |
* <var>debug</var> <kbd>integer</kbd> = <samp>0</samp> |
* <br />debug level |
* </li><li> |
* <var>persistent</var> <kbd>boolean</kbd> = <samp>false</samp> |
* <br />should the connection be persistent? |
* </li><li> |
* <var>portability</var> <kbd>integer</kbd> = <samp>DB_PORTABILITY_NONE</samp> |
* <br />portability mode constant (see below) |
* </li><li> |
* <var>seqname_format</var> <kbd>string</kbd> = <samp>%s_seq</samp> |
* <br />the sprintf() format string used on sequence names. This |
* format is applied to sequence names passed to |
* createSequence(), nextID() and dropSequence(). |
* </li><li> |
* <var>ssl</var> <kbd>boolean</kbd> = <samp>false</samp> |
* <br />use ssl to connect? |
* </li> |
* </ul> |
* |
* ----------------------------------------- |
* |
* PORTABILITY MODES |
* |
* These modes are bitwised, so they can be combined using <kbd>|</kbd> |
* and removed using <kbd>^</kbd>. See the examples section below on how |
* to do this. |
* |
* <samp>DB_PORTABILITY_NONE</samp> |
* turn off all portability features |
* |
* This mode gets automatically turned on if the deprecated |
* <var>optimize</var> option gets set to <samp>performance</samp>. |
* |
* |
* <samp>DB_PORTABILITY_LOWERCASE</samp> |
* convert names of tables and fields to lower case when using |
* <kbd>get*()</kbd>, <kbd>fetch*()</kbd> and <kbd>tableInfo()</kbd> |
* |
* This mode gets automatically turned on in the following databases |
* if the deprecated option <var>optimize</var> gets set to |
* <samp>portability</samp>: |
* + oci8 |
* |
* |
* <samp>DB_PORTABILITY_RTRIM</samp> |
* right trim the data output by <kbd>get*()</kbd> <kbd>fetch*()</kbd> |
* |
* |
* <samp>DB_PORTABILITY_DELETE_COUNT</samp> |
* force reporting the number of rows deleted |
* |
* Some DBMS's don't count the number of rows deleted when performing |
* simple <kbd>DELETE FROM tablename</kbd> queries. This portability |
* mode tricks such DBMS's into telling the count by adding |
* <samp>WHERE 1=1</samp> to the end of <kbd>DELETE</kbd> queries. |
* |
* This mode gets automatically turned on in the following databases |
* if the deprecated option <var>optimize</var> gets set to |
* <samp>portability</samp>: |
* + fbsql |
* + mysql |
* + mysqli |
* + sqlite |
* |
* |
* <samp>DB_PORTABILITY_NUMROWS</samp> |
* enable hack that makes <kbd>numRows()</kbd> work in Oracle |
* |
* This mode gets automatically turned on in the following databases |
* if the deprecated option <var>optimize</var> gets set to |
* <samp>portability</samp>: |
* + oci8 |
* |
* |
* <samp>DB_PORTABILITY_ERRORS</samp> |
* makes certain error messages in certain drivers compatible |
* with those from other DBMS's |
* |
* + mysql, mysqli: change unique/primary key constraints |
* DB_ERROR_ALREADY_EXISTS -> DB_ERROR_CONSTRAINT |
* |
* + odbc(access): MS's ODBC driver reports 'no such field' as code |
* 07001, which means 'too few parameters.' When this option is on |
* that code gets mapped to DB_ERROR_NOSUCHFIELD. |
* DB_ERROR_MISMATCH -> DB_ERROR_NOSUCHFIELD |
* |
* <samp>DB_PORTABILITY_NULL_TO_EMPTY</samp> |
* convert null values to empty strings in data output by get*() and |
* fetch*(). Needed because Oracle considers empty strings to be null, |
* while most other DBMS's know the difference between empty and null. |
* |
* |
* <samp>DB_PORTABILITY_ALL</samp> |
* turn on all portability features |
* |
* ----------------------------------------- |
* |
* Example 1. Simple setOption() example |
* <code> |
* $db->setOption('autofree', true); |
* </code> |
* |
* Example 2. Portability for lowercasing and trimming |
* <code> |
* $db->setOption('portability', |
* DB_PORTABILITY_LOWERCASE | DB_PORTABILITY_RTRIM); |
* </code> |
* |
* Example 3. All portability options except trimming |
* <code> |
* $db->setOption('portability', |
* DB_PORTABILITY_ALL ^ DB_PORTABILITY_RTRIM); |
* </code> |
* |
* @param string $option option name |
* @param mixed $value value for the option |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
* |
* @see DB_common::$options |
*/ |
function setOption($option, $value) |
{ |
if (isset($this->options[$option])) { |
$this->options[$option] = $value; |
/* |
* Backwards compatibility check for the deprecated 'optimize' |
* option. Done here in case settings change after connecting. |
*/ |
if ($option == 'optimize') { |
if ($value == 'portability') { |
switch ($this->phptype) { |
case 'oci8': |
$this->options['portability'] = |
DB_PORTABILITY_LOWERCASE | |
DB_PORTABILITY_NUMROWS; |
break; |
case 'fbsql': |
case 'mysql': |
case 'mysqli': |
case 'sqlite': |
$this->options['portability'] = |
DB_PORTABILITY_DELETE_COUNT; |
break; |
} |
} else { |
$this->options['portability'] = DB_PORTABILITY_NONE; |
} |
} |
return DB_OK; |
} |
return $this->raiseError("unknown option $option"); |
} |
// }}} |
// {{{ getOption() |
/** |
* Returns the value of an option |
* |
* @param string $option the option name you're curious about |
* |
* @return mixed the option's value |
*/ |
function getOption($option) |
{ |
if (isset($this->options[$option])) { |
return $this->options[$option]; |
} |
return $this->raiseError("unknown option $option"); |
} |
// }}} |
// {{{ prepare() |
/** |
* Prepares a query for multiple execution with execute() |
* |
* Creates a query that can be run multiple times. Each time it is run, |
* the placeholders, if any, will be replaced by the contents of |
* execute()'s $data argument. |
* |
* Three types of placeholders can be used: |
* + <kbd>?</kbd> scalar value (i.e. strings, integers). The system |
* will automatically quote and escape the data. |
* + <kbd>!</kbd> value is inserted 'as is' |
* + <kbd>&</kbd> requires a file name. The file's contents get |
* inserted into the query (i.e. saving binary |
* data in a db) |
* |
* Example 1. |
* <code> |
* $sth = $db->prepare('INSERT INTO tbl (a, b, c) VALUES (?, !, &)'); |
* $data = array( |
* "John's text", |
* "'it''s good'", |
* 'filename.txt' |
* ); |
* $res = $db->execute($sth, $data); |
* </code> |
* |
* Use backslashes to escape placeholder characters if you don't want |
* them to be interpreted as placeholders: |
* <pre> |
* "UPDATE foo SET col=? WHERE col='over \& under'" |
* </pre> |
* |
* With some database backends, this is emulated. |
* |
* {@internal ibase and oci8 have their own prepare() methods.}} |
* |
* @param string $query the query to be prepared |
* |
* @return mixed DB statement resource on success. A DB_Error object |
* on failure. |
* |
* @see DB_common::execute() |
*/ |
function prepare($query) |
{ |
$tokens = preg_split('/((?<!\\\)[&?!])/', $query, -1, |
PREG_SPLIT_DELIM_CAPTURE); |
$token = 0; |
$types = array(); |
$newtokens = array(); |
foreach ($tokens as $val) { |
switch ($val) { |
case '?': |
$types[$token++] = DB_PARAM_SCALAR; |
break; |
case '&': |
$types[$token++] = DB_PARAM_OPAQUE; |
break; |
case '!': |
$types[$token++] = DB_PARAM_MISC; |
break; |
default: |
$newtokens[] = preg_replace('/\\\([&?!])/', "\\1", $val); |
} |
} |
$this->prepare_tokens[] = &$newtokens; |
end($this->prepare_tokens); |
$k = key($this->prepare_tokens); |
$this->prepare_types[$k] = $types; |
$this->prepared_queries[$k] = implode(' ', $newtokens); |
return $k; |
} |
// }}} |
// {{{ autoPrepare() |
/** |
* Automaticaly generates an insert or update query and pass it to prepare() |
* |
* @param string $table the table name |
* @param array $table_fields the array of field names |
* @param int $mode a type of query to make: |
* DB_AUTOQUERY_INSERT or DB_AUTOQUERY_UPDATE |
* @param string $where for update queries: the WHERE clause to |
* append to the SQL statement. Don't |
* include the "WHERE" keyword. |
* |
* @return resource the query handle |
* |
* @uses DB_common::prepare(), DB_common::buildManipSQL() |
*/ |
function autoPrepare($table, $table_fields, $mode = DB_AUTOQUERY_INSERT, |
$where = false) |
{ |
$query = $this->buildManipSQL($table, $table_fields, $mode, $where); |
if (DB::isError($query)) { |
return $query; |
} |
return $this->prepare($query); |
} |
// }}} |
// {{{ autoExecute() |
/** |
* Automaticaly generates an insert or update query and call prepare() |
* and execute() with it |
* |
* @param string $table the table name |
* @param array $fields_values the associative array where $key is a |
* field name and $value its value |
* @param int $mode a type of query to make: |
* DB_AUTOQUERY_INSERT or DB_AUTOQUERY_UPDATE |
* @param string $where for update queries: the WHERE clause to |
* append to the SQL statement. Don't |
* include the "WHERE" keyword. |
* |
* @return mixed a new DB_result object for successful SELECT queries |
* or DB_OK for successul data manipulation queries. |
* A DB_Error object on failure. |
* |
* @uses DB_common::autoPrepare(), DB_common::execute() |
*/ |
function autoExecute($table, $fields_values, $mode = DB_AUTOQUERY_INSERT, |
$where = false) |
{ |
$sth = $this->autoPrepare($table, array_keys($fields_values), $mode, |
$where); |
if (DB::isError($sth)) { |
return $sth; |
} |
$ret =& $this->execute($sth, array_values($fields_values)); |
$this->freePrepared($sth); |
return $ret; |
} |
// }}} |
// {{{ buildManipSQL() |
/** |
* Produces an SQL query string for autoPrepare() |
* |
* Example: |
* <pre> |
* buildManipSQL('table_sql', array('field1', 'field2', 'field3'), |
* DB_AUTOQUERY_INSERT); |
* </pre> |
* |
* That returns |
* <samp> |
* INSERT INTO table_sql (field1,field2,field3) VALUES (?,?,?) |
* </samp> |
* |
* NOTES: |
* - This belongs more to a SQL Builder class, but this is a simple |
* facility. |
* - Be carefull! If you don't give a $where param with an UPDATE |
* query, all the records of the table will be updated! |
* |
* @param string $table the table name |
* @param array $table_fields the array of field names |
* @param int $mode a type of query to make: |
* DB_AUTOQUERY_INSERT or DB_AUTOQUERY_UPDATE |
* @param string $where for update queries: the WHERE clause to |
* append to the SQL statement. Don't |
* include the "WHERE" keyword. |
* |
* @return string the sql query for autoPrepare() |
*/ |
function buildManipSQL($table, $table_fields, $mode, $where = false) |
{ |
if (count($table_fields) == 0) { |
return $this->raiseError(DB_ERROR_NEED_MORE_DATA); |
} |
$first = true; |
switch ($mode) { |
case DB_AUTOQUERY_INSERT: |
$values = ''; |
$names = ''; |
foreach ($table_fields as $value) { |
if ($first) { |
$first = false; |
} else { |
$names .= ','; |
$values .= ','; |
} |
$names .= $value; |
$values .= '?'; |
} |
return "INSERT INTO $table ($names) VALUES ($values)"; |
case DB_AUTOQUERY_UPDATE: |
$set = ''; |
foreach ($table_fields as $value) { |
if ($first) { |
$first = false; |
} else { |
$set .= ','; |
} |
$set .= "$value = ?"; |
} |
$sql = "UPDATE $table SET $set"; |
if ($where) { |
$sql .= " WHERE $where"; |
} |
return $sql; |
default: |
return $this->raiseError(DB_ERROR_SYNTAX); |
} |
} |
// }}} |
// {{{ execute() |
/** |
* Executes a DB statement prepared with prepare() |
* |
* Example 1. |
* <code> |
* $sth = $db->prepare('INSERT INTO tbl (a, b, c) VALUES (?, !, &)'); |
* $data = array( |
* "John's text", |
* "'it''s good'", |
* 'filename.txt' |
* ); |
* $res =& $db->execute($sth, $data); |
* </code> |
* |
* @param resource $stmt a DB statement resource returned from prepare() |
* @param mixed $data array, string or numeric data to be used in |
* execution of the statement. Quantity of items |
* passed must match quantity of placeholders in |
* query: meaning 1 placeholder for non-array |
* parameters or 1 placeholder per array element. |
* |
* @return mixed a new DB_result object for successful SELECT queries |
* or DB_OK for successul data manipulation queries. |
* A DB_Error object on failure. |
* |
* {@internal ibase and oci8 have their own execute() methods.}} |
* |
* @see DB_common::prepare() |
*/ |
function &execute($stmt, $data = array()) |
{ |
$realquery = $this->executeEmulateQuery($stmt, $data); |
if (DB::isError($realquery)) { |
return $realquery; |
} |
$result = $this->simpleQuery($realquery); |
if ($result === DB_OK || DB::isError($result)) { |
return $result; |
} else { |
$tmp =& new DB_result($this, $result); |
return $tmp; |
} |
} |
// }}} |
// {{{ executeEmulateQuery() |
/** |
* Emulates executing prepared statements if the DBMS not support them |
* |
* @param resource $stmt a DB statement resource returned from execute() |
* @param mixed $data array, string or numeric data to be used in |
* execution of the statement. Quantity of items |
* passed must match quantity of placeholders in |
* query: meaning 1 placeholder for non-array |
* parameters or 1 placeholder per array element. |
* |
* @return mixed a string containing the real query run when emulating |
* prepare/execute. A DB_Error object on failure. |
* |
* @access protected |
* @see DB_common::execute() |
*/ |
function executeEmulateQuery($stmt, $data = array()) |
{ |
$stmt = (int)$stmt; |
$data = (array)$data; |
$this->last_parameters = $data; |
if (count($this->prepare_types[$stmt]) != count($data)) { |
$this->last_query = $this->prepared_queries[$stmt]; |
return $this->raiseError(DB_ERROR_MISMATCH); |
} |
$realquery = $this->prepare_tokens[$stmt][0]; |
$i = 0; |
foreach ($data as $value) { |
if ($this->prepare_types[$stmt][$i] == DB_PARAM_SCALAR) { |
$realquery .= $this->quoteSmart($value); |
} elseif ($this->prepare_types[$stmt][$i] == DB_PARAM_OPAQUE) { |
$fp = @fopen($value, 'rb'); |
if (!$fp) { |
return $this->raiseError(DB_ERROR_ACCESS_VIOLATION); |
} |
$realquery .= $this->quoteSmart(fread($fp, filesize($value))); |
fclose($fp); |
} else { |
$realquery .= $value; |
} |
$realquery .= $this->prepare_tokens[$stmt][++$i]; |
} |
return $realquery; |
} |
// }}} |
// {{{ executeMultiple() |
/** |
* Performs several execute() calls on the same statement handle |
* |
* $data must be an array indexed numerically |
* from 0, one execute call is done for every "row" in the array. |
* |
* If an error occurs during execute(), executeMultiple() does not |
* execute the unfinished rows, but rather returns that error. |
* |
* @param resource $stmt query handle from prepare() |
* @param array $data numeric array containing the |
* data to insert into the query |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
* |
* @see DB_common::prepare(), DB_common::execute() |
*/ |
function executeMultiple($stmt, $data) |
{ |
foreach ($data as $value) { |
$res =& $this->execute($stmt, $value); |
if (DB::isError($res)) { |
return $res; |
} |
} |
return DB_OK; |
} |
// }}} |
// {{{ freePrepared() |
/** |
* Frees the internal resources associated with a prepared query |
* |
* @param resource $stmt the prepared statement's PHP resource |
* @param bool $free_resource should the PHP resource be freed too? |
* Use false if you need to get data |
* from the result set later. |
* |
* @return bool TRUE on success, FALSE if $result is invalid |
* |
* @see DB_common::prepare() |
*/ |
function freePrepared($stmt, $free_resource = true) |
{ |
$stmt = (int)$stmt; |
if (isset($this->prepare_tokens[$stmt])) { |
unset($this->prepare_tokens[$stmt]); |
unset($this->prepare_types[$stmt]); |
unset($this->prepared_queries[$stmt]); |
return true; |
} |
return false; |
} |
// }}} |
// {{{ modifyQuery() |
/** |
* Changes a query string for various DBMS specific reasons |
* |
* It is defined here to ensure all drivers have this method available. |
* |
* @param string $query the query string to modify |
* |
* @return string the modified query string |
* |
* @access protected |
* @see DB_mysql::modifyQuery(), DB_oci8::modifyQuery(), |
* DB_sqlite::modifyQuery() |
*/ |
function modifyQuery($query) |
{ |
return $query; |
} |
// }}} |
// {{{ modifyLimitQuery() |
/** |
* Adds LIMIT clauses to a query string according to current DBMS standards |
* |
* It is defined here to assure that all implementations |
* have this method defined. |
* |
* @param string $query the query to modify |
* @param int $from the row to start to fetching (0 = the first row) |
* @param int $count the numbers of rows to fetch |
* @param mixed $params array, string or numeric data to be used in |
* execution of the statement. Quantity of items |
* passed must match quantity of placeholders in |
* query: meaning 1 placeholder for non-array |
* parameters or 1 placeholder per array element. |
* |
* @return string the query string with LIMIT clauses added |
* |
* @access protected |
*/ |
function modifyLimitQuery($query, $from, $count, $params = array()) |
{ |
return $query; |
} |
// }}} |
// {{{ query() |
/** |
* Sends a query to the database server |
* |
* The query string can be either a normal statement to be sent directly |
* to the server OR if <var>$params</var> are passed the query can have |
* placeholders and it will be passed through prepare() and execute(). |
* |
* @param string $query the SQL query or the statement to prepare |
* @param mixed $params array, string or numeric data to be used in |
* execution of the statement. Quantity of items |
* passed must match quantity of placeholders in |
* query: meaning 1 placeholder for non-array |
* parameters or 1 placeholder per array element. |
* |
* @return mixed a new DB_result object for successful SELECT queries |
* or DB_OK for successul data manipulation queries. |
* A DB_Error object on failure. |
* |
* @see DB_result, DB_common::prepare(), DB_common::execute() |
*/ |
function &query($query, $params = array()) |
{ |
if (sizeof($params) > 0) { |
$sth = $this->prepare($query); |
if (DB::isError($sth)) { |
return $sth; |
} |
$ret =& $this->execute($sth, $params); |
$this->freePrepared($sth, false); |
return $ret; |
} else { |
$this->last_parameters = array(); |
$result = $this->simpleQuery($query); |
if ($result === DB_OK || DB::isError($result)) { |
return $result; |
} else { |
$tmp =& new DB_result($this, $result); |
return $tmp; |
} |
} |
} |
// }}} |
// {{{ limitQuery() |
/** |
* Generates and executes a LIMIT query |
* |
* @param string $query the query |
* @param intr $from the row to start to fetching (0 = the first row) |
* @param int $count the numbers of rows to fetch |
* @param mixed $params array, string or numeric data to be used in |
* execution of the statement. Quantity of items |
* passed must match quantity of placeholders in |
* query: meaning 1 placeholder for non-array |
* parameters or 1 placeholder per array element. |
* |
* @return mixed a new DB_result object for successful SELECT queries |
* or DB_OK for successul data manipulation queries. |
* A DB_Error object on failure. |
*/ |
function &limitQuery($query, $from, $count, $params = array()) |
{ |
$query = $this->modifyLimitQuery($query, $from, $count, $params); |
if (DB::isError($query)){ |
return $query; |
} |
$result =& $this->query($query, $params); |
if (is_a($result, 'DB_result')) { |
$result->setOption('limit_from', $from); |
$result->setOption('limit_count', $count); |
} |
return $result; |
} |
// }}} |
// {{{ getOne() |
/** |
* Fetches the first column of the first row from a query result |
* |
* Takes care of doing the query and freeing the results when finished. |
* |
* @param string $query the SQL query |
* @param mixed $params array, string or numeric data to be used in |
* execution of the statement. Quantity of items |
* passed must match quantity of placeholders in |
* query: meaning 1 placeholder for non-array |
* parameters or 1 placeholder per array element. |
* |
* @return mixed the returned value of the query. |
* A DB_Error object on failure. |
*/ |
function &getOne($query, $params = array()) |
{ |
$params = (array)$params; |
// modifyLimitQuery() would be nice here, but it causes BC issues |
if (sizeof($params) > 0) { |
$sth = $this->prepare($query); |
if (DB::isError($sth)) { |
return $sth; |
} |
$res =& $this->execute($sth, $params); |
$this->freePrepared($sth); |
} else { |
$res =& $this->query($query); |
} |
if (DB::isError($res)) { |
return $res; |
} |
$err = $res->fetchInto($row, DB_FETCHMODE_ORDERED); |
$res->free(); |
if ($err !== DB_OK) { |
return $err; |
} |
return $row[0]; |
} |
// }}} |
// {{{ getRow() |
/** |
* Fetches the first row of data returned from a query result |
* |
* Takes care of doing the query and freeing the results when finished. |
* |
* @param string $query the SQL query |
* @param mixed $params array, string or numeric data to be used in |
* execution of the statement. Quantity of items |
* passed must match quantity of placeholders in |
* query: meaning 1 placeholder for non-array |
* parameters or 1 placeholder per array element. |
* @param int $fetchmode the fetch mode to use |
* |
* @return array the first row of results as an array. |
* A DB_Error object on failure. |
*/ |
function &getRow($query, $params = array(), |
$fetchmode = DB_FETCHMODE_DEFAULT) |
{ |
// compat check, the params and fetchmode parameters used to |
// have the opposite order |
if (!is_array($params)) { |
if (is_array($fetchmode)) { |
if ($params === null) { |
$tmp = DB_FETCHMODE_DEFAULT; |
} else { |
$tmp = $params; |
} |
$params = $fetchmode; |
$fetchmode = $tmp; |
} elseif ($params !== null) { |
$fetchmode = $params; |
$params = array(); |
} |
} |
// modifyLimitQuery() would be nice here, but it causes BC issues |
if (sizeof($params) > 0) { |
$sth = $this->prepare($query); |
if (DB::isError($sth)) { |
return $sth; |
} |
$res =& $this->execute($sth, $params); |
$this->freePrepared($sth); |
} else { |
$res =& $this->query($query); |
} |
if (DB::isError($res)) { |
return $res; |
} |
$err = $res->fetchInto($row, $fetchmode); |
$res->free(); |
if ($err !== DB_OK) { |
return $err; |
} |
return $row; |
} |
// }}} |
// {{{ getCol() |
/** |
* Fetches a single column from a query result and returns it as an |
* indexed array |
* |
* @param string $query the SQL query |
* @param mixed $col which column to return (integer [column number, |
* starting at 0] or string [column name]) |
* @param mixed $params array, string or numeric data to be used in |
* execution of the statement. Quantity of items |
* passed must match quantity of placeholders in |
* query: meaning 1 placeholder for non-array |
* parameters or 1 placeholder per array element. |
* |
* @return array the results as an array. A DB_Error object on failure. |
* |
* @see DB_common::query() |
*/ |
function &getCol($query, $col = 0, $params = array()) |
{ |
$params = (array)$params; |
if (sizeof($params) > 0) { |
$sth = $this->prepare($query); |
if (DB::isError($sth)) { |
return $sth; |
} |
$res =& $this->execute($sth, $params); |
$this->freePrepared($sth); |
} else { |
$res =& $this->query($query); |
} |
if (DB::isError($res)) { |
return $res; |
} |
$fetchmode = is_int($col) ? DB_FETCHMODE_ORDERED : DB_FETCHMODE_ASSOC; |
if (!is_array($row = $res->fetchRow($fetchmode))) { |
$ret = array(); |
} else { |
if (!array_key_exists($col, $row)) { |
$ret =& $this->raiseError(DB_ERROR_NOSUCHFIELD); |
} else { |
$ret = array($row[$col]); |
while (is_array($row = $res->fetchRow($fetchmode))) { |
$ret[] = $row[$col]; |
} |
} |
} |
$res->free(); |
if (DB::isError($row)) { |
$ret = $row; |
} |
return $ret; |
} |
// }}} |
// {{{ getAssoc() |
/** |
* Fetches an entire query result and returns it as an |
* associative array using the first column as the key |
* |
* If the result set contains more than two columns, the value |
* will be an array of the values from column 2-n. If the result |
* set contains only two columns, the returned value will be a |
* scalar with the value of the second column (unless forced to an |
* array with the $force_array parameter). A DB error code is |
* returned on errors. If the result set contains fewer than two |
* columns, a DB_ERROR_TRUNCATED error is returned. |
* |
* For example, if the table "mytable" contains: |
* |
* <pre> |
* ID TEXT DATE |
* -------------------------------- |
* 1 'one' 944679408 |
* 2 'two' 944679408 |
* 3 'three' 944679408 |
* </pre> |
* |
* Then the call getAssoc('SELECT id,text FROM mytable') returns: |
* <pre> |
* array( |
* '1' => 'one', |
* '2' => 'two', |
* '3' => 'three', |
* ) |
* </pre> |
* |
* ...while the call getAssoc('SELECT id,text,date FROM mytable') returns: |
* <pre> |
* array( |
* '1' => array('one', '944679408'), |
* '2' => array('two', '944679408'), |
* '3' => array('three', '944679408') |
* ) |
* </pre> |
* |
* If the more than one row occurs with the same value in the |
* first column, the last row overwrites all previous ones by |
* default. Use the $group parameter if you don't want to |
* overwrite like this. Example: |
* |
* <pre> |
* getAssoc('SELECT category,id,name FROM mytable', false, null, |
* DB_FETCHMODE_ASSOC, true) returns: |
* |
* array( |
* '1' => array(array('id' => '4', 'name' => 'number four'), |
* array('id' => '6', 'name' => 'number six') |
* ), |
* '9' => array(array('id' => '4', 'name' => 'number four'), |
* array('id' => '6', 'name' => 'number six') |
* ) |
* ) |
* </pre> |
* |
* Keep in mind that database functions in PHP usually return string |
* values for results regardless of the database's internal type. |
* |
* @param string $query the SQL query |
* @param bool $force_array used only when the query returns |
* exactly two columns. If true, the values |
* of the returned array will be one-element |
* arrays instead of scalars. |
* @param mixed $params array, string or numeric data to be used in |
* execution of the statement. Quantity of |
* items passed must match quantity of |
* placeholders in query: meaning 1 |
* placeholder for non-array parameters or |
* 1 placeholder per array element. |
* @param int $fetchmode the fetch mode to use |
* @param bool $group if true, the values of the returned array |
* is wrapped in another array. If the same |
* key value (in the first column) repeats |
* itself, the values will be appended to |
* this array instead of overwriting the |
* existing values. |
* |
* @return array the associative array containing the query results. |
* A DB_Error object on failure. |
*/ |
function &getAssoc($query, $force_array = false, $params = array(), |
$fetchmode = DB_FETCHMODE_DEFAULT, $group = false) |
{ |
$params = (array)$params; |
if (sizeof($params) > 0) { |
$sth = $this->prepare($query); |
if (DB::isError($sth)) { |
return $sth; |
} |
$res =& $this->execute($sth, $params); |
$this->freePrepared($sth); |
} else { |
$res =& $this->query($query); |
} |
if (DB::isError($res)) { |
return $res; |
} |
if ($fetchmode == DB_FETCHMODE_DEFAULT) { |
$fetchmode = $this->fetchmode; |
} |
$cols = $res->numCols(); |
if ($cols < 2) { |
$tmp =& $this->raiseError(DB_ERROR_TRUNCATED); |
return $tmp; |
} |
$results = array(); |
if ($cols > 2 || $force_array) { |
// return array values |
// XXX this part can be optimized |
if ($fetchmode == DB_FETCHMODE_ASSOC) { |
while (is_array($row = $res->fetchRow(DB_FETCHMODE_ASSOC))) { |
reset($row); |
$key = current($row); |
unset($row[key($row)]); |
if ($group) { |
$results[$key][] = $row; |
} else { |
$results[$key] = $row; |
} |
} |
} elseif ($fetchmode == DB_FETCHMODE_OBJECT) { |
while ($row = $res->fetchRow(DB_FETCHMODE_OBJECT)) { |
$arr = get_object_vars($row); |
$key = current($arr); |
if ($group) { |
$results[$key][] = $row; |
} else { |
$results[$key] = $row; |
} |
} |
} else { |
while (is_array($row = $res->fetchRow(DB_FETCHMODE_ORDERED))) { |
// we shift away the first element to get |
// indices running from 0 again |
$key = array_shift($row); |
if ($group) { |
$results[$key][] = $row; |
} else { |
$results[$key] = $row; |
} |
} |
} |
if (DB::isError($row)) { |
$results = $row; |
} |
} else { |
// return scalar values |
while (is_array($row = $res->fetchRow(DB_FETCHMODE_ORDERED))) { |
if ($group) { |
$results[$row[0]][] = $row[1]; |
} else { |
$results[$row[0]] = $row[1]; |
} |
} |
if (DB::isError($row)) { |
$results = $row; |
} |
} |
$res->free(); |
return $results; |
} |
// }}} |
// {{{ getAll() |
/** |
* Fetches all of the rows from a query result |
* |
* @param string $query the SQL query |
* @param mixed $params array, string or numeric data to be used in |
* execution of the statement. Quantity of |
* items passed must match quantity of |
* placeholders in query: meaning 1 |
* placeholder for non-array parameters or |
* 1 placeholder per array element. |
* @param int $fetchmode the fetch mode to use: |
* + DB_FETCHMODE_ORDERED |
* + DB_FETCHMODE_ASSOC |
* + DB_FETCHMODE_ORDERED | DB_FETCHMODE_FLIPPED |
* + DB_FETCHMODE_ASSOC | DB_FETCHMODE_FLIPPED |
* |
* @return array the nested array. A DB_Error object on failure. |
*/ |
function &getAll($query, $params = array(), |
$fetchmode = DB_FETCHMODE_DEFAULT) |
{ |
// compat check, the params and fetchmode parameters used to |
// have the opposite order |
if (!is_array($params)) { |
if (is_array($fetchmode)) { |
if ($params === null) { |
$tmp = DB_FETCHMODE_DEFAULT; |
} else { |
$tmp = $params; |
} |
$params = $fetchmode; |
$fetchmode = $tmp; |
} elseif ($params !== null) { |
$fetchmode = $params; |
$params = array(); |
} |
} |
if (sizeof($params) > 0) { |
$sth = $this->prepare($query); |
if (DB::isError($sth)) { |
return $sth; |
} |
$res =& $this->execute($sth, $params); |
$this->freePrepared($sth); |
} else { |
$res =& $this->query($query); |
} |
if ($res === DB_OK || DB::isError($res)) { |
return $res; |
} |
$results = array(); |
while (DB_OK === $res->fetchInto($row, $fetchmode)) { |
if ($fetchmode & DB_FETCHMODE_FLIPPED) { |
foreach ($row as $key => $val) { |
$results[$key][] = $val; |
} |
} else { |
$results[] = $row; |
} |
} |
$res->free(); |
if (DB::isError($row)) { |
$tmp =& $this->raiseError($row); |
return $tmp; |
} |
return $results; |
} |
// }}} |
// {{{ autoCommit() |
/** |
* Enables or disables automatic commits |
* |
* @param bool $onoff true turns it on, false turns it off |
* |
* @return int DB_OK on success. A DB_Error object if the driver |
* doesn't support auto-committing transactions. |
*/ |
function autoCommit($onoff = false) |
{ |
return $this->raiseError(DB_ERROR_NOT_CAPABLE); |
} |
// }}} |
// {{{ commit() |
/** |
* Commits the current transaction |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
*/ |
function commit() |
{ |
return $this->raiseError(DB_ERROR_NOT_CAPABLE); |
} |
// }}} |
// {{{ rollback() |
/** |
* Reverts the current transaction |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
*/ |
function rollback() |
{ |
return $this->raiseError(DB_ERROR_NOT_CAPABLE); |
} |
// }}} |
// {{{ numRows() |
/** |
* Determines the number of rows in a query result |
* |
* @param resource $result the query result idenifier produced by PHP |
* |
* @return int the number of rows. A DB_Error object on failure. |
*/ |
function numRows($result) |
{ |
return $this->raiseError(DB_ERROR_NOT_CAPABLE); |
} |
// }}} |
// {{{ affectedRows() |
/** |
* Determines the number of rows affected by a data maniuplation query |
* |
* 0 is returned for queries that don't manipulate data. |
* |
* @return int the number of rows. A DB_Error object on failure. |
*/ |
function affectedRows() |
{ |
return $this->raiseError(DB_ERROR_NOT_CAPABLE); |
} |
// }}} |
// {{{ getSequenceName() |
/** |
* Generates the name used inside the database for a sequence |
* |
* The createSequence() docblock contains notes about storing sequence |
* names. |
* |
* @param string $sqn the sequence's public name |
* |
* @return string the sequence's name in the backend |
* |
* @access protected |
* @see DB_common::createSequence(), DB_common::dropSequence(), |
* DB_common::nextID(), DB_common::setOption() |
*/ |
function getSequenceName($sqn) |
{ |
return sprintf($this->getOption('seqname_format'), |
preg_replace('/[^a-z0-9_.]/i', '_', $sqn)); |
} |
// }}} |
// {{{ nextId() |
/** |
* Returns the next free id in a sequence |
* |
* @param string $seq_name name of the sequence |
* @param boolean $ondemand when true, the seqence is automatically |
* created if it does not exist |
* |
* @return int the next id number in the sequence. |
* A DB_Error object on failure. |
* |
* @see DB_common::createSequence(), DB_common::dropSequence(), |
* DB_common::getSequenceName() |
*/ |
function nextId($seq_name, $ondemand = true) |
{ |
return $this->raiseError(DB_ERROR_NOT_CAPABLE); |
} |
// }}} |
// {{{ createSequence() |
/** |
* Creates a new sequence |
* |
* The name of a given sequence is determined by passing the string |
* provided in the <var>$seq_name</var> argument through PHP's sprintf() |
* function using the value from the <var>seqname_format</var> option as |
* the sprintf()'s format argument. |
* |
* <var>seqname_format</var> is set via setOption(). |
* |
* @param string $seq_name name of the new sequence |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
* |
* @see DB_common::dropSequence(), DB_common::getSequenceName(), |
* DB_common::nextID() |
*/ |
function createSequence($seq_name) |
{ |
return $this->raiseError(DB_ERROR_NOT_CAPABLE); |
} |
// }}} |
// {{{ dropSequence() |
/** |
* Deletes a sequence |
* |
* @param string $seq_name name of the sequence to be deleted |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
* |
* @see DB_common::createSequence(), DB_common::getSequenceName(), |
* DB_common::nextID() |
*/ |
function dropSequence($seq_name) |
{ |
return $this->raiseError(DB_ERROR_NOT_CAPABLE); |
} |
// }}} |
// {{{ raiseError() |
/** |
* Communicates an error and invoke error callbacks, etc |
* |
* Basically a wrapper for PEAR::raiseError without the message string. |
* |
* @param mixed integer error code, or a PEAR error object (all |
* other parameters are ignored if this parameter is |
* an object |
* @param int error mode, see PEAR_Error docs |
* @param mixed if error mode is PEAR_ERROR_TRIGGER, this is the |
* error level (E_USER_NOTICE etc). If error mode is |
* PEAR_ERROR_CALLBACK, this is the callback function, |
* either as a function name, or as an array of an |
* object and method name. For other error modes this |
* parameter is ignored. |
* @param string extra debug information. Defaults to the last |
* query and native error code. |
* @param mixed native error code, integer or string depending the |
* backend |
* |
* @return object the PEAR_Error object |
* |
* @see PEAR_Error |
*/ |
function &raiseError($code = DB_ERROR, $mode = null, $options = null, |
$userinfo = null, $nativecode = null) |
{ |
// The error is yet a DB error object |
if (is_object($code)) { |
// because we the static PEAR::raiseError, our global |
// handler should be used if it is set |
if ($mode === null && !empty($this->_default_error_mode)) { |
$mode = $this->_default_error_mode; |
$options = $this->_default_error_options; |
} |
$tmp = PEAR::raiseError($code, null, $mode, $options, |
null, null, true); |
return $tmp; |
} |
if ($userinfo === null) { |
$userinfo = $this->last_query; |
} |
if ($nativecode) { |
$userinfo .= ' [nativecode=' . trim($nativecode) . ']'; |
} else { |
$userinfo .= ' [DB Error: ' . DB::errorMessage($code) . ']'; |
} |
$tmp = PEAR::raiseError(null, $code, $mode, $options, $userinfo, |
'DB_Error', true); |
return $tmp; |
} |
// }}} |
// {{{ errorNative() |
/** |
* Gets the DBMS' native error code produced by the last query |
* |
* @return mixed the DBMS' error code. A DB_Error object on failure. |
*/ |
function errorNative() |
{ |
return $this->raiseError(DB_ERROR_NOT_CAPABLE); |
} |
// }}} |
// {{{ errorCode() |
/** |
* Maps native error codes to DB's portable ones |
* |
* Uses the <var>$errorcode_map</var> property defined in each driver. |
* |
* @param string|int $nativecode the error code returned by the DBMS |
* |
* @return int the portable DB error code. Return DB_ERROR if the |
* current driver doesn't have a mapping for the |
* $nativecode submitted. |
*/ |
function errorCode($nativecode) |
{ |
if (isset($this->errorcode_map[$nativecode])) { |
return $this->errorcode_map[$nativecode]; |
} |
// Fall back to DB_ERROR if there was no mapping. |
return DB_ERROR; |
} |
// }}} |
// {{{ errorMessage() |
/** |
* Maps a DB error code to a textual message |
* |
* @param integer $dbcode the DB error code |
* |
* @return string the error message corresponding to the error code |
* submitted. FALSE if the error code is unknown. |
* |
* @see DB::errorMessage() |
*/ |
function errorMessage($dbcode) |
{ |
return DB::errorMessage($this->errorcode_map[$dbcode]); |
} |
// }}} |
// {{{ tableInfo() |
/** |
* Returns information about a table or a result set |
* |
* The format of the resulting array depends on which <var>$mode</var> |
* you select. The sample output below is based on this query: |
* <pre> |
* SELECT tblFoo.fldID, tblFoo.fldPhone, tblBar.fldId |
* FROM tblFoo |
* JOIN tblBar ON tblFoo.fldId = tblBar.fldId |
* </pre> |
* |
* <ul> |
* <li> |
* |
* <kbd>null</kbd> (default) |
* <pre> |
* [0] => Array ( |
* [table] => tblFoo |
* [name] => fldId |
* [type] => int |
* [len] => 11 |
* [flags] => primary_key not_null |
* ) |
* [1] => Array ( |
* [table] => tblFoo |
* [name] => fldPhone |
* [type] => string |
* [len] => 20 |
* [flags] => |
* ) |
* [2] => Array ( |
* [table] => tblBar |
* [name] => fldId |
* [type] => int |
* [len] => 11 |
* [flags] => primary_key not_null |
* ) |
* </pre> |
* |
* </li><li> |
* |
* <kbd>DB_TABLEINFO_ORDER</kbd> |
* |
* <p>In addition to the information found in the default output, |
* a notation of the number of columns is provided by the |
* <samp>num_fields</samp> element while the <samp>order</samp> |
* element provides an array with the column names as the keys and |
* their location index number (corresponding to the keys in the |
* the default output) as the values.</p> |
* |
* <p>If a result set has identical field names, the last one is |
* used.</p> |
* |
* <pre> |
* [num_fields] => 3 |
* [order] => Array ( |
* [fldId] => 2 |
* [fldTrans] => 1 |
* ) |
* </pre> |
* |
* </li><li> |
* |
* <kbd>DB_TABLEINFO_ORDERTABLE</kbd> |
* |
* <p>Similar to <kbd>DB_TABLEINFO_ORDER</kbd> but adds more |
* dimensions to the array in which the table names are keys and |
* the field names are sub-keys. This is helpful for queries that |
* join tables which have identical field names.</p> |
* |
* <pre> |
* [num_fields] => 3 |
* [ordertable] => Array ( |
* [tblFoo] => Array ( |
* [fldId] => 0 |
* [fldPhone] => 1 |
* ) |
* [tblBar] => Array ( |
* [fldId] => 2 |
* ) |
* ) |
* </pre> |
* |
* </li> |
* </ul> |
* |
* The <samp>flags</samp> element contains a space separated list |
* of extra information about the field. This data is inconsistent |
* between DBMS's due to the way each DBMS works. |
* + <samp>primary_key</samp> |
* + <samp>unique_key</samp> |
* + <samp>multiple_key</samp> |
* + <samp>not_null</samp> |
* |
* Most DBMS's only provide the <samp>table</samp> and <samp>flags</samp> |
* elements if <var>$result</var> is a table name. The following DBMS's |
* provide full information from queries: |
* + fbsql |
* + mysql |
* |
* If the 'portability' option has <samp>DB_PORTABILITY_LOWERCASE</samp> |
* turned on, the names of tables and fields will be lowercased. |
* |
* @param object|string $result DB_result object from a query or a |
* string containing the name of a table. |
* While this also accepts a query result |
* resource identifier, this behavior is |
* deprecated. |
* @param int $mode either unused or one of the tableInfo modes: |
* <kbd>DB_TABLEINFO_ORDERTABLE</kbd>, |
* <kbd>DB_TABLEINFO_ORDER</kbd> or |
* <kbd>DB_TABLEINFO_FULL</kbd> (which does both). |
* These are bitwise, so the first two can be |
* combined using <kbd>|</kbd>. |
* |
* @return array an associative array with the information requested. |
* A DB_Error object on failure. |
* |
* @see DB_common::setOption() |
*/ |
function tableInfo($result, $mode = null) |
{ |
/* |
* If the DB_<driver> class has a tableInfo() method, that one |
* overrides this one. But, if the driver doesn't have one, |
* this method runs and tells users about that fact. |
*/ |
return $this->raiseError(DB_ERROR_NOT_CAPABLE); |
} |
// }}} |
// {{{ getTables() |
/** |
* Lists the tables in the current database |
* |
* @return array the list of tables. A DB_Error object on failure. |
* |
* @deprecated Method deprecated some time before Release 1.2 |
*/ |
function getTables() |
{ |
return $this->getListOf('tables'); |
} |
// }}} |
// {{{ getListOf() |
/** |
* Lists internal database information |
* |
* @param string $type type of information being sought. |
* Common items being sought are: |
* tables, databases, users, views, functions |
* Each DBMS's has its own capabilities. |
* |
* @return array an array listing the items sought. |
* A DB DB_Error object on failure. |
*/ |
function getListOf($type) |
{ |
$sql = $this->getSpecialQuery($type); |
if ($sql === null) { |
$this->last_query = ''; |
return $this->raiseError(DB_ERROR_UNSUPPORTED); |
} elseif (is_int($sql) || DB::isError($sql)) { |
// Previous error |
return $this->raiseError($sql); |
} elseif (is_array($sql)) { |
// Already the result |
return $sql; |
} |
// Launch this query |
return $this->getCol($sql); |
} |
// }}} |
// {{{ getSpecialQuery() |
/** |
* Obtains the query string needed for listing a given type of objects |
* |
* @param string $type the kind of objects you want to retrieve |
* |
* @return string the SQL query string or null if the driver doesn't |
* support the object type requested |
* |
* @access protected |
* @see DB_common::getListOf() |
*/ |
function getSpecialQuery($type) |
{ |
return $this->raiseError(DB_ERROR_UNSUPPORTED); |
} |
// }}} |
// {{{ _rtrimArrayValues() |
/** |
* Right-trims all strings in an array |
* |
* @param array $array the array to be trimmed (passed by reference) |
* |
* @return void |
* |
* @access protected |
*/ |
function _rtrimArrayValues(&$array) |
{ |
foreach ($array as $key => $value) { |
if (is_string($value)) { |
$array[$key] = rtrim($value); |
} |
} |
} |
// }}} |
// {{{ _convertNullArrayValuesToEmpty() |
/** |
* Converts all null values in an array to empty strings |
* |
* @param array $array the array to be de-nullified (passed by reference) |
* |
* @return void |
* |
* @access protected |
*/ |
function _convertNullArrayValuesToEmpty(&$array) |
{ |
foreach ($array as $key => $value) { |
if (is_null($value)) { |
$array[$key] = ''; |
} |
} |
} |
// }}} |
} |
/* |
* Local variables: |
* tab-width: 4 |
* c-basic-offset: 4 |
* End: |
*/ |
?> |
/branches/v1.0-menes/api/pear/DB/msql.php |
---|
New file |
0,0 → 1,810 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ |
/** |
* The PEAR DB driver for PHP's msql extension |
* for interacting with Mini SQL databases |
* |
* PHP's mSQL extension did weird things with NULL values prior to PHP |
* 4.3.11 and 5.0.4. Make sure your version of PHP meets or exceeds |
* those versions. |
* |
* PHP versions 4 and 5 |
* |
* LICENSE: This source file is subject to version 3.0 of the PHP license |
* that is available through the world-wide-web at the following URI: |
* http://www.php.net/license/3_0.txt. If you did not receive a copy of |
* the PHP License and are unable to obtain it through the web, please |
* send a note to license@php.net so we can mail you a copy immediately. |
* |
* @category Database |
* @package DB |
* @author Daniel Convissor <danielc@php.net> |
* @copyright 1997-2005 The PHP Group |
* @license http://www.php.net/license/3_0.txt PHP License 3.0 |
* @version CVS: $Id: msql.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $ |
* @link http://pear.php.net/package/DB |
*/ |
/** |
* Obtain the DB_common class so it can be extended from |
*/ |
require_once 'DB/common.php'; |
/** |
* The methods PEAR DB uses to interact with PHP's msql extension |
* for interacting with Mini SQL databases |
* |
* These methods overload the ones declared in DB_common. |
* |
* PHP's mSQL extension did weird things with NULL values prior to PHP |
* 4.3.11 and 5.0.4. Make sure your version of PHP meets or exceeds |
* those versions. |
* |
* @category Database |
* @package DB |
* @author Daniel Convissor <danielc@php.net> |
* @copyright 1997-2005 The PHP Group |
* @license http://www.php.net/license/3_0.txt PHP License 3.0 |
* @version Release: @package_version@ |
* @link http://pear.php.net/package/DB |
* @since Class not functional until Release 1.7.0 |
*/ |
class DB_msql extends DB_common |
{ |
// {{{ properties |
/** |
* The DB driver type (mysql, oci8, odbc, etc.) |
* @var string |
*/ |
var $phptype = 'msql'; |
/** |
* The database syntax variant to be used (db2, access, etc.), if any |
* @var string |
*/ |
var $dbsyntax = 'msql'; |
/** |
* The capabilities of this DB implementation |
* |
* The 'new_link' element contains the PHP version that first provided |
* new_link support for this DBMS. Contains false if it's unsupported. |
* |
* Meaning of the 'limit' element: |
* + 'emulate' = emulate with fetch row by number |
* + 'alter' = alter the query |
* + false = skip rows |
* |
* @var array |
*/ |
var $features = array( |
'limit' => 'emulate', |
'new_link' => false, |
'numrows' => true, |
'pconnect' => true, |
'prepare' => false, |
'ssl' => false, |
'transactions' => false, |
); |
/** |
* A mapping of native error codes to DB error codes |
* @var array |
*/ |
var $errorcode_map = array( |
); |
/** |
* The raw database connection created by PHP |
* @var resource |
*/ |
var $connection; |
/** |
* The DSN information for connecting to a database |
* @var array |
*/ |
var $dsn = array(); |
/** |
* The query result resource created by PHP |
* |
* Used to make affectedRows() work. Only contains the result for |
* data manipulation queries. Contains false for other queries. |
* |
* @var resource |
* @access private |
*/ |
var $_result; |
// }}} |
// {{{ constructor |
/** |
* This constructor calls <kbd>$this->DB_common()</kbd> |
* |
* @return void |
*/ |
function DB_msql() |
{ |
$this->DB_common(); |
} |
// }}} |
// {{{ connect() |
/** |
* Connect to the database server, log in and open the database |
* |
* Don't call this method directly. Use DB::connect() instead. |
* |
* Example of how to connect: |
* <code> |
* require_once 'DB.php'; |
* |
* // $dsn = 'msql://hostname/dbname'; // use a TCP connection |
* $dsn = 'msql:///dbname'; // use a socket |
* $options = array( |
* 'portability' => DB_PORTABILITY_ALL, |
* ); |
* |
* $db =& DB::connect($dsn, $options); |
* if (PEAR::isError($db)) { |
* die($db->getMessage()); |
* } |
* </code> |
* |
* @param array $dsn the data source name |
* @param bool $persistent should the connection be persistent? |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
*/ |
function connect($dsn, $persistent = false) |
{ |
if (!PEAR::loadExtension('msql')) { |
return $this->raiseError(DB_ERROR_EXTENSION_NOT_FOUND); |
} |
$this->dsn = $dsn; |
if ($dsn['dbsyntax']) { |
$this->dbsyntax = $dsn['dbsyntax']; |
} |
$params = array(); |
if ($dsn['hostspec']) { |
$params[] = $dsn['port'] |
? $dsn['hostspec'] . ',' . $dsn['port'] |
: $dsn['hostspec']; |
} |
$connect_function = $persistent ? 'msql_pconnect' : 'msql_connect'; |
$ini = ini_get('track_errors'); |
$php_errormsg = ''; |
if ($ini) { |
$this->connection = @call_user_func_array($connect_function, |
$params); |
} else { |
ini_set('track_errors', 1); |
$this->connection = @call_user_func_array($connect_function, |
$params); |
ini_set('track_errors', $ini); |
} |
if (!$this->connection) { |
if (($err = @msql_error()) != '') { |
return $this->raiseError(DB_ERROR_CONNECT_FAILED, |
null, null, null, |
$err); |
} else { |
return $this->raiseError(DB_ERROR_CONNECT_FAILED, |
null, null, null, |
$php_errormsg); |
} |
} |
if (!@msql_select_db($dsn['database'], $this->connection)) { |
return $this->msqlRaiseError(); |
} |
return DB_OK; |
} |
// }}} |
// {{{ disconnect() |
/** |
* Disconnects from the database server |
* |
* @return bool TRUE on success, FALSE on failure |
*/ |
function disconnect() |
{ |
$ret = @msql_close($this->connection); |
$this->connection = null; |
return $ret; |
} |
// }}} |
// {{{ simpleQuery() |
/** |
* Sends a query to the database server |
* |
* @param string the SQL query string |
* |
* @return mixed + a PHP result resrouce for successful SELECT queries |
* + the DB_OK constant for other successful queries |
* + a DB_Error object on failure |
*/ |
function simpleQuery($query) |
{ |
$this->last_query = $query; |
$query = $this->modifyQuery($query); |
$result = @msql_query($query, $this->connection); |
if (!$result) { |
return $this->msqlRaiseError(); |
} |
// Determine which queries that should return data, and which |
// should return an error code only. |
if (DB::isManip($query)) { |
$this->_result = $result; |
return DB_OK; |
} else { |
$this->_result = false; |
return $result; |
} |
} |
// }}} |
// {{{ nextResult() |
/** |
* Move the internal msql result pointer to the next available result |
* |
* @param a valid fbsql result resource |
* |
* @access public |
* |
* @return true if a result is available otherwise return false |
*/ |
function nextResult($result) |
{ |
return false; |
} |
// }}} |
// {{{ fetchInto() |
/** |
* Places a row from the result set into the given array |
* |
* Formating of the array and the data therein are configurable. |
* See DB_result::fetchInto() for more information. |
* |
* This method is not meant to be called directly. Use |
* DB_result::fetchInto() instead. It can't be declared "protected" |
* because DB_result is a separate object. |
* |
* PHP's mSQL extension did weird things with NULL values prior to PHP |
* 4.3.11 and 5.0.4. Make sure your version of PHP meets or exceeds |
* those versions. |
* |
* @param resource $result the query result resource |
* @param array $arr the referenced array to put the data in |
* @param int $fetchmode how the resulting array should be indexed |
* @param int $rownum the row number to fetch (0 = first row) |
* |
* @return mixed DB_OK on success, NULL when the end of a result set is |
* reached or on failure |
* |
* @see DB_result::fetchInto() |
*/ |
function fetchInto($result, &$arr, $fetchmode, $rownum = null) |
{ |
if ($rownum !== null) { |
if (!@msql_data_seek($result, $rownum)) { |
return null; |
} |
} |
if ($fetchmode & DB_FETCHMODE_ASSOC) { |
$arr = @msql_fetch_array($result, MSQL_ASSOC); |
if ($this->options['portability'] & DB_PORTABILITY_LOWERCASE && $arr) { |
$arr = array_change_key_case($arr, CASE_LOWER); |
} |
} else { |
$arr = @msql_fetch_row($result); |
} |
if (!$arr) { |
return null; |
} |
if ($this->options['portability'] & DB_PORTABILITY_RTRIM) { |
$this->_rtrimArrayValues($arr); |
} |
if ($this->options['portability'] & DB_PORTABILITY_NULL_TO_EMPTY) { |
$this->_convertNullArrayValuesToEmpty($arr); |
} |
return DB_OK; |
} |
// }}} |
// {{{ freeResult() |
/** |
* Deletes the result set and frees the memory occupied by the result set |
* |
* This method is not meant to be called directly. Use |
* DB_result::free() instead. It can't be declared "protected" |
* because DB_result is a separate object. |
* |
* @param resource $result PHP's query result resource |
* |
* @return bool TRUE on success, FALSE if $result is invalid |
* |
* @see DB_result::free() |
*/ |
function freeResult($result) |
{ |
return @msql_free_result($result); |
} |
// }}} |
// {{{ numCols() |
/** |
* Gets the number of columns in a result set |
* |
* This method is not meant to be called directly. Use |
* DB_result::numCols() instead. It can't be declared "protected" |
* because DB_result is a separate object. |
* |
* @param resource $result PHP's query result resource |
* |
* @return int the number of columns. A DB_Error object on failure. |
* |
* @see DB_result::numCols() |
*/ |
function numCols($result) |
{ |
$cols = @msql_num_fields($result); |
if (!$cols) { |
return $this->msqlRaiseError(); |
} |
return $cols; |
} |
// }}} |
// {{{ numRows() |
/** |
* Gets the number of rows in a result set |
* |
* This method is not meant to be called directly. Use |
* DB_result::numRows() instead. It can't be declared "protected" |
* because DB_result is a separate object. |
* |
* @param resource $result PHP's query result resource |
* |
* @return int the number of rows. A DB_Error object on failure. |
* |
* @see DB_result::numRows() |
*/ |
function numRows($result) |
{ |
$rows = @msql_num_rows($result); |
if ($rows === false) { |
return $this->msqlRaiseError(); |
} |
return $rows; |
} |
// }}} |
// {{{ affected() |
/** |
* Determines the number of rows affected by a data maniuplation query |
* |
* 0 is returned for queries that don't manipulate data. |
* |
* @return int the number of rows. A DB_Error object on failure. |
*/ |
function affectedRows() |
{ |
if (!$this->_result) { |
return 0; |
} |
return msql_affected_rows($this->_result); |
} |
// }}} |
// {{{ nextId() |
/** |
* Returns the next free id in a sequence |
* |
* @param string $seq_name name of the sequence |
* @param boolean $ondemand when true, the seqence is automatically |
* created if it does not exist |
* |
* @return int the next id number in the sequence. |
* A DB_Error object on failure. |
* |
* @see DB_common::nextID(), DB_common::getSequenceName(), |
* DB_msql::createSequence(), DB_msql::dropSequence() |
*/ |
function nextId($seq_name, $ondemand = true) |
{ |
$seqname = $this->getSequenceName($seq_name); |
$repeat = false; |
do { |
$this->pushErrorHandling(PEAR_ERROR_RETURN); |
$result =& $this->query("SELECT _seq FROM ${seqname}"); |
$this->popErrorHandling(); |
if ($ondemand && DB::isError($result) && |
$result->getCode() == DB_ERROR_NOSUCHTABLE) { |
$repeat = true; |
$this->pushErrorHandling(PEAR_ERROR_RETURN); |
$result = $this->createSequence($seq_name); |
$this->popErrorHandling(); |
if (DB::isError($result)) { |
return $this->raiseError($result); |
} |
} else { |
$repeat = false; |
} |
} while ($repeat); |
if (DB::isError($result)) { |
return $this->raiseError($result); |
} |
$arr = $result->fetchRow(DB_FETCHMODE_ORDERED); |
$result->free(); |
return $arr[0]; |
} |
// }}} |
// {{{ createSequence() |
/** |
* Creates a new sequence |
* |
* Also creates a new table to associate the sequence with. Uses |
* a separate table to ensure portability with other drivers. |
* |
* @param string $seq_name name of the new sequence |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
* |
* @see DB_common::createSequence(), DB_common::getSequenceName(), |
* DB_msql::nextID(), DB_msql::dropSequence() |
*/ |
function createSequence($seq_name) |
{ |
$seqname = $this->getSequenceName($seq_name); |
$res = $this->query('CREATE TABLE ' . $seqname |
. ' (id INTEGER NOT NULL)'); |
if (DB::isError($res)) { |
return $res; |
} |
$res = $this->query("CREATE SEQUENCE ON ${seqname}"); |
return $res; |
} |
// }}} |
// {{{ dropSequence() |
/** |
* Deletes a sequence |
* |
* @param string $seq_name name of the sequence to be deleted |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
* |
* @see DB_common::dropSequence(), DB_common::getSequenceName(), |
* DB_msql::nextID(), DB_msql::createSequence() |
*/ |
function dropSequence($seq_name) |
{ |
return $this->query('DROP TABLE ' . $this->getSequenceName($seq_name)); |
} |
// }}} |
// {{{ quoteIdentifier() |
/** |
* mSQL does not support delimited identifiers |
* |
* @param string $str the identifier name to be quoted |
* |
* @return object a DB_Error object |
* |
* @see DB_common::quoteIdentifier() |
* @since Method available since Release 1.7.0 |
*/ |
function quoteIdentifier($str) |
{ |
return $this->raiseError(DB_ERROR_UNSUPPORTED); |
} |
// }}} |
// {{{ escapeSimple() |
/** |
* Escapes a string according to the current DBMS's standards |
* |
* @param string $str the string to be escaped |
* |
* @return string the escaped string |
* |
* @see DB_common::quoteSmart() |
* @since Method available since Release 1.7.0 |
*/ |
function escapeSimple($str) |
{ |
return addslashes($str); |
} |
// }}} |
// {{{ msqlRaiseError() |
/** |
* Produces a DB_Error object regarding the current problem |
* |
* @param int $errno if the error is being manually raised pass a |
* DB_ERROR* constant here. If this isn't passed |
* the error information gathered from the DBMS. |
* |
* @return object the DB_Error object |
* |
* @see DB_common::raiseError(), |
* DB_msql::errorNative(), DB_msql::errorCode() |
*/ |
function msqlRaiseError($errno = null) |
{ |
$native = $this->errorNative(); |
if ($errno === null) { |
$errno = $this->errorCode($native); |
} |
return $this->raiseError($errno, null, null, null, $native); |
} |
// }}} |
// {{{ errorNative() |
/** |
* Gets the DBMS' native error message produced by the last query |
* |
* @return string the DBMS' error message |
*/ |
function errorNative() |
{ |
return @msql_error(); |
} |
// }}} |
// {{{ errorCode() |
/** |
* Determines PEAR::DB error code from the database's text error message |
* |
* @param string $errormsg the error message returned from the database |
* |
* @return integer the error number from a DB_ERROR* constant |
*/ |
function errorCode($errormsg) |
{ |
static $error_regexps; |
if (!isset($error_regexps)) { |
$error_regexps = array( |
'/^Access to database denied/i' |
=> DB_ERROR_ACCESS_VIOLATION, |
'/^Bad index name/i' |
=> DB_ERROR_ALREADY_EXISTS, |
'/^Bad order field/i' |
=> DB_ERROR_SYNTAX, |
'/^Bad type for comparison/i' |
=> DB_ERROR_SYNTAX, |
'/^Can\'t perform LIKE on/i' |
=> DB_ERROR_SYNTAX, |
'/^Can\'t use TEXT fields in LIKE comparison/i' |
=> DB_ERROR_SYNTAX, |
'/^Couldn\'t create temporary table/i' |
=> DB_ERROR_CANNOT_CREATE, |
'/^Error creating table file/i' |
=> DB_ERROR_CANNOT_CREATE, |
'/^Field .* cannot be null$/i' |
=> DB_ERROR_CONSTRAINT_NOT_NULL, |
'/^Index (field|condition) .* cannot be null$/i' |
=> DB_ERROR_SYNTAX, |
'/^Invalid date format/i' |
=> DB_ERROR_INVALID_DATE, |
'/^Invalid time format/i' |
=> DB_ERROR_INVALID, |
'/^Literal value for .* is wrong type$/i' |
=> DB_ERROR_INVALID_NUMBER, |
'/^No Database Selected/i' |
=> DB_ERROR_NODBSELECTED, |
'/^No value specified for field/i' |
=> DB_ERROR_VALUE_COUNT_ON_ROW, |
'/^Non unique value for unique index/i' |
=> DB_ERROR_CONSTRAINT, |
'/^Out of memory for temporary table/i' |
=> DB_ERROR_CANNOT_CREATE, |
'/^Permission denied/i' |
=> DB_ERROR_ACCESS_VIOLATION, |
'/^Reference to un-selected table/i' |
=> DB_ERROR_SYNTAX, |
'/^syntax error/i' |
=> DB_ERROR_SYNTAX, |
'/^Table .* exists$/i' |
=> DB_ERROR_ALREADY_EXISTS, |
'/^Unknown database/i' |
=> DB_ERROR_NOSUCHDB, |
'/^Unknown field/i' |
=> DB_ERROR_NOSUCHFIELD, |
'/^Unknown (index|system variable)/i' |
=> DB_ERROR_NOT_FOUND, |
'/^Unknown table/i' |
=> DB_ERROR_NOSUCHTABLE, |
'/^Unqualified field/i' |
=> DB_ERROR_SYNTAX, |
); |
} |
foreach ($error_regexps as $regexp => $code) { |
if (preg_match($regexp, $errormsg)) { |
return $code; |
} |
} |
return DB_ERROR; |
} |
// }}} |
// {{{ tableInfo() |
/** |
* Returns information about a table or a result set |
* |
* @param object|string $result DB_result object from a query or a |
* string containing the name of a table. |
* While this also accepts a query result |
* resource identifier, this behavior is |
* deprecated. |
* @param int $mode a valid tableInfo mode |
* |
* @return array an associative array with the information requested. |
* A DB_Error object on failure. |
* |
* @see DB_common::setOption() |
*/ |
function tableInfo($result, $mode = null) |
{ |
if (is_string($result)) { |
/* |
* Probably received a table name. |
* Create a result resource identifier. |
*/ |
$id = @msql_query("SELECT * FROM $result", |
$this->connection); |
$got_string = true; |
} elseif (isset($result->result)) { |
/* |
* Probably received a result object. |
* Extract the result resource identifier. |
*/ |
$id = $result->result; |
$got_string = false; |
} else { |
/* |
* Probably received a result resource identifier. |
* Copy it. |
* Deprecated. Here for compatibility only. |
*/ |
$id = $result; |
$got_string = false; |
} |
if (!is_resource($id)) { |
return $this->raiseError(DB_ERROR_NEED_MORE_DATA); |
} |
if ($this->options['portability'] & DB_PORTABILITY_LOWERCASE) { |
$case_func = 'strtolower'; |
} else { |
$case_func = 'strval'; |
} |
$count = @msql_num_fields($id); |
$res = array(); |
if ($mode) { |
$res['num_fields'] = $count; |
} |
for ($i = 0; $i < $count; $i++) { |
$tmp = @msql_fetch_field($id); |
$flags = ''; |
if ($tmp->not_null) { |
$flags .= 'not_null '; |
} |
if ($tmp->unique) { |
$flags .= 'unique_key '; |
} |
$flags = trim($flags); |
$res[$i] = array( |
'table' => $case_func($tmp->table), |
'name' => $case_func($tmp->name), |
'type' => $tmp->type, |
'len' => msql_field_len($id, $i), |
'flags' => $flags, |
); |
if ($mode & DB_TABLEINFO_ORDER) { |
$res['order'][$res[$i]['name']] = $i; |
} |
if ($mode & DB_TABLEINFO_ORDERTABLE) { |
$res['ordertable'][$res[$i]['table']][$res[$i]['name']] = $i; |
} |
} |
// free the result only if we were called on a table |
if ($got_string) { |
@msql_free_result($id); |
} |
return $res; |
} |
// }}} |
// {{{ getSpecialQuery() |
/** |
* Obtain a list of a given type of objects |
* |
* @param string $type the kind of objects you want to retrieve |
* |
* @return array the array containing the list of objects requested |
* |
* @access protected |
* @see DB_common::getListOf() |
*/ |
function getSpecialQuery($type) |
{ |
switch ($type) { |
case 'databases': |
$id = @msql_list_dbs($this->connection); |
break; |
case 'tables': |
$id = @msql_list_tables($this->dsn['database'], |
$this->connection); |
break; |
default: |
return null; |
} |
if (!$id) { |
return $this->msqlRaiseError(); |
} |
$out = array(); |
while ($row = @msql_fetch_row($id)) { |
$out[] = $row[0]; |
} |
return $out; |
} |
// }}} |
} |
/* |
* Local variables: |
* tab-width: 4 |
* c-basic-offset: 4 |
* End: |
*/ |
?> |
/branches/v1.0-menes/api/pear/DB/dbase.php |
---|
New file |
0,0 → 1,510 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ |
/** |
* The PEAR DB driver for PHP's dbase extension |
* for interacting with dBase databases |
* |
* PHP versions 4 and 5 |
* |
* LICENSE: This source file is subject to version 3.0 of the PHP license |
* that is available through the world-wide-web at the following URI: |
* http://www.php.net/license/3_0.txt. If you did not receive a copy of |
* the PHP License and are unable to obtain it through the web, please |
* send a note to license@php.net so we can mail you a copy immediately. |
* |
* @category Database |
* @package DB |
* @author Tomas V.V. Cox <cox@idecnet.com> |
* @author Daniel Convissor <danielc@php.net> |
* @copyright 1997-2005 The PHP Group |
* @license http://www.php.net/license/3_0.txt PHP License 3.0 |
* @version CVS: $Id: dbase.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $ |
* @link http://pear.php.net/package/DB |
*/ |
/** |
* Obtain the DB_common class so it can be extended from |
*/ |
require_once 'DB/common.php'; |
/** |
* The methods PEAR DB uses to interact with PHP's dbase extension |
* for interacting with dBase databases |
* |
* These methods overload the ones declared in DB_common. |
* |
* @category Database |
* @package DB |
* @author Tomas V.V. Cox <cox@idecnet.com> |
* @author Daniel Convissor <danielc@php.net> |
* @copyright 1997-2005 The PHP Group |
* @license http://www.php.net/license/3_0.txt PHP License 3.0 |
* @version Release: @package_version@ |
* @link http://pear.php.net/package/DB |
*/ |
class DB_dbase extends DB_common |
{ |
// {{{ properties |
/** |
* The DB driver type (mysql, oci8, odbc, etc.) |
* @var string |
*/ |
var $phptype = 'dbase'; |
/** |
* The database syntax variant to be used (db2, access, etc.), if any |
* @var string |
*/ |
var $dbsyntax = 'dbase'; |
/** |
* The capabilities of this DB implementation |
* |
* The 'new_link' element contains the PHP version that first provided |
* new_link support for this DBMS. Contains false if it's unsupported. |
* |
* Meaning of the 'limit' element: |
* + 'emulate' = emulate with fetch row by number |
* + 'alter' = alter the query |
* + false = skip rows |
* |
* @var array |
*/ |
var $features = array( |
'limit' => false, |
'new_link' => false, |
'numrows' => true, |
'pconnect' => false, |
'prepare' => false, |
'ssl' => false, |
'transactions' => false, |
); |
/** |
* A mapping of native error codes to DB error codes |
* @var array |
*/ |
var $errorcode_map = array( |
); |
/** |
* The raw database connection created by PHP |
* @var resource |
*/ |
var $connection; |
/** |
* The DSN information for connecting to a database |
* @var array |
*/ |
var $dsn = array(); |
/** |
* A means of emulating result resources |
* @var array |
*/ |
var $res_row = array(); |
/** |
* The quantity of results so far |
* |
* For emulating result resources. |
* |
* @var integer |
*/ |
var $result = 0; |
/** |
* Maps dbase data type id's to human readable strings |
* |
* The human readable values are based on the output of PHP's |
* dbase_get_header_info() function. |
* |
* @var array |
* @since Property available since Release 1.7.0 |
*/ |
var $types = array( |
'C' => 'character', |
'D' => 'date', |
'L' => 'boolean', |
'M' => 'memo', |
'N' => 'number', |
); |
// }}} |
// {{{ constructor |
/** |
* This constructor calls <kbd>$this->DB_common()</kbd> |
* |
* @return void |
*/ |
function DB_dbase() |
{ |
$this->DB_common(); |
} |
// }}} |
// {{{ connect() |
/** |
* Connect to the database and create it if it doesn't exist |
* |
* Don't call this method directly. Use DB::connect() instead. |
* |
* PEAR DB's dbase driver supports the following extra DSN options: |
* + mode An integer specifying the read/write mode to use |
* (0 = read only, 1 = write only, 2 = read/write). |
* Available since PEAR DB 1.7.0. |
* + fields An array of arrays that PHP's dbase_create() function needs |
* to create a new database. This information is used if the |
* dBase file specified in the "database" segment of the DSN |
* does not exist. For more info, see the PHP manual's |
* {@link http://php.net/dbase_create dbase_create()} page. |
* Available since PEAR DB 1.7.0. |
* |
* Example of how to connect and establish a new dBase file if necessary: |
* <code> |
* require_once 'DB.php'; |
* |
* $dsn = array( |
* 'phptype' => 'dbase', |
* 'database' => '/path/and/name/of/dbase/file', |
* 'mode' => 2, |
* 'fields' => array( |
* array('a', 'N', 5, 0), |
* array('b', 'C', 40), |
* array('c', 'C', 255), |
* array('d', 'C', 20), |
* ), |
* ); |
* $options = array( |
* 'debug' => 2, |
* 'portability' => DB_PORTABILITY_ALL, |
* ); |
* |
* $db =& DB::connect($dsn, $options); |
* if (PEAR::isError($db)) { |
* die($db->getMessage()); |
* } |
* </code> |
* |
* @param array $dsn the data source name |
* @param bool $persistent should the connection be persistent? |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
*/ |
function connect($dsn, $persistent = false) |
{ |
if (!PEAR::loadExtension('dbase')) { |
return $this->raiseError(DB_ERROR_EXTENSION_NOT_FOUND); |
} |
$this->dsn = $dsn; |
if ($dsn['dbsyntax']) { |
$this->dbsyntax = $dsn['dbsyntax']; |
} |
/* |
* Turn track_errors on for entire script since $php_errormsg |
* is the only way to find errors from the dbase extension. |
*/ |
ini_set('track_errors', 1); |
$php_errormsg = ''; |
if (!file_exists($dsn['database'])) { |
$this->dsn['mode'] = 2; |
if (empty($dsn['fields']) || !is_array($dsn['fields'])) { |
return $this->raiseError(DB_ERROR_CONNECT_FAILED, |
null, null, null, |
'the dbase file does not exist and ' |
. 'it could not be created because ' |
. 'the "fields" element of the DSN ' |
. 'is not properly set'); |
} |
$this->connection = @dbase_create($dsn['database'], |
$dsn['fields']); |
if (!$this->connection) { |
return $this->raiseError(DB_ERROR_CONNECT_FAILED, |
null, null, null, |
'the dbase file does not exist and ' |
. 'the attempt to create it failed: ' |
. $php_errormsg); |
} |
} else { |
if (!isset($this->dsn['mode'])) { |
$this->dsn['mode'] = 0; |
} |
$this->connection = @dbase_open($dsn['database'], |
$this->dsn['mode']); |
if (!$this->connection) { |
return $this->raiseError(DB_ERROR_CONNECT_FAILED, |
null, null, null, |
$php_errormsg); |
} |
} |
return DB_OK; |
} |
// }}} |
// {{{ disconnect() |
/** |
* Disconnects from the database server |
* |
* @return bool TRUE on success, FALSE on failure |
*/ |
function disconnect() |
{ |
$ret = @dbase_close($this->connection); |
$this->connection = null; |
return $ret; |
} |
// }}} |
// {{{ &query() |
function &query($query = null) |
{ |
// emulate result resources |
$this->res_row[(int)$this->result] = 0; |
$tmp =& new DB_result($this, $this->result++); |
return $tmp; |
} |
// }}} |
// {{{ fetchInto() |
/** |
* Places a row from the result set into the given array |
* |
* Formating of the array and the data therein are configurable. |
* See DB_result::fetchInto() for more information. |
* |
* This method is not meant to be called directly. Use |
* DB_result::fetchInto() instead. It can't be declared "protected" |
* because DB_result is a separate object. |
* |
* @param resource $result the query result resource |
* @param array $arr the referenced array to put the data in |
* @param int $fetchmode how the resulting array should be indexed |
* @param int $rownum the row number to fetch (0 = first row) |
* |
* @return mixed DB_OK on success, NULL when the end of a result set is |
* reached or on failure |
* |
* @see DB_result::fetchInto() |
*/ |
function fetchInto($result, &$arr, $fetchmode, $rownum = null) |
{ |
if ($rownum === null) { |
$rownum = $this->res_row[(int)$result]++; |
} |
if ($fetchmode & DB_FETCHMODE_ASSOC) { |
$arr = @dbase_get_record_with_names($this->connection, $rownum); |
if ($this->options['portability'] & DB_PORTABILITY_LOWERCASE && $arr) { |
$arr = array_change_key_case($arr, CASE_LOWER); |
} |
} else { |
$arr = @dbase_get_record($this->connection, $rownum); |
} |
if (!$arr) { |
return null; |
} |
if ($this->options['portability'] & DB_PORTABILITY_RTRIM) { |
$this->_rtrimArrayValues($arr); |
} |
if ($this->options['portability'] & DB_PORTABILITY_NULL_TO_EMPTY) { |
$this->_convertNullArrayValuesToEmpty($arr); |
} |
return DB_OK; |
} |
// }}} |
// {{{ numCols() |
/** |
* Gets the number of columns in a result set |
* |
* This method is not meant to be called directly. Use |
* DB_result::numCols() instead. It can't be declared "protected" |
* because DB_result is a separate object. |
* |
* @param resource $result PHP's query result resource |
* |
* @return int the number of columns. A DB_Error object on failure. |
* |
* @see DB_result::numCols() |
*/ |
function numCols($foo) |
{ |
return @dbase_numfields($this->connection); |
} |
// }}} |
// {{{ numRows() |
/** |
* Gets the number of rows in a result set |
* |
* This method is not meant to be called directly. Use |
* DB_result::numRows() instead. It can't be declared "protected" |
* because DB_result is a separate object. |
* |
* @param resource $result PHP's query result resource |
* |
* @return int the number of rows. A DB_Error object on failure. |
* |
* @see DB_result::numRows() |
*/ |
function numRows($foo) |
{ |
return @dbase_numrecords($this->connection); |
} |
// }}} |
// {{{ quoteSmart() |
/** |
* Formats input so it can be safely used in a query |
* |
* @param mixed $in the data to be formatted |
* |
* @return mixed the formatted data. The format depends on the input's |
* PHP type: |
* + null = the string <samp>NULL</samp> |
* + boolean = <samp>T</samp> if true or |
* <samp>F</samp> if false. Use the <kbd>Logical</kbd> |
* data type. |
* + integer or double = the unquoted number |
* + other (including strings and numeric strings) = |
* the data with single quotes escaped by preceeding |
* single quotes then the whole string is encapsulated |
* between single quotes |
* |
* @see DB_common::quoteSmart() |
* @since Method available since Release 1.6.0 |
*/ |
function quoteSmart($in) |
{ |
if (is_int($in) || is_double($in)) { |
return $in; |
} elseif (is_bool($in)) { |
return $in ? 'T' : 'F'; |
} elseif (is_null($in)) { |
return 'NULL'; |
} else { |
return "'" . $this->escapeSimple($in) . "'"; |
} |
} |
// }}} |
// {{{ tableInfo() |
/** |
* Returns information about the current database |
* |
* @param mixed $result THIS IS UNUSED IN DBASE. The current database |
* is examined regardless of what is provided here. |
* @param int $mode a valid tableInfo mode |
* |
* @return array an associative array with the information requested. |
* A DB_Error object on failure. |
* |
* @see DB_common::tableInfo() |
* @since Method available since Release 1.7.0 |
*/ |
function tableInfo($result = null, $mode = null) |
{ |
if (function_exists('dbase_get_header_info')) { |
$id = @dbase_get_header_info($this->connection); |
if (!$id && $php_errormsg) { |
return $this->raiseError(DB_ERROR, |
null, null, null, |
$php_errormsg); |
} |
} else { |
/* |
* This segment for PHP 4 is loosely based on code by |
* Hadi Rusiah <deegos@yahoo.com> in the comments on |
* the dBase reference page in the PHP manual. |
*/ |
$db = @fopen($this->dsn['database'], 'r'); |
if (!$db) { |
return $this->raiseError(DB_ERROR_CONNECT_FAILED, |
null, null, null, |
$php_errormsg); |
} |
$id = array(); |
$i = 0; |
$line = fread($db, 32); |
while (!feof($db)) { |
$line = fread($db, 32); |
if (substr($line, 0, 1) == chr(13)) { |
break; |
} else { |
$pos = strpos(substr($line, 0, 10), chr(0)); |
$pos = ($pos == 0 ? 10 : $pos); |
$id[$i] = array( |
'name' => substr($line, 0, $pos), |
'type' => $this->types[substr($line, 11, 1)], |
'length' => ord(substr($line, 16, 1)), |
'precision' => ord(substr($line, 17, 1)), |
); |
} |
$i++; |
} |
fclose($db); |
} |
if ($this->options['portability'] & DB_PORTABILITY_LOWERCASE) { |
$case_func = 'strtolower'; |
} else { |
$case_func = 'strval'; |
} |
$res = array(); |
$count = count($id); |
if ($mode) { |
$res['num_fields'] = $count; |
} |
for ($i = 0; $i < $count; $i++) { |
$res[$i] = array( |
'table' => $this->dsn['database'], |
'name' => $case_func($id[$i]['name']), |
'type' => $id[$i]['type'], |
'len' => $id[$i]['length'], |
'flags' => '' |
); |
if ($mode & DB_TABLEINFO_ORDER) { |
$res['order'][$res[$i]['name']] = $i; |
} |
if ($mode & DB_TABLEINFO_ORDERTABLE) { |
$res['ordertable'][$res[$i]['table']][$res[$i]['name']] = $i; |
} |
} |
return $res; |
} |
// }}} |
} |
/* |
* Local variables: |
* tab-width: 4 |
* c-basic-offset: 4 |
* End: |
*/ |
?> |
/branches/v1.0-menes/api/pear/DB/mysqli.php |
---|
New file |
0,0 → 1,1076 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ |
/** |
* The PEAR DB driver for PHP's mysqli extension |
* for interacting with MySQL databases |
* |
* PHP versions 4 and 5 |
* |
* LICENSE: This source file is subject to version 3.0 of the PHP license |
* that is available through the world-wide-web at the following URI: |
* http://www.php.net/license/3_0.txt. If you did not receive a copy of |
* the PHP License and are unable to obtain it through the web, please |
* send a note to license@php.net so we can mail you a copy immediately. |
* |
* @category Database |
* @package DB |
* @author Daniel Convissor <danielc@php.net> |
* @copyright 1997-2005 The PHP Group |
* @license http://www.php.net/license/3_0.txt PHP License 3.0 |
* @version CVS: $Id: mysqli.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $ |
* @link http://pear.php.net/package/DB |
*/ |
/** |
* Obtain the DB_common class so it can be extended from |
*/ |
require_once 'DB/common.php'; |
/** |
* The methods PEAR DB uses to interact with PHP's mysqli extension |
* for interacting with MySQL databases |
* |
* This is for MySQL versions 4.1 and above. Requires PHP 5. |
* |
* Note that persistent connections no longer exist. |
* |
* These methods overload the ones declared in DB_common. |
* |
* @category Database |
* @package DB |
* @author Daniel Convissor <danielc@php.net> |
* @copyright 1997-2005 The PHP Group |
* @license http://www.php.net/license/3_0.txt PHP License 3.0 |
* @version Release: @package_version@ |
* @link http://pear.php.net/package/DB |
* @since Class functional since Release 1.6.3 |
*/ |
class DB_mysqli extends DB_common |
{ |
// {{{ properties |
/** |
* The DB driver type (mysql, oci8, odbc, etc.) |
* @var string |
*/ |
var $phptype = 'mysqli'; |
/** |
* The database syntax variant to be used (db2, access, etc.), if any |
* @var string |
*/ |
var $dbsyntax = 'mysqli'; |
/** |
* The capabilities of this DB implementation |
* |
* The 'new_link' element contains the PHP version that first provided |
* new_link support for this DBMS. Contains false if it's unsupported. |
* |
* Meaning of the 'limit' element: |
* + 'emulate' = emulate with fetch row by number |
* + 'alter' = alter the query |
* + false = skip rows |
* |
* @var array |
*/ |
var $features = array( |
'limit' => 'alter', |
'new_link' => false, |
'numrows' => true, |
'pconnect' => false, |
'prepare' => false, |
'ssl' => true, |
'transactions' => true, |
); |
/** |
* A mapping of native error codes to DB error codes |
* @var array |
*/ |
var $errorcode_map = array( |
1004 => DB_ERROR_CANNOT_CREATE, |
1005 => DB_ERROR_CANNOT_CREATE, |
1006 => DB_ERROR_CANNOT_CREATE, |
1007 => DB_ERROR_ALREADY_EXISTS, |
1008 => DB_ERROR_CANNOT_DROP, |
1022 => DB_ERROR_ALREADY_EXISTS, |
1044 => DB_ERROR_ACCESS_VIOLATION, |
1046 => DB_ERROR_NODBSELECTED, |
1048 => DB_ERROR_CONSTRAINT, |
1049 => DB_ERROR_NOSUCHDB, |
1050 => DB_ERROR_ALREADY_EXISTS, |
1051 => DB_ERROR_NOSUCHTABLE, |
1054 => DB_ERROR_NOSUCHFIELD, |
1061 => DB_ERROR_ALREADY_EXISTS, |
1062 => DB_ERROR_ALREADY_EXISTS, |
1064 => DB_ERROR_SYNTAX, |
1091 => DB_ERROR_NOT_FOUND, |
1100 => DB_ERROR_NOT_LOCKED, |
1136 => DB_ERROR_VALUE_COUNT_ON_ROW, |
1142 => DB_ERROR_ACCESS_VIOLATION, |
1146 => DB_ERROR_NOSUCHTABLE, |
1216 => DB_ERROR_CONSTRAINT, |
1217 => DB_ERROR_CONSTRAINT, |
); |
/** |
* The raw database connection created by PHP |
* @var resource |
*/ |
var $connection; |
/** |
* The DSN information for connecting to a database |
* @var array |
*/ |
var $dsn = array(); |
/** |
* Should data manipulation queries be committed automatically? |
* @var bool |
* @access private |
*/ |
var $autocommit = true; |
/** |
* The quantity of transactions begun |
* |
* {@internal While this is private, it can't actually be designated |
* private in PHP 5 because it is directly accessed in the test suite.}} |
* |
* @var integer |
* @access private |
*/ |
var $transaction_opcount = 0; |
/** |
* The database specified in the DSN |
* |
* It's a fix to allow calls to different databases in the same script. |
* |
* @var string |
* @access private |
*/ |
var $_db = ''; |
/** |
* Array for converting MYSQLI_*_FLAG constants to text values |
* @var array |
* @access public |
* @since Property available since Release 1.6.5 |
*/ |
var $mysqli_flags = array( |
MYSQLI_NOT_NULL_FLAG => 'not_null', |
MYSQLI_PRI_KEY_FLAG => 'primary_key', |
MYSQLI_UNIQUE_KEY_FLAG => 'unique_key', |
MYSQLI_MULTIPLE_KEY_FLAG => 'multiple_key', |
MYSQLI_BLOB_FLAG => 'blob', |
MYSQLI_UNSIGNED_FLAG => 'unsigned', |
MYSQLI_ZEROFILL_FLAG => 'zerofill', |
MYSQLI_AUTO_INCREMENT_FLAG => 'auto_increment', |
MYSQLI_TIMESTAMP_FLAG => 'timestamp', |
MYSQLI_SET_FLAG => 'set', |
// MYSQLI_NUM_FLAG => 'numeric', // unnecessary |
// MYSQLI_PART_KEY_FLAG => 'multiple_key', // duplicatvie |
MYSQLI_GROUP_FLAG => 'group_by' |
); |
/** |
* Array for converting MYSQLI_TYPE_* constants to text values |
* @var array |
* @access public |
* @since Property available since Release 1.6.5 |
*/ |
var $mysqli_types = array( |
MYSQLI_TYPE_DECIMAL => 'decimal', |
MYSQLI_TYPE_TINY => 'tinyint', |
MYSQLI_TYPE_SHORT => 'int', |
MYSQLI_TYPE_LONG => 'int', |
MYSQLI_TYPE_FLOAT => 'float', |
MYSQLI_TYPE_DOUBLE => 'double', |
// MYSQLI_TYPE_NULL => 'DEFAULT NULL', // let flags handle it |
MYSQLI_TYPE_TIMESTAMP => 'timestamp', |
MYSQLI_TYPE_LONGLONG => 'bigint', |
MYSQLI_TYPE_INT24 => 'mediumint', |
MYSQLI_TYPE_DATE => 'date', |
MYSQLI_TYPE_TIME => 'time', |
MYSQLI_TYPE_DATETIME => 'datetime', |
MYSQLI_TYPE_YEAR => 'year', |
MYSQLI_TYPE_NEWDATE => 'date', |
MYSQLI_TYPE_ENUM => 'enum', |
MYSQLI_TYPE_SET => 'set', |
MYSQLI_TYPE_TINY_BLOB => 'tinyblob', |
MYSQLI_TYPE_MEDIUM_BLOB => 'mediumblob', |
MYSQLI_TYPE_LONG_BLOB => 'longblob', |
MYSQLI_TYPE_BLOB => 'blob', |
MYSQLI_TYPE_VAR_STRING => 'varchar', |
MYSQLI_TYPE_STRING => 'char', |
MYSQLI_TYPE_GEOMETRY => 'geometry', |
); |
// }}} |
// {{{ constructor |
/** |
* This constructor calls <kbd>$this->DB_common()</kbd> |
* |
* @return void |
*/ |
function DB_mysqli() |
{ |
$this->DB_common(); |
} |
// }}} |
// {{{ connect() |
/** |
* Connect to the database server, log in and open the database |
* |
* Don't call this method directly. Use DB::connect() instead. |
* |
* PEAR DB's mysqli driver supports the following extra DSN options: |
* + When the 'ssl' $option passed to DB::connect() is true: |
* + key The path to the key file. |
* + cert The path to the certificate file. |
* + ca The path to the certificate authority file. |
* + capath The path to a directory that contains trusted SSL |
* CA certificates in pem format. |
* + cipher The list of allowable ciphers for SSL encryption. |
* |
* Example of how to connect using SSL: |
* <code> |
* require_once 'DB.php'; |
* |
* $dsn = array( |
* 'phptype' => 'mysqli', |
* 'username' => 'someuser', |
* 'password' => 'apasswd', |
* 'hostspec' => 'localhost', |
* 'database' => 'thedb', |
* 'key' => 'client-key.pem', |
* 'cert' => 'client-cert.pem', |
* 'ca' => 'cacert.pem', |
* 'capath' => '/path/to/ca/dir', |
* 'cipher' => 'AES', |
* ); |
* |
* $options = array( |
* 'ssl' => true, |
* ); |
* |
* $db =& DB::connect($dsn, $options); |
* if (PEAR::isError($db)) { |
* die($db->getMessage()); |
* } |
* </code> |
* |
* @param array $dsn the data source name |
* @param bool $persistent should the connection be persistent? |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
*/ |
function connect($dsn, $persistent = false) |
{ |
if (!PEAR::loadExtension('mysqli')) { |
return $this->raiseError(DB_ERROR_EXTENSION_NOT_FOUND); |
} |
$this->dsn = $dsn; |
if ($dsn['dbsyntax']) { |
$this->dbsyntax = $dsn['dbsyntax']; |
} |
$ini = ini_get('track_errors'); |
ini_set('track_errors', 1); |
$php_errormsg = ''; |
if ($this->getOption('ssl') === true) { |
$init = mysqli_init(); |
mysqli_ssl_set( |
$init, |
empty($dsn['key']) ? null : $dsn['key'], |
empty($dsn['cert']) ? null : $dsn['cert'], |
empty($dsn['ca']) ? null : $dsn['ca'], |
empty($dsn['capath']) ? null : $dsn['capath'], |
empty($dsn['cipher']) ? null : $dsn['cipher'] |
); |
if ($this->connection = @mysqli_real_connect( |
$init, |
$dsn['hostspec'], |
$dsn['username'], |
$dsn['password'], |
$dsn['database'], |
$dsn['port'], |
$dsn['socket'])) |
{ |
$this->connection = $init; |
} |
} else { |
$this->connection = @mysqli_connect( |
$dsn['hostspec'], |
$dsn['username'], |
$dsn['password'], |
$dsn['database'], |
$dsn['port'], |
$dsn['socket'] |
); |
} |
ini_set('track_errors', $ini); |
if (!$this->connection) { |
if (($err = @mysqli_connect_error()) != '') { |
return $this->raiseError(DB_ERROR_CONNECT_FAILED, |
null, null, null, |
$err); |
} else { |
return $this->raiseError(DB_ERROR_CONNECT_FAILED, |
null, null, null, |
$php_errormsg); |
} |
} |
if ($dsn['database']) { |
$this->_db = $dsn['database']; |
} |
return DB_OK; |
} |
// }}} |
// {{{ disconnect() |
/** |
* Disconnects from the database server |
* |
* @return bool TRUE on success, FALSE on failure |
*/ |
function disconnect() |
{ |
$ret = @mysqli_close($this->connection); |
$this->connection = null; |
return $ret; |
} |
// }}} |
// {{{ simpleQuery() |
/** |
* Sends a query to the database server |
* |
* @param string the SQL query string |
* |
* @return mixed + a PHP result resrouce for successful SELECT queries |
* + the DB_OK constant for other successful queries |
* + a DB_Error object on failure |
*/ |
function simpleQuery($query) |
{ |
$ismanip = DB::isManip($query); |
$this->last_query = $query; |
$query = $this->modifyQuery($query); |
if ($this->_db) { |
if (!@mysqli_select_db($this->connection, $this->_db)) { |
return $this->mysqliRaiseError(DB_ERROR_NODBSELECTED); |
} |
} |
if (!$this->autocommit && $ismanip) { |
if ($this->transaction_opcount == 0) { |
$result = @mysqli_query($this->connection, 'SET AUTOCOMMIT=0'); |
$result = @mysqli_query($this->connection, 'BEGIN'); |
if (!$result) { |
return $this->mysqliRaiseError(); |
} |
} |
$this->transaction_opcount++; |
} |
$result = @mysqli_query($this->connection, $query); |
if (!$result) { |
return $this->mysqliRaiseError(); |
} |
if (is_object($result)) { |
return $result; |
} |
return DB_OK; |
} |
// }}} |
// {{{ nextResult() |
/** |
* Move the internal mysql result pointer to the next available result. |
* |
* This method has not been implemented yet. |
* |
* @param resource $result a valid sql result resource |
* @return false |
* @access public |
*/ |
function nextResult($result) |
{ |
return false; |
} |
// }}} |
// {{{ fetchInto() |
/** |
* Places a row from the result set into the given array |
* |
* Formating of the array and the data therein are configurable. |
* See DB_result::fetchInto() for more information. |
* |
* This method is not meant to be called directly. Use |
* DB_result::fetchInto() instead. It can't be declared "protected" |
* because DB_result is a separate object. |
* |
* @param resource $result the query result resource |
* @param array $arr the referenced array to put the data in |
* @param int $fetchmode how the resulting array should be indexed |
* @param int $rownum the row number to fetch (0 = first row) |
* |
* @return mixed DB_OK on success, NULL when the end of a result set is |
* reached or on failure |
* |
* @see DB_result::fetchInto() |
*/ |
function fetchInto($result, &$arr, $fetchmode, $rownum = null) |
{ |
if ($rownum !== null) { |
if (!@mysqli_data_seek($result, $rownum)) { |
return null; |
} |
} |
if ($fetchmode & DB_FETCHMODE_ASSOC) { |
$arr = @mysqli_fetch_array($result, MYSQLI_ASSOC); |
if ($this->options['portability'] & DB_PORTABILITY_LOWERCASE && $arr) { |
$arr = array_change_key_case($arr, CASE_LOWER); |
} |
} else { |
$arr = @mysqli_fetch_row($result); |
} |
if (!$arr) { |
return null; |
} |
if ($this->options['portability'] & DB_PORTABILITY_RTRIM) { |
/* |
* Even though this DBMS already trims output, we do this because |
* a field might have intentional whitespace at the end that |
* gets removed by DB_PORTABILITY_RTRIM under another driver. |
*/ |
$this->_rtrimArrayValues($arr); |
} |
if ($this->options['portability'] & DB_PORTABILITY_NULL_TO_EMPTY) { |
$this->_convertNullArrayValuesToEmpty($arr); |
} |
return DB_OK; |
} |
// }}} |
// {{{ freeResult() |
/** |
* Deletes the result set and frees the memory occupied by the result set |
* |
* This method is not meant to be called directly. Use |
* DB_result::free() instead. It can't be declared "protected" |
* because DB_result is a separate object. |
* |
* @param resource $result PHP's query result resource |
* |
* @return bool TRUE on success, FALSE if $result is invalid |
* |
* @see DB_result::free() |
*/ |
function freeResult($result) |
{ |
return @mysqli_free_result($result); |
} |
// }}} |
// {{{ numCols() |
/** |
* Gets the number of columns in a result set |
* |
* This method is not meant to be called directly. Use |
* DB_result::numCols() instead. It can't be declared "protected" |
* because DB_result is a separate object. |
* |
* @param resource $result PHP's query result resource |
* |
* @return int the number of columns. A DB_Error object on failure. |
* |
* @see DB_result::numCols() |
*/ |
function numCols($result) |
{ |
$cols = @mysqli_num_fields($result); |
if (!$cols) { |
return $this->mysqliRaiseError(); |
} |
return $cols; |
} |
// }}} |
// {{{ numRows() |
/** |
* Gets the number of rows in a result set |
* |
* This method is not meant to be called directly. Use |
* DB_result::numRows() instead. It can't be declared "protected" |
* because DB_result is a separate object. |
* |
* @param resource $result PHP's query result resource |
* |
* @return int the number of rows. A DB_Error object on failure. |
* |
* @see DB_result::numRows() |
*/ |
function numRows($result) |
{ |
$rows = @mysqli_num_rows($result); |
if ($rows === null) { |
return $this->mysqliRaiseError(); |
} |
return $rows; |
} |
// }}} |
// {{{ autoCommit() |
/** |
* Enables or disables automatic commits |
* |
* @param bool $onoff true turns it on, false turns it off |
* |
* @return int DB_OK on success. A DB_Error object if the driver |
* doesn't support auto-committing transactions. |
*/ |
function autoCommit($onoff = false) |
{ |
// XXX if $this->transaction_opcount > 0, we should probably |
// issue a warning here. |
$this->autocommit = $onoff ? true : false; |
return DB_OK; |
} |
// }}} |
// {{{ commit() |
/** |
* Commits the current transaction |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
*/ |
function commit() |
{ |
if ($this->transaction_opcount > 0) { |
if ($this->_db) { |
if (!@mysqli_select_db($this->connection, $this->_db)) { |
return $this->mysqliRaiseError(DB_ERROR_NODBSELECTED); |
} |
} |
$result = @mysqli_query($this->connection, 'COMMIT'); |
$result = @mysqli_query($this->connection, 'SET AUTOCOMMIT=1'); |
$this->transaction_opcount = 0; |
if (!$result) { |
return $this->mysqliRaiseError(); |
} |
} |
return DB_OK; |
} |
// }}} |
// {{{ rollback() |
/** |
* Reverts the current transaction |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
*/ |
function rollback() |
{ |
if ($this->transaction_opcount > 0) { |
if ($this->_db) { |
if (!@mysqli_select_db($this->connection, $this->_db)) { |
return $this->mysqliRaiseError(DB_ERROR_NODBSELECTED); |
} |
} |
$result = @mysqli_query($this->connection, 'ROLLBACK'); |
$result = @mysqli_query($this->connection, 'SET AUTOCOMMIT=1'); |
$this->transaction_opcount = 0; |
if (!$result) { |
return $this->mysqliRaiseError(); |
} |
} |
return DB_OK; |
} |
// }}} |
// {{{ affectedRows() |
/** |
* Determines the number of rows affected by a data maniuplation query |
* |
* 0 is returned for queries that don't manipulate data. |
* |
* @return int the number of rows. A DB_Error object on failure. |
*/ |
function affectedRows() |
{ |
if (DB::isManip($this->last_query)) { |
return @mysqli_affected_rows($this->connection); |
} else { |
return 0; |
} |
} |
// }}} |
// {{{ nextId() |
/** |
* Returns the next free id in a sequence |
* |
* @param string $seq_name name of the sequence |
* @param boolean $ondemand when true, the seqence is automatically |
* created if it does not exist |
* |
* @return int the next id number in the sequence. |
* A DB_Error object on failure. |
* |
* @see DB_common::nextID(), DB_common::getSequenceName(), |
* DB_mysqli::createSequence(), DB_mysqli::dropSequence() |
*/ |
function nextId($seq_name, $ondemand = true) |
{ |
$seqname = $this->getSequenceName($seq_name); |
do { |
$repeat = 0; |
$this->pushErrorHandling(PEAR_ERROR_RETURN); |
$result = $this->query('UPDATE ' . $seqname |
. ' SET id = LAST_INSERT_ID(id + 1)'); |
$this->popErrorHandling(); |
if ($result === DB_OK) { |
// COMMON CASE |
$id = @mysqli_insert_id($this->connection); |
if ($id != 0) { |
return $id; |
} |
// EMPTY SEQ TABLE |
// Sequence table must be empty for some reason, |
// so fill it and return 1 |
// Obtain a user-level lock |
$result = $this->getOne('SELECT GET_LOCK(' |
. "'${seqname}_lock', 10)"); |
if (DB::isError($result)) { |
return $this->raiseError($result); |
} |
if ($result == 0) { |
return $this->mysqliRaiseError(DB_ERROR_NOT_LOCKED); |
} |
// add the default value |
$result = $this->query('REPLACE INTO ' . $seqname |
. ' (id) VALUES (0)'); |
if (DB::isError($result)) { |
return $this->raiseError($result); |
} |
// Release the lock |
$result = $this->getOne('SELECT RELEASE_LOCK(' |
. "'${seqname}_lock')"); |
if (DB::isError($result)) { |
return $this->raiseError($result); |
} |
// We know what the result will be, so no need to try again |
return 1; |
} elseif ($ondemand && DB::isError($result) && |
$result->getCode() == DB_ERROR_NOSUCHTABLE) |
{ |
// ONDEMAND TABLE CREATION |
$result = $this->createSequence($seq_name); |
// Since createSequence initializes the ID to be 1, |
// we do not need to retrieve the ID again (or we will get 2) |
if (DB::isError($result)) { |
return $this->raiseError($result); |
} else { |
// First ID of a newly created sequence is 1 |
return 1; |
} |
} elseif (DB::isError($result) && |
$result->getCode() == DB_ERROR_ALREADY_EXISTS) |
{ |
// BACKWARDS COMPAT |
// see _BCsequence() comment |
$result = $this->_BCsequence($seqname); |
if (DB::isError($result)) { |
return $this->raiseError($result); |
} |
$repeat = 1; |
} |
} while ($repeat); |
return $this->raiseError($result); |
} |
/** |
* Creates a new sequence |
* |
* @param string $seq_name name of the new sequence |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
* |
* @see DB_common::createSequence(), DB_common::getSequenceName(), |
* DB_mysqli::nextID(), DB_mysqli::dropSequence() |
*/ |
function createSequence($seq_name) |
{ |
$seqname = $this->getSequenceName($seq_name); |
$res = $this->query('CREATE TABLE ' . $seqname |
. ' (id INTEGER UNSIGNED AUTO_INCREMENT NOT NULL,' |
. ' PRIMARY KEY(id))'); |
if (DB::isError($res)) { |
return $res; |
} |
// insert yields value 1, nextId call will generate ID 2 |
return $this->query("INSERT INTO ${seqname} (id) VALUES (0)"); |
} |
// }}} |
// {{{ dropSequence() |
/** |
* Deletes a sequence |
* |
* @param string $seq_name name of the sequence to be deleted |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
* |
* @see DB_common::dropSequence(), DB_common::getSequenceName(), |
* DB_mysql::nextID(), DB_mysql::createSequence() |
*/ |
function dropSequence($seq_name) |
{ |
return $this->query('DROP TABLE ' . $this->getSequenceName($seq_name)); |
} |
// }}} |
// {{{ _BCsequence() |
/** |
* Backwards compatibility with old sequence emulation implementation |
* (clean up the dupes) |
* |
* @param string $seqname the sequence name to clean up |
* |
* @return bool true on success. A DB_Error object on failure. |
* |
* @access private |
*/ |
function _BCsequence($seqname) |
{ |
// Obtain a user-level lock... this will release any previous |
// application locks, but unlike LOCK TABLES, it does not abort |
// the current transaction and is much less frequently used. |
$result = $this->getOne("SELECT GET_LOCK('${seqname}_lock',10)"); |
if (DB::isError($result)) { |
return $result; |
} |
if ($result == 0) { |
// Failed to get the lock, can't do the conversion, bail |
// with a DB_ERROR_NOT_LOCKED error |
return $this->mysqliRaiseError(DB_ERROR_NOT_LOCKED); |
} |
$highest_id = $this->getOne("SELECT MAX(id) FROM ${seqname}"); |
if (DB::isError($highest_id)) { |
return $highest_id; |
} |
// This should kill all rows except the highest |
// We should probably do something if $highest_id isn't |
// numeric, but I'm at a loss as how to handle that... |
$result = $this->query('DELETE FROM ' . $seqname |
. " WHERE id <> $highest_id"); |
if (DB::isError($result)) { |
return $result; |
} |
// If another thread has been waiting for this lock, |
// it will go thru the above procedure, but will have no |
// real effect |
$result = $this->getOne("SELECT RELEASE_LOCK('${seqname}_lock')"); |
if (DB::isError($result)) { |
return $result; |
} |
return true; |
} |
// }}} |
// {{{ quoteIdentifier() |
/** |
* Quotes a string so it can be safely used as a table or column name |
* |
* MySQL can't handle the backtick character (<kbd>`</kbd>) in |
* table or column names. |
* |
* @param string $str identifier name to be quoted |
* |
* @return string quoted identifier string |
* |
* @see DB_common::quoteIdentifier() |
* @since Method available since Release 1.6.0 |
*/ |
function quoteIdentifier($str) |
{ |
return '`' . $str . '`'; |
} |
// }}} |
// {{{ escapeSimple() |
/** |
* Escapes a string according to the current DBMS's standards |
* |
* @param string $str the string to be escaped |
* |
* @return string the escaped string |
* |
* @see DB_common::quoteSmart() |
* @since Method available since Release 1.6.0 |
*/ |
function escapeSimple($str) |
{ |
return @mysqli_real_escape_string($this->connection, $str); |
} |
// }}} |
// {{{ modifyLimitQuery() |
/** |
* Adds LIMIT clauses to a query string according to current DBMS standards |
* |
* @param string $query the query to modify |
* @param int $from the row to start to fetching (0 = the first row) |
* @param int $count the numbers of rows to fetch |
* @param mixed $params array, string or numeric data to be used in |
* execution of the statement. Quantity of items |
* passed must match quantity of placeholders in |
* query: meaning 1 placeholder for non-array |
* parameters or 1 placeholder per array element. |
* |
* @return string the query string with LIMIT clauses added |
* |
* @access protected |
*/ |
function modifyLimitQuery($query, $from, $count, $params = array()) |
{ |
if (DB::isManip($query)) { |
return $query . " LIMIT $count"; |
} else { |
return $query . " LIMIT $from, $count"; |
} |
} |
// }}} |
// {{{ mysqliRaiseError() |
/** |
* Produces a DB_Error object regarding the current problem |
* |
* @param int $errno if the error is being manually raised pass a |
* DB_ERROR* constant here. If this isn't passed |
* the error information gathered from the DBMS. |
* |
* @return object the DB_Error object |
* |
* @see DB_common::raiseError(), |
* DB_mysqli::errorNative(), DB_common::errorCode() |
*/ |
function mysqliRaiseError($errno = null) |
{ |
if ($errno === null) { |
if ($this->options['portability'] & DB_PORTABILITY_ERRORS) { |
$this->errorcode_map[1022] = DB_ERROR_CONSTRAINT; |
$this->errorcode_map[1048] = DB_ERROR_CONSTRAINT_NOT_NULL; |
$this->errorcode_map[1062] = DB_ERROR_CONSTRAINT; |
} else { |
// Doing this in case mode changes during runtime. |
$this->errorcode_map[1022] = DB_ERROR_ALREADY_EXISTS; |
$this->errorcode_map[1048] = DB_ERROR_CONSTRAINT; |
$this->errorcode_map[1062] = DB_ERROR_ALREADY_EXISTS; |
} |
$errno = $this->errorCode(mysqli_errno($this->connection)); |
} |
return $this->raiseError($errno, null, null, null, |
@mysqli_errno($this->connection) . ' ** ' . |
@mysqli_error($this->connection)); |
} |
// }}} |
// {{{ errorNative() |
/** |
* Gets the DBMS' native error code produced by the last query |
* |
* @return int the DBMS' error code |
*/ |
function errorNative() |
{ |
return @mysqli_errno($this->connection); |
} |
// }}} |
// {{{ tableInfo() |
/** |
* Returns information about a table or a result set |
* |
* @param object|string $result DB_result object from a query or a |
* string containing the name of a table. |
* While this also accepts a query result |
* resource identifier, this behavior is |
* deprecated. |
* @param int $mode a valid tableInfo mode |
* |
* @return array an associative array with the information requested. |
* A DB_Error object on failure. |
* |
* @see DB_common::setOption() |
*/ |
function tableInfo($result, $mode = null) |
{ |
if (is_string($result)) { |
/* |
* Probably received a table name. |
* Create a result resource identifier. |
*/ |
$id = @mysqli_query($this->connection, |
"SELECT * FROM $result LIMIT 0"); |
$got_string = true; |
} elseif (isset($result->result)) { |
/* |
* Probably received a result object. |
* Extract the result resource identifier. |
*/ |
$id = $result->result; |
$got_string = false; |
} else { |
/* |
* Probably received a result resource identifier. |
* Copy it. |
* Deprecated. Here for compatibility only. |
*/ |
$id = $result; |
$got_string = false; |
} |
if (!is_a($id, 'mysqli_result')) { |
return $this->mysqliRaiseError(DB_ERROR_NEED_MORE_DATA); |
} |
if ($this->options['portability'] & DB_PORTABILITY_LOWERCASE) { |
$case_func = 'strtolower'; |
} else { |
$case_func = 'strval'; |
} |
$count = @mysqli_num_fields($id); |
$res = array(); |
if ($mode) { |
$res['num_fields'] = $count; |
} |
for ($i = 0; $i < $count; $i++) { |
$tmp = @mysqli_fetch_field($id); |
$flags = ''; |
foreach ($this->mysqli_flags as $const => $means) { |
if ($tmp->flags & $const) { |
$flags .= $means . ' '; |
} |
} |
if ($tmp->def) { |
$flags .= 'default_' . rawurlencode($tmp->def); |
} |
$flags = trim($flags); |
$res[$i] = array( |
'table' => $case_func($tmp->table), |
'name' => $case_func($tmp->name), |
'type' => isset($this->mysqli_types[$tmp->type]) |
? $this->mysqli_types[$tmp->type] |
: 'unknown', |
'len' => $tmp->max_length, |
'flags' => $flags, |
); |
if ($mode & DB_TABLEINFO_ORDER) { |
$res['order'][$res[$i]['name']] = $i; |
} |
if ($mode & DB_TABLEINFO_ORDERTABLE) { |
$res['ordertable'][$res[$i]['table']][$res[$i]['name']] = $i; |
} |
} |
// free the result only if we were called on a table |
if ($got_string) { |
@mysqli_free_result($id); |
} |
return $res; |
} |
// }}} |
// {{{ getSpecialQuery() |
/** |
* Obtains the query string needed for listing a given type of objects |
* |
* @param string $type the kind of objects you want to retrieve |
* |
* @return string the SQL query string or null if the driver doesn't |
* support the object type requested |
* |
* @access protected |
* @see DB_common::getListOf() |
*/ |
function getSpecialQuery($type) |
{ |
switch ($type) { |
case 'tables': |
return 'SHOW TABLES'; |
case 'users': |
return 'SELECT DISTINCT User FROM mysql.user'; |
case 'databases': |
return 'SHOW DATABASES'; |
default: |
return null; |
} |
} |
// }}} |
} |
/* |
* Local variables: |
* tab-width: 4 |
* c-basic-offset: 4 |
* End: |
*/ |
?> |
/branches/v1.0-menes/api/pear/DB/mssql.php |
---|
New file |
0,0 → 1,914 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ |
/** |
* The PEAR DB driver for PHP's mssql extension |
* for interacting with Microsoft SQL Server databases |
* |
* PHP versions 4 and 5 |
* |
* LICENSE: This source file is subject to version 3.0 of the PHP license |
* that is available through the world-wide-web at the following URI: |
* http://www.php.net/license/3_0.txt. If you did not receive a copy of |
* the PHP License and are unable to obtain it through the web, please |
* send a note to license@php.net so we can mail you a copy immediately. |
* |
* @category Database |
* @package DB |
* @author Sterling Hughes <sterling@php.net> |
* @author Daniel Convissor <danielc@php.net> |
* @copyright 1997-2005 The PHP Group |
* @license http://www.php.net/license/3_0.txt PHP License 3.0 |
* @version CVS: $Id: mssql.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $ |
* @link http://pear.php.net/package/DB |
*/ |
/** |
* Obtain the DB_common class so it can be extended from |
*/ |
require_once 'DB/common.php'; |
/** |
* The methods PEAR DB uses to interact with PHP's mssql extension |
* for interacting with Microsoft SQL Server databases |
* |
* These methods overload the ones declared in DB_common. |
* |
* @category Database |
* @package DB |
* @author Sterling Hughes <sterling@php.net> |
* @author Daniel Convissor <danielc@php.net> |
* @copyright 1997-2005 The PHP Group |
* @license http://www.php.net/license/3_0.txt PHP License 3.0 |
* @version Release: @package_version@ |
* @link http://pear.php.net/package/DB |
*/ |
class DB_mssql extends DB_common |
{ |
// {{{ properties |
/** |
* The DB driver type (mysql, oci8, odbc, etc.) |
* @var string |
*/ |
var $phptype = 'mssql'; |
/** |
* The database syntax variant to be used (db2, access, etc.), if any |
* @var string |
*/ |
var $dbsyntax = 'mssql'; |
/** |
* The capabilities of this DB implementation |
* |
* The 'new_link' element contains the PHP version that first provided |
* new_link support for this DBMS. Contains false if it's unsupported. |
* |
* Meaning of the 'limit' element: |
* + 'emulate' = emulate with fetch row by number |
* + 'alter' = alter the query |
* + false = skip rows |
* |
* @var array |
*/ |
var $features = array( |
'limit' => 'emulate', |
'new_link' => false, |
'numrows' => true, |
'pconnect' => true, |
'prepare' => false, |
'ssl' => false, |
'transactions' => true, |
); |
/** |
* A mapping of native error codes to DB error codes |
* @var array |
*/ |
// XXX Add here error codes ie: 'S100E' => DB_ERROR_SYNTAX |
var $errorcode_map = array( |
110 => DB_ERROR_VALUE_COUNT_ON_ROW, |
155 => DB_ERROR_NOSUCHFIELD, |
170 => DB_ERROR_SYNTAX, |
207 => DB_ERROR_NOSUCHFIELD, |
208 => DB_ERROR_NOSUCHTABLE, |
245 => DB_ERROR_INVALID_NUMBER, |
515 => DB_ERROR_CONSTRAINT_NOT_NULL, |
547 => DB_ERROR_CONSTRAINT, |
1913 => DB_ERROR_ALREADY_EXISTS, |
2627 => DB_ERROR_CONSTRAINT, |
2714 => DB_ERROR_ALREADY_EXISTS, |
3701 => DB_ERROR_NOSUCHTABLE, |
8134 => DB_ERROR_DIVZERO, |
); |
/** |
* The raw database connection created by PHP |
* @var resource |
*/ |
var $connection; |
/** |
* The DSN information for connecting to a database |
* @var array |
*/ |
var $dsn = array(); |
/** |
* Should data manipulation queries be committed automatically? |
* @var bool |
* @access private |
*/ |
var $autocommit = true; |
/** |
* The quantity of transactions begun |
* |
* {@internal While this is private, it can't actually be designated |
* private in PHP 5 because it is directly accessed in the test suite.}} |
* |
* @var integer |
* @access private |
*/ |
var $transaction_opcount = 0; |
/** |
* The database specified in the DSN |
* |
* It's a fix to allow calls to different databases in the same script. |
* |
* @var string |
* @access private |
*/ |
var $_db = null; |
// }}} |
// {{{ constructor |
/** |
* This constructor calls <kbd>$this->DB_common()</kbd> |
* |
* @return void |
*/ |
function DB_mssql() |
{ |
$this->DB_common(); |
} |
// }}} |
// {{{ connect() |
/** |
* Connect to the database server, log in and open the database |
* |
* Don't call this method directly. Use DB::connect() instead. |
* |
* @param array $dsn the data source name |
* @param bool $persistent should the connection be persistent? |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
*/ |
function connect($dsn, $persistent = false) |
{ |
if (!PEAR::loadExtension('mssql') && !PEAR::loadExtension('sybase') |
&& !PEAR::loadExtension('sybase_ct')) |
{ |
return $this->raiseError(DB_ERROR_EXTENSION_NOT_FOUND); |
} |
$this->dsn = $dsn; |
if ($dsn['dbsyntax']) { |
$this->dbsyntax = $dsn['dbsyntax']; |
} |
$params = array( |
$dsn['hostspec'] ? $dsn['hostspec'] : 'localhost', |
$dsn['username'] ? $dsn['username'] : null, |
$dsn['password'] ? $dsn['password'] : null, |
); |
if ($dsn['port']) { |
$params[0] .= ((substr(PHP_OS, 0, 3) == 'WIN') ? ',' : ':') |
. $dsn['port']; |
} |
$connect_function = $persistent ? 'mssql_pconnect' : 'mssql_connect'; |
$this->connection = @call_user_func_array($connect_function, $params); |
if (!$this->connection) { |
return $this->raiseError(DB_ERROR_CONNECT_FAILED, |
null, null, null, |
@mssql_get_last_message()); |
} |
if ($dsn['database']) { |
if (!@mssql_select_db($dsn['database'], $this->connection)) { |
return $this->raiseError(DB_ERROR_NODBSELECTED, |
null, null, null, |
@mssql_get_last_message()); |
} |
$this->_db = $dsn['database']; |
} |
return DB_OK; |
} |
// }}} |
// {{{ disconnect() |
/** |
* Disconnects from the database server |
* |
* @return bool TRUE on success, FALSE on failure |
*/ |
function disconnect() |
{ |
$ret = @mssql_close($this->connection); |
$this->connection = null; |
return $ret; |
} |
// }}} |
// {{{ simpleQuery() |
/** |
* Sends a query to the database server |
* |
* @param string the SQL query string |
* |
* @return mixed + a PHP result resrouce for successful SELECT queries |
* + the DB_OK constant for other successful queries |
* + a DB_Error object on failure |
*/ |
function simpleQuery($query) |
{ |
$ismanip = DB::isManip($query); |
$this->last_query = $query; |
if (!@mssql_select_db($this->_db, $this->connection)) { |
return $this->mssqlRaiseError(DB_ERROR_NODBSELECTED); |
} |
$query = $this->modifyQuery($query); |
if (!$this->autocommit && $ismanip) { |
if ($this->transaction_opcount == 0) { |
$result = @mssql_query('BEGIN TRAN', $this->connection); |
if (!$result) { |
return $this->mssqlRaiseError(); |
} |
} |
$this->transaction_opcount++; |
} |
$result = @mssql_query($query, $this->connection); |
if (!$result) { |
return $this->mssqlRaiseError(); |
} |
// Determine which queries that should return data, and which |
// should return an error code only. |
return $ismanip ? DB_OK : $result; |
} |
// }}} |
// {{{ nextResult() |
/** |
* Move the internal mssql result pointer to the next available result |
* |
* @param a valid fbsql result resource |
* |
* @access public |
* |
* @return true if a result is available otherwise return false |
*/ |
function nextResult($result) |
{ |
return @mssql_next_result($result); |
} |
// }}} |
// {{{ fetchInto() |
/** |
* Places a row from the result set into the given array |
* |
* Formating of the array and the data therein are configurable. |
* See DB_result::fetchInto() for more information. |
* |
* This method is not meant to be called directly. Use |
* DB_result::fetchInto() instead. It can't be declared "protected" |
* because DB_result is a separate object. |
* |
* @param resource $result the query result resource |
* @param array $arr the referenced array to put the data in |
* @param int $fetchmode how the resulting array should be indexed |
* @param int $rownum the row number to fetch (0 = first row) |
* |
* @return mixed DB_OK on success, NULL when the end of a result set is |
* reached or on failure |
* |
* @see DB_result::fetchInto() |
*/ |
function fetchInto($result, &$arr, $fetchmode, $rownum = null) |
{ |
if ($rownum !== null) { |
if (!@mssql_data_seek($result, $rownum)) { |
return null; |
} |
} |
if ($fetchmode & DB_FETCHMODE_ASSOC) { |
$arr = @mssql_fetch_array($result, MSSQL_ASSOC); |
if ($this->options['portability'] & DB_PORTABILITY_LOWERCASE && $arr) { |
$arr = array_change_key_case($arr, CASE_LOWER); |
} |
} else { |
$arr = @mssql_fetch_row($result); |
} |
if (!$arr) { |
return null; |
} |
if ($this->options['portability'] & DB_PORTABILITY_RTRIM) { |
$this->_rtrimArrayValues($arr); |
} |
if ($this->options['portability'] & DB_PORTABILITY_NULL_TO_EMPTY) { |
$this->_convertNullArrayValuesToEmpty($arr); |
} |
return DB_OK; |
} |
// }}} |
// {{{ freeResult() |
/** |
* Deletes the result set and frees the memory occupied by the result set |
* |
* This method is not meant to be called directly. Use |
* DB_result::free() instead. It can't be declared "protected" |
* because DB_result is a separate object. |
* |
* @param resource $result PHP's query result resource |
* |
* @return bool TRUE on success, FALSE if $result is invalid |
* |
* @see DB_result::free() |
*/ |
function freeResult($result) |
{ |
return @mssql_free_result($result); |
} |
// }}} |
// {{{ numCols() |
/** |
* Gets the number of columns in a result set |
* |
* This method is not meant to be called directly. Use |
* DB_result::numCols() instead. It can't be declared "protected" |
* because DB_result is a separate object. |
* |
* @param resource $result PHP's query result resource |
* |
* @return int the number of columns. A DB_Error object on failure. |
* |
* @see DB_result::numCols() |
*/ |
function numCols($result) |
{ |
$cols = @mssql_num_fields($result); |
if (!$cols) { |
return $this->mssqlRaiseError(); |
} |
return $cols; |
} |
// }}} |
// {{{ numRows() |
/** |
* Gets the number of rows in a result set |
* |
* This method is not meant to be called directly. Use |
* DB_result::numRows() instead. It can't be declared "protected" |
* because DB_result is a separate object. |
* |
* @param resource $result PHP's query result resource |
* |
* @return int the number of rows. A DB_Error object on failure. |
* |
* @see DB_result::numRows() |
*/ |
function numRows($result) |
{ |
$rows = @mssql_num_rows($result); |
if ($rows === false) { |
return $this->mssqlRaiseError(); |
} |
return $rows; |
} |
// }}} |
// {{{ autoCommit() |
/** |
* Enables or disables automatic commits |
* |
* @param bool $onoff true turns it on, false turns it off |
* |
* @return int DB_OK on success. A DB_Error object if the driver |
* doesn't support auto-committing transactions. |
*/ |
function autoCommit($onoff = false) |
{ |
// XXX if $this->transaction_opcount > 0, we should probably |
// issue a warning here. |
$this->autocommit = $onoff ? true : false; |
return DB_OK; |
} |
// }}} |
// {{{ commit() |
/** |
* Commits the current transaction |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
*/ |
function commit() |
{ |
if ($this->transaction_opcount > 0) { |
if (!@mssql_select_db($this->_db, $this->connection)) { |
return $this->mssqlRaiseError(DB_ERROR_NODBSELECTED); |
} |
$result = @mssql_query('COMMIT TRAN', $this->connection); |
$this->transaction_opcount = 0; |
if (!$result) { |
return $this->mssqlRaiseError(); |
} |
} |
return DB_OK; |
} |
// }}} |
// {{{ rollback() |
/** |
* Reverts the current transaction |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
*/ |
function rollback() |
{ |
if ($this->transaction_opcount > 0) { |
if (!@mssql_select_db($this->_db, $this->connection)) { |
return $this->mssqlRaiseError(DB_ERROR_NODBSELECTED); |
} |
$result = @mssql_query('ROLLBACK TRAN', $this->connection); |
$this->transaction_opcount = 0; |
if (!$result) { |
return $this->mssqlRaiseError(); |
} |
} |
return DB_OK; |
} |
// }}} |
// {{{ affectedRows() |
/** |
* Determines the number of rows affected by a data maniuplation query |
* |
* 0 is returned for queries that don't manipulate data. |
* |
* @return int the number of rows. A DB_Error object on failure. |
*/ |
function affectedRows() |
{ |
if (DB::isManip($this->last_query)) { |
$res = @mssql_query('select @@rowcount', $this->connection); |
if (!$res) { |
return $this->mssqlRaiseError(); |
} |
$ar = @mssql_fetch_row($res); |
if (!$ar) { |
$result = 0; |
} else { |
@mssql_free_result($res); |
$result = $ar[0]; |
} |
} else { |
$result = 0; |
} |
return $result; |
} |
// }}} |
// {{{ nextId() |
/** |
* Returns the next free id in a sequence |
* |
* @param string $seq_name name of the sequence |
* @param boolean $ondemand when true, the seqence is automatically |
* created if it does not exist |
* |
* @return int the next id number in the sequence. |
* A DB_Error object on failure. |
* |
* @see DB_common::nextID(), DB_common::getSequenceName(), |
* DB_mssql::createSequence(), DB_mssql::dropSequence() |
*/ |
function nextId($seq_name, $ondemand = true) |
{ |
$seqname = $this->getSequenceName($seq_name); |
if (!@mssql_select_db($this->_db, $this->connection)) { |
return $this->mssqlRaiseError(DB_ERROR_NODBSELECTED); |
} |
$repeat = 0; |
do { |
$this->pushErrorHandling(PEAR_ERROR_RETURN); |
$result = $this->query("INSERT INTO $seqname (vapor) VALUES (0)"); |
$this->popErrorHandling(); |
if ($ondemand && DB::isError($result) && |
($result->getCode() == DB_ERROR || $result->getCode() == DB_ERROR_NOSUCHTABLE)) |
{ |
$repeat = 1; |
$result = $this->createSequence($seq_name); |
if (DB::isError($result)) { |
return $this->raiseError($result); |
} |
} elseif (!DB::isError($result)) { |
$result =& $this->query("SELECT @@IDENTITY FROM $seqname"); |
$repeat = 0; |
} else { |
$repeat = false; |
} |
} while ($repeat); |
if (DB::isError($result)) { |
return $this->raiseError($result); |
} |
$result = $result->fetchRow(DB_FETCHMODE_ORDERED); |
return $result[0]; |
} |
/** |
* Creates a new sequence |
* |
* @param string $seq_name name of the new sequence |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
* |
* @see DB_common::createSequence(), DB_common::getSequenceName(), |
* DB_mssql::nextID(), DB_mssql::dropSequence() |
*/ |
function createSequence($seq_name) |
{ |
return $this->query('CREATE TABLE ' |
. $this->getSequenceName($seq_name) |
. ' ([id] [int] IDENTITY (1, 1) NOT NULL,' |
. ' [vapor] [int] NULL)'); |
} |
// }}} |
// {{{ dropSequence() |
/** |
* Deletes a sequence |
* |
* @param string $seq_name name of the sequence to be deleted |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
* |
* @see DB_common::dropSequence(), DB_common::getSequenceName(), |
* DB_mssql::nextID(), DB_mssql::createSequence() |
*/ |
function dropSequence($seq_name) |
{ |
return $this->query('DROP TABLE ' . $this->getSequenceName($seq_name)); |
} |
// }}} |
// {{{ quoteIdentifier() |
/** |
* Quotes a string so it can be safely used as a table or column name |
* |
* @param string $str identifier name to be quoted |
* |
* @return string quoted identifier string |
* |
* @see DB_common::quoteIdentifier() |
* @since Method available since Release 1.6.0 |
*/ |
function quoteIdentifier($str) |
{ |
return '[' . str_replace(']', ']]', $str) . ']'; |
} |
// }}} |
// {{{ mssqlRaiseError() |
/** |
* Produces a DB_Error object regarding the current problem |
* |
* @param int $errno if the error is being manually raised pass a |
* DB_ERROR* constant here. If this isn't passed |
* the error information gathered from the DBMS. |
* |
* @return object the DB_Error object |
* |
* @see DB_common::raiseError(), |
* DB_mssql::errorNative(), DB_mssql::errorCode() |
*/ |
function mssqlRaiseError($code = null) |
{ |
$message = @mssql_get_last_message(); |
if (!$code) { |
$code = $this->errorNative(); |
} |
return $this->raiseError($this->errorCode($code, $message), |
null, null, null, "$code - $message"); |
} |
// }}} |
// {{{ errorNative() |
/** |
* Gets the DBMS' native error code produced by the last query |
* |
* @return int the DBMS' error code |
*/ |
function errorNative() |
{ |
$res = @mssql_query('select @@ERROR as ErrorCode', $this->connection); |
if (!$res) { |
return DB_ERROR; |
} |
$row = @mssql_fetch_row($res); |
return $row[0]; |
} |
// }}} |
// {{{ errorCode() |
/** |
* Determines PEAR::DB error code from mssql's native codes. |
* |
* If <var>$nativecode</var> isn't known yet, it will be looked up. |
* |
* @param mixed $nativecode mssql error code, if known |
* @return integer an error number from a DB error constant |
* @see errorNative() |
*/ |
function errorCode($nativecode = null, $msg = '') |
{ |
if (!$nativecode) { |
$nativecode = $this->errorNative(); |
} |
if (isset($this->errorcode_map[$nativecode])) { |
if ($nativecode == 3701 |
&& preg_match('/Cannot drop the index/i', $msg)) |
{ |
return DB_ERROR_NOT_FOUND; |
} |
return $this->errorcode_map[$nativecode]; |
} else { |
return DB_ERROR; |
} |
} |
// }}} |
// {{{ tableInfo() |
/** |
* Returns information about a table or a result set |
* |
* NOTE: only supports 'table' and 'flags' if <var>$result</var> |
* is a table name. |
* |
* @param object|string $result DB_result object from a query or a |
* string containing the name of a table. |
* While this also accepts a query result |
* resource identifier, this behavior is |
* deprecated. |
* @param int $mode a valid tableInfo mode |
* |
* @return array an associative array with the information requested. |
* A DB_Error object on failure. |
* |
* @see DB_common::tableInfo() |
*/ |
function tableInfo($result, $mode = null) |
{ |
if (is_string($result)) { |
/* |
* Probably received a table name. |
* Create a result resource identifier. |
*/ |
if (!@mssql_select_db($this->_db, $this->connection)) { |
return $this->mssqlRaiseError(DB_ERROR_NODBSELECTED); |
} |
$id = @mssql_query("SELECT * FROM $result WHERE 1=0", |
$this->connection); |
$got_string = true; |
} elseif (isset($result->result)) { |
/* |
* Probably received a result object. |
* Extract the result resource identifier. |
*/ |
$id = $result->result; |
$got_string = false; |
} else { |
/* |
* Probably received a result resource identifier. |
* Copy it. |
* Deprecated. Here for compatibility only. |
*/ |
$id = $result; |
$got_string = false; |
} |
if (!is_resource($id)) { |
return $this->mssqlRaiseError(DB_ERROR_NEED_MORE_DATA); |
} |
if ($this->options['portability'] & DB_PORTABILITY_LOWERCASE) { |
$case_func = 'strtolower'; |
} else { |
$case_func = 'strval'; |
} |
$count = @mssql_num_fields($id); |
$res = array(); |
if ($mode) { |
$res['num_fields'] = $count; |
} |
for ($i = 0; $i < $count; $i++) { |
$res[$i] = array( |
'table' => $got_string ? $case_func($result) : '', |
'name' => $case_func(@mssql_field_name($id, $i)), |
'type' => @mssql_field_type($id, $i), |
'len' => @mssql_field_length($id, $i), |
// We only support flags for table |
'flags' => $got_string |
? $this->_mssql_field_flags($result, |
@mssql_field_name($id, $i)) |
: '', |
); |
if ($mode & DB_TABLEINFO_ORDER) { |
$res['order'][$res[$i]['name']] = $i; |
} |
if ($mode & DB_TABLEINFO_ORDERTABLE) { |
$res['ordertable'][$res[$i]['table']][$res[$i]['name']] = $i; |
} |
} |
// free the result only if we were called on a table |
if ($got_string) { |
@mssql_free_result($id); |
} |
return $res; |
} |
// }}} |
// {{{ _mssql_field_flags() |
/** |
* Get a column's flags |
* |
* Supports "not_null", "primary_key", |
* "auto_increment" (mssql identity), "timestamp" (mssql timestamp), |
* "unique_key" (mssql unique index, unique check or primary_key) and |
* "multiple_key" (multikey index) |
* |
* mssql timestamp is NOT similar to the mysql timestamp so this is maybe |
* not useful at all - is the behaviour of mysql_field_flags that primary |
* keys are alway unique? is the interpretation of multiple_key correct? |
* |
* @param string $table the table name |
* @param string $column the field name |
* |
* @return string the flags |
* |
* @access private |
* @author Joern Barthel <j_barthel@web.de> |
*/ |
function _mssql_field_flags($table, $column) |
{ |
static $tableName = null; |
static $flags = array(); |
if ($table != $tableName) { |
$flags = array(); |
$tableName = $table; |
// get unique and primary keys |
$res = $this->getAll("EXEC SP_HELPINDEX[$table]", DB_FETCHMODE_ASSOC); |
foreach ($res as $val) { |
$keys = explode(', ', $val['index_keys']); |
if (sizeof($keys) > 1) { |
foreach ($keys as $key) { |
$this->_add_flag($flags[$key], 'multiple_key'); |
} |
} |
if (strpos($val['index_description'], 'primary key')) { |
foreach ($keys as $key) { |
$this->_add_flag($flags[$key], 'primary_key'); |
} |
} elseif (strpos($val['index_description'], 'unique')) { |
foreach ($keys as $key) { |
$this->_add_flag($flags[$key], 'unique_key'); |
} |
} |
} |
// get auto_increment, not_null and timestamp |
$res = $this->getAll("EXEC SP_COLUMNS[$table]", DB_FETCHMODE_ASSOC); |
foreach ($res as $val) { |
$val = array_change_key_case($val, CASE_LOWER); |
if ($val['nullable'] == '0') { |
$this->_add_flag($flags[$val['column_name']], 'not_null'); |
} |
if (strpos($val['type_name'], 'identity')) { |
$this->_add_flag($flags[$val['column_name']], 'auto_increment'); |
} |
if (strpos($val['type_name'], 'timestamp')) { |
$this->_add_flag($flags[$val['column_name']], 'timestamp'); |
} |
} |
} |
if (array_key_exists($column, $flags)) { |
return(implode(' ', $flags[$column])); |
} |
return ''; |
} |
// }}} |
// {{{ _add_flag() |
/** |
* Adds a string to the flags array if the flag is not yet in there |
* - if there is no flag present the array is created |
* |
* @param array &$array the reference to the flag-array |
* @param string $value the flag value |
* |
* @return void |
* |
* @access private |
* @author Joern Barthel <j_barthel@web.de> |
*/ |
function _add_flag(&$array, $value) |
{ |
if (!is_array($array)) { |
$array = array($value); |
} elseif (!in_array($value, $array)) { |
array_push($array, $value); |
} |
} |
// }}} |
// {{{ getSpecialQuery() |
/** |
* Obtains the query string needed for listing a given type of objects |
* |
* @param string $type the kind of objects you want to retrieve |
* |
* @return string the SQL query string or null if the driver doesn't |
* support the object type requested |
* |
* @access protected |
* @see DB_common::getListOf() |
*/ |
function getSpecialQuery($type) |
{ |
switch ($type) { |
case 'tables': |
return "SELECT name FROM sysobjects WHERE type = 'U'" |
. ' ORDER BY name'; |
case 'views': |
return "SELECT name FROM sysobjects WHERE type = 'V'"; |
default: |
return null; |
} |
} |
// }}} |
} |
/* |
* Local variables: |
* tab-width: 4 |
* c-basic-offset: 4 |
* End: |
*/ |
?> |
/branches/v1.0-menes/api/pear/DB/sqlite.php |
---|
New file |
0,0 → 1,942 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ |
/** |
* The PEAR DB driver for PHP's sqlite extension |
* for interacting with SQLite databases |
* |
* PHP versions 4 and 5 |
* |
* LICENSE: This source file is subject to version 3.0 of the PHP license |
* that is available through the world-wide-web at the following URI: |
* http://www.php.net/license/3_0.txt. If you did not receive a copy of |
* the PHP License and are unable to obtain it through the web, please |
* send a note to license@php.net so we can mail you a copy immediately. |
* |
* @category Database |
* @package DB |
* @author Urs Gehrig <urs@circle.ch> |
* @author Mika Tuupola <tuupola@appelsiini.net> |
* @author Daniel Convissor <danielc@php.net> |
* @copyright 1997-2005 The PHP Group |
* @license http://www.php.net/license/3_0.txt PHP License 3.0 3.0 |
* @version CVS: $Id: sqlite.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $ |
* @link http://pear.php.net/package/DB |
*/ |
/** |
* Obtain the DB_common class so it can be extended from |
*/ |
require_once 'DB/common.php'; |
/** |
* The methods PEAR DB uses to interact with PHP's sqlite extension |
* for interacting with SQLite databases |
* |
* These methods overload the ones declared in DB_common. |
* |
* NOTICE: This driver needs PHP's track_errors ini setting to be on. |
* It is automatically turned on when connecting to the database. |
* Make sure your scripts don't turn it off. |
* |
* @category Database |
* @package DB |
* @author Urs Gehrig <urs@circle.ch> |
* @author Mika Tuupola <tuupola@appelsiini.net> |
* @author Daniel Convissor <danielc@php.net> |
* @copyright 1997-2005 The PHP Group |
* @license http://www.php.net/license/3_0.txt PHP License 3.0 3.0 |
* @version Release: @package_version@ |
* @link http://pear.php.net/package/DB |
*/ |
class DB_sqlite extends DB_common |
{ |
// {{{ properties |
/** |
* The DB driver type (mysql, oci8, odbc, etc.) |
* @var string |
*/ |
var $phptype = 'sqlite'; |
/** |
* The database syntax variant to be used (db2, access, etc.), if any |
* @var string |
*/ |
var $dbsyntax = 'sqlite'; |
/** |
* The capabilities of this DB implementation |
* |
* The 'new_link' element contains the PHP version that first provided |
* new_link support for this DBMS. Contains false if it's unsupported. |
* |
* Meaning of the 'limit' element: |
* + 'emulate' = emulate with fetch row by number |
* + 'alter' = alter the query |
* + false = skip rows |
* |
* @var array |
*/ |
var $features = array( |
'limit' => 'alter', |
'new_link' => false, |
'numrows' => true, |
'pconnect' => true, |
'prepare' => false, |
'ssl' => false, |
'transactions' => false, |
); |
/** |
* A mapping of native error codes to DB error codes |
* |
* {@internal Error codes according to sqlite_exec. See the online |
* manual at http://sqlite.org/c_interface.html for info. |
* This error handling based on sqlite_exec is not yet implemented.}} |
* |
* @var array |
*/ |
var $errorcode_map = array( |
); |
/** |
* The raw database connection created by PHP |
* @var resource |
*/ |
var $connection; |
/** |
* The DSN information for connecting to a database |
* @var array |
*/ |
var $dsn = array(); |
/** |
* SQLite data types |
* |
* @link http://www.sqlite.org/datatypes.html |
* |
* @var array |
*/ |
var $keywords = array ( |
'BLOB' => '', |
'BOOLEAN' => '', |
'CHARACTER' => '', |
'CLOB' => '', |
'FLOAT' => '', |
'INTEGER' => '', |
'KEY' => '', |
'NATIONAL' => '', |
'NUMERIC' => '', |
'NVARCHAR' => '', |
'PRIMARY' => '', |
'TEXT' => '', |
'TIMESTAMP' => '', |
'UNIQUE' => '', |
'VARCHAR' => '', |
'VARYING' => '', |
); |
/** |
* The most recent error message from $php_errormsg |
* @var string |
* @access private |
*/ |
var $_lasterror = ''; |
// }}} |
// {{{ constructor |
/** |
* This constructor calls <kbd>$this->DB_common()</kbd> |
* |
* @return void |
*/ |
function DB_sqlite() |
{ |
$this->DB_common(); |
} |
// }}} |
// {{{ connect() |
/** |
* Connect to the database server, log in and open the database |
* |
* Don't call this method directly. Use DB::connect() instead. |
* |
* PEAR DB's sqlite driver supports the following extra DSN options: |
* + mode The permissions for the database file, in four digit |
* chmod octal format (eg "0600"). |
* |
* Example of connecting to a database in read-only mode: |
* <code> |
* require_once 'DB.php'; |
* |
* $dsn = 'sqlite:///path/and/name/of/db/file?mode=0400'; |
* $options = array( |
* 'portability' => DB_PORTABILITY_ALL, |
* ); |
* |
* $db =& DB::connect($dsn, $options); |
* if (PEAR::isError($db)) { |
* die($db->getMessage()); |
* } |
* </code> |
* |
* @param array $dsn the data source name |
* @param bool $persistent should the connection be persistent? |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
*/ |
function connect($dsn, $persistent = false) |
{ |
if (!PEAR::loadExtension('sqlite')) { |
return $this->raiseError(DB_ERROR_EXTENSION_NOT_FOUND); |
} |
$this->dsn = $dsn; |
if ($dsn['dbsyntax']) { |
$this->dbsyntax = $dsn['dbsyntax']; |
} |
if ($dsn['database']) { |
if (!file_exists($dsn['database'])) { |
if (!touch($dsn['database'])) { |
return $this->sqliteRaiseError(DB_ERROR_NOT_FOUND); |
} |
if (!isset($dsn['mode']) || |
!is_numeric($dsn['mode'])) |
{ |
$mode = 0644; |
} else { |
$mode = octdec($dsn['mode']); |
} |
if (!chmod($dsn['database'], $mode)) { |
return $this->sqliteRaiseError(DB_ERROR_NOT_FOUND); |
} |
if (!file_exists($dsn['database'])) { |
return $this->sqliteRaiseError(DB_ERROR_NOT_FOUND); |
} |
} |
if (!is_file($dsn['database'])) { |
return $this->sqliteRaiseError(DB_ERROR_INVALID); |
} |
if (!is_readable($dsn['database'])) { |
return $this->sqliteRaiseError(DB_ERROR_ACCESS_VIOLATION); |
} |
} else { |
return $this->sqliteRaiseError(DB_ERROR_ACCESS_VIOLATION); |
} |
$connect_function = $persistent ? 'sqlite_popen' : 'sqlite_open'; |
// track_errors must remain on for simpleQuery() |
ini_set('track_errors', 1); |
$php_errormsg = ''; |
if (!$this->connection = @$connect_function($dsn['database'])) { |
return $this->raiseError(DB_ERROR_NODBSELECTED, |
null, null, null, |
$php_errormsg); |
} |
return DB_OK; |
} |
// }}} |
// {{{ disconnect() |
/** |
* Disconnects from the database server |
* |
* @return bool TRUE on success, FALSE on failure |
*/ |
function disconnect() |
{ |
$ret = @sqlite_close($this->connection); |
$this->connection = null; |
return $ret; |
} |
// }}} |
// {{{ simpleQuery() |
/** |
* Sends a query to the database server |
* |
* NOTICE: This method needs PHP's track_errors ini setting to be on. |
* It is automatically turned on when connecting to the database. |
* Make sure your scripts don't turn it off. |
* |
* @param string the SQL query string |
* |
* @return mixed + a PHP result resrouce for successful SELECT queries |
* + the DB_OK constant for other successful queries |
* + a DB_Error object on failure |
*/ |
function simpleQuery($query) |
{ |
$ismanip = DB::isManip($query); |
$this->last_query = $query; |
$query = $this->modifyQuery($query); |
$php_errormsg = ''; |
$result = @sqlite_query($query, $this->connection); |
$this->_lasterror = $php_errormsg ? $php_errormsg : ''; |
$this->result = $result; |
if (!$this->result) { |
return $this->sqliteRaiseError(null); |
} |
// sqlite_query() seems to allways return a resource |
// so cant use that. Using $ismanip instead |
if (!$ismanip) { |
$numRows = $this->numRows($result); |
if (is_object($numRows)) { |
// we've got PEAR_Error |
return $numRows; |
} |
return $result; |
} |
return DB_OK; |
} |
// }}} |
// {{{ nextResult() |
/** |
* Move the internal sqlite result pointer to the next available result |
* |
* @param resource $result the valid sqlite result resource |
* |
* @return bool true if a result is available otherwise return false |
*/ |
function nextResult($result) |
{ |
return false; |
} |
// }}} |
// {{{ fetchInto() |
/** |
* Places a row from the result set into the given array |
* |
* Formating of the array and the data therein are configurable. |
* See DB_result::fetchInto() for more information. |
* |
* This method is not meant to be called directly. Use |
* DB_result::fetchInto() instead. It can't be declared "protected" |
* because DB_result is a separate object. |
* |
* @param resource $result the query result resource |
* @param array $arr the referenced array to put the data in |
* @param int $fetchmode how the resulting array should be indexed |
* @param int $rownum the row number to fetch (0 = first row) |
* |
* @return mixed DB_OK on success, NULL when the end of a result set is |
* reached or on failure |
* |
* @see DB_result::fetchInto() |
*/ |
function fetchInto($result, &$arr, $fetchmode, $rownum = null) |
{ |
if ($rownum !== null) { |
if (!@sqlite_seek($this->result, $rownum)) { |
return null; |
} |
} |
if ($fetchmode & DB_FETCHMODE_ASSOC) { |
$arr = @sqlite_fetch_array($result, SQLITE_ASSOC); |
if ($this->options['portability'] & DB_PORTABILITY_LOWERCASE && $arr) { |
$arr = array_change_key_case($arr, CASE_LOWER); |
} |
} else { |
$arr = @sqlite_fetch_array($result, SQLITE_NUM); |
} |
if (!$arr) { |
return null; |
} |
if ($this->options['portability'] & DB_PORTABILITY_RTRIM) { |
/* |
* Even though this DBMS already trims output, we do this because |
* a field might have intentional whitespace at the end that |
* gets removed by DB_PORTABILITY_RTRIM under another driver. |
*/ |
$this->_rtrimArrayValues($arr); |
} |
if ($this->options['portability'] & DB_PORTABILITY_NULL_TO_EMPTY) { |
$this->_convertNullArrayValuesToEmpty($arr); |
} |
return DB_OK; |
} |
// }}} |
// {{{ freeResult() |
/** |
* Deletes the result set and frees the memory occupied by the result set |
* |
* This method is not meant to be called directly. Use |
* DB_result::free() instead. It can't be declared "protected" |
* because DB_result is a separate object. |
* |
* @param resource $result PHP's query result resource |
* |
* @return bool TRUE on success, FALSE if $result is invalid |
* |
* @see DB_result::free() |
*/ |
function freeResult(&$result) |
{ |
// XXX No native free? |
if (!is_resource($result)) { |
return false; |
} |
$result = null; |
return true; |
} |
// }}} |
// {{{ numCols() |
/** |
* Gets the number of columns in a result set |
* |
* This method is not meant to be called directly. Use |
* DB_result::numCols() instead. It can't be declared "protected" |
* because DB_result is a separate object. |
* |
* @param resource $result PHP's query result resource |
* |
* @return int the number of columns. A DB_Error object on failure. |
* |
* @see DB_result::numCols() |
*/ |
function numCols($result) |
{ |
$cols = @sqlite_num_fields($result); |
if (!$cols) { |
return $this->sqliteRaiseError(); |
} |
return $cols; |
} |
// }}} |
// {{{ numRows() |
/** |
* Gets the number of rows in a result set |
* |
* This method is not meant to be called directly. Use |
* DB_result::numRows() instead. It can't be declared "protected" |
* because DB_result is a separate object. |
* |
* @param resource $result PHP's query result resource |
* |
* @return int the number of rows. A DB_Error object on failure. |
* |
* @see DB_result::numRows() |
*/ |
function numRows($result) |
{ |
$rows = @sqlite_num_rows($result); |
if ($rows === null) { |
return $this->sqliteRaiseError(); |
} |
return $rows; |
} |
// }}} |
// {{{ affected() |
/** |
* Determines the number of rows affected by a data maniuplation query |
* |
* 0 is returned for queries that don't manipulate data. |
* |
* @return int the number of rows. A DB_Error object on failure. |
*/ |
function affectedRows() |
{ |
return @sqlite_changes($this->connection); |
} |
// }}} |
// {{{ dropSequence() |
/** |
* Deletes a sequence |
* |
* @param string $seq_name name of the sequence to be deleted |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
* |
* @see DB_common::dropSequence(), DB_common::getSequenceName(), |
* DB_sqlite::nextID(), DB_sqlite::createSequence() |
*/ |
function dropSequence($seq_name) |
{ |
return $this->query('DROP TABLE ' . $this->getSequenceName($seq_name)); |
} |
/** |
* Creates a new sequence |
* |
* @param string $seq_name name of the new sequence |
* |
* @return int DB_OK on success. A DB_Error object on failure. |
* |
* @see DB_common::createSequence(), DB_common::getSequenceName(), |
* DB_sqlite::nextID(), DB_sqlite::dropSequence() |
*/ |
function createSequence($seq_name) |
{ |
$seqname = $this->getSequenceName($seq_name); |
$query = 'CREATE TABLE ' . $seqname . |
' (id INTEGER UNSIGNED PRIMARY KEY) '; |
$result = $this->query($query); |
if (DB::isError($result)) { |
return($result); |
} |
$query = "CREATE TRIGGER ${seqname}_cleanup AFTER INSERT ON $seqname |
BEGIN |
DELETE FROM $seqname WHERE id<LAST_INSERT_ROWID(); |
END "; |
$result = $this->query($query); |
if (DB::isError($result)) { |
return($result); |
} |
} |
// }}} |
// {{{ nextId() |
/** |
* Returns the next free id in a sequence |
* |
* @param string $seq_name name of the sequence |
* @param boolean $ondemand when true, the seqence is automatically |
* created if it does not exist |
* |
* @return int the next id number in the sequence. |
* A DB_Error object on failure. |
* |
* @see DB_common::nextID(), DB_common::getSequenceName(), |
* DB_sqlite::createSequence(), DB_sqlite::dropSequence() |
*/ |
function nextId($seq_name, $ondemand = true) |
{ |
$seqname = $this->getSequenceName($seq_name); |
do { |
$repeat = 0; |
$this->pushErrorHandling(PEAR_ERROR_RETURN); |
$result = $this->query("INSERT INTO $seqname (id) VALUES (NULL)"); |
$this->popErrorHandling(); |
if ($result === DB_OK) { |
$id = @sqlite_last_insert_rowid($this->connection); |
if ($id != 0) { |
return $id; |
} |
} elseif ($ondemand && DB::isError($result) && |
$result->getCode() == DB_ERROR_NOSUCHTABLE) |
{ |
$result = $this->createSequence($seq_name); |
if (DB::isError($result)) { |
return $this->raiseError($result); |
} else { |
$repeat = 1; |
} |
} |
} while ($repeat); |
return $this->raiseError($result); |
} |
// }}} |
// {{{ getDbFileStats() |
/** |
* Get the file stats for the current database |
* |
* Possible arguments are dev, ino, mode, nlink, uid, gid, rdev, size, |
* atime, mtime, ctime, blksize, blocks or a numeric key between |
* 0 and 12. |
* |
* @param string $arg the array key for stats() |
* |
* @return mixed an array on an unspecified key, integer on a passed |
* arg and false at a stats error |
*/ |
function getDbFileStats($arg = '') |
{ |
$stats = stat($this->dsn['database']); |
if ($stats == false) { |
return false; |
} |
if (is_array($stats)) { |
if (is_numeric($arg)) { |
if (((int)$arg <= 12) & ((int)$arg >= 0)) { |
return false; |
} |
return $stats[$arg ]; |
} |
if (array_key_exists(trim($arg), $stats)) { |
return $stats[$arg ]; |
} |
} |
return $stats; |
} |
// }}} |
// {{{ escapeSimple() |
/** |
* Escapes a string according to the current DBMS's standards |
* |
* In SQLite, this makes things safe for inserts/updates, but may |
* cause problems when performing text comparisons against columns |
* containing binary data. See the |
* {@link http://php.net/sqlite_escape_string PHP manual} for more info. |
* |
* @param string $str the string to be escaped |
* |
* @return string the escaped string |
* |
* @since Method available since Release 1.6.1 |
* @see DB_common::escapeSimple() |
*/ |
function escapeSimple($str) |
{ |
return @sqlite_escape_string($str); |
} |
// }}} |
// {{{ modifyLimitQuery() |
/** |
* Adds LIMIT clauses to a query string according to current DBMS standards |
* |
* @param string $query the query to modify |
* @param int $from the row to start to fetching (0 = the first row) |
* @param int $count the numbers of rows to fetch |
* @param mixed $params array, string or numeric data to be used in |
* execution of the statement. Quantity of items |
* passed must match quantity of placeholders in |
* query: meaning 1 placeholder for non-array |
* parameters or 1 placeholder per array element. |
* |
* @return string the query string with LIMIT clauses added |
* |
* @access protected |
*/ |
function modifyLimitQuery($query, $from, $count, $params = array()) |
{ |
return "$query LIMIT $count OFFSET $from"; |
} |
// }}} |
// {{{ modifyQuery() |
/** |
* Changes a query string for various DBMS specific reasons |
* |
* This little hack lets you know how many rows were deleted |
* when running a "DELETE FROM table" query. Only implemented |
* if the DB_PORTABILITY_DELETE_COUNT portability option is on. |
* |
* @param string $query the query string to modify |
* |
* @return string the modified query string |
* |
* @access protected |
* @see DB_common::setOption() |
*/ |
function modifyQuery($query) |
{ |
if ($this->options['portability'] & DB_PORTABILITY_DELETE_COUNT) { |
if (preg_match('/^\s*DELETE\s+FROM\s+(\S+)\s*$/i', $query)) { |
$query = preg_replace('/^\s*DELETE\s+FROM\s+(\S+)\s*$/', |
'DELETE FROM \1 WHERE 1=1', $query); |
} |
} |
return $query; |
} |
// }}} |
// {{{ sqliteRaiseError() |
/** |
* Produces a DB_Error object regarding the current problem |
* |
* @param int $errno if the error is being manually raised pass a |
* DB_ERROR* constant here. If this isn't passed |
* the error information gathered from the DBMS. |
* |
* @return object the DB_Error object |
* |
* @see DB_common::raiseError(), |
* DB_sqlite::errorNative(), DB_sqlite::errorCode() |
*/ |
function sqliteRaiseError($errno = null) |
{ |
$native = $this->errorNative(); |
if ($errno === null) { |
$errno = $this->errorCode($native); |
} |
$errorcode = @sqlite_last_error($this->connection); |
$userinfo = "$errorcode ** $this->last_query"; |
return $this->raiseError($errno, null, null, $userinfo, $native); |
} |
// }}} |
// {{{ errorNative() |
/** |
* Gets the DBMS' native error message produced by the last query |
* |
* {@internal This is used to retrieve more meaningfull error messages |
* because sqlite_last_error() does not provide adequate info.}} |
* |
* @return string the DBMS' error message |
*/ |
function errorNative() |
{ |
return $this->_lasterror; |
} |
// }}} |
// {{{ errorCode() |
/** |
* Determines PEAR::DB error code from the database's text error message |
* |
* @param string $errormsg the error message returned from the database |
* |
* @return integer the DB error number |
*/ |
function errorCode($errormsg) |
{ |
static $error_regexps; |
if (!isset($error_regexps)) { |
$error_regexps = array( |
'/^no such table:/' => DB_ERROR_NOSUCHTABLE, |
'/^no such index:/' => DB_ERROR_NOT_FOUND, |
'/^(table|index) .* already exists$/' => DB_ERROR_ALREADY_EXISTS, |
'/PRIMARY KEY must be unique/i' => DB_ERROR_CONSTRAINT, |
'/is not unique/' => DB_ERROR_CONSTRAINT, |
'/columns .* are not unique/i' => DB_ERROR_CONSTRAINT, |
'/uniqueness constraint failed/' => DB_ERROR_CONSTRAINT, |
'/may not be NULL/' => DB_ERROR_CONSTRAINT_NOT_NULL, |
'/^no such column:/' => DB_ERROR_NOSUCHFIELD, |
'/column not present in both tables/i' => DB_ERROR_NOSUCHFIELD, |
'/^near ".*": syntax error$/' => DB_ERROR_SYNTAX, |
'/[0-9]+ values for [0-9]+ columns/i' => DB_ERROR_VALUE_COUNT_ON_ROW, |
); |
} |
foreach ($error_regexps as $regexp => $code) { |
if (preg_match($regexp, $errormsg)) { |
return $code; |
} |
} |
// Fall back to DB_ERROR if there was no mapping. |
return DB_ERROR; |
} |
// }}} |
// {{{ tableInfo() |
/** |
* Returns information about a table |
* |
* @param string $result a string containing the name of a table |
* @param int $mode a valid tableInfo mode |
* |
* @return array an associative array with the information requested. |
* A DB_Error object on failure. |
* |
* @see DB_common::tableInfo() |
* @since Method available since Release 1.7.0 |
*/ |
function tableInfo($result, $mode = null) |
{ |
if (is_string($result)) { |
/* |
* Probably received a table name. |
* Create a result resource identifier. |
*/ |
$id = @sqlite_array_query($this->connection, |
"PRAGMA table_info('$result');", |
SQLITE_ASSOC); |
$got_string = true; |
} else { |
$this->last_query = ''; |
return $this->raiseError(DB_ERROR_NOT_CAPABLE, null, null, null, |
'This DBMS can not obtain tableInfo' . |
' from result sets'); |
} |
if ($this->options['portability'] & DB_PORTABILITY_LOWERCASE) { |
$case_func = 'strtolower'; |
} else { |
$case_func = 'strval'; |
} |
$count = count($id); |
$res = array(); |
if ($mode) { |
$res['num_fields'] = $count; |
} |
for ($i = 0; $i < $count; $i++) { |
if (strpos($id[$i]['type'], '(') !== false) { |
$bits = explode('(', $id[$i]['type']); |
$type = $bits[0]; |
$len = rtrim($bits[1],')'); |
} else { |
$type = $id[$i]['type']; |
$len = 0; |
} |
$flags = ''; |
if ($id[$i]['pk']) { |
$flags .= 'primary_key '; |
} |
if ($id[$i]['notnull']) { |
$flags .= 'not_null '; |
} |
if ($id[$i]['dflt_value'] !== null) { |
$flags .= 'default_' . rawurlencode($id[$i]['dflt_value']); |
} |
$flags = trim($flags); |
$res[$i] = array( |
'table' => $case_func($result), |
'name' => $case_func($id[$i]['name']), |
'type' => $type, |
'len' => $len, |
'flags' => $flags, |
); |
if ($mode & DB_TABLEINFO_ORDER) { |
$res['order'][$res[$i]['name']] = $i; |
} |
if ($mode & DB_TABLEINFO_ORDERTABLE) { |
$res['ordertable'][$res[$i]['table']][$res[$i]['name']] = $i; |
} |
} |
return $res; |
} |
// }}} |
// {{{ getSpecialQuery() |
/** |
* Obtains the query string needed for listing a given type of objects |
* |
* @param string $type the kind of objects you want to retrieve |
* @param array $args SQLITE DRIVER ONLY: a private array of arguments |
* used by the getSpecialQuery(). Do not use |
* this directly. |
* |
* @return string the SQL query string or null if the driver doesn't |
* support the object type requested |
* |
* @access protected |
* @see DB_common::getListOf() |
*/ |
function getSpecialQuery($type, $args = array()) |
{ |
if (!is_array($args)) { |
return $this->raiseError('no key specified', null, null, null, |
'Argument has to be an array.'); |
} |
switch ($type) { |
case 'master': |
return 'SELECT * FROM sqlite_master;'; |
case 'tables': |
return "SELECT name FROM sqlite_master WHERE type='table' " |
. 'UNION ALL SELECT name FROM sqlite_temp_master ' |
. "WHERE type='table' ORDER BY name;"; |
case 'schema': |
return 'SELECT sql FROM (SELECT * FROM sqlite_master ' |
. 'UNION ALL SELECT * FROM sqlite_temp_master) ' |
. "WHERE type!='meta' " |
. 'ORDER BY tbl_name, type DESC, name;'; |
case 'schemax': |
case 'schema_x': |
/* |
* Use like: |
* $res = $db->query($db->getSpecialQuery('schema_x', |
* array('table' => 'table3'))); |
*/ |
return 'SELECT sql FROM (SELECT * FROM sqlite_master ' |
. 'UNION ALL SELECT * FROM sqlite_temp_master) ' |
. "WHERE tbl_name LIKE '{$args['table']}' " |
. "AND type!='meta' " |
. 'ORDER BY type DESC, name;'; |
case 'alter': |
/* |
* SQLite does not support ALTER TABLE; this is a helper query |
* to handle this. 'table' represents the table name, 'rows' |
* the news rows to create, 'save' the row(s) to keep _with_ |
* the data. |
* |
* Use like: |
* $args = array( |
* 'table' => $table, |
* 'rows' => "id INTEGER PRIMARY KEY, firstname TEXT, surname TEXT, datetime TEXT", |
* 'save' => "NULL, titel, content, datetime" |
* ); |
* $res = $db->query( $db->getSpecialQuery('alter', $args)); |
*/ |
$rows = strtr($args['rows'], $this->keywords); |
$q = array( |
'BEGIN TRANSACTION', |
"CREATE TEMPORARY TABLE {$args['table']}_backup ({$args['rows']})", |
"INSERT INTO {$args['table']}_backup SELECT {$args['save']} FROM {$args['table']}", |
"DROP TABLE {$args['table']}", |
"CREATE TABLE {$args['table']} ({$args['rows']})", |
"INSERT INTO {$args['table']} SELECT {$rows} FROM {$args['table']}_backup", |
"DROP TABLE {$args['table']}_backup", |
'COMMIT', |
); |
/* |
* This is a dirty hack, since the above query will not get |
* executed with a single query call so here the query method |
* will be called directly and return a select instead. |
*/ |
foreach ($q as $query) { |
$this->query($query); |
} |
return "SELECT * FROM {$args['table']};"; |
default: |
return null; |
} |
} |
// }}} |
} |
/* |
* Local variables: |
* tab-width: 4 |
* c-basic-offset: 4 |
* End: |
*/ |
?> |
/branches/v1.0-menes/api/pear/HTTP.php |
---|
New file |
0,0 → 1,353 |
<?php |
// +----------------------------------------------------------------------+ |
// | PEAR :: HTTP | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 3.0 of the PHP license, | |
// | that is available at http://www.php.net/license/3_0.txt | |
// | If you did not receive a copy of the PHP license and are unable | |
// | to obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Stig Bakken <ssb@fast.no> | |
// | Sterling Hughes <sterling@php.net> | |
// | Tomas V.V.Cox <cox@idecnet.com> | |
// | Richard Heyes <richard@php.net> | |
// | Philippe Jausions <Philippe.Jausions@11abacus.com> | |
// | Michael Wallner <mike@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: HTTP.php,v 1.1 2005-03-30 08:50:19 jpm Exp $ |
/** |
* HTTP |
* |
* HTTP utility functions |
* |
* @package HTTP |
* @category HTTP |
* @license PHP License |
* @access public |
* @version $Revision: 1.1 $ |
*/ |
class HTTP |
{ |
/** |
* Date |
* |
* Format a RFC compliant GMT date HTTP header. This function honors the |
* "y2k_compliance" php.ini directive and formats the GMT date corresponding |
* to either RFC850 or RFC822. |
* |
* @static |
* @access public |
* @return mixed GMT date string, or false for an invalid $time parameter |
* @param mixed $time unix timestamp or date (default = current time) |
*/ |
function Date($time = null) |
{ |
if (!isset($time)) { |
$time = time(); |
} elseif (!is_numeric($time) && (-1 === $time = strtotime($time))) { |
return false; |
} |
// RFC822 or RFC850 |
$format = ini_get('y2k_compliance') ? 'D, d M Y' : 'l, d-M-y'; |
return gmdate($format .' H:i:s \G\M\T', $time); |
} |
/** |
* Negotiate Language |
* |
* Negotiate language with the user's browser through the Accept-Language |
* HTTP header or the user's host address. Language codes are generally in |
* the form "ll" for a language spoken in only one country, or "ll-CC" for a |
* language spoken in a particular country. For example, U.S. English is |
* "en-US", while British English is "en-UK". Portugese as spoken in |
* Portugal is "pt-PT", while Brazilian Portugese is "pt-BR". |
* |
* Quality factors in the Accept-Language: header are supported, e.g.: |
* Accept-Language: en-UK;q=0.7, en-US;q=0.6, no, dk;q=0.8 |
* |
* <code> |
* require_once 'HTTP.php'; |
* $langs = array( |
* 'en' => 'locales/en', |
* 'en-US'=> 'locales/en', |
* 'en-UK'=> 'locales/en', |
* 'de' => 'locales/de', |
* 'de-DE'=> 'locales/de', |
* 'de-AT'=> 'locales/de', |
* ); |
* $neg = HTTP::negotiateLanguage($langs); |
* $dir = $langs[$neg]; |
* </code> |
* |
* @static |
* @access public |
* @return string The negotiated language result or the supplied default. |
* @param array $supported An associative array of supported languages, |
* whose values must evaluate to true. |
* @param string $default The default language to use if none is found. |
*/ |
function negotiateLanguage($supported, $default = 'en-US') |
{ |
$supp = array(); |
foreach ($supported as $lang => $isSupported) { |
if ($isSupported) { |
$supp[strToLower($lang)] = $lang; |
} |
} |
if (!count($supp)) { |
return $default; |
} |
$matches = array(); |
if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) { |
foreach (explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']) as $lang) { |
$lang = array_map('trim', explode(';', $lang)); |
if (isset($lang[1])) { |
$l = strtolower($lang[0]); |
$q = (float) str_replace('q=', '', $lang[1]); |
} else { |
$l = strtolower($lang[0]); |
$q = null; |
} |
if (isset($supp[$l])) { |
$matches[$l] = isset($q) ? $q : 1000 - count($matches); |
} |
} |
} |
if (count($matches)) { |
asort($matches, SORT_NUMERIC); |
return $supp[array_pop(array_keys($matches))]; |
} |
if (isset($_SERVER['REMOTE_HOST'])) { |
$lang = strtolower(array_pop(explode('.', $_SERVER['REMOTE_HOST']))); |
if (isset($supp[$lang])) { |
return $supp[$lang]; |
} |
} |
return $default; |
} |
/** |
* Head |
* |
* Sends a "HEAD" HTTP command to a server and returns the headers |
* as an associative array. Example output could be: |
* <code> |
* Array |
* ( |
* [response_code] => 200 // The HTTP response code |
* [response] => HTTP/1.1 200 OK // The full HTTP response string |
* [Date] => Fri, 11 Jan 2002 01:41:44 GMT |
* [Server] => Apache/1.3.20 (Unix) PHP/4.1.1 |
* [X-Powered-By] => PHP/4.1.1 |
* [Connection] => close |
* [Content-Type] => text/html |
* ) |
* </code> |
* |
* @see HTTP_Client::head() |
* @see HTTP_Request |
* |
* @static |
* @access public |
* @return mixed Returns associative array of response headers on success |
* or PEAR error on failure. |
* @param string $url A valid URL, e.g.: http://pear.php.net/credits.php |
* @param integer $timeout Timeout in seconds (default = 10) |
*/ |
function head($url, $timeout = 10) |
{ |
$p = parse_url($url); |
if (!isset($p['scheme'])) { |
$p = parse_url(HTTP::absoluteURI($url)); |
} elseif ($p['scheme'] != 'http') { |
return HTTP::raiseError('Unsupported protocol: '. $p['scheme']); |
} |
$port = isset($p['port']) ? $p['port'] : 80; |
if (!$fp = @fsockopen($p['host'], $port, $eno, $estr, $timeout)) { |
return HTTP::raiseError("Connection error: $estr ($eno)"); |
} |
$path = !empty($p['path']) ? $p['path'] : '/'; |
$path .= !empty($p['query']) ? '?' . $p['query'] : ''; |
fputs($fp, "HEAD $path HTTP/1.0\r\n"); |
fputs($fp, 'Host: ' . $p['host'] . ':' . $port . "\r\n"); |
fputs($fp, "Connection: close\r\n\r\n"); |
$response = rtrim(fgets($fp, 4096)); |
if (preg_match("|^HTTP/[^\s]*\s(.*?)\s|", $response, $status)) { |
$headers['response_code'] = $status[1]; |
} |
$headers['response'] = $response; |
while ($line = fgets($fp, 4096)) { |
if (!trim($line)) { |
break; |
} |
if (($pos = strpos($line, ':')) !== false) { |
$header = substr($line, 0, $pos); |
$value = trim(substr($line, $pos + 1)); |
$headers[$header] = $value; |
} |
} |
fclose($fp); |
return $headers; |
} |
/** |
* Redirect |
* |
* This function redirects the client. This is done by issuing |
* a "Location" header and exiting if wanted. If you set $rfc2616 to true |
* HTTP will output a hypertext note with the location of the redirect. |
* |
* @static |
* @access public |
* @return mixed Returns true on succes (or exits) or false if headers |
* have already been sent. |
* @param string $url URL where the redirect should go to. |
* @param bool $exit Whether to exit immediately after redirection. |
* @param bool $rfc2616 Wheter to output a hypertext note where we're |
* redirecting to (Redirecting to <a href="...">...</a>.) |
*/ |
function redirect($url, $exit = true, $rfc2616 = false) |
{ |
if (headers_sent()) { |
return false; |
} |
$url = HTTP::absoluteURI($url); |
header('Location: '. $url); |
if ( $rfc2616 && isset($_SERVER['REQUEST_METHOD']) && |
$_SERVER['REQUEST_METHOD'] != 'HEAD') { |
printf('Redirecting to: <a href="%s">%s</a>.', $url, $url); |
} |
if ($exit) { |
exit; |
} |
return true; |
} |
/** |
* Absolute URI |
* |
* This function returns the absolute URI for the partial URL passed. |
* The current scheme (HTTP/HTTPS), host server, port, current script |
* location are used if necessary to resolve any relative URLs. |
* |
* Offsets potentially created by PATH_INFO are taken care of to resolve |
* relative URLs to the current script. |
* |
* You can choose a new protocol while resolving the URI. This is |
* particularly useful when redirecting a web browser using relative URIs |
* and to switch from HTTP to HTTPS, or vice-versa, at the same time. |
* |
* @author Philippe Jausions <Philippe.Jausions@11abacus.com> |
* @static |
* @access public |
* @return string The absolute URI. |
* @param string $url Absolute or relative URI the redirect should go to. |
* @param string $protocol Protocol to use when redirecting URIs. |
* @param integer $port A new port number. |
*/ |
function absoluteURI($url = null, $protocol = null, $port = null) |
{ |
// filter CR/LF |
$url = str_replace(array("\r", "\n"), ' ', $url); |
// Mess around with already absolute URIs |
if (preg_match('!^([a-z0-9]+)://!i', $url)) { |
if (empty($protocol) && empty($port)) { |
return $url; |
} |
if (!empty($protocol)) { |
$url = $protocol .':'. array_pop(explode(':', $url, 2)); |
} |
if (!empty($port)) { |
$url = preg_replace('!^(([a-z0-9]+)://[^/:]+)(:[\d]+)?!i', |
'\1:'. $port, $url); |
} |
return $url; |
} |
$host = 'localhost'; |
if (!empty($_SERVER['HTTP_HOST'])) { |
list($host) = explode(':', $_SERVER['HTTP_HOST']); |
} elseif (!empty($_SERVER['SERVER_NAME'])) { |
list($host) = explode(':', $_SERVER['SERVER_NAME']); |
} |
if (empty($protocol)) { |
if (isset($_SERVER['HTTPS']) && !strcasecmp($_SERVER['HTTPS'], 'on')) { |
$protocol = 'https'; |
} else { |
$protocol = 'http'; |
} |
if (!isset($port) || $port != intval($port)) { |
$port = isset($_SERVER['SERVER_PORT']) ? $_SERVER['SERVER_PORT'] : 80; |
} |
} |
if ($protocol == 'http' && $port == 80) { |
unset($port); |
} |
if ($protocol == 'https' && $port == 443) { |
unset($port); |
} |
$server = $protocol .'://'. $host . (isset($port) ? ':'. $port : ''); |
if (!strlen($url)) { |
$url = isset($_SERVER['REQUEST_URI']) ? |
$_SERVER['REQUEST_URI'] : $_SERVER['PHP_SELF']; |
} |
if ($url{0} == '/') { |
return $server . $url; |
} |
// Check for PATH_INFO |
if (isset($_SERVER['PATH_INFO']) && $_SERVER['PHP_SELF'] != $_SERVER['PATH_INFO']) { |
$path = dirname(substr($_SERVER['PHP_SELF'], 0, -strlen($_SERVER['PATH_INFO']))); |
} else { |
$path = dirname($_SERVER['PHP_SELF']); |
} |
if (substr($path = strtr($path, '\\', '/'), -1) != '/') { |
$path .= '/'; |
} |
return $server . $path . $url; |
} |
/** |
* Raise Error |
* |
* Lazy raising of PEAR_Errors. |
* |
* @static |
* @access protected |
* @return object PEAR_Error |
* @param mixed $error |
* @param int $code |
*/ |
function raiseError($error = null, $code = null) |
{ |
require_once 'PEAR.php'; |
return PEAR::raiseError($error, $code); |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Net/URL.php |
---|
New file |
0,0 → 1,411 |
<?php |
// +-----------------------------------------------------------------------+ |
// | Copyright (c) 2002-2004, Richard Heyes | |
// | All rights reserved. | |
// | | |
// | Redistribution and use in source and binary forms, with or without | |
// | modification, are permitted provided that the following conditions | |
// | are met: | |
// | | |
// | o Redistributions of source code must retain the above copyright | |
// | notice, this list of conditions and the following disclaimer. | |
// | o 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.| |
// | o The names of the authors may not be used to endorse or promote | |
// | products derived from this software without specific prior written | |
// | permission. | |
// | | |
// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | |
// | "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 COPYRIGHT | |
// | OWNER OR CONTRIBUTORS 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. | |
// | | |
// +-----------------------------------------------------------------------+ |
// | Author: Richard Heyes <richard at php net> | |
// +-----------------------------------------------------------------------+ |
// |
// $Id: URL.php,v 1.2 2006-03-13 21:00:48 ddelon Exp $ |
// |
// Net_URL Class |
class Net_URL |
{ |
/** |
* Full url |
* @var string |
*/ |
var $url; |
/** |
* Protocol |
* @var string |
*/ |
var $protocol; |
/** |
* Username |
* @var string |
*/ |
var $username; |
/** |
* Password |
* @var string |
*/ |
var $password; |
/** |
* Host |
* @var string |
*/ |
var $host; |
/** |
* Port |
* @var integer |
*/ |
var $port; |
/** |
* Path |
* @var string |
*/ |
var $path; |
/** |
* Query string |
* @var array |
*/ |
var $querystring; |
/** |
* Anchor |
* @var string |
*/ |
var $anchor; |
/** |
* Whether to use [] |
* @var bool |
*/ |
var $useBrackets; |
/** |
* PHP4 Constructor |
* |
* @see __construct() |
*/ |
function Net_URL($url = null, $useBrackets = true) |
{ |
$this->__construct($url, $useBrackets); |
} |
/** |
* PHP5 Constructor |
* |
* Parses the given url and stores the various parts |
* Defaults are used in certain cases |
* |
* @param string $url Optional URL |
* @param bool $useBrackets Whether to use square brackets when |
* multiple querystrings with the same name |
* exist |
*/ |
function __construct($url = null, $useBrackets = true) |
{ |
$HTTP_SERVER_VARS = !empty($_SERVER) ? $_SERVER : $GLOBALS['HTTP_SERVER_VARS']; |
$this->useBrackets = $useBrackets; |
$this->url = $url; |
$this->user = ''; |
$this->pass = ''; |
$this->host = ''; |
$this->port = 80; |
$this->path = ''; |
$this->querystring = array(); |
$this->anchor = ''; |
// Only use defaults if not an absolute URL given |
if (!preg_match('/^[a-z0-9]+:\/\//i', $url)) { |
$this->protocol = 'http'; |
/** |
* Figure out host/port |
*/ |
if (!empty($HTTP_SERVER_VARS['HTTP_HOST']) AND preg_match('/^(.*)(:([0-9]+))?$/U', $HTTP_SERVER_VARS['HTTP_HOST'], $matches)) { |
$host = $matches[1]; |
if (!empty($matches[3])) { |
$port = $matches[3]; |
} else { |
$port = $this->getStandardPort($this->protocol); |
} |
} |
$this->user = ''; |
$this->pass = ''; |
$this->host = !empty($host) ? $host : (isset($HTTP_SERVER_VARS['SERVER_NAME']) ? $HTTP_SERVER_VARS['SERVER_NAME'] : 'localhost'); |
$this->port = !empty($port) ? $port : (isset($HTTP_SERVER_VARS['SERVER_PORT']) ? $HTTP_SERVER_VARS['SERVER_PORT'] : $this->getStandardPort($this->protocol)); |
$this->path = !empty($HTTP_SERVER_VARS['PHP_SELF']) ? $HTTP_SERVER_VARS['PHP_SELF'] : '/'; |
$this->querystring = isset($HTTP_SERVER_VARS['QUERY_STRING']) ? $this->_parseRawQuerystring($HTTP_SERVER_VARS['QUERY_STRING']) : null; |
$this->anchor = ''; |
} |
// Parse the url and store the various parts |
if (!empty($url)) { |
$urlinfo = parse_url($url); |
// Default querystring |
$this->querystring = array(); |
foreach ($urlinfo as $key => $value) { |
switch ($key) { |
case 'scheme': |
$this->protocol = $value; |
$this->port = $this->getStandardPort($value); |
break; |
case 'user': |
case 'pass': |
case 'host': |
case 'port': |
$this->$key = $value; |
break; |
case 'path': |
if ($value{0} == '/') { |
$this->path = $value; |
} else { |
$path = dirname($this->path) == DIRECTORY_SEPARATOR ? '' : dirname($this->path); |
$this->path = sprintf('%s/%s', $path, $value); |
} |
break; |
case 'query': |
$this->querystring = $this->_parseRawQueryString($value); |
break; |
case 'fragment': |
$this->anchor = $value; |
break; |
} |
} |
} |
} |
/** |
* Returns full url |
* |
* @return string Full url |
* @access public |
*/ |
function getURL() |
{ |
$querystring = $this->getQueryString(); |
$this->url = $this->protocol . '://' |
. $this->user . (!empty($this->pass) ? ':' : '') |
. $this->pass . (!empty($this->user) ? '@' : '') |
. $this->host . ($this->port == $this->getStandardPort($this->protocol) ? '' : ':' . $this->port) |
. $this->path |
. (!empty($querystring) ? '?' . $querystring : '') |
. (!empty($this->anchor) ? '#' . $this->anchor : ''); |
return $this->url; |
} |
/** |
* Adds a querystring item |
* |
* @param string $name Name of item |
* @param string $value Value of item |
* @param bool $preencoded Whether value is urlencoded or not, default = not |
* @access public |
*/ |
function addQueryString($name, $value, $preencoded = false) |
{ |
if ($preencoded) { |
$this->querystring[$name] = $value; |
} else { |
$this->querystring[$name] = is_array($value) ? array_map('rawurlencode', $value): rawurlencode($value); |
} |
} |
/** |
* Removes a querystring item |
* |
* @param string $name Name of item |
* @access public |
*/ |
function removeQueryString($name) |
{ |
if (isset($this->querystring[$name])) { |
unset($this->querystring[$name]); |
} |
} |
/** |
* Sets the querystring to literally what you supply |
* |
* @param string $querystring The querystring data. Should be of the format foo=bar&x=y etc |
* @access public |
*/ |
function addRawQueryString($querystring) |
{ |
$this->querystring = $this->_parseRawQueryString($querystring); |
} |
/** |
* Returns flat querystring |
* |
* @return string Querystring |
* @access public |
*/ |
function getQueryString() |
{ |
if (!empty($this->querystring)) { |
foreach ($this->querystring as $name => $value) { |
if (is_array($value)) { |
foreach ($value as $k => $v) { |
$querystring[] = $this->useBrackets ? sprintf('%s[%s]=%s', $name, $k, $v) : ($name . '=' . $v); |
} |
} elseif (!is_null($value)) { |
$querystring[] = $name . '=' . $value; |
} else { |
$querystring[] = $name; |
} |
} |
$querystring = implode(ini_get('arg_separator.output'), $querystring); |
} else { |
$querystring = ''; |
} |
return $querystring; |
} |
/** |
* Parses raw querystring and returns an array of it |
* |
* @param string $querystring The querystring to parse |
* @return array An array of the querystring data |
* @access private |
*/ |
function _parseRawQuerystring($querystring) |
{ |
$parts = preg_split('/[' . preg_quote(ini_get('arg_separator.input'), '/') . ']/', $querystring, -1, PREG_SPLIT_NO_EMPTY); |
$return = array(); |
foreach ($parts as $part) { |
if (strpos($part, '=') !== false) { |
$value = substr($part, strpos($part, '=') + 1); |
$key = substr($part, 0, strpos($part, '=')); |
} else { |
$value = null; |
$key = $part; |
} |
if (substr($key, -2) == '[]') { |
$key = substr($key, 0, -2); |
if (@!is_array($return[$key])) { |
$return[$key] = array(); |
$return[$key][] = $value; |
} else { |
$return[$key][] = $value; |
} |
} elseif (!$this->useBrackets AND !empty($return[$key])) { |
$return[$key] = (array)$return[$key]; |
$return[$key][] = $value; |
} else { |
$return[$key] = $value; |
} |
} |
return $return; |
} |
/** |
* Resolves //, ../ and ./ from a path and returns |
* the result. Eg: |
* |
* /foo/bar/../boo.php => /foo/boo.php |
* /foo/bar/../../boo.php => /boo.php |
* /foo/bar/.././/boo.php => /foo/boo.php |
* |
* This method can also be called statically. |
* |
* @param string $url URL path to resolve |
* @return string The result |
*/ |
function resolvePath($path) |
{ |
$path = explode('/', str_replace('//', '/', $path)); |
for ($i=0; $i<count($path); $i++) { |
if ($path[$i] == '.') { |
unset($path[$i]); |
$path = array_values($path); |
$i--; |
} elseif ($path[$i] == '..' AND ($i > 1 OR ($i == 1 AND $path[0] != '') ) ) { |
unset($path[$i]); |
unset($path[$i-1]); |
$path = array_values($path); |
$i -= 2; |
} elseif ($path[$i] == '..' AND $i == 1 AND $path[0] == '') { |
unset($path[$i]); |
$path = array_values($path); |
$i--; |
} else { |
continue; |
} |
} |
return implode('/', $path); |
} |
/** |
* Returns the standard port number for a protocol |
* |
* @param string $scheme The protocol to lookup |
* @return integer Port number or NULL if no scheme matches |
* |
* @author Philippe Jausions <Philippe.Jausions@11abacus.com> |
*/ |
function getStandardPort($scheme) |
{ |
switch (strtolower($scheme)) { |
case 'http': return 80; |
case 'https': return 443; |
case 'ftp': return 21; |
case 'imap': return 143; |
case 'imaps': return 993; |
case 'pop3': return 110; |
case 'pop3s': return 995; |
default: return null; |
} |
} |
/** |
* Forces the URL to a particular protocol |
* |
* @param string $protocol Protocol to force the URL to |
* @param integer $port Optional port (standard port is used by default) |
*/ |
function setProtocol($protocol, $port = null) |
{ |
$this->protocol = $protocol; |
$this->port = is_null($port) ? $this->getStandardPort() : $port; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Net/FTP/Observer.php |
---|
New file |
0,0 → 1,101 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ |
/** |
* Net_FTP observer. |
* |
* This class implements the Observer part of a Subject-Observer |
* design pattern. It listens to the events sent by a Net_FTP instance. |
* This module had many influences from the Log_observer code. |
* |
* PHP versions 4 and 5 |
* |
* LICENSE: This source file is subject to version 3.0 of the PHP license |
* that is available through the world-wide-web at the following URI: |
* http://www.php.net/license/3_0.txt. If you did not receive a copy of |
* the PHP License and are unable to obtain it through the web, please |
* send a note to license@php.net so we can mail you a copy immediately. |
* |
* @category Networking |
* @package FTP |
* @author Tobias Schlitt <toby@php.net> |
* @author Laurent Laville <pear@laurent-laville.org> |
* @author Chuck Hagenbuch <chuck@horde.org> |
* @copyright 1997-2005 The PHP Group |
* @license http://www.php.net/license/3_0.txt PHP License 3.0 |
* @version CVS: $Id: Observer.php,v 1.1 2005-03-30 08:50:33 jpm Exp $ |
* @link http://pear.php.net/package/Net_FTP |
* @since File available since Release 0.0.1 |
*/ |
/** |
* This class implements the Observer part of a Subject-Observer |
* design pattern. It listens to the events sent by a Net_FTP instance. |
* This module had many influences from the Log_observer code. |
* |
* @license http://www.php.net/license/3_0.txt PHP License 3.0 |
* @category Networking |
* @package FTP |
* @author Laurent Laville <pear@laurent-laville.org> |
* @author Chuck Hagenbuch <chuck@horde.org> |
* @author Tobias Schlitt <toby@php.net> |
* @copyright 1997-2005 The PHP Group |
* @version Release: 1.3.0 |
* @link http://pear.php.net/package/Net_FTP |
* @since 1.3.0.0 |
* @access public |
* |
* @example observer_upload.php An example of Net_FTP_Observer implementation. |
*/ |
class Net_FTP_Observer |
{ |
/** |
* Instance-specific unique identification number. |
* |
* @var integer |
* @since 1.3.0 |
* @access private |
*/ |
var $_id; |
/** |
* Creates a new basic Net_FTP_Observer instance. |
* |
* @since 1.3.0 |
* @access public |
*/ |
function Net_FTP_Observer() |
{ |
$this->_id = md5(microtime()); |
} |
/** |
* Returns the listener's identifier |
* |
* @return string |
* @since 1.3.0 |
* @access public |
*/ |
function getId() |
{ |
return $this->_id; |
} |
/** |
* This is a stub method to make sure that Net_FTP_Observer classes do |
* something when they are notified of a message. The default behavior |
* is to just do nothing. |
* You should override this method. |
* |
* @param mixed $event A hash describing the net event. |
* |
* @since 1.3.0 |
* @access public |
*/ |
function notify($event) |
{ |
return; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Net/SMTP.php |
---|
New file |
0,0 → 1,970 |
<?php |
/* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */ |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2003 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.02 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Chuck Hagenbuch <chuck@horde.org> | |
// | Jon Parise <jon@php.net> | |
// | Damian Alejandro Fernandez Sosa <damlists@cnba.uba.ar> | |
// +----------------------------------------------------------------------+ |
require_once 'PEAR.php'; |
require_once 'Net/Socket.php'; |
/** |
* Provides an implementation of the SMTP protocol using PEAR's |
* Net_Socket:: class. |
* |
* @package Net_SMTP |
* @author Chuck Hagenbuch <chuck@horde.org> |
* @author Jon Parise <jon@php.net> |
* @author Damian Alejandro Fernandez Sosa <damlists@cnba.uba.ar> |
* |
* @example basic.php A basic implementation of the Net_SMTP package. |
*/ |
class Net_SMTP |
{ |
/** |
* The server to connect to. |
* @var string |
* @access public |
*/ |
var $host = 'localhost'; |
/** |
* The port to connect to. |
* @var int |
* @access public |
*/ |
var $port = 25; |
/** |
* The value to give when sending EHLO or HELO. |
* @var string |
* @access public |
*/ |
var $localhost = 'localhost'; |
/** |
* List of supported authentication methods, in preferential order. |
* @var array |
* @access public |
*/ |
var $auth_methods = array('DIGEST-MD5', 'CRAM-MD5', 'LOGIN', 'PLAIN'); |
/** |
* Should debugging output be enabled? |
* @var boolean |
* @access private |
*/ |
var $_debug = false; |
/** |
* The socket resource being used to connect to the SMTP server. |
* @var resource |
* @access private |
*/ |
var $_socket = null; |
/** |
* The most recent server response code. |
* @var int |
* @access private |
*/ |
var $_code = -1; |
/** |
* The most recent server response arguments. |
* @var array |
* @access private |
*/ |
var $_arguments = array(); |
/** |
* Stores detected features of the SMTP server. |
* @var array |
* @access private |
*/ |
var $_esmtp = array(); |
/** |
* Instantiates a new Net_SMTP object, overriding any defaults |
* with parameters that are passed in. |
* |
* @param string The server to connect to. |
* @param int The port to connect to. |
* @param string The value to give when sending EHLO or HELO. |
* |
* @access public |
* @since 1.0 |
*/ |
function Net_SMTP($host = null, $port = null, $localhost = null) |
{ |
if (isset($host)) $this->host = $host; |
if (isset($port)) $this->port = $port; |
if (isset($localhost)) $this->localhost = $localhost; |
$this->_socket = new Net_Socket(); |
/* |
* Include the Auth_SASL package. If the package is not available, |
* we disable the authentication methods that depend upon it. |
*/ |
if ((@include_once 'Auth/SASL.php') === false) { |
$pos = array_search('DIGEST-MD5', $this->auth_methods); |
unset($this->auth_methods[$pos]); |
$pos = array_search('CRAM-MD5', $this->auth_methods); |
unset($this->auth_methods[$pos]); |
} |
} |
/** |
* Set the value of the debugging flag. |
* |
* @param boolean $debug New value for the debugging flag. |
* |
* @access public |
* @since 1.1.0 |
*/ |
function setDebug($debug) |
{ |
$this->_debug = $debug; |
} |
/** |
* Send the given string of data to the server. |
* |
* @param string $data The string of data to send. |
* |
* @return mixed True on success or a PEAR_Error object on failure. |
* |
* @access private |
* @since 1.1.0 |
*/ |
function _send($data) |
{ |
if ($this->_debug) { |
echo "DEBUG: Send: $data\n"; |
} |
if (PEAR::isError($error = $this->_socket->write($data))) { |
return new PEAR_Error('Failed to write to socket: ' . |
$error->getMessage()); |
} |
return true; |
} |
/** |
* Send a command to the server with an optional string of arguments. |
* A carriage return / linefeed (CRLF) sequence will be appended to each |
* command string before it is sent to the SMTP server. |
* |
* @param string $command The SMTP command to send to the server. |
* @param string $args A string of optional arguments to append |
* to the command. |
* |
* @return mixed The result of the _send() call. |
* |
* @access private |
* @since 1.1.0 |
*/ |
function _put($command, $args = '') |
{ |
if (!empty($args)) { |
return $this->_send($command . ' ' . $args . "\r\n"); |
} |
return $this->_send($command . "\r\n"); |
} |
/** |
* Read a reply from the SMTP server. The reply consists of a response |
* code and a response message. |
* |
* @param mixed $valid The set of valid response codes. These |
* may be specified as an array of integer |
* values or as a single integer value. |
* |
* @return mixed True if the server returned a valid response code or |
* a PEAR_Error object is an error condition is reached. |
* |
* @access private |
* @since 1.1.0 |
* |
* @see getResponse |
*/ |
function _parseResponse($valid) |
{ |
$this->_code = -1; |
$this->_arguments = array(); |
while ($line = $this->_socket->readLine()) { |
if ($this->_debug) { |
echo "DEBUG: Recv: $line\n"; |
} |
/* If we receive an empty line, the connection has been closed. */ |
if (empty($line)) { |
$this->disconnect(); |
return new PEAR_Error("Connection was unexpectedly closed"); |
} |
/* Read the code and store the rest in the arguments array. */ |
$code = substr($line, 0, 3); |
$this->_arguments[] = trim(substr($line, 4)); |
/* Check the syntax of the response code. */ |
if (is_numeric($code)) { |
$this->_code = (int)$code; |
} else { |
$this->_code = -1; |
break; |
} |
/* If this is not a multiline response, we're done. */ |
if (substr($line, 3, 1) != '-') { |
break; |
} |
} |
/* Compare the server's response code with the valid code. */ |
if (is_int($valid) && ($this->_code === $valid)) { |
return true; |
} |
/* If we were given an array of valid response codes, check each one. */ |
if (is_array($valid)) { |
foreach ($valid as $valid_code) { |
if ($this->_code === $valid_code) { |
return true; |
} |
} |
} |
return new PEAR_Error("Invalid response code received from server"); |
} |
/** |
* Return a 2-tuple containing the last response from the SMTP server. |
* |
* @return array A two-element array: the first element contains the |
* response code as an integer and the second element |
* contains the response's arguments as a string. |
* |
* @access public |
* @since 1.1.0 |
*/ |
function getResponse() |
{ |
return array($this->_code, join("\n", $this->_arguments)); |
} |
/** |
* Attempt to connect to the SMTP server. |
* |
* @param int $timeout The timeout value (in seconds) for the |
* socket connection. |
* @param bool $persistent Should a persistent socket connection |
* be used? |
* |
* @return mixed Returns a PEAR_Error with an error message on any |
* kind of failure, or true on success. |
* @access public |
* @since 1.0 |
*/ |
function connect($timeout = null, $persistent = false) |
{ |
$result = $this->_socket->connect($this->host, $this->port, |
$persistent, $timeout); |
if (PEAR::isError($result)) { |
return new PEAR_Error('Failed to connect socket: ' . |
$result->getMessage()); |
} |
if (PEAR::isError($error = $this->_parseResponse(220))) { |
return $error; |
} |
if (PEAR::isError($error = $this->_negotiate())) { |
return $error; |
} |
return true; |
} |
/** |
* Attempt to disconnect from the SMTP server. |
* |
* @return mixed Returns a PEAR_Error with an error message on any |
* kind of failure, or true on success. |
* @access public |
* @since 1.0 |
*/ |
function disconnect() |
{ |
if (PEAR::isError($error = $this->_put('QUIT'))) { |
return $error; |
} |
if (PEAR::isError($error = $this->_parseResponse(221))) { |
return $error; |
} |
if (PEAR::isError($error = $this->_socket->disconnect())) { |
return new PEAR_Error('Failed to disconnect socket: ' . |
$error->getMessage()); |
} |
return true; |
} |
/** |
* Attempt to send the EHLO command and obtain a list of ESMTP |
* extensions available, and failing that just send HELO. |
* |
* @return mixed Returns a PEAR_Error with an error message on any |
* kind of failure, or true on success. |
* |
* @access private |
* @since 1.1.0 |
*/ |
function _negotiate() |
{ |
if (PEAR::isError($error = $this->_put('EHLO', $this->localhost))) { |
return $error; |
} |
if (PEAR::isError($this->_parseResponse(250))) { |
/* If we receive a 503 response, we're already authenticated. */ |
if ($this->_code === 503) { |
return true; |
} |
/* If the EHLO failed, try the simpler HELO command. */ |
if (PEAR::isError($error = $this->_put('HELO', $this->localhost))) { |
return $error; |
} |
if (PEAR::isError($this->_parseResponse(250))) { |
return new PEAR_Error('HELO was not accepted: ', $this->_code); |
} |
return true; |
} |
foreach ($this->_arguments as $argument) { |
$verb = strtok($argument, ' '); |
$arguments = substr($argument, strlen($verb) + 1, |
strlen($argument) - strlen($verb) - 1); |
$this->_esmtp[$verb] = $arguments; |
} |
return true; |
} |
/** |
* Returns the name of the best authentication method that the server |
* has advertised. |
* |
* @return mixed Returns a string containing the name of the best |
* supported authentication method or a PEAR_Error object |
* if a failure condition is encountered. |
* @access private |
* @since 1.1.0 |
*/ |
function _getBestAuthMethod() |
{ |
$available_methods = explode(' ', $this->_esmtp['AUTH']); |
foreach ($this->auth_methods as $method) { |
if (in_array($method, $available_methods)) { |
return $method; |
} |
} |
return new PEAR_Error('No supported authentication methods'); |
} |
/** |
* Attempt to do SMTP authentication. |
* |
* @param string The userid to authenticate as. |
* @param string The password to authenticate with. |
* @param string The requested authentication method. If none is |
* specified, the best supported method will be used. |
* |
* @return mixed Returns a PEAR_Error with an error message on any |
* kind of failure, or true on success. |
* @access public |
* @since 1.0 |
*/ |
function auth($uid, $pwd , $method = '') |
{ |
if (empty($this->_esmtp['AUTH'])) { |
return new PEAR_Error('SMTP server does no support authentication'); |
} |
/* |
* If no method has been specified, get the name of the best supported |
* method advertised by the SMTP server. |
*/ |
if (empty($method)) { |
if (PEAR::isError($method = $this->_getBestAuthMethod())) { |
/* Return the PEAR_Error object from _getBestAuthMethod(). */ |
return $method; |
} |
} else { |
$method = strtoupper($method); |
if (!in_array($method, $this->auth_methods)) { |
return new PEAR_Error("$method is not a supported authentication method"); |
} |
} |
switch ($method) { |
case 'DIGEST-MD5': |
$result = $this->_authDigest_MD5($uid, $pwd); |
break; |
case 'CRAM-MD5': |
$result = $this->_authCRAM_MD5($uid, $pwd); |
break; |
case 'LOGIN': |
$result = $this->_authLogin($uid, $pwd); |
break; |
case 'PLAIN': |
$result = $this->_authPlain($uid, $pwd); |
break; |
default: |
$result = new PEAR_Error("$method is not a supported authentication method"); |
break; |
} |
/* If an error was encountered, return the PEAR_Error object. */ |
if (PEAR::isError($result)) { |
return $result; |
} |
/* RFC-2554 requires us to re-negotiate ESMTP after an AUTH. */ |
if (PEAR::isError($error = $this->_negotiate())) { |
return $error; |
} |
return true; |
} |
/** |
* Authenticates the user using the DIGEST-MD5 method. |
* |
* @param string The userid to authenticate as. |
* @param string The password to authenticate with. |
* |
* @return mixed Returns a PEAR_Error with an error message on any |
* kind of failure, or true on success. |
* @access private |
* @since 1.1.0 |
*/ |
function _authDigest_MD5($uid, $pwd) |
{ |
if (PEAR::isError($error = $this->_put('AUTH', 'DIGEST-MD5'))) { |
return $error; |
} |
/* 334: Continue authentication request */ |
if (PEAR::isError($error = $this->_parseResponse(334))) { |
/* 503: Error: already authenticated */ |
if ($this->_code === 503) { |
return true; |
} |
return $error; |
} |
$challenge = base64_decode($this->_arguments[0]); |
$digest = &Auth_SASL::factory('digestmd5'); |
$auth_str = base64_encode($digest->getResponse($uid, $pwd, $challenge, |
$this->host, "smtp")); |
if (PEAR::isError($error = $this->_put($auth_str))) { |
return $error; |
} |
/* 334: Continue authentication request */ |
if (PEAR::isError($error = $this->_parseResponse(334))) { |
return $error; |
} |
/* |
* We don't use the protocol's third step because SMTP doesn't allow |
* subsequent authentication, so we just silently ignore it. |
*/ |
if (PEAR::isError($error = $this->_put(' '))) { |
return $error; |
} |
/* 235: Authentication successful */ |
if (PEAR::isError($error = $this->_parseResponse(235))) { |
return $error; |
} |
} |
/** |
* Authenticates the user using the CRAM-MD5 method. |
* |
* @param string The userid to authenticate as. |
* @param string The password to authenticate with. |
* |
* @return mixed Returns a PEAR_Error with an error message on any |
* kind of failure, or true on success. |
* @access private |
* @since 1.1.0 |
*/ |
function _authCRAM_MD5($uid, $pwd) |
{ |
if (PEAR::isError($error = $this->_put('AUTH', 'CRAM-MD5'))) { |
return $error; |
} |
/* 334: Continue authentication request */ |
if (PEAR::isError($error = $this->_parseResponse(334))) { |
/* 503: Error: already authenticated */ |
if ($this->_code === 503) { |
return true; |
} |
return $error; |
} |
$challenge = base64_decode($this->_arguments[0]); |
$cram = &Auth_SASL::factory('crammd5'); |
$auth_str = base64_encode($cram->getResponse($uid, $pwd, $challenge)); |
if (PEAR::isError($error = $this->_put($auth_str))) { |
return $error; |
} |
/* 235: Authentication successful */ |
if (PEAR::isError($error = $this->_parseResponse(235))) { |
return $error; |
} |
} |
/** |
* Authenticates the user using the LOGIN method. |
* |
* @param string The userid to authenticate as. |
* @param string The password to authenticate with. |
* |
* @return mixed Returns a PEAR_Error with an error message on any |
* kind of failure, or true on success. |
* @access private |
* @since 1.1.0 |
*/ |
function _authLogin($uid, $pwd) |
{ |
if (PEAR::isError($error = $this->_put('AUTH', 'LOGIN'))) { |
return $error; |
} |
/* 334: Continue authentication request */ |
if (PEAR::isError($error = $this->_parseResponse(334))) { |
/* 503: Error: already authenticated */ |
if ($this->_code === 503) { |
return true; |
} |
return $error; |
} |
if (PEAR::isError($error = $this->_put(base64_encode($uid)))) { |
return $error; |
} |
/* 334: Continue authentication request */ |
if (PEAR::isError($error = $this->_parseResponse(334))) { |
return $error; |
} |
if (PEAR::isError($error = $this->_put(base64_encode($pwd)))) { |
return $error; |
} |
/* 235: Authentication successful */ |
if (PEAR::isError($error = $this->_parseResponse(235))) { |
return $error; |
} |
return true; |
} |
/** |
* Authenticates the user using the PLAIN method. |
* |
* @param string The userid to authenticate as. |
* @param string The password to authenticate with. |
* |
* @return mixed Returns a PEAR_Error with an error message on any |
* kind of failure, or true on success. |
* @access private |
* @since 1.1.0 |
*/ |
function _authPlain($uid, $pwd) |
{ |
if (PEAR::isError($error = $this->_put('AUTH', 'PLAIN'))) { |
return $error; |
} |
/* 334: Continue authentication request */ |
if (PEAR::isError($error = $this->_parseResponse(334))) { |
/* 503: Error: already authenticated */ |
if ($this->_code === 503) { |
return true; |
} |
return $error; |
} |
$auth_str = base64_encode(chr(0) . $uid . chr(0) . $pwd); |
if (PEAR::isError($error = $this->_put($auth_str))) { |
return $error; |
} |
/* 235: Authentication successful */ |
if (PEAR::isError($error = $this->_parseResponse(235))) { |
return $error; |
} |
return true; |
} |
/** |
* Send the HELO command. |
* |
* @param string The domain name to say we are. |
* |
* @return mixed Returns a PEAR_Error with an error message on any |
* kind of failure, or true on success. |
* @access public |
* @since 1.0 |
*/ |
function helo($domain) |
{ |
if (PEAR::isError($error = $this->_put('HELO', $domain))) { |
return $error; |
} |
if (PEAR::isError($error = $this->_parseResponse(250))) { |
return $error; |
} |
return true; |
} |
/** |
* Send the MAIL FROM: command. |
* |
* @param string The sender (reverse path) to set. |
* |
* @return mixed Returns a PEAR_Error with an error message on any |
* kind of failure, or true on success. |
* @access public |
* @since 1.0 |
*/ |
function mailFrom($sender) |
{ |
if (PEAR::isError($error = $this->_put('MAIL', "FROM:<$sender>"))) { |
return $error; |
} |
if (PEAR::isError($error = $this->_parseResponse(250))) { |
return $error; |
} |
return true; |
} |
/** |
* Send the RCPT TO: command. |
* |
* @param string The recipient (forward path) to add. |
* |
* @return mixed Returns a PEAR_Error with an error message on any |
* kind of failure, or true on success. |
* @access public |
* @since 1.0 |
*/ |
function rcptTo($recipient) |
{ |
if (PEAR::isError($error = $this->_put('RCPT', "TO:<$recipient>"))) { |
return $error; |
} |
if (PEAR::isError($error = $this->_parseResponse(array(250, 251)))) { |
return $error; |
} |
return true; |
} |
/** |
* Quote the data so that it meets SMTP standards. |
* |
* This is provided as a separate public function to facilitate easier |
* overloading for the cases where it is desirable to customize the |
* quoting behavior. |
* |
* @param string The message text to quote. The string must be passed |
* by reference, and the text will be modified in place. |
* |
* @access public |
* @since 1.2 |
*/ |
function quotedata(&$data) |
{ |
/* |
* Change Unix (\n) and Mac (\r) linefeeds into Internet-standard CRLF |
* (\r\n) linefeeds. |
*/ |
$data = preg_replace("/([^\r]{1})\n/", "\\1\r\n", $data); |
$data = preg_replace("/\n\n/", "\n\r\n", $data); |
/* |
* Because a single leading period (.) signifies an end to the data, |
* legitimate leading periods need to be "doubled" (e.g. '..'). |
*/ |
$data = preg_replace("/\n\./", "\n..", $data); |
} |
/** |
* Send the DATA command. |
* |
* @param string The message body to send. |
* |
* @return mixed Returns a PEAR_Error with an error message on any |
* kind of failure, or true on success. |
* @access public |
* @since 1.0 |
*/ |
function data($data) |
{ |
/* |
* RFC 1870, section 3, subsection 3 states "a value of zero indicates |
* that no fixed maximum message size is in force". Furthermore, it |
* says that if "the parameter is omitted no information is conveyed |
* about the server's fixed maximum message size". |
*/ |
if (isset($this->_esmtp['SIZE']) && ($this->_esmtp['SIZE'] > 0)) { |
if (strlen($data) >= $this->_esmtp['SIZE']) { |
$this->disconnect(); |
return new PEAR_Error('Message size excedes the server limit'); |
} |
} |
/* Quote the data based on the SMTP standards. */ |
$this->quotedata($data); |
if (PEAR::isError($error = $this->_put('DATA'))) { |
return $error; |
} |
if (PEAR::isError($error = $this->_parseResponse(354))) { |
return $error; |
} |
if (PEAR::isError($this->_send($data . "\r\n.\r\n"))) { |
return new PEAR_Error('write to socket failed'); |
} |
if (PEAR::isError($error = $this->_parseResponse(250))) { |
return $error; |
} |
return true; |
} |
/** |
* Send the SEND FROM: command. |
* |
* @param string The reverse path to send. |
* |
* @return mixed Returns a PEAR_Error with an error message on any |
* kind of failure, or true on success. |
* @access public |
* @since 1.2.6 |
*/ |
function sendFrom($path) |
{ |
if (PEAR::isError($error = $this->_put('SEND', "FROM:<$path>"))) { |
return $error; |
} |
if (PEAR::isError($error = $this->_parseResponse(250))) { |
return $error; |
} |
return true; |
} |
/** |
* Backwards-compatibility wrapper for sendFrom(). |
* |
* @param string The reverse path to send. |
* |
* @return mixed Returns a PEAR_Error with an error message on any |
* kind of failure, or true on success. |
* |
* @access public |
* @since 1.0 |
* @deprecated 1.2.6 |
*/ |
function send_from($path) |
{ |
return sendFrom($path); |
} |
/** |
* Send the SOML FROM: command. |
* |
* @param string The reverse path to send. |
* |
* @return mixed Returns a PEAR_Error with an error message on any |
* kind of failure, or true on success. |
* @access public |
* @since 1.2.6 |
*/ |
function somlFrom($path) |
{ |
if (PEAR::isError($error = $this->_put('SOML', "FROM:<$path>"))) { |
return $error; |
} |
if (PEAR::isError($error = $this->_parseResponse(250))) { |
return $error; |
} |
return true; |
} |
/** |
* Backwards-compatibility wrapper for somlFrom(). |
* |
* @param string The reverse path to send. |
* |
* @return mixed Returns a PEAR_Error with an error message on any |
* kind of failure, or true on success. |
* |
* @access public |
* @since 1.0 |
* @deprecated 1.2.6 |
*/ |
function soml_from($path) |
{ |
return somlFrom($path); |
} |
/** |
* Send the SAML FROM: command. |
* |
* @param string The reverse path to send. |
* |
* @return mixed Returns a PEAR_Error with an error message on any |
* kind of failure, or true on success. |
* @access public |
* @since 1.2.6 |
*/ |
function samlFrom($path) |
{ |
if (PEAR::isError($error = $this->_put('SAML', "FROM:<$path>"))) { |
return $error; |
} |
if (PEAR::isError($error = $this->_parseResponse(250))) { |
return $error; |
} |
return true; |
} |
/** |
* Backwards-compatibility wrapper for samlFrom(). |
* |
* @param string The reverse path to send. |
* |
* @return mixed Returns a PEAR_Error with an error message on any |
* kind of failure, or true on success. |
* |
* @access public |
* @since 1.0 |
* @deprecated 1.2.6 |
*/ |
function saml_from($path) |
{ |
return samlFrom($path); |
} |
/** |
* Send the RSET command. |
* |
* @return mixed Returns a PEAR_Error with an error message on any |
* kind of failure, or true on success. |
* @access public |
* @since 1.0 |
*/ |
function rset() |
{ |
if (PEAR::isError($error = $this->_put('RSET'))) { |
return $error; |
} |
if (PEAR::isError($error = $this->_parseResponse(250))) { |
return $error; |
} |
return true; |
} |
/** |
* Send the VRFY command. |
* |
* @param string The string to verify |
* |
* @return mixed Returns a PEAR_Error with an error message on any |
* kind of failure, or true on success. |
* @access public |
* @since 1.0 |
*/ |
function vrfy($string) |
{ |
/* Note: 251 is also a valid response code */ |
if (PEAR::isError($error = $this->_put('VRFY', $string))) { |
return $error; |
} |
if (PEAR::isError($error = $this->_parseResponse(250))) { |
return $error; |
} |
return true; |
} |
/** |
* Send the NOOP command. |
* |
* @return mixed Returns a PEAR_Error with an error message on any |
* kind of failure, or true on success. |
* @access public |
* @since 1.0 |
*/ |
function noop() |
{ |
if (PEAR::isError($error = $this->_put('NOOP'))) { |
return $error; |
} |
if (PEAR::isError($error = $this->_parseResponse(250))) { |
return $error; |
} |
return true; |
} |
/** |
* Backwards-compatibility method. identifySender()'s functionality is |
* now handled internally. |
* |
* @return boolean This method always return true. |
* |
* @access public |
* @since 1.0 |
*/ |
function identifySender() |
{ |
return true; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Net/Socket.php |
---|
New file |
0,0 → 1,528 |
<?php |
// |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2003 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.0 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Stig Bakken <ssb@php.net> | |
// | Chuck Hagenbuch <chuck@horde.org> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: Socket.php,v 1.1 2005-03-30 08:50:33 jpm Exp $ |
require_once 'PEAR.php'; |
define('NET_SOCKET_READ', 1); |
define('NET_SOCKET_WRITE', 2); |
define('NET_SOCKET_ERROR', 3); |
/** |
* Generalized Socket class. |
* |
* @version 1.1 |
* @author Stig Bakken <ssb@php.net> |
* @author Chuck Hagenbuch <chuck@horde.org> |
*/ |
class Net_Socket extends PEAR { |
/** |
* Socket file pointer. |
* @var resource $fp |
*/ |
var $fp = null; |
/** |
* Whether the socket is blocking. Defaults to true. |
* @var boolean $blocking |
*/ |
var $blocking = true; |
/** |
* Whether the socket is persistent. Defaults to false. |
* @var boolean $persistent |
*/ |
var $persistent = false; |
/** |
* The IP address to connect to. |
* @var string $addr |
*/ |
var $addr = ''; |
/** |
* The port number to connect to. |
* @var integer $port |
*/ |
var $port = 0; |
/** |
* Number of seconds to wait on socket connections before assuming |
* there's no more data. Defaults to no timeout. |
* @var integer $timeout |
*/ |
var $timeout = false; |
/** |
* Number of bytes to read at a time in readLine() and |
* readAll(). Defaults to 2048. |
* @var integer $lineLength |
*/ |
var $lineLength = 2048; |
/** |
* Connect to the specified port. If called when the socket is |
* already connected, it disconnects and connects again. |
* |
* @param string $addr IP address or host name. |
* @param integer $port TCP port number. |
* @param boolean $persistent (optional) Whether the connection is |
* persistent (kept open between requests |
* by the web server). |
* @param integer $timeout (optional) How long to wait for data. |
* @param array $options See options for stream_context_create. |
* |
* @access public |
* |
* @return boolean | PEAR_Error True on success or a PEAR_Error on failure. |
*/ |
function connect($addr, $port = 0, $persistent = null, $timeout = null, $options = null) |
{ |
if (is_resource($this->fp)) { |
@fclose($this->fp); |
$this->fp = null; |
} |
if (!$addr) { |
return $this->raiseError('$addr cannot be empty'); |
} elseif (strspn($addr, '.0123456789') == strlen($addr) || |
strstr($addr, '/') !== false) { |
$this->addr = $addr; |
} else { |
$this->addr = @gethostbyname($addr); |
} |
$this->port = $port % 65536; |
if ($persistent !== null) { |
$this->persistent = $persistent; |
} |
if ($timeout !== null) { |
$this->timeout = $timeout; |
} |
$openfunc = $this->persistent ? 'pfsockopen' : 'fsockopen'; |
$errno = 0; |
$errstr = ''; |
if ($options && function_exists('stream_context_create')) { |
if ($this->timeout) { |
$timeout = $this->timeout; |
} else { |
$timeout = 0; |
} |
$context = stream_context_create($options); |
$fp = @$openfunc($this->addr, $this->port, $errno, $errstr, $timeout, $context); |
} else { |
if ($this->timeout) { |
$fp = @$openfunc($this->addr, $this->port, $errno, $errstr, $this->timeout); |
} else { |
$fp = @$openfunc($this->addr, $this->port, $errno, $errstr); |
} |
} |
if (!$fp) { |
return $this->raiseError($errstr, $errno); |
} |
$this->fp = $fp; |
return $this->setBlocking($this->blocking); |
} |
/** |
* Disconnects from the peer, closes the socket. |
* |
* @access public |
* @return mixed true on success or an error object otherwise |
*/ |
function disconnect() |
{ |
if (!is_resource($this->fp)) { |
return $this->raiseError('not connected'); |
} |
@fclose($this->fp); |
$this->fp = null; |
return true; |
} |
/** |
* Find out if the socket is in blocking mode. |
* |
* @access public |
* @return boolean The current blocking mode. |
*/ |
function isBlocking() |
{ |
return $this->blocking; |
} |
/** |
* Sets whether the socket connection should be blocking or |
* not. A read call to a non-blocking socket will return immediately |
* if there is no data available, whereas it will block until there |
* is data for blocking sockets. |
* |
* @param boolean $mode True for blocking sockets, false for nonblocking. |
* @access public |
* @return mixed true on success or an error object otherwise |
*/ |
function setBlocking($mode) |
{ |
if (!is_resource($this->fp)) { |
return $this->raiseError('not connected'); |
} |
$this->blocking = $mode; |
socket_set_blocking($this->fp, $this->blocking); |
return true; |
} |
/** |
* Sets the timeout value on socket descriptor, |
* expressed in the sum of seconds and microseconds |
* |
* @param integer $seconds Seconds. |
* @param integer $microseconds Microseconds. |
* @access public |
* @return mixed true on success or an error object otherwise |
*/ |
function setTimeout($seconds, $microseconds) |
{ |
if (!is_resource($this->fp)) { |
return $this->raiseError('not connected'); |
} |
return socket_set_timeout($this->fp, $seconds, $microseconds); |
} |
/** |
* Returns information about an existing socket resource. |
* Currently returns four entries in the result array: |
* |
* <p> |
* timed_out (bool) - The socket timed out waiting for data<br> |
* blocked (bool) - The socket was blocked<br> |
* eof (bool) - Indicates EOF event<br> |
* unread_bytes (int) - Number of bytes left in the socket buffer<br> |
* </p> |
* |
* @access public |
* @return mixed Array containing information about existing socket resource or an error object otherwise |
*/ |
function getStatus() |
{ |
if (!is_resource($this->fp)) { |
return $this->raiseError('not connected'); |
} |
return socket_get_status($this->fp); |
} |
/** |
* Get a specified line of data |
* |
* @access public |
* @return $size bytes of data from the socket, or a PEAR_Error if |
* not connected. |
*/ |
function gets($size) |
{ |
if (!is_resource($this->fp)) { |
return $this->raiseError('not connected'); |
} |
return @fgets($this->fp, $size); |
} |
/** |
* Read a specified amount of data. This is guaranteed to return, |
* and has the added benefit of getting everything in one fread() |
* chunk; if you know the size of the data you're getting |
* beforehand, this is definitely the way to go. |
* |
* @param integer $size The number of bytes to read from the socket. |
* @access public |
* @return $size bytes of data from the socket, or a PEAR_Error if |
* not connected. |
*/ |
function read($size) |
{ |
if (!is_resource($this->fp)) { |
return $this->raiseError('not connected'); |
} |
return @fread($this->fp, $size); |
} |
/** |
* Write a specified amount of data. |
* |
* @param string $data Data to write. |
* @param integer $blocksize Amount of data to write at once. |
* NULL means all at once. |
* |
* @access public |
* @return mixed true on success or an error object otherwise |
*/ |
function write($data, $blocksize = null) |
{ |
if (!is_resource($this->fp)) { |
return $this->raiseError('not connected'); |
} |
if (is_null($blocksize) && !OS_WINDOWS) { |
return fwrite($this->fp, $data); |
} else { |
if (is_null($blocksize)) { |
$blocksize = 1024; |
} |
$pos = 0; |
$size = strlen($data); |
while ($pos < $size) { |
$written = @fwrite($this->fp, substr($data, $pos, $blocksize)); |
if ($written === false) { |
return false; |
} |
$pos += $written; |
} |
return $pos; |
} |
} |
/** |
* Write a line of data to the socket, followed by a trailing "\r\n". |
* |
* @access public |
* @return mixed fputs result, or an error |
*/ |
function writeLine($data) |
{ |
if (!is_resource($this->fp)) { |
return $this->raiseError('not connected'); |
} |
return fwrite($this->fp, $data . "\r\n"); |
} |
/** |
* Tests for end-of-file on a socket descriptor. |
* |
* @access public |
* @return bool |
*/ |
function eof() |
{ |
return (is_resource($this->fp) && feof($this->fp)); |
} |
/** |
* Reads a byte of data |
* |
* @access public |
* @return 1 byte of data from the socket, or a PEAR_Error if |
* not connected. |
*/ |
function readByte() |
{ |
if (!is_resource($this->fp)) { |
return $this->raiseError('not connected'); |
} |
return ord(@fread($this->fp, 1)); |
} |
/** |
* Reads a word of data |
* |
* @access public |
* @return 1 word of data from the socket, or a PEAR_Error if |
* not connected. |
*/ |
function readWord() |
{ |
if (!is_resource($this->fp)) { |
return $this->raiseError('not connected'); |
} |
$buf = @fread($this->fp, 2); |
return (ord($buf[0]) + (ord($buf[1]) << 8)); |
} |
/** |
* Reads an int of data |
* |
* @access public |
* @return integer 1 int of data from the socket, or a PEAR_Error if |
* not connected. |
*/ |
function readInt() |
{ |
if (!is_resource($this->fp)) { |
return $this->raiseError('not connected'); |
} |
$buf = @fread($this->fp, 4); |
return (ord($buf[0]) + (ord($buf[1]) << 8) + |
(ord($buf[2]) << 16) + (ord($buf[3]) << 24)); |
} |
/** |
* Reads a zero-terminated string of data |
* |
* @access public |
* @return string, or a PEAR_Error if |
* not connected. |
*/ |
function readString() |
{ |
if (!is_resource($this->fp)) { |
return $this->raiseError('not connected'); |
} |
$string = ''; |
while (($char = @fread($this->fp, 1)) != "\x00") { |
$string .= $char; |
} |
return $string; |
} |
/** |
* Reads an IP Address and returns it in a dot formated string |
* |
* @access public |
* @return Dot formated string, or a PEAR_Error if |
* not connected. |
*/ |
function readIPAddress() |
{ |
if (!is_resource($this->fp)) { |
return $this->raiseError('not connected'); |
} |
$buf = @fread($this->fp, 4); |
return sprintf("%s.%s.%s.%s", ord($buf[0]), ord($buf[1]), |
ord($buf[2]), ord($buf[3])); |
} |
/** |
* Read until either the end of the socket or a newline, whichever |
* comes first. Strips the trailing newline from the returned data. |
* |
* @access public |
* @return All available data up to a newline, without that |
* newline, or until the end of the socket, or a PEAR_Error if |
* not connected. |
*/ |
function readLine() |
{ |
if (!is_resource($this->fp)) { |
return $this->raiseError('not connected'); |
} |
$line = ''; |
$timeout = time() + $this->timeout; |
while (!feof($this->fp) && (!$this->timeout || time() < $timeout)) { |
$line .= @fgets($this->fp, $this->lineLength); |
if (substr($line, -1) == "\n") { |
return rtrim($line, "\r\n"); |
} |
} |
return $line; |
} |
/** |
* Read until the socket closes, or until there is no more data in |
* the inner PHP buffer. If the inner buffer is empty, in blocking |
* mode we wait for at least 1 byte of data. Therefore, in |
* blocking mode, if there is no data at all to be read, this |
* function will never exit (unless the socket is closed on the |
* remote end). |
* |
* @access public |
* |
* @return string All data until the socket closes, or a PEAR_Error if |
* not connected. |
*/ |
function readAll() |
{ |
if (!is_resource($this->fp)) { |
return $this->raiseError('not connected'); |
} |
$data = ''; |
while (!feof($this->fp)) { |
$data .= @fread($this->fp, $this->lineLength); |
} |
return $data; |
} |
/** |
* Runs the equivalent of the select() system call on the socket |
* with a timeout specified by tv_sec and tv_usec. |
* |
* @param integer $state Which of read/write/error to check for. |
* @param integer $tv_sec Number of seconds for timeout. |
* @param integer $tv_usec Number of microseconds for timeout. |
* |
* @access public |
* @return False if select fails, integer describing which of read/write/error |
* are ready, or PEAR_Error if not connected. |
*/ |
function select($state, $tv_sec, $tv_usec = 0) |
{ |
if (!is_resource($this->fp)) { |
return $this->raiseError('not connected'); |
} |
$read = null; |
$write = null; |
$except = null; |
if ($state & NET_SOCKET_READ) { |
$read[] = $this->fp; |
} |
if ($state & NET_SOCKET_WRITE) { |
$write[] = $this->fp; |
} |
if ($state & NET_SOCKET_ERROR) { |
$except[] = $this->fp; |
} |
if (false === ($sr = stream_select($read, $write, $except, $tv_sec, $tv_usec))) { |
return false; |
} |
$result = 0; |
if (count($read)) { |
$result |= NET_SOCKET_READ; |
} |
if (count($write)) { |
$result |= NET_SOCKET_WRITE; |
} |
if (count($except)) { |
$result |= NET_SOCKET_ERROR; |
} |
return $result; |
} |
} |
/branches/v1.0-menes/api/pear/Net/FTP.php |
---|
New file |
0,0 → 1,2148 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ |
/** |
* Net_FTP main file. |
* |
* This file must be included to use the Net_FTP package. |
* |
* PHP versions 4 and 5 |
* |
* LICENSE: This source file is subject to version 3.0 of the PHP license |
* that is available through the world-wide-web at the following URI: |
* http://www.php.net/license/3_0.txt. If you did not receive a copy of |
* the PHP License and are unable to obtain it through the web, please |
* send a note to license@php.net so we can mail you a copy immediately. |
* |
* @category Networking |
* @package FTP |
* @author Tobias Schlitt <toby@php.net> |
* @copyright 1997-2005 The PHP Group |
* @license http://www.php.net/license/3_0.txt PHP License 3.0 |
* @version CVS: $Id: FTP.php,v 1.2 2006-10-05 08:55:35 florian Exp $ |
* @link http://pear.php.net/package/Net_FTP |
* @since File available since Release 0.0.1 |
*/ |
require_once 'PEAR.php'; |
/** |
* Option to let the ls() method return only files. |
* |
* @since 1.3 |
* @name NET_FTP_FILES_ONLY |
* @see Net_FTP::ls() |
*/ |
define('NET_FTP_FILES_ONLY', 0, true); |
/** |
* Option to let the ls() method return only directories. |
* |
* @since 1.3 |
* @name NET_FTP_DIRS_ONLY |
* @see Net_FTP::ls() |
*/ |
define('NET_FTP_DIRS_ONLY', 1, true); |
/** |
* Option to let the ls() method return directories and files (default). |
* |
* @since 1.3 |
* @name NET_FTP_DIRS_FILES |
* @see Net_FTP::ls() |
*/ |
define('NET_FTP_DIRS_FILES', 2, true); |
/** |
* Option to let the ls() method return the raw directory listing from ftp_rawlist(). |
* |
* @since 1.3 |
* @name NET_FTP_RAWLIST |
* @see Net_FTP::ls() |
*/ |
define('NET_FTP_RAWLIST', 3, true); |
/** |
* Error code to indicate a failed connection |
* This error code indicates, that the connection you tryed to set up |
* could not be established. Check your connection settings (host & port)! |
* |
* @since 1.3 |
* @name NET_FTP_ERR_CONNECT_FAILED |
* @see Net_FTP::connect() |
*/ |
define('NET_FTP_ERR_CONNECT_FAILED', -1); |
/** |
* Error code to indicate a failed login |
* This error code indicates, that the login to the FTP server failed. Check |
* your user data (username & password). |
* |
* @since 1.3 |
* @name NET_FTP_ERR_LOGIN_FAILED |
* @see Net_FTP::login() |
*/ |
define('NET_FTP_ERR_LOGIN_FAILED', -2); |
/** |
* Error code to indicate a failed directory change |
* The cd() method failed. Ensure that the directory you wanted to access exists. |
* |
* @since 1.3 |
* @name NET_FTP_ERR_DIRCHANGE_FAILED |
* @see Net_FTP::cd() |
*/ |
define('NET_FTP_ERR_DIRCHANGE_FAILED', 2); // Compatibillity reasons! |
/** |
* Error code to indicate that Net_FTP could not determine the current path |
* The cwd() method failed and could not determine the path you currently reside |
* in on the FTP server. |
* |
* @since 1.3 |
* @name NET_FTP_ERR_DETERMINEPATH_FAILED |
* @see Net_FTP::pwd() |
*/ |
define('NET_FTP_ERR_DETERMINEPATH_FAILED', 4); // Compatibillity reasons! |
/** |
* Error code to indicate that the creation of a directory failed |
* The directory you tryed to create could not be created. Check the |
* access rights on the parent directory! |
* |
* @since 1.3 |
* @name NET_FTP_ERR_CREATEDIR_FAILED |
* @see Net_FTP::mkdir() |
*/ |
define('NET_FTP_ERR_CREATEDIR_FAILED', -4); |
/** |
* Error code to indicate that the EXEC execution failed. |
* The execution of a command using EXEC failed. Ensure, that your |
* FTP server supports the EXEC command. |
* |
* @since 1.3 |
* @name NET_FTP_ERR_EXEC_FAILED |
* @see Net_FTP::execute() |
*/ |
define('NET_FTP_ERR_EXEC_FAILED', -5); |
/** |
* Error code to indicate that the SITE command failed. |
* The execution of a command using SITE failed. Ensure, that your |
* FTP server supports the SITE command. |
* |
* @since 1.3 |
* @name NET_FTP_ERR_SITE_FAILED |
* @see Net_FTP::site() |
*/ |
define('NET_FTP_ERR_SITE_FAILED', -6); |
/** |
* Error code to indicate that the CHMOD command failed. |
* The execution of CHMOD failed. Ensure, that your |
* FTP server supports the CHMOD command and that you have the appropriate |
* access rights to use CHMOD. |
* |
* @since 1.3 |
* @name NET_FTP_ERR_CHMOD_FAILED |
* @see Net_FTP::chmod() |
*/ |
define('NET_FTP_ERR_CHMOD_FAILED', -7); |
/** |
* Error code to indicate that a file rename failed |
* The renaming of a file on the server failed. Ensure that you have the |
* appropriate access rights to rename the file. |
* |
* @since 1.3 |
* @name NET_FTP_ERR_RENAME_FAILED |
* @see Net_FTP::rename() |
*/ |
define('NET_FTP_ERR_RENAME_FAILED', -8); |
/** |
* Error code to indicate that the MDTM command failed |
* The MDTM command is not supported for directories. Ensure that you gave |
* a file path to the mdtm() method, not a directory path. |
* |
* @since 1.3 |
* @name NET_FTP_ERR_MDTMDIR_UNSUPPORTED |
* @see Net_FTP::mdtm() |
*/ |
define('NET_FTP_ERR_MDTMDIR_UNSUPPORTED', -9); |
/** |
* Error code to indicate that the MDTM command failed |
* The MDTM command failed. Ensure that your server supports the MDTM command. |
* |
* @since 1.3 |
* @name NET_FTP_ERR_MDTM_FAILED |
* @see Net_FTP::mdtm() |
*/ |
define('NET_FTP_ERR_MDTM_FAILED', -10); |
/** |
* Error code to indicate that a date returned by the server was misformated |
* A date string returned by your server seems to be missformated and could not be |
* parsed. Check that the server is configured correctly. If you're sure, please |
* send an email to the auhtor with a dumped output of $ftp->ls('./', NET_FTP_RAWLIST); |
* to get the date format supported. |
* |
* @since 1.3 |
* @name NET_FTP_ERR_DATEFORMAT_FAILED |
* @see Net_FTP::mdtm(), Net_FTP::ls() |
*/ |
define('NET_FTP_ERR_DATEFORMAT_FAILED', -11); |
/** |
* Error code to indicate that the SIZE command failed |
* The determination of the filesize of a file failed. Ensure that your server supports the |
* SIZE command. |
* |
* @since 1.3 |
* @name NET_FTP_ERR_SIZE_FAILED |
* @see Net_FTP::size() |
*/ |
define('NET_FTP_ERR_SIZE_FAILED', -12); |
/** |
* Error code to indicate that a local file could not be overwritten |
* You specified not to overwrite files. Therefore the local file has not been |
* overwriten. If you want to get the file overwriten, please set the option to |
* do so. |
* |
* @since 1.3 |
* @name NET_FTP_ERR_OVERWRITELOCALFILE_FORBIDDEN |
* @see Net_FTP::get(), Net_FTP::getRecursive() |
*/ |
define('NET_FTP_ERR_OVERWRITELOCALFILE_FORBIDDEN', -13); |
/** |
* Error code to indicate that a local file could not be overwritten |
* Also you specified to overwrite the local file you want to download to, |
* it has not been possible to do so. Check that you have the appropriate access |
* rights on the local file to overwrite it. |
* |
* @since 1.3 |
* @name NET_FTP_ERR_OVERWRITELOCALFILE_FAILED |
* @see Net_FTP::get(), Net_FTP::getRecursive() |
*/ |
define('NET_FTP_ERR_OVERWRITELOCALFILE_FAILED', -14); |
/** |
* Error code to indicate that the file you wanted to upload does not exist |
* The file you tried to upload does not exist. Ensure that it exists. |
* |
* @since 1.3 |
* @name NET_FTP_ERR_LOCALFILENOTEXIST |
* @see Net_FTP::put(), Net_FTP::putRecursive() |
*/ |
define('NET_FTP_ERR_LOCALFILENOTEXIST', -15); |
/** |
* Error code to indicate that a remote file could not be overwritten |
* You specified not to overwrite files. Therefore the remote file has not been |
* overwriten. If you want to get the file overwriten, please set the option to |
* do so. |
* |
* @since 1.3 |
* @name NET_FTP_ERR_OVERWRITEREMOTEFILE_FORBIDDEN |
* @see Net_FTP::put(), Net_FTP::putRecursive() |
*/ |
define('NET_FTP_ERR_OVERWRITEREMOTEFILE_FORBIDDEN', -16); |
/** |
* Error code to indicate that the upload of a file failed |
* The upload you tried failed. Ensure that you have appropriate access rights |
* to upload the desired file. |
* |
* @since 1.3 |
* @name NET_FTP_ERR_UPLOADFILE_FAILED |
* @see Net_FTP::put(), Net_FTP::putRecursive() |
*/ |
define('NET_FTP_ERR_UPLOADFILE_FAILED', -17); |
/** |
* Error code to indicate that you specified an incorrect directory path |
* The remote path you specified seems not to be a directory. Ensure that |
* the path you specify is a directory and that the path string ends with |
* a /. |
* |
* @since 1.3 |
* @name NET_FTP_ERR_REMOTEPATHNODIR |
* @see Net_FTP::putRecursive(), Net_FTP::getRecursive() |
*/ |
define('NET_FTP_ERR_REMOTEPATHNODIR', -18); |
/** |
* Error code to indicate that you specified an incorrect directory path |
* The local path you specified seems not to be a directory. Ensure that |
* the path you specify is a directory and that the path string ends with |
* a /. |
* |
* @since 1.3 |
* @name NET_FTP_ERR_LOCALPATHNODIR |
* @see Net_FTP::putRecursive(), Net_FTP::getRecursive() |
*/ |
define('NET_FTP_ERR_LOCALPATHNODIR', -19); |
/** |
* Error code to indicate that a local directory failed to be created |
* You tried to create a local directory through getRecursive() method, |
* which has failed. Ensure that you have the appropriate access rights |
* to create it. |
* |
* @since 1.3 |
* @name NET_FTP_ERR_CREATELOCALDIR_FAILED |
* @see Net_FTP::getRecursive() |
*/ |
define('NET_FTP_ERR_CREATELOCALDIR_FAILED', -20); |
/** |
* Error code to indicate that the provided hostname was incorrect |
* The hostname you provided was invalid. Ensure to provide either a |
* full qualified domain name or an IP address. |
* |
* @since 1.3 |
* @name NET_FTP_ERR_HOSTNAMENOSTRING |
* @see Net_FTP::setHostname() |
*/ |
define('NET_FTP_ERR_HOSTNAMENOSTRING', -21); |
/** |
* Error code to indicate that the provided port was incorrect |
* The port number you provided was invalid. Ensure to provide either a |
* a numeric port number greater zero. |
* |
* @since 1.3 |
* @name NET_FTP_ERR_PORTLESSZERO |
* @see Net_FTP::setPort() |
*/ |
define('NET_FTP_ERR_PORTLESSZERO', -22); |
/** |
* Error code to indicate that you provided an invalid mode constant |
* The mode constant you provided was invalid. You may only provide |
* FTP_ASCII or FTP_BINARY. |
* |
* @since 1.3 |
* @name NET_FTP_ERR_NOMODECONST |
* @see Net_FTP::setMode() |
*/ |
define('NET_FTP_ERR_NOMODECONST', -23); |
/** |
* Error code to indicate that you provided an invalid timeout |
* The timeout you provided was invalid. You have to provide a timeout greater |
* or equal to zero. |
* |
* @since 1.3 |
* @name NET_FTP_ERR_TIMEOUTLESSZERO |
* @see Net_FTP::Net_FTP(), Net_FTP::setTimeout() |
*/ |
define('NET_FTP_ERR_TIMEOUTLESSZERO', -24); |
/** |
* Error code to indicate that you provided an invalid timeout |
* An error occured while setting the timeout. Ensure that you provide a |
* valid integer for the timeount and that your PHP installation works |
* correctly. |
* |
* @since 1.3 |
* @name NET_FTP_ERR_SETTIMEOUT_FAILED |
* @see Net_FTP::Net_FTP(), Net_FTP::setTimeout() |
*/ |
define('NET_FTP_ERR_SETTIMEOUT_FAILED', -25); |
/** |
* Error code to indicate that the provided extension file doesn't exist |
* The provided extension file does not exist. Ensure to provided an |
* existant extension file. |
* |
* @since 1.3 |
* @name NET_FTP_ERR_EXTFILENOTEXIST |
* @see Net_FTP::getExtensionFile() |
*/ |
define('NET_FTP_ERR_EXTFILENOTEXIST', -26); |
/** |
* Error code to indicate that the provided extension file is not readable |
* The provided extension file is not readable. Ensure to have sufficient |
* access rights for it. |
* |
* @since 1.3 |
* @name NET_FTP_ERR_EXTFILEREAD_FAILED |
* @see Net_FTP::getExtensionFile() |
*/ |
define('NET_FTP_ERR_EXTFILEREAD_FAILED', -27); |
/** |
* Error code to indicate that the deletion of a file failed |
* The specified file could not be deleted. Ensure to have sufficient |
* access rights to delete the file. |
* |
* @since 1.3 |
* @name NET_FTP_ERR_EXTFILEREAD_FAILED |
* @see Net_FTP::rm() |
*/ |
define('NET_FTP_ERR_DELETEFILE_FAILED', -28); |
/** |
* Error code to indicate that the deletion of a directory faild |
* The specified file could not be deleted. Ensure to have sufficient |
* access rights to delete the file. |
* |
* @since 1.3 |
* @name NET_FTP_ERR_EXTFILEREAD_FAILED |
* @see Net_FTP::rm() |
*/ |
define('NET_FTP_ERR_DELETEDIR_FAILED', -29); |
/** |
* Error code to indicate that the directory listing failed |
* PHP could not list the directory contents on the server. Ensure |
* that your server is configured appropriate. |
* |
* @since 1.3 |
* @name NET_FTP_ERR_RAWDIRLIST_FAILED |
* @see Net_FTP::ls() |
*/ |
define('NET_FTP_ERR_RAWDIRLIST_FAILED', -30); |
/** |
* Error code to indicate that the directory listing failed |
* The directory listing format your server uses seems not to |
* be supported by Net_FTP. Please send the output of the |
* call ls('./', NET_FTP_RAWLIST); to the author of this |
* class to get it supported. |
* |
* @since 1.3 |
* @name NET_FTP_ERR_DIRLIST_UNSUPPORTED |
* @see Net_FTP::ls() |
*/ |
define('NET_FTP_ERR_DIRLIST_UNSUPPORTED', -31); |
/** |
* Error code to indicate failed disconnecting |
* This error code indicates, that disconnection was not possible. |
* |
* @since 1.3 |
* @name NET_FTP_ERR_DISCONNECT_FAILED |
* @see Net_FTP::disconnect() |
*/ |
define('NET_FTP_ERR_DISCONNECT_FAILED', -32); |
/** |
* Error code to indicate that the username you provided was invalid. |
* Check that you provided a non-empty string as the username. |
* |
* @since 1.3 |
* @name NET_FTP_ERR_USERNAMENOSTRING |
* @see Net_FTP::setUsername() |
*/ |
define('NET_FTP_ERR_USERNAMENOSTRING', -33); |
/** |
* Error code to indicate that the username you provided was invalid. |
* Check that you provided a non-empty string as the username. |
* |
* @since 1.3 |
* @name NET_FTP_ERR_PASSWORDNOSTRING |
* @see Net_FTP::setPassword() |
*/ |
define('NET_FTP_ERR_PASSWORDNOSTRING', -33); |
/** |
* Class for comfortable FTP-communication |
* |
* This class provides comfortable communication with FTP-servers. You may do everything |
* enabled by the PHP-FTP-extension and further functionalities, like recursive-deletion, |
* -up- and -download. Another feature is to create directories recursively. |
* |
* @license http://www.php.net/license/3_0.txt PHP License 3.0 |
* @category Networking |
* @package FTP |
* @author Tobias Schlitt <toby@php.net> |
* @copyright 1997-2005 The PHP Group |
* @version Release: @package_version@ |
* @link http://pear.php.net/package/Net_FTP |
* @since 0.0.1 |
* @access public |
*/ |
class Net_FTP extends PEAR |
{ |
/** |
* The host to connect to |
* |
* @access private |
* @var string |
*/ |
var $_hostname; |
/** |
* The port for ftp-connection (standard is 21) |
* |
* @access private |
* @var int |
*/ |
var $_port = 21; |
/** |
* The username for login |
* |
* @access private |
* @var string |
*/ |
var $_username; |
/** |
* The password for login |
* |
* @access private |
* @var string |
*/ |
var $_password; |
/** |
* Determine whether to use passive-mode (true) or active-mode (false) |
* |
* @access private |
* @var bool |
*/ |
var $_passv; |
/** |
* The standard mode for ftp-transfer |
* |
* @access private |
* @var int |
*/ |
var $_mode = FTP_BINARY; |
/** |
* This holds the handle for the ftp-connection |
* |
* @access private |
* @var resource |
*/ |
var $_handle; |
/** |
* Contains the timeout for FTP operations |
* |
* @access private |
* @var int |
* @since 1.3 |
*/ |
var $_timeout = 90; |
/** |
* Saves file-extensions for ascii- and binary-mode |
* |
* The array contains 2 sub-arrays ("ascii" and "binary"), which both contain |
* file-extensions without the "." (".php" = "php"). |
* |
* @access private |
* @var array |
*/ |
var $_file_extensions; |
/** |
* ls match |
* Matches the ls entries against a regex and maps the resulting array to speaking names |
* |
* @access private |
* @var array |
* @since 1.3 |
*/ |
var $_ls_match = array( |
'unix' => array( |
'pattern' => '/(?:(d)|.)([rwxt-]+)\s+(\w+)\s+([\w\d-]+)\s+([\w\d-]+)\s+(\w+)\s+(\S+\s+\S+\s+\S+)\s+(.+)/', |
'map' => array( |
'is_dir' => 1, |
'rights' => 2, |
'files_inside' => 3, |
'user' => 4, |
'group' => 5, |
'size' => 6, |
'date' => 7, |
'name' => 8, |
) |
), |
'windows' => array( |
'pattern' => '/(.+)\s+(.+)\s+((<DIR>)|[0-9]+)\s+(.+)/', |
'map' => array( |
'name' => 5, |
'date' => 1, |
'size' => 3, |
'is_dir' => 4, |
) |
) |
); |
/** |
* matcher |
* Stores the matcher for the current connection |
* |
* @access private |
* @var array |
* @since 1.3 |
*/ |
var $_matcher = null; |
/** |
* Holds all Net_FTP_Observer objects |
* that wish to be notified of new messages. |
* |
* @var array |
* @access private |
* @since 1.3 |
*/ |
var $_listeners = array(); |
/** |
* This generates a new FTP-Object. The FTP-connection will not be established, yet. |
* You can leave $host and $port blank, if you want. The $host will not be set |
* and the $port will be left at 21. You have to set the $host manualy before |
* trying to connect or with the connect() method. |
* |
* @access public |
* @param string $host (optional) The hostname |
* @param int $port (optional) The port |
* @param int $timeout (optional) Sets the standard timeout |
* @return void |
* @see Net_FTP::setHostname(), Net_FTP::setPort(), Net_FTP::connect() |
*/ |
function Net_FTP($host = null, $port = null, $timeout = 90) |
{ |
$this->PEAR(); |
if (isset($host)) { |
$this->setHostname($host); |
} |
if (isset($port)) { |
$this->setPort($port); |
} |
$this->_timeout = $timeout; |
$this->_file_extensions[FTP_ASCII] = array(); |
$this->_file_extensions[FTP_BINARY] = array(); |
} |
/** |
* This function generates the FTP-connection. You can optionally define a |
* hostname and/or a port. If you do so, this data is stored inside the object. |
* |
* @access public |
* @param string $host (optional) The Hostname |
* @param int $port (optional) The Port |
* @return mixed True on success, otherwise PEAR::Error |
* @see NET_FTP_ERR_CONNECT_FAILED |
*/ |
function connect($host = null, $port = null) |
{ |
$this->_matcher = null; |
if (isset($host)) { |
$this->setHostname($host); |
} |
if (isset($port)) { |
$this->setPort($port); |
} |
$handle = @ftp_connect($this->getHostname(), $this->getPort(), $this->_timeout); |
if (!$handle) { |
return $this->raiseError("Connection to host failed", NET_FTP_ERR_CONNECT_FAILED); |
} else { |
$this->_handle =& $handle; |
return true; |
} |
} |
/** |
* This function close the FTP-connection |
* |
* @access public |
* @return bool|PEAR_Error Returns true on success, PEAR_Error on failure |
*/ |
function disconnect() |
{ |
$res = @ftp_close($this->_handle); |
if (!$res) { |
return PEAR::raiseError('Disconnect failed.', NET_FTP_ERR_DISCONNECT_FAILED); |
} |
return true; |
} |
/** |
* This logges you into the ftp-server. You are free to specify username and password |
* in this method. If you specify it, the values will be taken into the corresponding |
* attributes, if do not specify, the attributes are taken. |
* |
* @access public |
* @param string $username (optional) The username to use |
* @param string $password (optional) The password to use |
* @return mixed True on success, otherwise PEAR::Error |
* @see NET_FTP_ERR_LOGIN_FAILED |
*/ |
function login($username = null, $password = null) |
{ |
if (!isset($username)) { |
$username = $this->getUsername(); |
} else { |
$this->setUsername($username); |
} |
if (!isset($password)) { |
$password = $this->getPassword(); |
} else { |
$this->setPassword($password); |
} |
$res = @ftp_login($this->_handle, $username, $password); |
if (!$res) { |
return $this->raiseError("Unable to login", NET_FTP_ERR_LOGIN_FAILED); |
} else { |
return true; |
} |
} |
/** |
* This changes the currently used directory. You can use either an absolute |
* directory-path (e.g. "/home/blah") or a relative one (e.g. "../test"). |
* |
* @access public |
* @param string $dir The directory to go to. |
* @return mixed True on success, otherwise PEAR::Error |
* @see NET_FTP_ERR_DIRCHANGE_FAILED |
*/ |
function cd($dir) |
{ |
$erg = @ftp_chdir($this->_handle, $dir); |
if (!$erg) { |
return $this->raiseError("Directory change failed", NET_FTP_ERR_DIRCHANGE_FAILED); |
} else { |
return true; |
} |
} |
/** |
* Show's you the actual path on the server |
* This function questions the ftp-handle for the actual selected path and returns it. |
* |
* @access public |
* @return mixed The actual path or PEAR::Error |
* @see NET_FTP_ERR_DETERMINEPATH_FAILED |
*/ |
function pwd() |
{ |
$res = @ftp_pwd($this->_handle); |
if (!$res) { |
return $this->raiseError("Could not determine the actual path.", NET_FTP_ERR_DETERMINEPATH_FAILED); |
} else { |
return $res; |
} |
} |
/** |
* This works similar to the mkdir-command on your local machine. You can either give |
* it an absolute or relative path. The relative path will be completed with the actual |
* selected server-path. (see: pwd()) |
* |
* @access public |
* @param string $dir Absolute or relative dir-path |
* @param bool $recursive (optional) Create all needed directories |
* @return mixed True on success, otherwise PEAR::Error |
* @see NET_FTP_ERR_CREATEDIR_FAILED |
*/ |
function mkdir($dir, $recursive = false) |
{ |
$dir = $this->_construct_path($dir); |
$savedir = $this->pwd(); |
$this->pushErrorHandling(PEAR_ERROR_RETURN); |
$e = $this->cd($dir); |
$this->popErrorHandling(); |
if ($e === true) { |
$this->cd($savedir); |
return true; |
} |
$this->cd($savedir); |
if ($recursive === false){ |
$res = @ftp_mkdir($this->_handle, $dir); |
if (!$res) { |
return $this->raiseError("Creation of '$dir' failed", NET_FTP_ERR_CREATEDIR_FAILED); |
} else { |
return true; |
} |
} else { |
if(strpos($dir, '/') === false) { |
return $this->mkdir($dir,false); |
} |
$pos = 0; |
$res = $this->mkdir(dirname($dir), true); |
$res = $this->mkdir($dir, false); |
if ($res !== true) { |
return $res; |
} |
return true; |
} |
} |
/** |
* This method tries executing a command on the ftp, using SITE EXEC. |
* |
* @access public |
* @param string $command The command to execute |
* @return mixed The result of the command (if successfull), otherwise PEAR::Error |
* @see NET_FTP_ERR_EXEC_FAILED |
*/ |
function execute($command) |
{ |
$res = @ftp_exec($this->_handle, $command); |
if (!$res) { |
return $this->raiseError("Execution of command '$command' failed.", NET_FTP_ERR_EXEC_FAILED); |
} else { |
return $res; |
} |
} |
/** |
* Execute a SITE command on the server |
* This method tries to execute a SITE command on the ftp server. |
* |
* @access public |
* @param string $command The command with parameters to execute |
* @return mixed True if successful, otherwise PEAR::Error |
* @see NET_FTP_ERR_SITE_FAILED |
*/ |
function site($command) |
{ |
$res = @ftp_site($this->_handle, $command); |
if (!$res) { |
return $this->raiseError("Execution of SITE command '$command' failed.", NET_FTP_ERR_SITE_FAILED); |
} else { |
return $res; |
} |
} |
/** |
* This method will try to chmod the file specified on the server |
* Currently, you must give a number as the the permission argument (777 or |
* similar). The file can be either a relative or absolute path. |
* NOTE: Some servers do not support this feature. In that case, you will |
* get a PEAR error object returned. If successful, the method returns true |
* |
* @access public |
* @param mixed $target The file or array of files to set permissions for |
* @param integer $permissions The mode to set the file permissions to |
* @return mixed True if successful, otherwise PEAR::Error |
* @see NET_FTP_ERR_CHMOD_FAILED |
*/ |
function chmod($target, $permissions) |
{ |
// If $target is an array: Loop through it. |
if (is_array($target)) { |
for ($i = 0; $i < count($target); $i++) { |
$res = $this->chmod($target[$i], $permissions); |
if (PEAR::isError($res)) { |
return $res; |
} // end if isError |
} // end for i < count($target) |
} else { |
$res = $this->site("CHMOD " . $permissions . " " . $target); |
if (!$res) { |
return PEAR::raiseError("CHMOD " . $permissions . " " . $target . " failed", NET_FTP_ERR_CHMOD_FAILED); |
} else { |
return $res; |
} |
} // end if is_array |
} // end method chmod |
/** |
* This method will try to chmod a folder and all of its contents |
* on the server. The target argument must be a folder or an array of folders |
* and the permissions argument have to be an integer (i.e. 777). |
* The file can be either a relative or absolute path. |
* NOTE: Some servers do not support this feature. In that case, you |
* will get a PEAR error object returned. If successful, the method |
* returns true |
* |
* @access public |
* @param mixed $target The folder or array of folders to |
* set permissions for |
* @param integer $permissions The mode to set the folder |
* and file permissions to |
* @return mixed True if successful, otherwise PEAR::Error |
* @see NET_FTP_ERR_CHMOD_FAILED, NET_FTP_ERR_DETERMINEPATH_FAILED, NET_FTP_ERR_RAWDIRLIST_FAILED, NET_FTP_ERR_DIRLIST_UNSUPPORTED |
*/ |
function chmodRecursive($target, $permissions) |
{ |
static $dir_permissions; |
if(!isset($dir_permissions)){ // Making directory specific permissions |
$dir_permissions = $this->_makeDirPermissions($permissions); |
} |
// If $target is an array: Loop through it |
if (is_array($target)) { |
for ($i = 0; $i < count($target); $i++) { |
$res = $this->chmodRecursive($target[$i], $permissions); |
if (PEAR::isError($res)) { |
return $res; |
} // end if isError |
} // end for i < count($target) |
} else { |
$remote_path = $this->_construct_path($target); |
// Chmod the directory itself |
$result = $this->chmod($remote_path, $dir_permissions); |
if (PEAR::isError($result)) { |
return $result; |
} |
// If $remote_path last character is not a slash, add one |
if (substr($remote_path, strlen($remote_path)-1) != "/") { |
$remote_path .= "/"; |
} |
$dir_list = array(); |
$mode = NET_FTP_DIRS_ONLY; |
$dir_list = $this->ls($remote_path, $mode); |
foreach ($dir_list as $dir_entry) { |
if ($dir_entry == '.' || $dir_entry == '..') {; |
continue; |
} |
$remote_path_new = $remote_path.$dir_entry["name"]."/"; |
// Chmod the directory we're about to enter |
$result = $this->chmod($remote_path_new, $dir_permissions); |
if (PEAR::isError($result)) { |
return $result; |
} |
$result = $this->chmodRecursive($remote_path_new, $permissions); |
if (PEAR::isError($result)) { |
return $result; |
} |
} // end foreach dir_list as dir_entry |
$file_list = array(); |
$mode = NET_FTP_FILES_ONLY; |
$file_list = $this->ls($remote_path, $mode); |
foreach ($file_list as $file_entry) { |
$remote_file = $remote_path.$file_entry["name"]; |
$result = $this->chmod($remote_file, $permissions); |
if (PEAR::isError($result)) { |
return $result; |
} |
} // end foreach $file_list |
} // end if is_array |
return true; // No errors |
} // end method chmodRecursive |
/** |
* Rename or move a file or a directory from the ftp-server |
* |
* @access public |
* @param string $remote_from The remote file or directory original to rename or move |
* @param string $remote_to The remote file or directory final to rename or move |
* @return bool $res True on success, otherwise PEAR::Error |
* @see NET_FTP_ERR_RENAME_FAILED |
*/ |
function rename ($remote_from, $remote_to) |
{ |
$res = @ftp_rename($this->_handle, $remote_from, $remote_to); |
if(!$res) { |
return $this->raiseError("Could not rename ".$remote_from." to ".$remote_to." !", NET_FTP_ERR_RENAME_FAILED); |
} |
return true; |
} |
/** |
* This will return logical permissions mask for directory. |
* if directory have to be writeable it have also be executable |
* |
* @access private |
* @param string $permissions File permissions in digits for file (i.e. 666) |
* @return string File permissions in digits for directory (i.e. 777) |
*/ |
function _makeDirPermissions($permissions){ |
$permissions = (string)$permissions; |
for($i = 0; $i < strlen($permissions); $i++){ // going through (user, group, world) |
if((int)$permissions{$i} & 4 and !((int)$permissions{$i} & 1)){ // Read permission is set |
// but execute not yet |
(int)$permissions{$i} = (int)$permissions{$i} + 1; // Adding execute flag |
} |
} |
return (string)$permissions; |
} |
/** |
* This will return the last modification-time of a file. You can either give this |
* function a relative or an absolute path to the file to check. |
* NOTE: Some servers will not support this feature and the function works |
* only on files, not directories! When successful, |
* it will return the last modification-time as a unix-timestamp or, when $format is |
* specified, a preformated timestring. |
* |
* @access public |
* @param string $file The file to check |
* @param string $format (optional) The format to give the date back |
* if not set, it will return a Unix timestamp |
* @return mixed Unix timestamp, a preformated date-string or PEAR::Error |
* @see NET_FTP_ERR_MDTMDIR_UNSUPPORTED, NET_FTP_ERR_MDTM_FAILED, NET_FTP_ERR_DATEFORMAT_FAILED |
*/ |
function mdtm($file, $format = null) |
{ |
$file = $this->_construct_path($file); |
if ($this->_check_dir($file)) { |
return $this->raiseError("Filename '$file' seems to be a directory.", NET_FTP_ERR_MDTMDIR_UNSUPPORTED); |
} |
$res = @ftp_mdtm($this->_handle, $file); |
if ($res == -1) { |
return $this->raiseError("Could not get last-modification-date of '$file'.", NET_FTP_ERR_MDTM_FAILED); |
} |
if (isset($format)) { |
$res = date($format, $res); |
if (!$res) { |
return $this->raiseError("Date-format failed on timestamp '$res'.", NET_FTP_ERR_DATEFORMAT_FAILED); |
} |
} |
return $res; |
} |
/** |
* This will return the size of a given file in bytes. You can either give this function |
* a relative or an absolute file-path. NOTE: Some servers do not support this feature! |
* |
* @access public |
* @param string $file The file to check |
* @return mixed Size in bytes or PEAR::Error |
* @see NET_FTP_ERR_SIZE_FAILED |
*/ |
function size($file) |
{ |
$file = $this->_construct_path($file); |
$res = @ftp_size($this->_handle, $file); |
if ($res == -1) { |
return $this->raiseError("Could not determine filesize of '$file'.", NET_FTP_ERR_SIZE_FAILED); |
} else { |
return $res; |
} |
} |
/** |
* This method returns a directory-list of the current directory or given one. |
* To display the current selected directory, simply set the first parameter to null |
* or leave it blank, if you do not want to use any other parameters. |
* <BR><BR> |
* There are 4 different modes of listing directories. Either to list only |
* the files (using NET_FTP_FILES_ONLY), to list only directories (using |
* NET_FTP_DIRS_ONLY) or to show both (using NET_FTP_DIRS_FILES, which is default). |
* <BR><BR> |
* The 4th one is the NET_FTP_RAWLIST, which returns just the array created by the |
* ftp_rawlist()-function build into PHP. |
* <BR><BR> |
* The other function-modes will return an array containing the requested data. |
* The files and dirs are listed in human-sorted order, but if you select |
* NET_FTP_DIRS_FILES the directories will be added above the files, |
* but although both sorted. |
* <BR><BR> |
* All elements in the arrays are associative arrays themselves. The have the following |
* structure: |
* <BR><BR> |
* Dirs:<BR> |
* ["name"] => string The name of the directory<BR> |
* ["rights"] => string The rights of the directory (in style "rwxr-xr-x")<BR> |
* ["user"] => string The owner of the directory<BR> |
* ["group"] => string The group-owner of the directory<BR> |
* ["files_inside"]=> string The number of files/dirs inside the directory |
* excluding "." and ".."<BR> |
* ["date"] => int The creation-date as Unix timestamp<BR> |
* ["is_dir"] => bool true, cause this is a dir<BR> |
* <BR><BR> |
* Files:<BR> |
* ["name"] => string The name of the file<BR> |
* ["size"] => int Size in bytes<BR> |
* ["rights"] => string The rights of the file (in style "rwxr-xr-x")<BR> |
* ["user"] => string The owner of the file<BR> |
* ["group"] => string The group-owner of the file<BR> |
* ["date"] => int The creation-date as Unix timestamp<BR> |
* ["is_dir"] => bool false, cause this is a file<BR> |
* |
* @access public |
* @param string $dir (optional) The directory to list or null, when listing the current directory. |
* @param int $mode (optional) The mode which types to list (files, directories or both). |
* @return mixed The directory list as described above or PEAR::Error on failure. |
* @see NET_FTP_DIRS_FILES, NET_FTP_DIRS_ONLY, NET_FTP_FILES_ONLY, NET_FTP_RAWLIST, NET_FTP_ERR_DETERMINEPATH_FAILED, NET_FTP_ERR_RAWDIRLIST_FAILED, NET_FTP_ERR_DIRLIST_UNSUPPORTED |
*/ |
function ls($dir = null, $mode = NET_FTP_DIRS_FILES) |
{ |
if (!isset($dir)) { |
$dir = @ftp_pwd($this->_handle); |
if (!$dir) { |
return $this->raiseError("Could not retrieve current directory", NET_FTP_ERR_DETERMINEPATH_FAILED); |
} |
} |
if (($mode != NET_FTP_FILES_ONLY) && ($mode != NET_FTP_DIRS_ONLY) && ($mode != NET_FTP_RAWLIST)) { |
$mode = NET_FTP_DIRS_FILES; |
} |
switch ($mode) { |
case NET_FTP_DIRS_FILES: $res = $this->_ls_both ( $dir ); |
break; |
case NET_FTP_DIRS_ONLY: $res = $this->_ls_dirs ( $dir ); |
break; |
case NET_FTP_FILES_ONLY: $res = $this->_ls_files ( $dir ); |
break; |
case NET_FTP_RAWLIST: $res = @ftp_rawlist($this->_handle, $dir); |
break; |
} |
return $res; |
} |
/** |
* This method will delete the given file or directory ($path) from the server |
* (maybe recursive). |
* |
* Whether the given string is a file or directory is only determined by the last |
* sign inside the string ("/" or not). |
* |
* If you specify a directory, you can optionally specify $recursive as true, |
* to let the directory be deleted recursive (with all sub-directories and files |
* inherited). |
* |
* You can either give a absolute or relative path for the file / dir. If you choose to |
* use the relative path, it will be automatically completed with the actual |
* selected directory. |
* |
* @access public |
* @param string $path The absolute or relative path to the file / directory. |
* @param bool $recursive (optional) |
* @return mixed True on success, otherwise PEAR::Error |
* @see NET_FTP_ERR_DELETEFILE_FAILED, NET_FTP_ERR_DELETEDIR_FAILED, NET_FTP_ERR_REMOTEPATHNODIR |
*/ |
function rm($path, $recursive = false) |
{ |
$path = $this->_construct_path($path); |
if ($this->_check_dir($path)) { |
if ($recursive) { |
return $this->_rm_dir_recursive($path); |
} else { |
return $this->_rm_dir($path); |
} |
} else { |
return $this->_rm_file($path); |
} |
} |
/** |
* This function will download a file from the ftp-server. You can either spcify a absolute |
* path to the file (beginning with "/") or a relative one, which will be completed |
* with the actual directory you selected on the server. You can specify |
* the path to which the file will be downloaded on the local |
* maschine, if the file should be overwritten if it exists (optionally, default is |
* no overwriting) and in which mode (FTP_ASCII or FTP_BINARY) the file should be |
* downloaded (if you do not specify this, the method tries to determine it automatically |
* from the mode-directory or uses the default-mode, set by you). If you give a relative |
* path to the local-file, the script-path is used as basepath. |
* |
* @access public |
* @param string $remote_file The absolute or relative path to the file to download |
* @param string $local_file The local file to put the downloaded in |
* @param bool $overwrite (optional) Whether to overwrite existing file |
* @param int $mode (optional) Either FTP_ASCII or FTP_BINARY |
* @return mixed True on success, otherwise PEAR::Error |
* @see NET_FTP_ERR_OVERWRITELOCALFILE_FORBIDDEN, NET_FTP_ERR_OVERWRITELOCALFILE_FAILED, NET_FTP_ERR_OVERWRITELOCALFILE_FAILED |
*/ |
function get($remote_file, $local_file, $overwrite = false, $mode = null) |
{ |
if (!isset($mode)) { |
$mode = $this->checkFileExtension($remote_file); |
} |
$remote_file = $this->_construct_path($remote_file); |
if (@file_exists($local_file) && !$overwrite) { |
return $this->raiseError("Local file '$local_file' exists and may not be overwriten.", NET_FTP_ERR_OVERWRITELOCALFILE_FORBIDDEN); |
} |
if (@file_exists($local_file) && !@is_writeable($local_file) && $overwrite) { |
return $this->raiseError("Local file '$local_file' is not writeable. Can not overwrite.", NET_FTP_ERR_OVERWRITELOCALFILE_FAILED); |
} |
if (@function_exists('ftp_nb_get')){ |
$res = @ftp_nb_get($this->_handle, $local_file, $remote_file, $mode); |
while ($res == FTP_MOREDATA) { |
$this->_announce('nb_get'); |
$res = @ftp_nb_continue ($this->_handle); |
} |
} else { |
$res = @ftp_get($this->_handle, $local_file, $remote_file, $mode); |
} |
if (!$res) { |
return $this->raiseError("File '$remote_file' could not be downloaded to '$local_file'.", NET_FTP_ERR_OVERWRITELOCALFILE_FAILED); |
} else { |
return true; |
} |
} |
/** |
* This function will upload a file to the ftp-server. You can either specify a absolute |
* path to the remote-file (beginning with "/") or a relative one, which will be completed |
* with the actual directory you selected on the server. You can specify |
* the path from which the file will be uploaded on the local |
* maschine, if the file should be overwritten if it exists (optionally, default is |
* no overwriting) and in which mode (FTP_ASCII or FTP_BINARY) the file should be |
* downloaded (if you do not specify this, the method tries to determine it automatically |
* from the mode-directory or uses the default-mode, set by you). If you give a relative |
* path to the local-file, the script-path is used as basepath. |
* |
* @access public |
* @param string $local_file The local file to upload |
* @param string $remote_file The absolute or relative path to the file to upload to |
* @param bool $overwrite (optional) Whether to overwrite existing file |
* @param int $mode (optional) Either FTP_ASCII or FTP_BINARY |
* @return mixed True on success, otherwise PEAR::Error |
* @see NET_FTP_ERR_LOCALFILENOTEXIST, NET_FTP_ERR_OVERWRITEREMOTEFILE_FORBIDDEN, NET_FTP_ERR_UPLOADFILE_FAILED |
*/ |
function put($local_file, $remote_file, $overwrite = false, $mode = null) |
{ |
if (!isset($mode)) { |
$mode = $this->checkFileExtension($local_file); |
} |
$remote_file = $this->_construct_path($remote_file); |
if (!@file_exists($local_file)) { |
return $this->raiseError("Local file '$local_file' does not exist.", NET_FTP_ERR_LOCALFILENOTEXIST); |
} |
if ((@ftp_size($this->_handle, $remote_file) != -1) && !$overwrite) { |
return $this->raiseError("Remote file '$remote_file' exists and may not be overwriten.", NET_FTP_ERR_OVERWRITEREMOTEFILE_FORBIDDEN); |
} |
if (function_exists('ftp_nb_put')){ |
$res = @ftp_nb_put($this->_handle, $remote_file, $local_file, $mode); |
while ($res == FTP_MOREDATA) { |
$this->_announce('nb_put'); |
$res = @ftp_nb_continue($this->_handle); |
} |
} else { |
$res = @ftp_put($this->_handle, $remote_file, $local_file, $mode); |
} |
if (!$res) { |
return $this->raiseError("File '$local_file' could not be uploaded to '$remote_file'.", NET_FTP_ERR_UPLOADFILE_FAILED); |
} else { |
return true; |
} |
} |
/** |
* This functionality allows you to transfer a whole directory-structure from the |
* remote-ftp to your local host. You have to give a remote-directory (ending with |
* '/') and the local directory (ending with '/') where to put the files you download. |
* The remote path is automatically completed with the current-remote-dir, if you give |
* a relative path to this function. You can give a relative path for the $local_path, |
* too. Then the script-basedir will be used for comletion of the path. |
* The parameter $overwrite will determine, whether to overwrite existing files or not. |
* Standard for this is false. Fourth you can explicitly set a mode for all transfer- |
* actions done. If you do not set this, the method tries to determine the transfer- |
* mode by checking your mode-directory for the file-extension. If the extension is not |
* inside the mode-directory, it will get your default-mode. |
* |
* @access public |
* @param string $remote_path The path to download |
* @param string $local_path The path to download to |
* @param bool $overwrite (optional) Whether to overwrite existing files (true) or not (false, standard). |
* @param int $mode (optional) The transfermode (either FTP_ASCII or FTP_BINARY). |
* @return mixed True on succes, otherwise PEAR::Error |
* @see NET_FTP_ERR_OVERWRITELOCALFILE_FORBIDDEN, NET_FTP_ERR_OVERWRITELOCALFILE_FAILED, NET_FTP_ERR_OVERWRITELOCALFILE_FAILED, NET_FTP_ERR_REMOTEPATHNODIR, NET_FTP_ERR_LOCALPATHNODIR,NET_FTP_ERR_CREATELOCALDIR_FAILED |
*/ |
function getRecursive($remote_path, $local_path, $overwrite = false, $mode = null) |
{ |
$remote_path = $this->_construct_path($remote_path); |
if (!$this->_check_dir($remote_path)) { |
return $this->raiseError("Given remote-path '$remote_path' seems not to be a directory.", NET_FTP_ERR_REMOTEPATHNODIR); |
} |
if (!$this->_check_dir($local_path)) { |
return $this->raiseError("Given local-path '$local_path' seems not to be a directory.", NET_FTP_ERR_LOCALPATHNODIR); |
} |
if (!@is_dir($local_path)) { |
$res = @mkdir($local_path); |
if (!$res) { |
return $this->raiseError("Could not create dir '$local_path'", NET_FTP_ERR_CREATELOCALDIR_FAILED); |
} |
} |
$dir_list = array(); |
$dir_list = $this->ls($remote_path, NET_FTP_DIRS_ONLY); |
foreach ($dir_list as $dir_entry) { |
if ($dir_entry['name'] != '.' && $dir_entry['name'] != '..') { |
$remote_path_new = $remote_path.$dir_entry["name"]."/"; |
$local_path_new = $local_path.$dir_entry["name"]."/"; |
$result = $this->getRecursive($remote_path_new, $local_path_new, $overwrite, $mode); |
if ($this->isError($result)) { |
return $result; |
} |
} |
} |
$file_list = array(); |
$file_list = $this->ls($remote_path, NET_FTP_FILES_ONLY); |
foreach ($file_list as $file_entry) { |
$remote_file = $remote_path.$file_entry["name"]; |
$local_file = $local_path.$file_entry["name"]; |
$result = $this->get($remote_file, $local_file, $overwrite, $mode); |
if ($this->isError($result)) { |
return $result; |
} |
} |
return true; |
} |
/** |
* This functionality allows you to transfer a whole directory-structure from your |
* local host to the remote-ftp. You have to give a remote-directory (ending with |
* '/') and the local directory (ending with '/') where to put the files you download. |
* The remote path is automatically completed with the current-remote-dir, if you give |
* a relative path to this function. You can give a relative path for the $local_path, |
* too. Then the script-basedir will be used for comletion of the path. |
* The parameter $overwrite will determine, whether to overwrite existing files or not. |
* Standard for this is false. Fourth you can explicitly set a mode for all transfer- |
* actions done. If you do not set this, the method tries to determine the transfer- |
* mode by checking your mode-directory for the file-extension. If the extension is not |
* inside the mode-directory, it will get your default-mode. |
* |
* @access public |
* @param string $remote_path The path to download |
* @param string $local_path The path to download to |
* @param bool $overwrite (optional) Whether to overwrite existing files (true) or not (false, standard). |
* @param int $mode (optional) The transfermode (either FTP_ASCII or FTP_BINARY). |
* @return mixed True on succes, otherwise PEAR::Error |
* @see NET_FTP_ERR_LOCALFILENOTEXIST, NET_FTP_ERR_OVERWRITEREMOTEFILE_FORBIDDEN, NET_FTP_ERR_UPLOADFILE_FAILED, NET_FTP_ERR_LOCALPATHNODIR, NET_FTP_ERR_REMOTEPATHNODIR |
*/ |
function putRecursive($local_path, $remote_path, $overwrite = false, $mode = null) |
{ |
$remote_path = $this->_construct_path($remote_path); |
if (!$this->_check_dir($local_path) || !is_dir($local_path)) { |
return $this->raiseError("Given local-path '$local_path' seems not to be a directory.", NET_FTP_ERR_LOCALPATHNODIR); |
} |
if (!$this->_check_dir($remote_path)) { |
return $this->raiseError("Given remote-path '$remote_path' seems not to be a directory.", NET_FTP_ERR_REMOTEPATHNODIR); |
} |
$old_path = $this->pwd(); |
if ($this->isError($this->cd($remote_path))) { |
$res = $this->mkdir($remote_path); |
if ($this->isError($res)) { |
return $res; |
} |
} |
$this->cd($old_path); |
$dir_list = $this->_ls_local($local_path); |
foreach ($dir_list["dirs"] as $dir_entry) { |
$remote_path_new = $remote_path.$dir_entry."/"; |
$local_path_new = $local_path.$dir_entry."/"; |
$result = $this->putRecursive($local_path_new, $remote_path_new, $overwrite, $mode); |
if ($this->isError($result)) { |
return $result; |
} |
} |
foreach ($dir_list["files"] as $file_entry) { |
$remote_file = $remote_path.$file_entry; |
$local_file = $local_path.$file_entry; |
$result = $this->put($local_file, $remote_file, $overwrite, $mode); |
if ($this->isError($result)) { |
return $result; |
} |
} |
return true; |
} |
/** |
* This checks, whether a file should be transfered in ascii- or binary-mode |
* by it's file-extension. If the file-extension is not set or |
* the extension is not inside one of the extension-dirs, the actual set |
* transfer-mode is returned. |
* |
* @access public |
* @param string $filename The filename to be checked |
* @return int Either FTP_ASCII or FTP_BINARY |
*/ |
function checkFileExtension($filename) |
{ |
$pattern = "/\.(.*)$/"; |
$has_extension = preg_match($pattern, $filename, $eregs); |
if (!$has_extension) { |
return $this->_mode; |
} else { |
$ext = $eregs[1]; |
} |
if (!empty($this->_file_extensions[$ext])) { |
return $this->_file_extensions[$ext]; |
} |
return $this->_mode; |
} |
/** |
* Set the Hostname |
* |
* @access public |
* @param string $host The Hostname to set |
* @return bool True on success, otherwise PEAR::Error |
* @see NET_FTP_ERR_HOSTNAMENOSTRING |
*/ |
function setHostname($host) |
{ |
if (!is_string($host)) { |
return PEAR::raiseError("Hostname must be a string.", NET_FTP_ERR_HOSTNAMENOSTRING); |
} |
$this->_hostname = $host; |
return true; |
} |
/** |
* Set the Port |
* |
* @access public |
* @param int $port The Port to set |
* @return bool True on success, otherwise PEAR::Error |
* @see NET_FTP_ERR_PORTLESSZERO |
*/ |
function setPort($port) |
{ |
if (!is_int($port) || ($port < 0)) { |
PEAR::raiseError("Invalid port. Has to be integer >= 0", NET_FTP_ERR_PORTLESSZERO); |
} |
$this->_port = $port; |
return true; |
} |
/** |
* Set the Username |
* |
* @access public |
* @param string $user The Username to set |
* @return mixed True on success, otherwise PEAR::Error |
* @see NET_FTP_ERR_USERNAMENOSTRING |
*/ |
function setUsername($user) |
{ |
if (empty($user) || !is_string($user)) { |
return PEAR::raiseError('Username $user invalid.', NET_FTP_ERR_USERNAMENOSTRING); |
} |
$this->_username = $user; |
} |
/** |
* Set the Password |
* |
* @access private |
* @param string $password The Password to set |
* @return void |
* @see NET_FTP_ERR_PASSWORDNOSTRING |
*/ |
function setPassword($password) |
{ |
if (empty($password) || !is_string($password)) { |
return PEAR::raiseError('Password xxx invalid.', NET_FTP_ERR_PASSWORDNOSTRING); |
} |
$this->_password = $password; |
} |
/** |
* Set the transfer-mode. You can use the predefined constants |
* FTP_ASCII or FTP_BINARY. The mode will be stored for any further transfers. |
* |
* @access public |
* @param int $mode The mode to set |
* @return mixed True on success, otherwise PEAR::Error |
* @see NET_FTP_ERR_NOMODECONST |
*/ |
function setMode($mode) |
{ |
if (($mode == FTP_ASCII) || ($mode == FTP_BINARY)) { |
$this->_mode = $mode; |
return true; |
} else { |
return $this->raiseError('FTP-Mode has either to be FTP_ASCII or FTP_BINARY', NET_FTP_ERR_NOMODECONST); |
} |
} |
/** |
* Set the transfer-method to passive mode |
* |
* @access public |
* @return void |
*/ |
function setPassive() |
{ |
$this->_passv = true; |
@ftp_pasv($this->_handle, true); |
} |
/** |
* Set the transfer-method to active mode |
* |
* @access public |
* @return void |
*/ |
function setActive() |
{ |
$this->_passv = false; |
@ftp_pasv($this->_handle, false); |
} |
/** |
* Set the timeout for FTP operations |
* Use this method to set a timeout for FTP operation. Timeout has to be an integer. |
* |
* @acess public |
* @param int $timeout the timeout to use |
* @return bool True on success, otherwise PEAR::Error |
* @see NET_FTP_ERR_TIMEOUTLESSZERO, NET_FTP_ERR_SETTIMEOUT_FAILED |
*/ |
function setTimeout ( $timeout = 0 ) |
{ |
if (!is_int($timeout) || ($timeout < 0)) { |
return PEAR::raiseError("Timeout $timeout is invalid, has to be an integer >= 0", NET_FTP_ERR_TIMEOUTLESSZERO); |
} |
$this->_timeout = $timeout; |
if (isset($this->_handle) && is_resource($this->_handle)) { |
$res = @ftp_set_option($this->_handle, FTP_TIMEOUT_SEC, $timeout); |
} else { |
$res = true; |
} |
if (!$res) { |
return PEAR::raiseError("Set timeout failed.", NET_FTP_ERR_SETTIMEOUT_FAILED); |
} |
return true; |
} |
/** |
* Adds an extension to a mode-directory |
* The mode-directory saves file-extensions coresponding to filetypes |
* (ascii e.g.: 'php', 'txt', 'htm',...; binary e.g.: 'jpg', 'gif', 'exe',...). |
* The extensions have to be saved without the '.'. And |
* can be predefined in an external file (see: getExtensionsFile()). |
* |
* The array is build like this: 'php' => FTP_ASCII, 'png' => FTP_BINARY |
* |
* To change the mode of an extension, just add it again with the new mode! |
* |
* @access public |
* @param int $mode Either FTP_ASCII or FTP_BINARY |
* @param string $ext Extension |
* @return void |
*/ |
function addExtension($mode, $ext) |
{ |
$this->_file_extensions[$ext] = $mode; |
} |
/** |
* This function removes an extension from the mode-directories |
* (described above). |
* |
* @access public |
* @param string $ext The extension to remove |
* @return void |
*/ |
function removeExtension($ext) |
{ |
unset($this->_file_extensions[$ext]); |
} |
/** |
* This get's both (ascii- and binary-mode-directories) from the given file. |
* Beware, if you read a file into the mode-directory, all former set values |
* will be unset! |
* |
* @access public |
* @param string $filename The file to get from |
* @return mixed True on success, otherwise PEAR::Error |
* @see NET_FTP_ERR_EXTFILENOTEXIST, NET_FTP_ERR_EXTFILEREAD_FAILED |
*/ |
function getExtensionsFile($filename) |
{ |
if (!file_exists($filename)) { |
return $this->raiseError("Extensions-file '$filename' does not exist", NET_FTP_ERR_EXTFILENOTEXIST); |
} |
if (!is_readable($filename)) { |
return $this->raiseError("Extensions-file '$filename' is not readable", NET_FTP_ERR_EXTFILEREAD_FAILED); |
} |
$this->_file_extension = @parse_ini_file($filename); |
return true; |
} |
/** |
* Returns the Hostname |
* |
* @access public |
* @return string The Hostname |
*/ |
function getHostname() |
{ |
return $this->_hostname; |
} |
/** |
* Returns the Port |
* |
* @access public |
* @return int The Port |
*/ |
function getPort() |
{ |
return $this->_port; |
} |
/** |
* Returns the Username |
* |
* @access public |
* @return string The Username |
*/ |
function getUsername() |
{ |
return $this->_username; |
} |
/** |
* Returns the Password |
* |
* @access public |
* @return string The Password |
*/ |
function getPassword() |
{ |
return $this->_password; |
} |
/** |
* Returns the Transfermode |
* |
* @access public |
* @return int The transfermode, either FTP_ASCII or FTP_BINARY. |
*/ |
function getMode() |
{ |
return $this->_mode; |
} |
/** |
* Returns, whether the connection is set to passive mode or not |
* |
* @access public |
* @return bool True if passive-, false if active-mode |
*/ |
function isPassive() |
{ |
return $this->_passv; |
} |
/** |
* Returns the mode set for a file-extension |
* |
* @access public |
* @param string $ext The extension you wanna ask for |
* @return int Either FTP_ASCII, FTP_BINARY or NULL (if not set a mode for it) |
*/ |
function getExtensionMode($ext) |
{ |
return @$this->_file_extensions[$ext]; |
} |
/** |
* Get the currently set timeout. |
* Returns the actual timeout set. |
* |
* @access public |
* @return int The actual timeout |
*/ |
function getTimeout ( ) |
{ |
return ftp_get_option($this->_handle, FTP_TIMEOUT_SEC); |
} |
/** |
* Adds a Net_FTP_Observer instance to the list of observers |
* that are listening for messages emitted by this Net_FTP instance. |
* |
* @param object $observer The Net_FTP_Observer instance to attach |
* as a listener. |
* @return boolean True if the observer is successfully attached. |
* @access public |
* @since 1.3 |
*/ |
function attach(&$observer) |
{ |
if (!is_a($observer, 'Net_FTP_Observer')) { |
return false; |
} |
$this->_listeners[$observer->getId()] = &$observer; |
return true; |
} |
/** |
* Removes a Net_FTP_Observer instance from the list of observers. |
* |
* @param object $observer The Net_FTP_Observer instance to detach |
* from the list of listeners. |
* @return boolean True if the observer is successfully detached. |
* @access public |
* @since 1.3 |
*/ |
function detach($observer) |
{ |
if (!is_a($observer, 'Net_FTP_Observer') || |
!isset($this->_listeners[$observer->getId()])) { |
return false; |
} |
unset($this->_listeners[$observer->getId()]); |
return true; |
} |
/** |
* Informs each registered observer instance that a new message has been |
* sent. |
* |
* @param mixed $event A hash describing the net event. |
* @access private |
* @since 1.3 |
*/ |
function _announce($event) |
{ |
foreach ($this->_listeners as $id => $listener) { |
$this->_listeners[$id]->notify($event); |
} |
} |
/** |
* Rebuild the path, if given relative |
* |
* @access private |
* @param string $path The path to check and construct |
* @return string The build path |
*/ |
function _construct_path($path) |
{ |
if ((substr($path, 0, 1) != "/") && (substr($path, 0, 2) != "./")) { |
$actual_dir = @ftp_pwd($this->_handle); |
if (substr($actual_dir, (strlen($actual_dir) - 2), 1) != "/") { |
$actual_dir .= "/"; |
} |
$path = $actual_dir.$path; |
} |
return $path; |
} |
/** |
* Checks, whether a given string is a directory-path (ends with "/") or not. |
* |
* @access private |
* @param string $path Path to check |
* @return bool True if $path is a directory, otherwise false |
*/ |
function _check_dir($path) |
{ |
if (!empty($path) && substr($path, (strlen($path) - 1), 1) == "/") { |
return true; |
} else { |
return false; |
} |
} |
/** |
* This will remove a file |
* |
* @access private |
* @param string $file The file to delete |
* @return mixed True on success, otherwise PEAR::Error |
* @see NET_FTP_ERR_DELETEFILE_FAILED |
*/ |
function _rm_file($file) |
{ |
if (substr($file, 0, 1) != "/") { |
$actual_dir = @ftp_pwd($this->_handle); |
if (substr($actual_dir, (strlen($actual_dir) - 2), 1) != "/") { |
$actual_dir .= "/"; |
} |
$file = $actual_dir.$file; |
} |
$res = @ftp_delete($this->_handle, $file); |
if (!$res) { |
return $this->raiseError("Could not delete file '$file'.", NET_FTP_ERR_DELETEFILE_FAILED); |
} else { |
return true; |
} |
} |
/** |
* This will remove a dir |
* |
* @access private |
* @param string $dir The dir to delete |
* @return mixed True on success, otherwise PEAR::Error |
* @see NET_FTP_ERR_REMOTEPATHNODIR, NET_FTP_ERR_DELETEDIR_FAILED |
*/ |
function _rm_dir($dir) |
{ |
if (substr($dir, (strlen($dir) - 1), 1) != "/") { |
return $this->raiseError("Directory name '$dir' is invalid, has to end with '/'", NET_FTP_ERR_REMOTEPATHNODIR); |
} |
$res = @ftp_rmdir($this->_handle, $dir); |
if (!$res) { |
return $this->raiseError("Could not delete directory '$dir'.", NET_FTP_ERR_DELETEDIR_FAILED); |
} else { |
return true; |
} |
} |
/** |
* This will remove a dir and all subdirs and -files |
* |
* @access private |
* @param string $file The dir to delete recursively |
* @return mixed True on success, otherwise PEAR::Error |
* @see NET_FTP_ERR_REMOTEPATHNODIR, NET_FTP_ERR_DELETEDIR_FAILED |
*/ |
function _rm_dir_recursive($dir) |
{ |
if (substr($dir, (strlen($dir) - 1), 1) != "/") { |
return $this->raiseError("Directory name '$dir' is invalid, has to end with '/'", NET_FTP_ERR_REMOTEPATHNODIR); |
} |
$file_list = $this->_ls_files($dir); |
foreach ($file_list as $file) { |
$file = $dir.$file["name"]; |
$res = $this->rm($file); |
if ($this->isError($res)) { |
return $res; |
} |
} |
$dir_list = $this->_ls_dirs($dir); |
foreach ($dir_list as $new_dir) { |
if ($new_dir == '.' || $new_dir == '..') { |
continue; |
} |
$new_dir = $dir.$new_dir["name"]."/"; |
$res = $this->_rm_dir_recursive($new_dir); |
if ($this->isError($res)) { |
return $res; |
} |
} |
$res = $this->_rm_dir($dir); |
if (PEAR::isError($res)) { |
return $res; |
} else { |
return true; |
} |
} |
/** |
* Lists up files and directories |
* |
* @access private |
* @param string $dir The directory to list up |
* @return array An array of dirs and files |
*/ |
function _ls_both($dir) |
{ |
$list_splitted = $this->_list_and_parse($dir); |
if (PEAR::isError($list_splitted)) { |
return $list_splitted; |
} |
if (!is_array($list_splitted["files"])) { |
$list_splitted["files"] = array(); |
} |
if (!is_array($list_splitted["dirs"])) { |
$list_splitted["dirs"] = array(); |
} |
$res = array(); |
@array_splice($res, 0, 0, $list_splitted["files"]); |
@array_splice($res, 0, 0, $list_splitted["dirs"]); |
return $res; |
} |
/** |
* Lists up directories |
* |
* @access private |
* @param string $dir The directory to list up |
* @return array An array of dirs |
*/ |
function _ls_dirs($dir) |
{ |
$list = $this->_list_and_parse($dir); |
if (PEAR::isError($list)) { |
return $list; |
} |
return $list["dirs"]; |
} |
/** |
* Lists up files |
* |
* @access private |
* @param string $dir The directory to list up |
* @return array An array of files |
*/ |
function _ls_files($dir) |
{ |
$list = $this->_list_and_parse($dir); |
if (PEAR::isError($list)) { |
return $list; |
} |
return $list["files"]; |
} |
/** |
* This lists up the directory-content and parses the items into well-formated arrays |
* The results of this array are sorted (dirs on top, sorted by name; |
* files below, sorted by name). |
* |
* @access private |
* @param string $dir The directory to parse |
* @return array Lists of dirs and files |
* @see NET_FTP_ERR_RAWDIRLIST_FAILED |
*/ |
function _list_and_parse($dir) |
{ |
$dirs_list = array(); |
$files_list = array(); |
$dir_list = @ftp_rawlist($this->_handle, $dir); |
if (!is_array($dir_list)) { |
return PEAR::raiseError('Could not get raw directory listing.', NET_FTP_ERR_RAWDIRLIST_FAILED); |
} |
// Handle empty directories |
if (count($dir_list) == 0) { |
return array('dirs' => $dirs_list, 'files' => $files_list); |
} |
// Exception for some FTP servers seem to return this wiered result instead of an empty list |
if (count($dirs_list) == 1 && $dirs_list[0] == 'total 0') { |
return array('dirs' => array(), 'files' => $files_list); |
} |
if (!isset($this->_matcher) || PEAR::isError($this->_matcher)) { |
$this->_matcher = $this->_determine_os_match($dir_list); |
if (PEAR::isError($this->_matcher)) { |
return $this->_matcher; |
} |
} |
foreach ($dir_list as $entry) { |
if (!preg_match($this->_matcher['pattern'], $entry, $m)) { |
continue; |
} |
$entry = array(); |
foreach ($this->_matcher['map'] as $key=>$val) { |
$entry[$key] = $m[$val]; |
} |
$entry['stamp'] = $this->_parse_Date($entry['date']); |
if ($entry['is_dir']) { |
$dirs_list[] = $entry; |
} else { |
$files_list[] = $entry; |
} |
} |
@usort($dirs_list, array("Net_FTP", "_nat_sort")); |
@usort($files_list, array("Net_FTP", "_nat_sort")); |
$res["dirs"] = (is_array($dirs_list)) ? $dirs_list : array(); |
$res["files"] = (is_array($files_list)) ? $files_list : array(); |
return $res; |
} |
/** |
* Determine server OS |
* This determines the server OS and returns a valid regex to parse |
* ls() output. |
* |
* @access private |
* @param array $dir_list The raw dir list to parse |
* @return mixed An array of 'pattern' and 'map' on success, otherwise PEAR::Error |
* @see NET_FTP_ERR_DIRLIST_UNSUPPORTED |
*/ |
function _determine_os_match(&$dir_list) { |
foreach ($dir_list as $entry) { |
foreach ($this->_ls_match as $os => $match) { |
if (preg_match($match['pattern'], $entry)) { |
return $match; |
} |
} |
} |
$error = 'The list style of your server seems not to be supported. Please email a "$ftp->ls(NET_FTP_RAWLIST);" output plus info on the server to the maintainer of this package to get it supported! Thanks for your help!'; |
return PEAR::raiseError($error, NET_FTP_ERR_DIRLIST_UNSUPPORTED); |
} |
/** |
* Lists a local directory |
* |
* @access private |
* @param string $dir_path The dir to list |
* @return array The list of dirs and files |
*/ |
function _ls_local($dir_path) |
{ |
$dir = dir($dir_path); |
$dir_list = array(); |
$file_list = array(); |
while (false !== ($entry = $dir->read())) { |
if (($entry != '.') && ($entry != '..')) { |
if (is_dir($dir_path.$entry)) { |
$dir_list[] = $entry; |
} else { |
$file_list[] = $entry; |
} |
} |
} |
$dir->close(); |
$res['dirs'] = $dir_list; |
$res['files'] = $file_list; |
return $res; |
} |
/** |
* Function for use with usort(). |
* Compares the list-array-elements by name. |
* |
* @access private |
*/ |
function _nat_sort($item_1, $item_2) |
{ |
return strnatcmp($item_1['name'], $item_2['name']); |
} |
/** |
* Parse dates to timestamps |
* |
* @access private |
* @param string $date Date |
* @return int Timestamp |
* @see NET_FTP_ERR_DATEFORMAT_FAILED |
*/ |
function _parse_Date($date) |
{ |
// Sep 10 22:06 => Sep 10, <year> 22:06 |
if (preg_match('/([A-Za-z]+)[ ]+([0-9]+)[ ]+([0-9]+):([0-9]+)/', $date, $res)) { |
$year = date('Y'); |
$month = $res[1]; |
$day = $res[2]; |
$hour = $res[3]; |
$minute = $res[4]; |
$date = "$month $day, $year $hour:$minute"; |
$tmpDate = strtotime($date); |
if ($tmpDate > time()) { |
$year--; |
$date = "$month $day, $year $hour:$minute"; |
} |
} |
// 09-10-04 => 09/10/04 |
elseif (preg_match('/^\d\d-\d\d-\d\d/',$date)) { |
$date = str_replace('-','/',$date); |
} |
$res = strtotime($date); |
if (!$res) { |
return $this->raiseError('Dateconversion failed.', NET_FTP_ERR_DATEFORMAT_FAILED); |
} |
return $res; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Auth.php |
---|
New file |
0,0 → 1,869 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2003 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.02 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Martin Jansen <mj@php.net> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: Auth.php,v 1.1 2005-03-30 08:50:19 jpm Exp $ |
// |
require_once 'PEAR.php'; |
define('AUTH_IDLED', -1); |
define('AUTH_EXPIRED', -2); |
define('AUTH_WRONG_LOGIN', -3); |
/** |
* PEAR::Auth |
* |
* The PEAR::Auth class provides methods for creating an |
* authentication system using PHP. |
* |
* @author Martin Jansen <mj@php.net> |
* @package Auth |
* @version $Revision: 1.1 $ |
*/ |
class Auth { |
/** |
* Auth lifetime in seconds |
* |
* If this variable is set to 0, auth never expires |
* |
* @var integer |
* @see setExpire(), checkAuth() |
*/ |
var $expire = 0; |
/** |
* Has the auth session expired? |
* |
* @var bool |
* @see checkAuth(), drawLogin() |
*/ |
var $expired = false; |
/** |
* Maximum time of idleness in seconds |
* |
* The difference to $expire is, that the idletime gets |
* refreshed each time, checkAuth() is called. If this |
* variable is set to 0, idle time is never checked. |
* |
* @var integer |
* @see setIdle(), checkAuth() |
*/ |
var $idle = 0; |
/** |
* Is the maximum idletime over? |
* |
* @var boolean |
* @see checkAuth(), drawLogin(); |
*/ |
var $idled = false; |
/** |
* Storage object |
* |
* @var object |
* @see Auth(), validateLogin() |
*/ |
var $storage = ''; |
/** |
* Function defined by the user, that creates the login screen |
* |
* @var string |
*/ |
var $loginFunction = ''; |
/** |
* Should the login form be displayed? |
* |
* @var bool |
* @see setShowlogin() |
*/ |
var $showLogin = true; |
/** |
* Current authentication status |
* |
* @var string |
*/ |
var $status = ''; |
/** |
* Username |
* |
* @var string |
*/ |
var $username = ''; |
/** |
* Password |
* |
* @var string |
*/ |
var $password = ''; |
/** |
* Login callback function name |
* |
* @var string |
* @see setLoginCallback() |
*/ |
var $loginCallback = ''; |
/** |
* Failed Login callback function name |
* |
* @var string |
* @see setLoginFailedCallback() |
*/ |
var $loginFailedCallback = ''; |
/** |
* Logout callback function name |
* |
* @var string |
* @see setLogoutCallback() |
*/ |
var $logoutCallback = ''; |
/** |
* Auth session-array name |
* |
* @var string |
*/ |
var $_sessionName = '_authsession'; |
/** |
* Package Version |
* |
* @var string |
*/ |
var $version = "1.2.3"; |
// {{{ Constructor |
/** |
* Constructor |
* |
* Set up the storage driver. |
* |
* @param string Type of the storage driver |
* @param mixed Additional options for the storage driver |
* (example: if you are using DB as the storage |
* driver, you have to pass the dsn string here) |
* |
* @param string Name of the function that creates the login form |
* @param boolean Should the login form be displayed if neccessary? |
* @return void |
*/ |
function Auth($storageDriver, $options = '', $loginFunction = '', $showLogin = true) |
{ |
if (!empty($options['sessionName'])) { |
$this->_sessionName = $options['sessionName']; |
unset($options['sessionName']); |
} |
if ($loginFunction != '' && is_callable($loginFunction)) { |
$this->loginFunction = $loginFunction; |
} |
if (is_bool($showLogin)) { |
$this->showLogin = $showLogin; |
} |
if (is_object($storageDriver)) { |
$this->storage =& $storageDriver; |
} else { |
$this->storage = $this->_factory($storageDriver, $options); |
} |
// Pass a reference to auth to the container, ugly but works |
// this is used by the DB container to use method setAuthData not staticaly. |
$this->storage->_auth_obj =& $this; |
} |
// }}} |
// {{{ _factory() |
/** |
* Return a storage driver based on $driver and $options |
* |
* @access private |
* @static |
* @param string $driver Type of storage class to return |
* @param string $options Optional parameters for the storage class |
* @return object Object Storage object |
*/ |
function _factory($driver, $options = '') |
{ |
$storage_path = 'Auth/Container/' . $driver . '.php'; |
$storage_class = 'Auth_Container_' . $driver; |
require_once $storage_path; |
return new $storage_class($options); |
} |
// }}} |
// {{{ assignData() |
/** |
* Assign data from login form to internal values |
* |
* This function takes the values for username and password |
* from $HTTP_POST_VARS and assigns them to internal variables. |
* If you wish to use another source apart from $HTTP_POST_VARS, |
* you have to derive this function. |
* |
* @access private |
* @global $HTTP_POST_VARS |
* @see Auth |
* @return void |
*/ |
function assignData() |
{ |
$post = &$this->_importGlobalVariable('post'); |
if (isset($post['username']) && $post['username'] != '') { |
$this->username = (get_magic_quotes_gpc() == 1 ? stripslashes($post['username']) : $post['username']); |
} |
if (isset($post['password']) && $post['password'] != '') { |
$this->password = (get_magic_quotes_gpc() == 1 ? stripslashes($post['password']) : $post['password'] ); |
} |
} |
// }}} |
// {{{ start() |
/** |
* Start new auth session |
* |
* @access public |
* @return void |
*/ |
function start() |
{ |
$this->assignData(); |
@session_start(); |
if (!$this->checkAuth()) { |
$this->login(); |
} |
} |
// }}} |
// {{{ login() |
/** |
* Login function |
* |
* @access private |
* @return void |
*/ |
function login() |
{ |
$login_ok = false; |
/** |
* When the user has already entered a username, |
* we have to validate it. |
*/ |
if (!empty($this->username)) { |
if (true === $this->storage->fetchData($this->username, $this->password)) { |
$login_ok = true; |
} else { |
if (is_callable($this->loginFailedCallback)) { |
call_user_func($this->loginFailedCallback,$this->username, $this); |
} |
} |
} |
if (!empty($this->username) && $login_ok) { |
$this->setAuth($this->username); |
if (is_callable($this->loginCallback)) { |
call_user_func($this->loginCallback,$this->username, $this); |
} |
} |
/** |
* If the login failed or the user entered no username, |
* output the login screen again. |
*/ |
if (!empty($this->username) && !$login_ok) { |
$this->status = AUTH_WRONG_LOGIN; |
} |
if ((empty($this->username) || !$login_ok) && $this->showLogin) { |
$this->drawLogin($this->storage->activeUser); |
return; |
} |
} |
// }}} |
// {{{ setExpire() |
/** |
* Set the maximum expire time |
* |
* @access public |
* @param integer time in seconds |
* @param bool add time to current expire time or not |
* @return void |
*/ |
function setExpire($time, $add = false) |
{ |
if ($add) { |
$this->expire += $time; |
} else { |
$this->expire = $time; |
} |
} |
// }}} |
// {{{ setIdle() |
/** |
* Set the maximum idle time |
* |
* @access public |
* @param integer time in seconds |
* @param bool add time to current maximum idle time or not |
* @return void |
*/ |
function setIdle($time, $add = false) |
{ |
if ($add) { |
$this->idle += $time; |
} else { |
$this->idle = $time; |
} |
} |
// }}} |
// {{{ setSessionname() |
/** |
* Set name of the session to a customized value. |
* |
* If you are using multiple instances of PEAR::Auth |
* on the same domain, you can change the name of |
* session per application via this function. |
* |
* @access public |
* @param string New name for the session |
* @return void |
*/ |
function setSessionname($name = 'PHPSESSID') |
{ |
@session_name($name); |
} |
// }}} |
// {{{ setShowLogin() |
/** |
* Should the login form be displayed if neccessary? |
* |
* @access public |
* @param bool show login form or not |
* @return void |
*/ |
function setShowLogin($showLogin = true) |
{ |
$this->showLogin = $showLogin; |
} |
/** |
* Register a callback function to be called on user login. |
* The function will receive two parameters, the username and a reference to the auth object. |
* |
* @access public |
* @param string callback function name |
* @return void |
* @see setLogoutCallback() |
*/ |
function setLoginCallback($loginCallback) |
{ |
$this->loginCallback = $loginCallback; |
} |
/** |
* Register a callback function to be called on failed user login. |
* The function will receive a single parameter, the username and a reference to the auth object. |
* |
* @access public |
* @param string callback function name |
* @return void |
*/ |
function setFailedLoginCallback($loginFailedCallback) |
{ |
$this->loginFailedCallback = $loginFailedCallback; |
} |
/** |
* Register a callback function to be called on user logout. |
* The function will receive three parameters, the username and a reference to the auth object. |
* |
* @access public |
* @param string callback function name |
* @return void |
* @see setLoginCallback() |
*/ |
function setLogoutCallback($logoutCallback) |
{ |
$this->logoutCallback = $logoutCallback; |
} |
// }}} |
// {{{ setAuthData() |
/** |
* Register additional information that is to be stored |
* in the session. |
* |
* @access public |
* @param string Name of the data field |
* @param mixed Value of the data field |
* @param boolean Should existing data be overwritten? (default |
* is true) |
* @return void |
*/ |
function setAuthData($name, $value, $overwrite = true) |
{ |
$session = &Auth::_importGlobalVariable('session'); |
if (!empty($session[$this->_sessionName]['data'][$name]) && $overwrite == false) { |
return; |
} |
$session[$this->_sessionName]['data'][$name] = $value; |
} |
// }}} |
// {{{ getAuthData() |
/** |
* Get additional information that is stored in the session. |
* |
* If no value for the first parameter is passed, the method will |
* return all data that is currently stored. |
* |
* @access public |
* @param string Name of the data field |
* @return mixed Value of the data field. |
*/ |
function getAuthData($name = null) |
{ |
$session = &Auth::_importGlobalVariable('session'); |
if(!isset($session[$this->_sessionName]['data'])){ |
return(null); |
} |
if (is_null($name)) { |
if(isset($session[$this->_sessionName]['data'])) { |
return $session[$this->_sessionName]['data']; |
} else { |
return null; |
} |
} |
if (isset($session[$this->_sessionName]['data'][$name])) { |
return $session[$this->_sessionName]['data'][$name]; |
} else { |
return null; |
} |
} |
// }}} |
// {{{ setAuth() |
/** |
* Register variable in a session telling that the user |
* has logged in successfully |
* |
* @access public |
* @param string Username |
* @return void |
*/ |
function setAuth($username) |
{ |
$session = &Auth::_importGlobalVariable('session'); |
if (!isset($session[$this->_sessionName]) && !isset($_SESSION)) { |
session_register($this->_sessionName); |
} |
if (!isset($session[$this->_sessionName]) || !is_array($session[$this->_sessionName])) { |
$session[$this->_sessionName] = array(); |
} |
if(!isset($session[$this->_sessionName]['data'])){ |
$session[$this->_sessionName]['data'] = array(); |
} |
$session[$this->_sessionName]['registered'] = true; |
$session[$this->_sessionName]['username'] = $username; |
$session[$this->_sessionName]['timestamp'] = time(); |
$session[$this->_sessionName]['idle'] = time(); |
} |
// }}} |
// {{{ checkAuth() |
/** |
* Checks if there is a session with valid auth information. |
* |
* @access private |
* @return boolean Whether or not the user is authenticated. |
*/ |
function checkAuth() |
{ |
$session = &$this->_importGlobalVariable('session'); |
if (isset($session[$this->_sessionName])) { |
// Check if authentication session is expired |
if ($this->expire > 0 && |
isset($session[$this->_sessionName]['timestamp']) && |
($session[$this->_sessionName]['timestamp'] + $this->expire) < time()) { |
$this->logout(); |
$this->expired = true; |
$this->status = AUTH_EXPIRED; |
return false; |
} |
// Check if maximum idle time is reached |
if ($this->idle > 0 && |
isset($session[$this->_sessionName]['idle']) && |
($session[$this->_sessionName]['idle'] + $this->idle) < time()) { |
$this->logout(); |
$this->idled = true; |
$this->status = AUTH_IDLED; |
return false; |
} |
if (isset($session[$this->_sessionName]['registered']) && |
isset($session[$this->_sessionName]['username']) && |
$session[$this->_sessionName]['registered'] == true && |
$session[$this->_sessionName]['username'] != '') { |
Auth::updateIdle(); |
return true; |
} |
} |
return false; |
} |
// }}} |
// {{{ getAuth() |
/** |
* Has the user been authenticated? |
* |
* @access public |
* @return bool True if the user is logged in, otherwise false. |
*/ |
function getAuth() |
{ |
$session = &$this->_importGlobalVariable('session'); |
if (!empty($session) && |
(isset($session[$this->_sessionName]['registered']) && |
$session[$this->_sessionName]['registered'] === true)) |
{ |
return true; |
} else { |
return false; |
} |
} |
// }}} |
// {{{ drawLogin() |
/** |
* Draw the login form |
* |
* Normally you will not use this output in your application, |
* because you can pass a different function name to the |
* constructor. For more information on this, please |
* consult the documentation. |
* |
* @access private |
* @param string Username if already entered |
* @return void |
*/ |
function drawLogin($username = '') |
{ |
if (is_callable($this->loginFunction)) { |
call_user_func($this->loginFunction, $username, $this->status, $this); |
} else { |
$server = &$this->_importGlobalVariable('server'); |
echo '<center>'."\n"; |
if (!empty($this->status) && $this->status == AUTH_EXPIRED) { |
echo '<i>Your session expired. Please login again!</i>'."\n"; |
} else if (!empty($this->status) && $this->status == AUTH_IDLED) { |
echo '<i>You have been idle for too long. Please login again!</i>'."\n"; |
} else if (!empty ($this->status) && $this->status == AUTH_WRONG_LOGIN) { |
echo '<i>Wrong login data!</i>'."\n"; |
} |
PEAR::raiseError('You are using the built-in login screen of PEAR::Auth.<br />See the <a href="http://pear.php.net/manual/">manual</a> for details on how to create your own login function.', null); |
echo '<form method="post" action="' . $server['PHP_SELF'] . '">'."\n"; |
echo '<table border="0" cellpadding="2" cellspacing="0" summary="login form">'."\n"; |
echo '<tr>'."\n"; |
echo ' <td colspan="2" bgcolor="#eeeeee"><b>Login:</b></td>'."\n"; |
echo '</tr>'."\n"; |
echo '<tr>'."\n"; |
echo ' <td>Username:</td>'."\n"; |
echo ' <td><input type="text" name="username" value="' . $username . '" /></td>'."\n"; |
echo '</tr>'."\n"; |
echo '<tr>'."\n"; |
echo ' <td>Password:</td>'."\n"; |
echo ' <td><input type="password" name="password" /></td>'."\n"; |
echo '</tr>'."\n"; |
echo '<tr>'."\n"; |
echo ' <td colspan="2" bgcolor="#eeeeee"><input type="submit" /></td>'."\n"; |
echo '</tr>'."\n"; |
echo '</table>'."\n"; |
echo '</form>'."\n"; |
echo '</center>'."\n\n"; |
} |
} |
// }}} |
// {{{ logout() |
/** |
* Logout function |
* |
* This function clears any auth tokens in the currently |
* active session and executes the logout callback function, |
* if any |
* |
* @access public |
* @return void |
*/ |
function logout() |
{ |
$session = &$this->_importGlobalVariable('session'); |
if (is_callable($this->logoutCallback)) { |
call_user_func($this->logoutCallback, $session[$this->_sessionName]['username'], $this); |
} |
$this->username = ''; |
$this->password = ''; |
$session[$this->_sessionName] = array(); |
if (isset($_SESSION)) { |
unset($session[$this->_sessionName]); |
} else { |
session_unregister($this->_sessionName); |
} |
} |
// }}} |
// {{{ updateIdle() |
/** |
* Update the idletime |
* |
* @access private |
* @return void |
*/ |
function updateIdle() |
{ |
$session = &$this->_importGlobalVariable('session'); |
$session[$this->_sessionName]['idle'] = time(); |
} |
// }}} |
// {{{ getUsername() |
/** |
* Get the username |
* |
* @access public |
* @return string |
*/ |
function getUsername() |
{ |
$session = &$this->_importGlobalVariable('session'); |
if (!isset($session[$this->_sessionName]['username'])) { |
return ''; |
} |
return $session[$this->_sessionName]['username']; |
} |
// }}} |
// {{{ getStatus() |
/** |
* Get the current status |
* |
* @access public |
* @return string |
*/ |
function getStatus() |
{ |
return $this->status; |
} |
// }}} |
// {{{ sessionValidThru() |
/** |
* Returns the time up to the session is valid |
* |
* @access public |
* @return integer |
*/ |
function sessionValidThru() |
{ |
$session = &$this->_importGlobalVariable('session'); |
if (!isset($session[$this->_sessionName]['idle'])) { |
return 0; |
} |
return ($session[$this->_sessionName]['idle'] + $this->idle); |
} |
// }}} |
// {{{ listUsers() |
/** |
* List all users that are currently available in the storage |
* container |
* |
* @access public |
* @return array |
*/ |
function listUsers() |
{ |
return $this->storage->listUsers(); |
} |
// }}} |
// {{{ addUser() |
/** |
* Add user to the storage container |
* |
* @access public |
* @param string Username |
* @param string Password |
* @param mixed Additional parameters |
* @return mixed True on success, PEAR error object on error |
* and AUTH_METHOD_NOT_SUPPORTED otherwise. |
*/ |
function addUser($username, $password, $additional = '') |
{ |
return $this->storage->addUser($username, $password, $additional); |
} |
// }}} |
// {{{ removeUser() |
/** |
* Remove user from the storage container |
* |
* @access public |
* @param string Username |
* @return mixed True on success, PEAR error object on error |
* and AUTH_METHOD_NOT_SUPPORTED otherwise. |
*/ |
function removeUser($username) |
{ |
return $this->storage->removeUser($username); |
} |
// }}} |
// {{{ _importGlobalVariable() |
/** |
* Import variables from special namespaces. |
* |
* @access private |
* @param string Type of variable (server, session, post) |
* @return array |
*/ |
function &_importGlobalVariable($variable) |
{ |
$var = null; |
switch (strtolower($variable)) { |
case 'server' : |
if (isset($_SERVER)) { |
$var = &$_SERVER; |
} else { |
$var = &$GLOBALS['HTTP_SERVER_VARS']; |
} |
break; |
case 'session' : |
if (isset($_SESSION)) { |
$var = &$_SESSION; |
} else { |
$var = &$GLOBALS['HTTP_SESSION_VARS']; |
} |
break; |
case 'post' : |
if (isset($_POST)) { |
$var = &$_POST; |
} else { |
$var = &$GLOBALS['HTTP_POST_VARS']; |
} |
break; |
case 'cookie' : |
if (isset($_COOKIE)) { |
$var = &$_COOKIE; |
} else { |
$var = &$GLOBALS['HTTP_COOKIE_VARS']; |
} |
break; |
case 'get' : |
if (isset($_GET)) { |
$var = &$_GET; |
} else { |
$var = &$GLOBALS['HTTP_GET_VARS']; |
} |
break; |
default: |
break; |
} |
return $var; |
} |
// }}} |
} |
?> |
/branches/v1.0-menes/api/pear/Mail.php |
---|
New file |
0,0 → 1,211 |
<?php |
// |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2003 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.02 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/2_02.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Author: Chuck Hagenbuch <chuck@horde.org> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: Mail.php,v 1.1 2005-11-24 16:15:46 florian Exp $ |
require_once 'PEAR.php'; |
/** |
* PEAR's Mail:: interface. Defines the interface for implementing |
* mailers under the PEAR hierarchy, and provides supporting functions |
* useful in multiple mailer backends. |
* |
* @access public |
* @version $Revision: 1.1 $ |
* @package Mail |
*/ |
class Mail |
{ |
/** |
* Line terminator used for separating header lines. |
* @var string |
*/ |
var $sep = "\r\n"; |
/** |
* Provides an interface for generating Mail:: objects of various |
* types |
* |
* @param string $driver The kind of Mail:: object to instantiate. |
* @param array $params The parameters to pass to the Mail:: object. |
* @return object Mail a instance of the driver class or if fails a PEAR Error |
* @access public |
*/ |
function &factory($driver, $params = array()) |
{ |
$driver = strtolower($driver); |
@include_once 'Mail/' . $driver . '.php'; |
$class = 'Mail_' . $driver; |
if (class_exists($class)) { |
$mailer = new $class($params); |
return $mailer; |
} else { |
return PEAR::raiseError('Unable to find class for driver ' . $driver); |
} |
} |
/** |
* Implements Mail::send() function using php's built-in mail() |
* command. |
* |
* @param mixed $recipients Either a comma-seperated list of recipients |
* (RFC822 compliant), or an array of recipients, |
* each RFC822 valid. This may contain recipients not |
* specified in the headers, for Bcc:, resending |
* messages, etc. |
* |
* @param array $headers The array of headers to send with the mail, in an |
* associative array, where the array key is the |
* header name (ie, 'Subject'), and the array value |
* is the header value (ie, 'test'). The header |
* produced from those values would be 'Subject: |
* test'. |
* |
* @param string $body The full text of the message body, including any |
* Mime parts, etc. |
* |
* @return mixed Returns true on success, or a PEAR_Error |
* containing a descriptive error message on |
* failure. |
* @access public |
* @deprecated use Mail_mail::send instead |
*/ |
function send($recipients, $headers, $body) |
{ |
// if we're passed an array of recipients, implode it. |
if (is_array($recipients)) { |
$recipients = implode(', ', $recipients); |
} |
// get the Subject out of the headers array so that we can |
// pass it as a seperate argument to mail(). |
$subject = ''; |
if (isset($headers['Subject'])) { |
$subject = $headers['Subject']; |
unset($headers['Subject']); |
} |
// flatten the headers out. |
list(,$text_headers) = Mail::prepareHeaders($headers); |
return mail($recipients, $subject, $body, $text_headers); |
} |
/** |
* Take an array of mail headers and return a string containing |
* text usable in sending a message. |
* |
* @param array $headers The array of headers to prepare, in an associative |
* array, where the array key is the header name (ie, |
* 'Subject'), and the array value is the header |
* value (ie, 'test'). The header produced from those |
* values would be 'Subject: test'. |
* |
* @return mixed Returns false if it encounters a bad address, |
* otherwise returns an array containing two |
* elements: Any From: address found in the headers, |
* and the plain text version of the headers. |
* @access private |
*/ |
function prepareHeaders($headers) |
{ |
$lines = array(); |
$from = null; |
foreach ($headers as $key => $value) { |
if (strcasecmp($key, 'From') === 0) { |
include_once 'Mail/RFC822.php'; |
$parser = &new Mail_RFC822(); |
$addresses = $parser->parseAddressList($value, 'localhost', false); |
if (PEAR::isError($addresses)) { |
return $addresses; |
} |
$from = $addresses[0]->mailbox . '@' . $addresses[0]->host; |
// Reject envelope From: addresses with spaces. |
if (strstr($from, ' ')) { |
return false; |
} |
$lines[] = $key . ': ' . $value; |
} elseif (strcasecmp($key, 'Received') === 0) { |
$received = array(); |
if (is_array($value)) { |
foreach ($value as $line) { |
$received[] = $key . ': ' . $line; |
} |
} |
else { |
$received[] = $key . ': ' . $value; |
} |
// Put Received: headers at the top. Spam detectors often |
// flag messages with Received: headers after the Subject: |
// as spam. |
$lines = array_merge($received, $lines); |
} else { |
// If $value is an array (i.e., a list of addresses), convert |
// it to a comma-delimited string of its elements (addresses). |
if (is_array($value)) { |
$value = implode(', ', $value); |
} |
$lines[] = $key . ': ' . $value; |
} |
} |
return array($from, join($this->sep, $lines) . $this->sep); |
} |
/** |
* Take a set of recipients and parse them, returning an array of |
* bare addresses (forward paths) that can be passed to sendmail |
* or an smtp server with the rcpt to: command. |
* |
* @param mixed Either a comma-seperated list of recipients |
* (RFC822 compliant), or an array of recipients, |
* each RFC822 valid. |
* |
* @return array An array of forward paths (bare addresses). |
* @access private |
*/ |
function parseRecipients($recipients) |
{ |
include_once 'Mail/RFC822.php'; |
// if we're passed an array, assume addresses are valid and |
// implode them before parsing. |
if (is_array($recipients)) { |
$recipients = implode(', ', $recipients); |
} |
// Parse recipients, leaving out all personal info. This is |
// for smtp recipients, etc. All relevant personal information |
// should already be in the headers. |
$addresses = Mail_RFC822::parseAddressList($recipients, 'localhost', false); |
$recipients = array(); |
if (is_array($addresses)) { |
foreach ($addresses as $ob) { |
$recipients[] = $ob->mailbox . '@' . $ob->host; |
} |
} |
return $recipients; |
} |
} |
/branches/v1.0-menes/api/pear/A_LIRE.txt |
---|
New file |
0,0 → 1,16 |
Liste des packages PEAR : |
============================== |
Package Version State |
Auth 1.2.3 stable |
Calendar 0.5.2 beta |
DB 1.7.6 stable |
HTML_Common 1.2.1 stable |
HTML_QuickForm 3.2.5 stable |
HTML_Table 1.5 stable |
HTTP 1.3.5 stable |
Net_FTP 1.3.0 stable |
Net_SMTP 1.2.6 stable |
Net_Socket 1.0.6 stable |
Net_URL 1.0.14 stable |
PEAR 1.3.5 stable |
Text_Wiki 1.0.0 stable |
/branches/v1.0-menes/api/pear/Calendar/Util/Textual.php |
---|
New file |
0,0 → 1,239 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2002 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.02 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Harry Fuecks <hfuecks@phppatterns.com> | |
// | Lorenzo Alberton <l dot alberton at quipo dot it> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: Textual.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
// |
/** |
* @package Calendar |
* @version $Id: Textual.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
*/ |
/** |
* Allows Calendar include path to be redefined |
* @ignore |
*/ |
if (!defined('CALENDAR_ROOT')) { |
define('CALENDAR_ROOT', 'Calendar'.DIRECTORY_SEPARATOR); |
} |
/** |
* Load Calendar decorator base class |
*/ |
require_once CALENDAR_ROOT.'Decorator.php'; |
/** |
* Static utlities to help with fetching textual representations of months and |
* days of the week. |
* @package Calendar |
* @access public |
*/ |
class Calendar_Util_Textual |
{ |
/** |
* Returns an array of 12 month names (first index = 1) |
* @param string (optional) format of returned months (one,two,short or long) |
* @return array |
* @access public |
* @static |
*/ |
function monthNames($format='long') |
{ |
$formats = array('one'=>'%b', 'two'=>'%b', 'short'=>'%b', 'long'=>'%B'); |
if (!array_key_exists($format,$formats)) { |
$format = 'long'; |
} |
$months = array(); |
for ($i=1; $i<=12; $i++) { |
$stamp = mktime(0, 0, 0, $i, 1, 2003); |
$month = strftime($formats[$format], $stamp); |
switch($format) { |
case 'one': |
$month = substr($month, 0, 1); |
break; |
case 'two': |
$month = substr($month, 0, 2); |
break; |
} |
$months[$i] = $month; |
} |
return $months; |
} |
/** |
* Returns an array of 7 week day names (first index = 0) |
* @param string (optional) format of returned days (one,two,short or long) |
* @return array |
* @access public |
* @static |
*/ |
function weekdayNames($format='long') |
{ |
$formats = array('one'=>'%a', 'two'=>'%a', 'short'=>'%a', 'long'=>'%A'); |
if (!array_key_exists($format,$formats)) { |
$format = 'long'; |
} |
$days = array(); |
for ($i=0; $i<=6; $i++) { |
$stamp = mktime(0, 0, 0, 11, $i+2, 2003); |
$day = strftime($formats[$format], $stamp); |
switch($format) { |
case 'one': |
$day = substr($day, 0, 1); |
break; |
case 'two': |
$day = substr($day, 0, 2); |
break; |
} |
$days[$i] = $day; |
} |
return $days; |
} |
/** |
* Returns textual representation of the previous month of the decorated calendar object |
* @param object subclass of Calendar e.g. Calendar_Month |
* @param string (optional) format of returned months (one,two,short or long) |
* @return string |
* @access public |
* @static |
*/ |
function prevMonthName($Calendar, $format='long') |
{ |
$months = Calendar_Util_Textual::monthNames($format); |
return $months[$Calendar->prevMonth()]; |
} |
/** |
* Returns textual representation of the month of the decorated calendar object |
* @param object subclass of Calendar e.g. Calendar_Month |
* @param string (optional) format of returned months (one,two,short or long) |
* @return string |
* @access public |
* @static |
*/ |
function thisMonthName($Calendar, $format='long') |
{ |
$months = Calendar_Util_Textual::monthNames($format); |
return $months[$Calendar->thisMonth()]; |
} |
/** |
* Returns textual representation of the next month of the decorated calendar object |
* @param object subclass of Calendar e.g. Calendar_Month |
* @param string (optional) format of returned months (one,two,short or long) |
* @return string |
* @access public |
* @static |
*/ |
function nextMonthName($Calendar, $format='long') |
{ |
$months = Calendar_Util_Textual::monthNames($format); |
return $months[$Calendar->nextMonth()]; |
} |
/** |
* Returns textual representation of the previous day of week of the decorated calendar object |
* <b>Note:</b> Requires PEAR::Date |
* @param object subclass of Calendar e.g. Calendar_Month |
* @param string (optional) format of returned months (one,two,short or long) |
* @return string |
* @access public |
* @static |
*/ |
function prevDayName($Calendar, $format='long') |
{ |
$days = Calendar_Util_Textual::weekdayNames($format); |
$stamp = $Calendar->prevDay('timestamp'); |
$cE = $Calendar->getEngine(); |
require_once 'Date/Calc.php'; |
$day = Date_Calc::dayOfWeek($cE->stampToDay($stamp), |
$cE->stampToMonth($stamp), $cE->stampToYear($stamp)); |
return $days[$day]; |
} |
/** |
* Returns textual representation of the day of week of the decorated calendar object |
* <b>Note:</b> Requires PEAR::Date |
* @param object subclass of Calendar e.g. Calendar_Month |
* @param string (optional) format of returned months (one,two,short or long) |
* @return string |
* @access public |
* @static |
*/ |
function thisDayName($Calendar, $format='long') |
{ |
$days = Calendar_Util_Textual::weekdayNames($format); |
require_once 'Date/Calc.php'; |
$day = Date_Calc::dayOfWeek($Calendar->thisDay(), $Calendar->thisMonth(), $Calendar->thisYear()); |
return $days[$day]; |
} |
/** |
* Returns textual representation of the next day of week of the decorated calendar object |
* @param object subclass of Calendar e.g. Calendar_Month |
* @param string (optional) format of returned months (one,two,short or long) |
* @return string |
* @access public |
* @static |
*/ |
function nextDayName($Calendar, $format='long') |
{ |
$days = Calendar_Util_Textual::weekdayNames($format); |
$stamp = $Calendar->nextDay('timestamp'); |
$cE = $Calendar->getEngine(); |
require_once 'Date/Calc.php'; |
$day = Date_Calc::dayOfWeek($cE->stampToDay($stamp), |
$cE->stampToMonth($stamp), $cE->stampToYear($stamp)); |
return $days[$day]; |
} |
/** |
* Returns the days of the week using the order defined in the decorated |
* calendar object. Only useful for Calendar_Month_Weekdays, Calendar_Month_Weeks |
* and Calendar_Week. Otherwise the returned array will begin on Sunday |
* @param object subclass of Calendar e.g. Calendar_Month |
* @param string (optional) format of returned months (one,two,short or long) |
* @return array ordered array of week day names |
* @access public |
* @static |
*/ |
function orderedWeekdays($Calendar, $format='long') |
{ |
$days = Calendar_Util_Textual::weekdayNames($format); |
// Not so good - need methods to access this information perhaps... |
if (isset($Calendar->tableHelper)) { |
$ordereddays = $Calendar->tableHelper->daysOfWeek; |
} else { |
$ordereddays = array(0, 1, 2, 3, 4, 5, 6); |
} |
$ordereddays = array_flip($ordereddays); |
$i = 0; |
$returndays = array(); |
foreach ($ordereddays as $key => $value) { |
$returndays[$i] = $days[$key]; |
$i++; |
} |
return $returndays; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Calendar/Util/Uri.php |
---|
New file |
0,0 → 1,169 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// |
// +----------------------------------------------------------------------+ |
// | PHP | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2002 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.02 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Harry Fuecks <hfuecks@phppatterns.com> | |
// | Lorenzo Alberton <l dot alberton at quipo dot it> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: Uri.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
// |
/** |
* @package Calendar |
* @version $Id: Uri.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
*/ |
/** |
* Utility to help building HTML links for navigating the calendar<br /> |
* <code> |
* $Day = new Calendar_Day(2003, 10, 23); |
* $Uri = & new Calendar_Util_Uri('year', 'month', 'day'); |
* echo $Uri->prev($Day,'month'); // Displays year=2003&month=10 |
* echo $Uri->prev($Day,'day'); // Displays year=2003&month=10&day=22 |
* $Uri->seperator = '/'; |
* $Uri->scalar = true; |
* echo $Uri->prev($Day,'month'); // Displays 2003/10 |
* echo $Uri->prev($Day,'day'); // Displays 2003/10/22 |
* </code> |
* @package Calendar |
* @access public |
*/ |
class Calendar_Util_Uri |
{ |
/** |
* Uri fragments for year, month, day etc. |
* @var array |
* @access private |
*/ |
var $uris = array(); |
/** |
* String to separate fragments with. |
* Set to just & for HTML. |
* For a scalar URL you might use / as the seperator |
* @var string (default XHTML &) |
* @access public |
*/ |
var $separator = '&'; |
/** |
* To output a "scalar" string - variable names omitted. |
* Used for urls like index.php/2004/8/12 |
* @var boolean (default false) |
* @access public |
*/ |
var $scalar = false; |
/** |
* Constructs Calendar_Decorator_Uri |
* The term "fragment" means <i>name</i> of a calendar GET variables in the URL |
* @param string URI fragment for year |
* @param string (optional) URI fragment for month |
* @param string (optional) URI fragment for day |
* @param string (optional) URI fragment for hour |
* @param string (optional) URI fragment for minute |
* @param string (optional) URI fragment for second |
* @access public |
*/ |
function Calendar_Util_Uri($y, $m=null, $d=null, $h=null, $i=null, $s=null) |
{ |
$this->setFragments($y, $m, $d, $h, $i, $s); |
} |
/** |
* Sets the URI fragment names |
* @param string URI fragment for year |
* @param string (optional) URI fragment for month |
* @param string (optional) URI fragment for day |
* @param string (optional) URI fragment for hour |
* @param string (optional) URI fragment for minute |
* @param string (optional) URI fragment for second |
* @return void |
* @access public |
*/ |
function setFragments($y, $m=null, $d=null, $h=null, $i=null, $s=null) { |
if (!is_null($y)) $this->uris['Year'] = $y; |
if (!is_null($m)) $this->uris['Month'] = $m; |
if (!is_null($d)) $this->uris['Day'] = $d; |
if (!is_null($h)) $this->uris['Hour'] = $h; |
if (!is_null($i)) $this->uris['Minute'] = $i; |
if (!is_null($s)) $this->uris['Second'] = $s; |
} |
/** |
* Gets the URI string for the previous calendar unit |
* @param object subclassed from Calendar e.g. Calendar_Month |
* @param string calendar unit ( must be year, month, week, day, hour, minute or second) |
* @return string |
* @access public |
*/ |
function prev($Calendar, $unit) |
{ |
$method = 'prev'.$unit; |
$stamp = $Calendar->{$method}('timestamp'); |
return $this->buildUriString($Calendar, $method, $stamp); |
} |
/** |
* Gets the URI string for the current calendar unit |
* @param object subclassed from Calendar e.g. Calendar_Month |
* @param string calendar unit ( must be year, month, week, day, hour, minute or second) |
* @return string |
* @access public |
*/ |
function this($Calendar, $unit) |
{ |
$method = 'this'.$unit; |
$stamp = $Calendar->{$method}('timestamp'); |
return $this->buildUriString($Calendar, $method, $stamp); |
} |
/** |
* Gets the URI string for the next calendar unit |
* @param object subclassed from Calendar e.g. Calendar_Month |
* @param string calendar unit ( must be year, month, week, day, hour, minute or second) |
* @return string |
* @access public |
*/ |
function next($Calendar, $unit) |
{ |
$method = 'next'.$unit; |
$stamp = $Calendar->{$method}('timestamp'); |
return $this->buildUriString($Calendar, $method, $stamp); |
} |
/** |
* Build the URI string |
* @param string method substring |
* @param int timestamp |
* @return string build uri string |
* @access private |
*/ |
function buildUriString($Calendar, $method, $stamp) |
{ |
$uriString = ''; |
$cE = & $Calendar->getEngine(); |
$separator = ''; |
foreach ($this->uris as $unit => $uri) { |
$call = 'stampTo'.$unit; |
$uriString .= $separator; |
if (!$this->scalar) $uriString .= $uri.'='; |
$uriString .= $cE->{$call}($stamp); |
$separator = $this->separator; |
} |
return $uriString; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Calendar/Week.php |
---|
New file |
0,0 → 1,410 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2002 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.02 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Harry Fuecks <hfuecks@phppatterns.com> | |
// | Lorenzo Alberton <l dot alberton at quipo dot it> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: Week.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
// |
/** |
* @package Calendar |
* @version $Id: Week.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
*/ |
/** |
* Allows Calendar include path to be redefined |
* @ignore |
*/ |
if (!defined('CALENDAR_ROOT')) { |
define('CALENDAR_ROOT', 'Calendar'.DIRECTORY_SEPARATOR); |
} |
/** |
* Load Calendar base class |
*/ |
require_once CALENDAR_ROOT.'Calendar.php'; |
/** |
* Represents a Week and builds Days in tabular format<br> |
* <code> |
* require_once 'Calendar'.DIRECTORY_SEPARATOR.'Week.php'; |
* $Week = & new Calendar_Week(2003, 10, 1); Oct 2003, 1st tabular week |
* echo '<tr>'; |
* while ($Day = & $Week->fetch()) { |
* if ($Day->isEmpty()) { |
* echo '<td> </td>'; |
* } else { |
* echo '<td>'.$Day->thisDay().'</td>'; |
* } |
* } |
* echo '</tr>'; |
* </code> |
* @package Calendar |
* @access public |
*/ |
class Calendar_Week extends Calendar |
{ |
/** |
* Instance of Calendar_Table_Helper |
* @var Calendar_Table_Helper |
* @access private |
*/ |
var $tableHelper; |
/** |
* Stores the timestamp of the first day of this week |
* @access private |
* @var object |
*/ |
var $thisWeek; |
/** |
* Stores the timestamp of first day of previous week |
* @access private |
* @var object |
*/ |
var $prevWeek; |
/** |
* Stores the timestamp of first day of next week |
* @access private |
* @var object |
*/ |
var $nextWeek; |
/** |
* Used by build() to set empty days |
* @access private |
* @var boolean |
*/ |
var $firstWeek = false; |
/** |
* Used by build() to set empty days |
* @access private |
* @var boolean |
*/ |
var $lastWeek = false; |
/** |
* First day of the week (0=sunday, 1=monday...) |
* @access private |
* @var boolean |
*/ |
var $firstDay = 1; |
/** |
* Constructs Week |
* @param int year e.g. 2003 |
* @param int month e.g. 5 |
* @param int a day of the desired week |
* @param int (optional) first day of week (e.g. 0 for Sunday, 2 for Tuesday etc.) |
* @access public |
*/ |
function Calendar_Week($y, $m, $d, $firstDay=false) |
{ |
require_once CALENDAR_ROOT.'Table'.DIRECTORY_SEPARATOR.'Helper.php'; |
Calendar::Calendar($y, $m, $d); |
if ($firstDay !== false) { |
$this->firstDay = $firstDay; |
} |
$this->tableHelper = & new Calendar_Table_Helper($this, $firstDay); |
$this->thisWeek = $this->tableHelper->getWeekStart($y, $m, $d, $firstDay); |
$this->prevWeek = $this->tableHelper->getWeekStart($y, $m, $d - $this->cE->getDaysInWeek( |
$this->thisYear(), |
$this->thisMonth(), |
$this->thisDay()), $firstDay); |
$this->nextWeek = $this->tableHelper->getWeekStart($y, $m, $d + $this->cE->getDaysInWeek( |
$this->thisYear(), |
$this->thisMonth(), |
$this->thisDay()), $firstDay); |
} |
/** |
* Defines the calendar by a timestamp (Unix or ISO-8601), replacing values |
* passed to the constructor |
* @param int|string Unix or ISO-8601 timestamp |
* @return void |
* @access public |
*/ |
function setTimestamp($ts) |
{ |
+ |
+ $this->thisWeek = $this->tableHelper->getWeekStart( |
+ $this->year, $this->month, $this->day, $this->firstDay |
+ |
+ $this->prevWeek = $this->tableHelper->getWeekStart( |
+ $this->year, $this->month, $this->day - $this->cE->getDaysInWeek( |
+ $this->thisYear(), |
+ $this->thisMonth(), |
+ $this->thisDay()), $this->firstDay |
+ |
+ $this->nextWeek = $this->tableHelper->getWeekStart( |
+ $this->year, $this->month, $this->day + $this->cE->getDaysInWeek( |
+ $this->thisYear(), |
+ $this->thisMonth(), |
+ $this->thisDay()), $this->firstDay |
+ ); |
+ } |
+ |
+ /** |
+ * Builds Calendar_Day objects for this Week |
+ * @param array (optional) Calendar_Day objects representing selected dates |
+ * @return boolean |
+ * @access public |
+ */ |
+ function build($sDates = array()) |
+ { |
+ require_once CALENDAR_ROOT.'Day.php'; |
+ $year = $this->cE->stampToYear($this->thisWeek); |
+ $month = $this->cE->stampToMonth($this->thisWeek); |
+ $day = $this->cE->stampToDay($this->thisWeek); |
+ $end = $this->cE->getDaysInWeek( |
+ $this->thisYear(), |
+ $this->thisMonth(), |
+ $this->thisDay() |
+ ); |
+ |
+ for ($i=1; $i <= $end; $i++) { |
+ $stamp = $this->cE->dateToStamp($year, $month, $day++); |
+ $this->children[$i] = new Calendar_Day( |
+ $this->cE->stampToYear($stamp), |
+ $this->cE->stampToMonth($stamp), |
+ $this->cE->stampToDay($stamp)); |
+ } |
+ |
+ //set empty days (@see Calendar_Month_Weeks::build()) |
+ if ($this->firstWeek) { |
+ $eBefore = $this->tableHelper->getEmptyDaysBefore(); |
+ for ($i=1; $i <= $eBefore; $i++) { |
+ $this->children[$i]->setEmpty(); |
+ } |
+ } |
+ if ($this->lastWeek) { |
+ $eAfter = $this->tableHelper->getEmptyDaysAfterOffset(); |
+ for ($i = $eAfter+1; $i <= $end; $i++) { |
+ $this->children[$i]->setEmpty(); |
+ } |
+ } |
+ |
+ if (count($sDates) > 0) { |
+ $this->setSelection($sDates); |
+ } |
+ return true; |
+ } |
+ |
+ /** |
+ * @param boolean |
+ * @return void |
+ * @access private |
+ */ |
+ function setFirst($state=true) |
+ { |
+ $this->firstWeek = $state; |
+ } |
+ |
+ /** |
+ * @param boolean |
+ * @return void |
+ * @access private |
+ */ |
+ function setLast($state=true) |
+ { |
+ $this->lastWeek = $state; |
+ } |
+ |
+ /** |
+ * Called from build() |
+ * @param array |
+ * @return void |
+ * @access private |
+ */ |
+ function setSelection($sDates) |
+ { |
+ |
+ |
+ |
+ |
+ $child->thisYear() == $sDate->thisYear() |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ } |
+ |
+ /** |
+ * Gets the value of the previous week, according to the requested format |
+ * |
+ * @param string $format ['timestamp' | 'n_in_month' | 'n_in_year' | 'array'] |
+ * @return mixed |
+ * @access public |
+ */ |
+ function prevWeek($format = 'n_in_month') |
+ { |
+ switch (strtolower($format)) { |
+ case 'int': |
+ case 'n_in_month': |
+ return ($this->firstWeek) ? null : $this->thisWeek('n_in_month') -1; |
+ break; |
+ case 'n_in_year': |
+ return $this->cE->getWeekNInYear( |
+ $this->cE->stampToYear($this->prevWeek), |
+ $this->cE->stampToMonth($this->prevWeek), |
+ $this->cE->stampToDay($this->prevWeek)); |
+ break; |
+ case 'array': |
+ return $this->toArray($this->prevWeek); |
+ break; |
+ case 'object': |
+ require_once CALENDAR_ROOT.'Factory.php'; |
+ return Calendar_Factory::createByTimestamp('Week',$this->prevWeek); |
+ break; |
+ case 'timestamp': |
+ default: |
+ return $this->prevWeek; |
+ break; |
+ } |
+ } |
+ |
+ /** |
+ * Gets the value of the current week, according to the requested format |
+ * |
+ * @param string $format ['timestamp' | 'n_in_month' | 'n_in_year' | 'array'] |
+ * @return mixed |
+ * @access public |
+ */ |
+ function thisWeek($format = 'n_in_month') |
+ { |
+ switch (strtolower($format)) { |
+ case 'int': |
+ case 'n_in_month': |
+ if ($this->firstWeek) { |
+ return 1; |
+ } |
+ if ($this->lastWeek) { |
+ return $this->cE->getWeeksInMonth( |
+ $this->cE->stampToYear($this->thisWeek), |
+ $this->cE->stampToMonth($this->thisWeek), |
+ $this->firstDay); |
+ } |
+ return $this->cE->getWeekNInMonth( |
+ $this->cE->stampToYear($this->thisWeek), |
+ $this->cE->stampToMonth($this->thisWeek), |
+ $this->cE->stampToDay($this->thisWeek), |
+ $this->firstDay); |
+ break; |
+ case 'n_in_year': |
+ return $this->cE->getWeekNInYear( |
+ $this->cE->stampToYear($this->thisWeek), |
+ $this->cE->stampToMonth($this->thisWeek), |
+ $this->cE->stampToDay($this->thisWeek)); |
+ break; |
+ case 'array': |
+ return $this->toArray($this->thisWeek); |
+ break; |
+ case 'object': |
+ require_once CALENDAR_ROOT.'Factory.php'; |
+ return Calendar_Factory::createByTimestamp('Week',$this->thisWeek); |
+ break; |
+ case 'timestamp': |
+ default: |
+ return $this->thisWeek; |
+ break; |
+ } |
+ } |
+ |
+ /** |
+ * Gets the value of the following week, according to the requested format |
+ * |
+ * @param string $format ['timestamp' | 'n_in_month' | 'n_in_year' | 'array'] |
+ * @return mixed |
+ * @access public |
+ */ |
+ function nextWeek($format = 'n_in_month') |
+ { |
+ switch (strtolower($format)) { |
+ case 'int': |
+ case 'n_in_month': |
+ return ($this->lastWeek) ? null : $this->thisWeek('n_in_month') +1; |
+ break; |
+ case 'n_in_year': |
+ return $this->cE->getWeekNInYear( |
+ $this->cE->stampToYear($this->nextWeek), |
+ $this->cE->stampToMonth($this->nextWeek), |
+ $this->cE->stampToDay($this->nextWeek)); |
+ break; |
+ case 'array': |
+ return $this->toArray($this->nextWeek); |
+ break; |
+ case 'object': |
+ require_once CALENDAR_ROOT.'Factory.php'; |
+ return Calendar_Factory::createByTimestamp('Week',$this->nextWeek); |
+ break; |
+ case 'timestamp': |
+ default: |
+ return $this->nextWeek; |
+ break; |
+ } |
+ } |
+ |
+ /** |
+ * Returns the instance of Calendar_Table_Helper. |
+ * Called from Calendar_Validator::isValidWeek |
+ * @return Calendar_Table_Helper |
+ * @access protected |
+ */ |
+ function & getHelper() |
+ { |
+ return $this->tableHelper; |
+ } |
+ |
+ /** |
+ * Makes sure theres a value for $this->day |
+ * @return void |
+ * @access private |
+ */ |
+ function findFirstDay() |
+ { |
+ if (!count($this->children) > 0) { |
+ $this->build(); |
+ foreach ($this->children as $Day) { |
+ if (!$Day->isEmpty()) { |
+ $this->day = $Day->thisDay(); |
+ break; |
+ } |
+ } |
+ } |
+ } |
+} |
+?> |
\ No newline at end of file |
/branches/v1.0-menes/api/pear/Calendar/Decorator/Uri.php |
---|
New file |
0,0 → 1,151 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2002 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.02 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Harry Fuecks <hfuecks@phppatterns.com> | |
// | Lorenzo Alberton <l dot alberton at quipo dot it> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: Uri.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
// |
/** |
* @package Calendar |
* @version $Id: Uri.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
*/ |
/** |
* Allows Calendar include path to be redefined |
* @ignore |
*/ |
if (!defined('CALENDAR_ROOT')) { |
define('CALENDAR_ROOT', 'Calendar'.DIRECTORY_SEPARATOR); |
} |
/** |
* Load Calendar decorator base class |
*/ |
require_once CALENDAR_ROOT.'Decorator.php'; |
/** |
* Load the Uri utility |
*/ |
require_once CALENDAR_ROOT.'Util'.DIRECTORY_SEPARATOR.'Uri.php'; |
/** |
* Decorator to help with building HTML links for navigating the calendar<br /> |
* <b>Note:</b> for performance you should prefer Calendar_Util_Uri unless you |
* have a specific need to use a decorator |
* <code> |
* $Day = new Calendar_Day(2003, 10, 23); |
* $Uri = & new Calendar_Decorator_Uri($Day); |
* $Uri->setFragments('year', 'month', 'day'); |
* echo $Uri->getPrev(); // Displays year=2003&month=10&day=22 |
* </code> |
* @see Calendar_Util_Uri |
* @package Calendar |
* @access public |
*/ |
class Calendar_Decorator_Uri extends Calendar_Decorator |
{ |
/** |
* @var Calendar_Util_Uri |
* @access private |
*/ |
var $Uri; |
/** |
* Constructs Calendar_Decorator_Uri |
* @param object subclass of Calendar |
* @access public |
*/ |
function Calendar_Decorator_Uri(&$Calendar) |
{ |
parent::Calendar_Decorator($Calendar); |
} |
/** |
* Sets the URI fragment names |
* @param string URI fragment for year |
* @param string (optional) URI fragment for month |
* @param string (optional) URI fragment for day |
* @param string (optional) URI fragment for hour |
* @param string (optional) URI fragment for minute |
* @param string (optional) URI fragment for second |
* @return void |
* @access public |
*/ |
function setFragments($y, $m=null, $d=null, $h=null, $i=null, $s=null) { |
$this->Uri = & new Calendar_Util_Uri($y, $m, $d, $h, $i, $s); |
} |
/** |
* Sets the separator string between fragments |
* @param string separator e.g. / |
* @return void |
* @access public |
*/ |
function setSeparator($separator) |
{ |
$this->Uri->separator = $separator; |
} |
/** |
* Puts Uri decorator into "scalar mode" - URI variable names are not |
* returned |
* @param boolean (optional) |
* @return void |
* @access public |
*/ |
function setScalar($state=true) |
{ |
$this->Uri->scalar = $state; |
} |
/** |
* Gets the URI string for the previous calendar unit |
* @param string calendar unit to fetch uri for (year,month,week or day etc) |
* @return string |
* @access public |
*/ |
function prev($method) |
{ |
return $this->Uri->prev($this, $method); |
} |
/** |
* Gets the URI string for the current calendar unit |
* @param string calendar unit to fetch uri for (year,month,week or day etc) |
* @return string |
* @access public |
*/ |
function this($method) |
{ |
return $this->Uri->this($this, $method); |
} |
/** |
* Gets the URI string for the next calendar unit |
* @param string calendar unit to fetch uri for (year,month,week or day etc) |
* @return string |
* @access public |
*/ |
function next($method) |
{ |
return $this->Uri->next($this, $method); |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Calendar/Decorator/Wrapper.php |
---|
New file |
0,0 → 1,89 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2002 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.02 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Harry Fuecks <hfuecks@phppatterns.com> | |
// | Lorenzo Alberton <l dot alberton at quipo dot it> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: Wrapper.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
// |
/** |
* @package Calendar |
* @version $Id: Wrapper.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
*/ |
/** |
* Allows Calendar include path to be redefined |
* @ignore |
*/ |
if (!defined('CALENDAR_ROOT')) { |
define('CALENDAR_ROOT', 'Calendar'.DIRECTORY_SEPARATOR); |
} |
/** |
* Load Calendar decorator base class |
*/ |
require_once CALENDAR_ROOT.'Decorator.php'; |
/** |
* Decorator to help with wrapping built children in another decorator |
* @package Calendar |
* @access public |
*/ |
class Calendar_Decorator_Wrapper extends Calendar_Decorator |
{ |
/** |
* Constructs Calendar_Decorator_Wrapper |
* @param object subclass of Calendar |
* @access public |
*/ |
function Calendar_Decorator_Wrapper(&$Calendar) |
{ |
parent::Calendar_Decorator($Calendar); |
} |
/** |
* Wraps objects returned from fetch in the named Decorator class |
* @param string name of Decorator class to wrap with |
* @return object instance of named decorator |
* @access public |
*/ |
function & fetch($decorator) |
{ |
$Calendar = parent::fetch(); |
if ($Calendar) { |
return new $decorator($Calendar); |
} else { |
return false; |
} |
} |
/** |
* Wraps the returned calendar objects from fetchAll in the named decorator |
* @param string name of Decorator class to wrap with |
* @return array |
* @access public |
*/ |
function fetchAll($decorator) |
{ |
$children = parent::fetchAll(); |
foreach ($children as $key => $Calendar) { |
$children[$key] = & new $decorator($Calendar); |
} |
return $children; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Calendar/Decorator/Textual.php |
---|
New file |
0,0 → 1,169 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2002 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.02 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Harry Fuecks <hfuecks@phppatterns.com> | |
// | Lorenzo Alberton <l dot alberton at quipo dot it> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: Textual.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
// |
/** |
* @package Calendar |
* @version $Id: Textual.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
*/ |
/** |
* Allows Calendar include path to be redefined |
* @ignore |
*/ |
if (!defined('CALENDAR_ROOT')) { |
define('CALENDAR_ROOT', 'Calendar'.DIRECTORY_SEPARATOR); |
} |
/** |
* Load Calendar decorator base class |
*/ |
require_once CALENDAR_ROOT.'Decorator.php'; |
/** |
* Load the Uri utility |
*/ |
require_once CALENDAR_ROOT.'Util'.DIRECTORY_SEPARATOR.'Textual.php'; |
/** |
* Decorator to help with fetching textual representations of months and |
* days of the week. |
* <b>Note:</b> for performance you should prefer Calendar_Util_Textual unless you |
* have a specific need to use a decorator |
* @package Calendar |
* @access public |
*/ |
class Calendar_Decorator_Textual extends Calendar_Decorator |
{ |
/** |
* Constructs Calendar_Decorator_Textual |
* @param object subclass of Calendar |
* @access public |
*/ |
function Calendar_Decorator_Textual(&$Calendar) |
{ |
parent::Calendar_Decorator($Calendar); |
} |
/** |
* Returns an array of 12 month names (first index = 1) |
* @param string (optional) format of returned months (one,two,short or long) |
* @return array |
* @access public |
* @static |
*/ |
function monthNames($format='long') |
{ |
return Calendar_Util_Textual::monthNames($format); |
} |
/** |
* Returns an array of 7 week day names (first index = 0) |
* @param string (optional) format of returned days (one,two,short or long) |
* @return array |
* @access public |
* @static |
*/ |
function weekdayNames($format='long') |
{ |
return Calendar_Util_Textual::weekdayNames($format); |
} |
/** |
* Returns textual representation of the previous month of the decorated calendar object |
* @param string (optional) format of returned months (one,two,short or long) |
* @return string |
* @access public |
*/ |
function prevMonthName($format='long') |
{ |
return Calendar_Util_Textual::prevMonthName($this->calendar,$format); |
} |
/** |
* Returns textual representation of the month of the decorated calendar object |
* @param string (optional) format of returned months (one,two,short or long) |
* @return string |
* @access public |
*/ |
function thisMonthName($format='long') |
{ |
return Calendar_Util_Textual::thisMonthName($this->calendar,$format); |
} |
/** |
* Returns textual representation of the next month of the decorated calendar object |
* @param string (optional) format of returned months (one,two,short or long) |
* @return string |
* @access public |
*/ |
function nextMonthName($format='long') |
{ |
return Calendar_Util_Textual::nextMonthName($this->calendar,$format); |
} |
/** |
* Returns textual representation of the previous day of week of the decorated calendar object |
* @param string (optional) format of returned months (one,two,short or long) |
* @return string |
* @access public |
*/ |
function prevDayName($format='long') |
{ |
return Calendar_Util_Textual::prevDayName($this->calendar,$format); |
} |
/** |
* Returns textual representation of the day of week of the decorated calendar object |
* @param string (optional) format of returned months (one,two,short or long) |
* @return string |
* @access public |
*/ |
function thisDayName($format='long') |
{ |
return Calendar_Util_Textual::thisDayName($this->calendar,$format); |
} |
/** |
* Returns textual representation of the next day of week of the decorated calendar object |
* @param string (optional) format of returned months (one,two,short or long) |
* @return string |
* @access public |
*/ |
function nextDayName($format='long') |
{ |
return Calendar_Util_Textual::nextDayName($this->calendar,$format); |
} |
/** |
* Returns the days of the week using the order defined in the decorated |
* calendar object. Only useful for Calendar_Month_Weekdays, Calendar_Month_Weeks |
* and Calendar_Week. Otherwise the returned array will begin on Sunday |
* @param string (optional) format of returned months (one,two,short or long) |
* @return array ordered array of week day names |
* @access public |
*/ |
function orderedWeekdays($format='long') |
{ |
return Calendar_Util_Textual::orderedWeekdays($this->calendar,$format); |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Calendar/Decorator/Weekday.php |
---|
New file |
0,0 → 1,148 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2002 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.02 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Harry Fuecks <hfuecks@phppatterns.com> | |
// | Lorenzo Alberton <l dot alberton at quipo dot it> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: Weekday.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
// |
/** |
* @package Calendar |
* @version $Id: Weekday.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
*/ |
/** |
* Allows Calendar include path to be redefined |
* @ignore |
*/ |
if (!defined('CALENDAR_ROOT')) { |
define('CALENDAR_ROOT', 'Calendar'.DIRECTORY_SEPARATOR); |
} |
/** |
* Load Calendar decorator base class |
*/ |
require_once CALENDAR_ROOT.'Decorator.php'; |
/** |
* Load a Calendar_Day |
*/ |
require_once CALENDAR_ROOT.'Day.php'; |
/** |
* Decorator for fetching the day of the week |
* <code> |
* $Day = new Calendar_Day(2003, 10, 23); |
* $Weekday = & new Calendar_Decorator_Weekday($Day); |
* $Weekday->setFirstDay(0); // Set first day of week to Sunday (default Mon) |
* echo $Weekday->thisWeekDay(); // Displays 5 - fifth day of week relative to Sun |
* </code> |
* @package Calendar |
* @access public |
*/ |
class Calendar_Decorator_Weekday extends Calendar_Decorator |
{ |
/** |
* First day of week |
* @var int (default = 1 for Monday) |
* @access private |
*/ |
var $firstDay = 1; |
/** |
* Constructs Calendar_Decorator_Weekday |
* @param object subclass of Calendar |
* @access public |
*/ |
function Calendar_Decorator_Weekday(& $Calendar) |
{ |
parent::Calendar_Decorator($Calendar); |
} |
/** |
* Sets the first day of the week (0 = Sunday, 1 = Monday (default) etc) |
* @param int first day of week |
* @return void |
* @access public |
*/ |
function setFirstDay($firstDay) { |
$this->firstDay = (int)$firstDay; |
} |
/** |
* Returns the previous weekday |
* @param string (default = 'int') return value format |
* @return int numeric day of week or timestamp |
* @access public |
*/ |
function prevWeekDay($format = 'int') |
{ |
$ts = $this->calendar->prevDay('timestamp'); |
$Day = new Calendar_Day(2000,1,1); |
$Day->setTimeStamp($ts); |
$day = $this->calendar->cE->getDayOfWeek($Day->thisYear(),$Day->thisMonth(),$Day->thisDay()); |
$day = $this->adjustWeekScale($day); |
return $this->returnValue('Day', $format, $ts, $day); |
} |
/** |
* Returns the current weekday |
* @param string (default = 'int') return value format |
* @return int numeric day of week or timestamp |
* @access public |
*/ |
function thisWeekDay($format = 'int') |
{ |
$ts = $this->calendar->thisDay('timestamp'); |
$day = $this->calendar->cE->getDayOfWeek($this->calendar->year,$this->calendar->month,$this->calendar->day); |
$day = $this->adjustWeekScale($day); |
return $this->returnValue('Day', $format, $ts, $day); |
} |
/** |
* Returns the next weekday |
* @param string (default = 'int') return value format |
* @return int numeric day of week or timestamp |
* @access public |
*/ |
function nextWeekDay($format = 'int') |
{ |
$ts = $this->calendar->nextDay('timestamp'); |
$Day = new Calendar_Day(2000,1,1); |
$Day->setTimeStamp($ts); |
$day = $this->calendar->cE->getDayOfWeek($Day->thisYear(),$Day->thisMonth(),$Day->thisDay()); |
$day = $this->adjustWeekScale($day); |
return $this->returnValue('Day', $format, $ts, $day); |
} |
/** |
* Adjusts the day of the week relative to the first day of the week |
* @param int day of week calendar from Calendar_Engine |
* @return int day of week adjusted to first day |
* @access private |
*/ |
function adjustWeekScale($dayOfWeek) { |
$dayOfWeek = $dayOfWeek - $this->firstDay; |
if ( $dayOfWeek >= 0 ) { |
return $dayOfWeek; |
} else { |
return $this->calendar->cE->getDaysInWeek( |
$this->calendar->year,$this->calendar->month,$this->calendar->day |
) + $dayOfWeek; |
} |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Calendar/Month/Weekdays.php |
---|
New file |
0,0 → 1,188 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2002 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.02 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Harry Fuecks <hfuecks@phppatterns.com> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: Weekdays.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
// |
/** |
* @package Calendar |
* @version $Id: Weekdays.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
*/ |
/** |
* Allows Calendar include path to be redefined |
* @ignore |
*/ |
if (!defined('CALENDAR_ROOT')) { |
define('CALENDAR_ROOT', 'Calendar'.DIRECTORY_SEPARATOR); |
} |
/** |
* Load Calendar base class |
*/ |
require_once CALENDAR_ROOT.'Calendar.php'; |
/** |
* Load base month |
*/ |
require_once CALENDAR_ROOT.'Month.php'; |
/** |
* Represents a Month and builds Days in tabular form<br> |
* <code> |
* require_once 'Calendar'.DIRECTORY_SEPARATOR.'Month'.DIRECTORY_SEPARATOR.'Weekdays.php'; |
* $Month = & new Calendar_Month_Weekdays(2003, 10); // Oct 2003 |
* $Month->build(); // Build Calendar_Day objects |
* while ($Day = & $Month->fetch()) { |
* if ($Day->isFirst()) { |
* echo '<tr>'; |
* } |
* if ($Day->isEmpty()) { |
* echo '<td> </td>'; |
* } else { |
* echo '<td>'.$Day->thisDay().'</td>'; |
* } |
* if ($Day->isLast()) { |
* echo '</tr>'; |
* } |
* } |
* </code> |
* @package Calendar |
* @access public |
*/ |
class Calendar_Month_Weekdays extends Calendar_Month |
{ |
/** |
* Instance of Calendar_Table_Helper |
* @var Calendar_Table_Helper |
* @access private |
*/ |
var $tableHelper; |
/** |
* First day of the week |
* @access private |
* @var string |
*/ |
var $firstDay; |
/** |
* Constructs Calendar_Month_Weekdays |
* @param int year e.g. 2003 |
* @param int month e.g. 5 |
* @param int (optional) first day of week (e.g. 0 for Sunday, 2 for Tuesday etc.) |
* @access public |
*/ |
function Calendar_Month_Weekdays($y, $m, $firstDay=false) |
{ |
Calendar_Month::Calendar_Month($y, $m); |
$this->firstDay = $firstDay; |
} |
/** |
* Builds Day objects in tabular form, to allow display of calendar month |
* with empty cells if the first day of the week does not fall on the first |
* day of the month. |
* @see Calendar_Day::isEmpty() |
* @see Calendar_Day_Base::isFirst() |
* @see Calendar_Day_Base::isLast() |
* @param array (optional) Calendar_Day objects representing selected dates |
* @return boolean |
* @access public |
*/ |
function build($sDates=array()) |
{ |
require_once CALENDAR_ROOT.'Table'.DIRECTORY_SEPARATOR.'Helper.php'; |
$this->tableHelper = & new Calendar_Table_Helper($this, $this->firstDay); |
Calendar_Month::build($sDates); |
$this->buildEmptyDaysBefore(); |
$this->shiftDays(); |
$this->buildEmptyDaysAfter(); |
$this->setWeekMarkers(); |
return true; |
} |
/** |
* Prepends empty days before the real days in the month |
* @return void |
* @access private |
*/ |
function buildEmptyDaysBefore() |
{ |
$eBefore = $this->tableHelper->getEmptyDaysBefore(); |
for ($i=0; $i < $eBefore; $i++) { |
$stamp = $this->cE->dateToStamp($this->year, $this->month, -$i); |
$Day = new Calendar_Day( |
$this->cE->stampToYear($stamp), |
$this->cE->stampToMonth($stamp), |
$this->cE->stampToDay($stamp)); |
$Day->setEmpty(); |
array_unshift($this->children, $Day); |
} |
} |
/** |
* Shifts the array of children forward, if necessary |
* @return void |
* @access private |
*/ |
function shiftDays() |
{ |
if (isset ($this->children[0])) { |
array_unshift($this->children, null); |
unset($this->children[0]); |
} |
} |
/** |
* Appends empty days after the real days in the month |
* @return void |
* @access private |
*/ |
function buildEmptyDaysAfter() |
{ |
$eAfter = $this->tableHelper->getEmptyDaysAfter(); |
$sDOM = $this->tableHelper->getNumTableDaysInMonth(); |
for ($i = 1; $i <= $sDOM-$eAfter; $i++) { |
$Day = new Calendar_Day($this->year, $this->month+1, $i); |
$Day->setEmpty(); |
array_push($this->children, $Day); |
} |
} |
/** |
* Sets the "markers" for the beginning and of a of week, in the |
* built Calendar_Day children |
* @return void |
* @access private |
*/ |
function setWeekMarkers() |
{ |
$dIW = $this->cE->getDaysInWeek( |
$this->thisYear(), |
$this->thisMonth(), |
$this->thisDay() |
); |
$sDOM = $this->tableHelper->getNumTableDaysInMonth(); |
for ($i=1; $i <= $sDOM; $i+= $dIW) { |
$this->children[$i]->setFirst(); |
$this->children[$i+($dIW-1)]->setLast(); |
} |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Calendar/Month/Weeks.php |
---|
New file |
0,0 → 1,140 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2002 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.02 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Harry Fuecks <hfuecks@phppatterns.com> | |
// | Lorenzo Alberton <l dot alberton at quipo dot it> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: Weeks.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
// |
/** |
* @package Calendar |
* @version $Id: Weeks.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
*/ |
/** |
* Allows Calendar include path to be redefined |
* @ignore |
*/ |
if (!defined('CALENDAR_ROOT')) { |
define('CALENDAR_ROOT', 'Calendar'.DIRECTORY_SEPARATOR); |
} |
/** |
* Load Calendar base class |
*/ |
require_once CALENDAR_ROOT.'Calendar.php'; |
/** |
* Load base month |
*/ |
require_once CALENDAR_ROOT.'Month.php'; |
/** |
* Represents a Month and builds Weeks |
* <code> |
* require_once 'Calendar'.DIRECTORY_SEPARATOR.'Month'.DIRECTORY_SEPARATOR.'Weeks.php'; |
* $Month = & new Calendar_Month_Weeks(2003, 10); // Oct 2003 |
* $Month->build(); // Build Calendar_Day objects |
* while ($Week = & $Month->fetch()) { |
* echo $Week->thisWeek().'<br />'; |
* } |
* </code> |
* @package Calendar |
* @access public |
*/ |
class Calendar_Month_Weeks extends Calendar_Month |
{ |
/** |
* Instance of Calendar_Table_Helper |
* @var Calendar_Table_Helper |
* @access private |
*/ |
var $tableHelper; |
/** |
* First day of the week |
* @access private |
* @var string |
*/ |
var $firstDay; |
/** |
* Constructs Calendar_Month_Weeks |
* @param int year e.g. 2003 |
* @param int month e.g. 5 |
* @param int (optional) first day of week (e.g. 0 for Sunday, 2 for Tuesday etc.) |
* @access public |
*/ |
function Calendar_Month_Weeks($y, $m, $firstDay=false) |
{ |
Calendar_Month::Calendar_Month($y, $m); |
$this->firstDay = $firstDay; |
} |
/** |
* Builds Calendar_Week objects for the Month. Note that Calendar_Week |
* builds Calendar_Day object in tabular form (with Calendar_Day->empty) |
* @param array (optional) Calendar_Week objects representing selected dates |
* @return boolean |
* @access public |
*/ |
function build($sDates=array()) |
{ |
require_once CALENDAR_ROOT.'Table'.DIRECTORY_SEPARATOR.'Helper.php'; |
$this->tableHelper = & new Calendar_Table_Helper($this, $this->firstDay); |
require_once CALENDAR_ROOT.'Week.php'; |
$numWeeks = $this->tableHelper->getNumWeeks(); |
for ($i=1, $d=1; $i<=$numWeeks; $i++, |
$d+=$this->cE->getDaysInWeek( |
$this->thisYear(), |
$this->thisMonth(), |
$this->thisDay()) ) { |
$this->children[$i] = new Calendar_Week( |
$this->year, $this->month, $d, $this->tableHelper->getFirstDay()); |
} |
//used to set empty days |
$this->children[1]->setFirst(true); |
$this->children[$numWeeks]->setLast(true); |
// Handle selected weeks here |
if (count($sDates) > 0) { |
$this->setSelection($sDates); |
} |
return true; |
} |
/** |
* Called from build() |
* @param array |
* @return void |
* @access private |
*/ |
function setSelection($sDates) |
{ |
foreach ($sDates as $sDate) { |
if ($this->year == $sDate->thisYear() |
&& $this->month == $sDate->thisMonth()) |
{ |
$key = $sDate->thisWeek('n_in_month'); |
if (isset($this->children[$key])) { |
$this->children[$key]->setSelected(); |
} |
} |
} |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Calendar/Year.php |
---|
New file |
0,0 → 1,119 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2002 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.02 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Harry Fuecks <hfuecks@phppatterns.com> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: Year.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
// |
/** |
* @package Calendar |
* @version $Id: Year.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
*/ |
/** |
* Allows Calendar include path to be redefined |
* @ignore |
*/ |
if (!defined('CALENDAR_ROOT')) { |
define('CALENDAR_ROOT', 'Calendar'.DIRECTORY_SEPARATOR); |
} |
/** |
* Load Calendar base class |
*/ |
require_once CALENDAR_ROOT.'Calendar.php'; |
/** |
* Represents a Year and builds Months<br> |
* <code> |
* require_once 'Calendar'.DIRECTORY_SEPARATOR.'Year.php'; |
* $Year = & new Calendar_Year(2003, 10, 21); // 21st Oct 2003 |
* $Year->build(); // Build Calendar_Month objects |
* while ($Month = & $Year->fetch()) { |
* echo $Month->thisMonth().'<br />'; |
* } |
* </code> |
* @package Calendar |
* @access public |
*/ |
class Calendar_Year extends Calendar |
{ |
/** |
* Constructs Calendar_Year |
* @param int year e.g. 2003 |
* @access public |
*/ |
function Calendar_Year($y) |
{ |
Calendar::Calendar($y); |
} |
/** |
* Builds the Months of the Year.<br> |
* <b>Note:</b> by defining the constant CALENDAR_MONTH_STATE you can |
* control what class of Calendar_Month is built e.g.; |
* <code> |
* require_once 'Calendar/Calendar_Year.php'; |
* define ('CALENDAR_MONTH_STATE',CALENDAR_USE_MONTH_WEEKDAYS); // Use Calendar_Month_Weekdays |
* // define ('CALENDAR_MONTH_STATE',CALENDAR_USE_MONTH_WEEKS); // Use Calendar_Month_Weeks |
* // define ('CALENDAR_MONTH_STATE',CALENDAR_USE_MONTH); // Use Calendar_Month |
* </code> |
* It defaults to building Calendar_Month objects. |
* @param array (optional) array of Calendar_Month objects representing selected dates |
* @param int (optional) first day of week (e.g. 0 for Sunday, 2 for Tuesday etc.) |
* @return boolean |
* @access public |
*/ |
function build($sDates = array(), $firstDay = null) |
{ |
require_once CALENDAR_ROOT.'Factory.php'; |
if (is_null($firstDay)) { |
$firstDay = $this->cE->getFirstDayOfWeek( |
$this->thisYear(), |
$this->thisMonth(), |
$this->thisDay() |
); |
} |
$monthsInYear = $this->cE->getMonthsInYear($this->thisYear()); |
for ($i=1; $i <= $monthsInYear; $i++) { |
$this->children[$i] = Calendar_Factory::create('Month',$this->year,$i); |
} |
if (count($sDates) > 0) { |
$this->setSelection($sDates); |
} |
return true; |
} |
/** |
* Called from build() |
* @param array |
* @return void |
* @access private |
*/ |
function setSelection($sDates) { |
foreach ($sDates as $sDate) { |
if ($this->year == $sDate->thisYear()) { |
$key = $sDate->thisMonth(); |
if (isset($this->children[$key])) { |
$sDate->setSelected(); |
$this->children[$key] = $sDate; |
} |
} |
} |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Calendar/Minute.php |
---|
New file |
0,0 → 1,114 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2002 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.02 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Harry Fuecks <hfuecks@phppatterns.com> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: Minute.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
// |
/** |
* @package Calendar |
* @version $Id: Minute.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
*/ |
/** |
* Allows Calendar include path to be redefined |
* @ignore |
*/ |
if (!defined('CALENDAR_ROOT')) { |
define('CALENDAR_ROOT', 'Calendar'.DIRECTORY_SEPARATOR); |
} |
/** |
* Load Calendar base class |
*/ |
require_once CALENDAR_ROOT.'Calendar.php'; |
/** |
* Represents a Minute and builds Seconds |
* <code> |
* require_once 'Calendar'.DIRECTORY_SEPARATOR.'Minute.php'; |
* $Minute = & new Calendar_Minute(2003, 10, 21, 15, 31); // Oct 21st 2003, 3:31pm |
* $Minute->build(); // Build Calendar_Second objects |
* while ($Second = & $Minute->fetch()) { |
* echo $Second->thisSecond().'<br />'; |
* } |
* </code> |
* @package Calendar |
* @access public |
*/ |
class Calendar_Minute extends Calendar |
{ |
/** |
* Constructs Minute |
* @param int year e.g. 2003 |
* @param int month e.g. 5 |
* @param int day e.g. 11 |
* @param int hour e.g. 13 |
* @param int minute e.g. 31 |
* @access public |
*/ |
function Calendar_Minute($y, $m, $d, $h, $i) |
{ |
Calendar::Calendar($y, $m, $d, $h, $i); |
} |
/** |
* Builds the Calendar_Second objects |
* @param array (optional) Calendar_Second objects representing selected dates |
* @return boolean |
* @access public |
*/ |
function build($sDates=array()) |
{ |
require_once CALENDAR_ROOT.'Second.php'; |
$sIM = $this->cE->getSecondsInMinute($this->year, $this->month, |
$this->day, $this->hour, $this->minute); |
for ($i=0; $i < $sIM; $i++) { |
$this->children[$i] = new Calendar_Second($this->year, $this->month, |
$this->day, $this->hour, $this->minute, $i); |
} |
if (count($sDates) > 0) { |
$this->setSelection($sDates); |
} |
return true; |
} |
/** |
* Called from build() |
* @param array |
* @return void |
* @access private |
*/ |
function setSelection($sDates) |
{ |
foreach ($sDates as $sDate) { |
if ($this->year == $sDate->thisYear() |
&& $this->month == $sDate->thisMonth() |
&& $this->day == $sDate->thisDay() |
&& $this->hour == $sDate->thisHour() |
&& $this->minute == $sDate->thisMinute()) |
{ |
$key = (int)$sDate->thisSecond(); |
if (isset($this->children[$key])) { |
$sDate->setSelected(); |
$this->children[$key] = $sDate; |
} |
} |
} |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Calendar/Table/Helper.php |
---|
New file |
0,0 → 1,280 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2002 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.02 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Harry Fuecks <hfuecks@phppatterns.com> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: Helper.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
// |
/** |
* @package Calendar |
* @version $Id: Helper.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
*/ |
/** |
* Used by Calendar_Month_Weekdays, Calendar_Month_Weeks and Calendar_Week to |
* help with building the calendar in tabular form |
* @package Calendar |
* @access protected |
*/ |
class Calendar_Table_Helper |
{ |
/** |
* Instance of the Calendar object being helped. |
* @var object |
* @access private |
*/ |
var $calendar; |
/** |
* Instance of the Calendar_Engine |
* @var object |
* @access private |
*/ |
var $cE; |
/** |
* First day of the week |
* @access private |
* @var string |
*/ |
var $firstDay; |
/** |
* The seven days of the week named |
* @access private |
* @var array |
*/ |
var $weekDays; |
/** |
* Days of the week ordered with $firstDay at the beginning |
* @access private |
* @var array |
*/ |
var $daysOfWeek = array(); |
/** |
* Days of the month built from days of the week |
* @access private |
* @var array |
*/ |
var $daysOfMonth = array(); |
/** |
* Number of weeks in month |
* @var int |
* @access private |
*/ |
var $numWeeks = null; |
/** |
* Number of emtpy days before real days begin in month |
* @var int |
* @access private |
*/ |
var $emptyBefore = 0; |
/** |
* Constructs Calendar_Table_Helper |
* @param object Calendar_Month_Weekdays, Calendar_Month_Weeks, Calendar_Week |
* @param int (optional) first day of the week e.g. 1 for Monday |
* @access protected |
*/ |
function Calendar_Table_Helper(& $calendar, $firstDay=false) |
{ |
$this->calendar = & $calendar; |
$this->cE = & $calendar->getEngine(); |
if ($firstDay === false) { |
$firstDay = $this->cE->getFirstDayOfWeek( |
$this->calendar->thisYear(), |
$this->calendar->thisMonth(), |
$this->calendar->thisDay() |
); |
} |
$this->firstDay = $firstDay; |
$this->setFirstDay(); |
$this->setDaysOfMonth(); |
} |
/** |
* Constructs $this->daysOfWeek based on $this->firstDay |
* @return void |
* @access private |
*/ |
function setFirstDay() |
{ |
$weekDays = $this->cE->getWeekDays( |
$this->calendar->thisYear(), |
$this->calendar->thisMonth(), |
$this->calendar->thisDay() |
); |
$endDays = array(); |
$tmpDays = array(); |
$begin = false; |
foreach ($weekDays as $day) { |
if ($begin == true) { |
$endDays[] = $day; |
} else if ($day === $this->firstDay) { |
$begin = true; |
$endDays[] = $day; |
} else { |
$tmpDays[] = $day; |
} |
} |
$this->daysOfWeek = array_merge($endDays, $tmpDays); |
} |
/** |
* Constructs $this->daysOfMonth |
* @return void |
* @access private |
*/ |
function setDaysOfMonth() |
{ |
$this->daysOfMonth = $this->daysOfWeek; |
$daysInMonth = $this->cE->getDaysInMonth( |
$this->calendar->thisYear(), $this->calendar->thisMonth()); |
$firstDayInMonth = $this->cE->getFirstDayInMonth( |
$this->calendar->thisYear(), $this->calendar->thisMonth()); |
$this->emptyBefore=0; |
foreach ($this->daysOfMonth as $dayOfWeek) { |
if ($firstDayInMonth == $dayOfWeek) { |
break; |
} |
$this->emptyBefore++; |
} |
$this->numWeeks = ceil( |
($daysInMonth + $this->emptyBefore) |
/ |
$this->cE->getDaysInWeek( |
$this->calendar->thisYear(), |
$this->calendar->thisMonth(), |
$this->calendar->thisDay() |
) |
); |
for ($i=1; $i < $this->numWeeks; $i++) { |
$this->daysOfMonth = |
array_merge($this->daysOfMonth, $this->daysOfWeek); |
} |
} |
/** |
* Returns the first day of the month |
* @see Calendar_Engine_Interface::getFirstDayOfWeek() |
* @return int |
* @access protected |
*/ |
function getFirstDay() |
{ |
return $this->firstDay; |
} |
/** |
* Returns the order array of days in a week |
* @return int |
* @access protected |
*/ |
function getDaysOfWeek() |
{ |
return $this->daysOfWeek; |
} |
/** |
* Returns the number of tabular weeks in a month |
* @return int |
* @access protected |
*/ |
function getNumWeeks() |
{ |
return $this->numWeeks; |
} |
/** |
* Returns the number of real days + empty days |
* @return int |
* @access protected |
*/ |
function getNumTableDaysInMonth() |
{ |
return count($this->daysOfMonth); |
} |
/** |
* Returns the number of empty days before the real days begin |
* @return int |
* @access protected |
*/ |
function getEmptyDaysBefore() |
{ |
return $this->emptyBefore; |
} |
/** |
* Returns the index of the last real day in the month |
* @todo Potential performance optimization with static |
* @return int |
* @access protected |
*/ |
function getEmptyDaysAfter() |
{ |
// Causes bug when displaying more than one month |
// static $index; |
// if (!isset($index)) { |
$index = $this->getEmptyDaysBefore() + $this->cE->getDaysInMonth( |
$this->calendar->thisYear(), $this->calendar->thisMonth()); |
// } |
return $index; |
} |
/** |
* Returns the index of the last real day in the month, relative to the |
* beginning of the tabular week it is part of |
* @return int |
* @access protected |
*/ |
function getEmptyDaysAfterOffset() |
{ |
$eAfter = $this->getEmptyDaysAfter(); |
return $eAfter - ( |
$this->cE->getDaysInWeek( |
$this->calendar->thisYear(), |
$this->calendar->thisMonth(), |
$this->calendar->thisDay() |
) * ($this->numWeeks-1) ); |
} |
/** |
* Returns the timestamp of the first day of the current week |
*/ |
function getWeekStart($y, $m, $d, $firstDay=1) |
{ |
$dow = $this->cE->getDayOfWeek($y, $m, $d); |
if ($dow > $firstDay) { |
$d -= ($dow - $firstDay); |
} |
if ($dow < $firstDay) { |
$d -= ( |
$this->cE->getDaysInWeek( |
$this->calendar->thisYear(), |
$this->calendar->thisMonth(), |
$this->calendar->thisDay() |
) - $firstDay + $dow); |
} |
return $this->cE->dateToStamp($y, $m, $d); |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Calendar/docs/Readme |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/pear/Calendar/docs/Readme |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/1.php |
---|
New file |
0,0 → 1,92 |
<?php |
/** |
* Description: Passes through all main calendar classes, beginning with year |
* and down to seconds, skipping weeks. Useful to test Calendar is (basically) |
* working correctly |
* |
*/ |
function getmicrotime(){ |
list($usec, $sec) = explode(" ",microtime()); |
return ((float)$usec + (float)$sec); |
} |
if ( !@include 'Calendar/Calendar.php' ) { |
define('CALENDAR_ROOT','../../'); |
} |
if (!isset($_GET['y'])) $_GET['y'] = 2003; |
if (!isset($_GET['m'])) $_GET['m'] = 8; |
if (!isset($_GET['d'])) $_GET['d'] = 9; |
if (!isset($_GET['h'])) $_GET['h'] = 12; |
if (!isset($_GET['i'])) $_GET['i'] = 34; |
if (!isset($_GET['s'])) $_GET['s'] = 46; |
switch ( @$_GET['view'] ) { |
default: |
$_GET['view'] = 'calendar_year'; |
case 'calendar_year': |
require_once CALENDAR_ROOT.'Year.php'; |
$c = new Calendar_Year($_GET['y']); |
break; |
case 'calendar_month': |
require_once CALENDAR_ROOT.'Month.php'; |
$c = new Calendar_Month($_GET['y'],$_GET['m']); |
break; |
case 'calendar_day': |
require_once CALENDAR_ROOT.'Day.php'; |
$c = new Calendar_Day($_GET['y'],$_GET['m'],$_GET['d']); |
break; |
case 'calendar_hour': |
require_once CALENDAR_ROOT.'Hour.php'; |
$c = new Calendar_Hour($_GET['y'],$_GET['m'],$_GET['d'],$_GET['h']); |
break; |
case 'calendar_minute': |
require_once CALENDAR_ROOT.'Minute.php'; |
$c = new Calendar_Minute($_GET['y'],$_GET['m'],$_GET['d'],$_GET['h'],$_GET['i']); |
break; |
case 'calendar_second': |
require_once CALENDAR_ROOT.'Second.php'; |
$c = new Calendar_Second($_GET['y'],$_GET['m'],$_GET['d'],$_GET['h'],$_GET['i'],$_GET['s']); |
break; |
} |
echo ( 'Viewing: '.@$_GET['view'].'<br />' ); |
echo ( 'The time is now: '.date('Y M d H:i:s',$c->getTimestamp()).'<br >' ); |
$i = 1; |
echo ( '<h1>First Iteration</h1>' ); |
echo ( '<p>The first iteration is more "expensive", the calendar data |
structures having to be built.</p>' ); |
$start = getmicrotime(); |
$c->build(); |
while ( $e = $c->fetch() ) { |
$class = strtolower(get_class($e)); |
$link ="&y=".$e->thisYear()."&m=".$e->thisMonth()."&d=".$e->thisDay(). |
"&h=".$e->thisHour()."&i=".$e->thisMinute()."&s=".$e->thisSecond(); |
$method = 'this'.str_replace('calendar_','',$class); |
echo ( "<a href=\"".$_SERVER['PHP_SELF']."?view=".$class.$link."\">".$e->{$method}()."</a> : " ); |
if ( ($i % 10) == 0 ) { |
echo ( '<br>' ); |
} |
$i++; |
} |
echo ( '<p><b>Took: '.(getmicrotime()-$start).' seconds</b></p>' ); |
$i = 1; |
echo ( '<h1>Second Iteration</h1>' ); |
echo ( '<p>This second iteration is faster, the data structures |
being re-used</p>' ); |
$start = getmicrotime(); |
while ( $e = $c->fetch() ) { |
$class = strtolower(get_class($e)); |
$link ="&y=".$e->thisYear()."&m=".$e->thisMonth()."&d=".$e->thisDay(). |
"&h=".$e->thisHour()."&i=".$e->thisMinute()."&s=".$e->thisSecond(); |
$method = 'this'.str_replace('calendar_','',$class); |
echo ( "<a href=\"".$_SERVER['PHP_SELF']."?view=".$class.$link."\">".$e->{$method}()."</a> : " ); |
if ( ($i % 10) == 0 ) { |
echo ( '<br>' ); |
} |
$i++; |
} |
echo ( '<p><b>Took: '.(getmicrotime()-$start).' seconds</b></p>' ); |
?> |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/2.php |
---|
New file |
0,0 → 1,142 |
<?php |
/** |
* Description: Demonstrates building a calendar for a month using the Week class |
* Uses UnixTs engine |
*/ |
function getmicrotime(){ |
list($usec, $sec) = explode(" ",microtime()); |
return ((float)$usec + (float)$sec); |
} |
$start = getmicrotime(); |
// Force UnixTs engine (default setting) |
define('CALENDAR_ENGINE','UnixTs'); |
if (!@include 'Calendar'.DIRECTORY_SEPARATOR.'Calendar.php') { |
define('CALENDAR_ROOT', '../../'); |
} |
require_once CALENDAR_ROOT.'Month/Weeks.php'; |
require_once CALENDAR_ROOT.'Day.php'; |
// Initialize GET variables if not set |
if (!isset($_GET['y'])) $_GET['y'] = date('Y'); |
if (!isset($_GET['m'])) $_GET['m'] = date('m'); |
if (!isset($_GET['d'])) $_GET['d'] = date('d'); |
// Build a month object |
$Month = new Calendar_Month_Weeks($_GET['y'], $_GET['m']); |
// Create an array of days which are "selected" |
// Used for Week::build() below |
$selectedDays = array ( |
new Calendar_Day($_GET['y'],$_GET['m'], $_GET['d']), |
new Calendar_Day($_GET['y'], 12, 25), |
new Calendar_Day(date('Y'), date('m'), date('d')), |
); |
// Instruct month to build Week objects |
$Month->build(); |
// Construct strings for next/previous links |
$PMonth = $Month->prevMonth('object'); // Get previous month as object |
$prev = $_SERVER['PHP_SELF'].'?y='.$PMonth->thisYear().'&m='.$PMonth->thisMonth().'&d='.$PMonth->thisDay(); |
$NMonth = $Month->nextMonth('object'); |
$next = $_SERVER['PHP_SELF'].'?y='.$NMonth->thisYear().'&m='.$NMonth->thisMonth().'&d='.$NMonth->thisDay(); |
?> |
<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN"> |
<html> |
<head> |
<title> Calendar </title> |
<style text="text/css"> |
table { |
background-color: silver; |
} |
caption { |
font-family: verdana; |
font-size: 12px; |
background-color: while; |
} |
.prevMonth { |
font-size: 10px; |
text-align: left; |
} |
.nextMonth { |
font-size: 10px; |
text-align: right; |
} |
th { |
font-family: verdana; |
font-size: 11px; |
color: navy; |
text-align: right; |
} |
td { |
font-family: verdana; |
font-size: 11px; |
text-align: right; |
} |
.selected { |
background-color: yellow; |
} |
.empty { |
color: white; |
} |
</style> |
</head> |
<body> |
<h2>Build with Calendar_Month_Weeks::build() then Calendar_Week::build()</h2> |
<table class="calendar"> |
<caption> |
<?php echo date('F Y', $Month->getTimeStamp()); ?> |
</caption> |
<tr> |
<th>M</th> |
<th>T</th> |
<th>W</th> |
<th>T</th> |
<th>F</th> |
<th>S</th> |
<th>S</th> |
</tr> |
<?php |
while ($Week = $Month->fetch()) { |
echo "<tr>\n"; |
// Build the days in the week, passing the selected days |
$Week->build($selectedDays); |
while ($Day = $Week->fetch()) { |
// Build a link string for each day |
$link = $_SERVER['PHP_SELF']. |
'?y='.$Day->thisYear(). |
'&m='.$Day->thisMonth(). |
'&d='.$Day->thisDay(); |
// Check to see if day is selected |
if ($Day->isSelected()) { |
echo '<td class="selected">'.$Day->thisDay().'</td>'."\n"; |
// Check to see if day is empty |
} else if ($Day->isEmpty()) { |
echo '<td class="empty">'.$Day->thisDay().'</td>'."\n"; |
} else { |
echo '<td><a href="'.$link.'">'.$Day->thisDay().'</a></td>'."\n"; |
} |
} |
echo '</tr>'."\n"; |
} |
?> |
<tr> |
<td> |
<a href="<?php echo $prev; ?>" class="prevMonth"><< </a> |
</td> |
<td colspan="5"> </td> |
<td> |
<a href="<?php echo $next; ?>" class="nextMonth"> >></a> |
</td> |
</tr> |
</table> |
<?php |
echo '<p><b>Took: '.(getmicrotime()-$start).' seconds</b></p>'; |
?> |
</body> |
</html> |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/3.php |
---|
New file |
0,0 → 1,134 |
<?php |
/** |
* Description: Performs same behaviour as 2.php but uses Month::buildWeekDays() |
* and is faster |
*/ |
function getmicrotime(){ |
list($usec, $sec) = explode(" ",microtime()); |
return ((float)$usec + (float)$sec); |
} |
$start = getmicrotime(); |
if ( !@include 'Calendar/Calendar.php' ) { |
define('CALENDAR_ROOT','../../'); |
} |
require_once CALENDAR_ROOT.'Month/Weekdays.php'; |
require_once CALENDAR_ROOT.'Day.php'; |
if (!isset($_GET['y'])) $_GET['y'] = date('Y'); |
if (!isset($_GET['m'])) $_GET['m'] = date('m'); |
if (!isset($_GET['d'])) $_GET['d'] = date('d'); |
// Build the month |
$Month = new Calendar_Month_Weekdays($_GET['y'],$_GET['m']); |
// Construct strings for next/previous links |
$PMonth = $Month->prevMonth('object'); // Get previous month as object |
$prev = $_SERVER['PHP_SELF'].'?y='.$PMonth->thisYear().'&m='.$PMonth->thisMonth().'&d='.$PMonth->thisDay(); |
$NMonth = $Month->nextMonth('object'); |
$next = $_SERVER['PHP_SELF'].'?y='.$NMonth->thisYear().'&m='.$NMonth->thisMonth().'&d='.$NMonth->thisDay(); |
?> |
<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN"> |
<html> |
<head> |
<title> Calendar </title> |
<style text="text/css"> |
table { |
background-color: silver; |
} |
caption { |
font-family: verdana; |
font-size: 12px; |
background-color: while; |
} |
.prevMonth { |
font-size: 10px; |
text-align: left; |
} |
.nextMonth { |
font-size: 10px; |
text-align: right; |
} |
th { |
font-family: verdana; |
font-size: 11px; |
color: navy; |
text-align: right; |
} |
td { |
font-family: verdana; |
font-size: 11px; |
text-align: right; |
} |
.selected { |
background-color: yellow; |
} |
</style> |
</head> |
<body> |
<?php |
$selectedDays = array ( |
new Calendar_Day($_GET['y'],$_GET['m'],$_GET['d']), |
new Calendar_Day($_GET['y'],12,25), |
); |
// Build the days in the month |
$Month->build($selectedDays); |
?> |
<h2>Built with Calendar_Month_Weekday::build()</h2> |
<table class="calendar"> |
<caption> |
<?php echo ( date('F Y',$Month->getTimeStamp())); ?> |
</caption> |
<tr> |
<th>M</th> |
<th>T</th> |
<th>W</th> |
<th>T</th> |
<th>F</th> |
<th>S</th> |
<th>S</th> |
</tr> |
<?php |
while ( $Day = $Month->fetch() ) { |
// Build a link string for each day |
$link = $_SERVER['PHP_SELF']. |
'?y='.$Day->thisYear(). |
'&m='.$Day->thisMonth(). |
'&d='.$Day->thisDay(); |
// isFirst() to find start of week |
if ( $Day->isFirst() ) |
echo ( "<tr>\n" ); |
if ( $Day->isSelected() ) { |
echo ( "<td class=\"selected\">".$Day->thisDay()."</td>\n" ); |
} else if ( $Day->isEmpty() ) { |
echo ( "<td> </td>\n" ); |
} else { |
echo ( "<td><a href=\"".$link."\">".$Day->thisDay()."</a></td>\n" ); |
} |
// isLast() to find end of week |
if ( $Day->isLast() ) |
echo ( "</tr>\n" ); |
} |
?> |
<tr> |
<td> |
<a href="<?php echo ($prev);?>" class="prevMonth"><< </a> |
</td> |
<td colspan="5"> </td> |
<td> |
<a href="<?php echo ($next);?>" class="nextMonth"> >></a> |
</td> |
</tr> |
</table> |
<?php |
echo ( '<p><b>Took: '.(getmicrotime()-$start).' seconds</b></p>' ); |
?> |
</body> |
</html> |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/4.php |
---|
New file |
0,0 → 1,49 |
<?php |
/** |
* Description: shows how to perform validation with PEAR::Calendar |
*/ |
function getmicrotime(){ |
list($usec, $sec) = explode(' ', microtime()); |
return ((float)$usec + (float)$sec); |
} |
$start = getmicrotime(); |
if ( !@include 'Calendar/Calendar.php' ) { |
define('CALENDAR_ROOT', '../../'); |
} |
require_once CALENDAR_ROOT.'Second.php'; |
if (!isset($_GET['y'])) $_GET['y'] = date('Y'); |
if (!isset($_GET['m'])) $_GET['m'] = date('n'); |
if (!isset($_GET['d'])) $_GET['d'] = date('j'); |
if (!isset($_GET['h'])) $_GET['h'] = date('H'); |
if (!isset($_GET['i'])) $_GET['i'] = date('i'); |
if (!isset($_GET['s'])) $_GET['s'] = date('s'); |
$Unit = & new Calendar_Second($_GET['y'], $_GET['m'], $_GET['d'], $_GET['h'], $_GET['i'], $_GET['s']); |
echo '<p><b>Result:</b> '.$Unit->thisYear().'-'.$Unit->thisMonth().'-'.$Unit->thisDay(). |
' '.$Unit->thisHour().':'.$Unit->thisMinute().':'.$Unit->thisSecond(); |
if ($Unit->isValid()) { |
echo ' is valid!</p>'; |
} else { |
$V= & $Unit->getValidator(); |
echo ' is invalid:</p>'; |
while ($error = $V->fetch()) { |
echo $error->toString() .'<br />'; |
} |
} |
?> |
<p>Enter a date / time to validate:</p> |
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="get"> |
Year: <input type="text" name="y" value="2039"><br /> |
Month: <input type="text" name="m" value="13"><br /> |
Day: <input type="text" name="d" value="32"><br /> |
Hour: <input type="text" name="h" value="24"><br /> |
Minute: <input type="text" name="i" value="-1"><br /> |
Second: <input type="text" name="s" value="60"><br /> |
<input type="submit" value="Validate"> |
</form> |
<p><b>Note:</b> Error messages can be controlled with the constants <code>CALENDAR_VALUE_TOOSMALL</code> and <code>CALENDAR_VALUE_TOOLARGE</code> - see <code>Calendar_Validator.php</code></p> |
<?php echo '<p><b>Took: '.(getmicrotime()-$start).' seconds</b></p>'; ?> |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/5.php |
---|
New file |
0,0 → 1,132 |
<?php |
/** |
* Description: generating elements of a form with PEAR::Calendar, using |
* selections as well as validating the submission |
*/ |
function getmicrotime(){ |
list($usec, $sec) = explode(" ",microtime()); |
return ((float)$usec + (float)$sec); |
} |
$start = getmicrotime(); |
if ( !@include 'Calendar/Calendar.php' ) { |
define('CALENDAR_ROOT','../../'); |
} |
require_once CALENDAR_ROOT.'Year.php'; |
require_once CALENDAR_ROOT.'Month.php'; |
require_once CALENDAR_ROOT.'Day.php'; |
require_once CALENDAR_ROOT.'Hour.php'; |
require_once CALENDAR_ROOT.'Minute.php'; |
require_once CALENDAR_ROOT.'Second.php'; |
// Initialize if not set |
if (!isset($_POST['y'])) $_POST['y'] = date('Y'); |
if (!isset($_POST['m'])) $_POST['m'] = date('n'); |
if (!isset($_POST['d'])) $_POST['d'] = date('j'); |
if (!isset($_POST['h'])) $_POST['h'] = date('H'); |
if (!isset($_POST['i'])) $_POST['i'] = date('i'); |
if (!isset($_POST['s'])) $_POST['s'] = date('s'); |
?> |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> |
<html> |
<head> |
<title> Select and Update </title> |
</head> |
<body> |
<h1>Select and Update</h1> |
<?php |
if ( isset($_POST['update']) ) { |
$Second = & new Calendar_Second($_POST['y'],$_POST['m'],$_POST['d'],$_POST['h'],$_POST['i'],$_POST['s']); |
if ( !$Second->isValid() ) { |
$V= & $Second->getValidator(); |
echo ('<p>Validation failed:</p>' ); |
while ( $error = $V->fetch() ) { |
echo ( $error->toString() .'<br>' ); |
} |
} else { |
echo ('<p>Validation success.</p>' ); |
echo ( '<p>New timestamp is: '.$Second->getTimeStamp().' which could be used to update a database, for example'); |
} |
} else { |
$Year = new Calendar_Year($_POST['y']); |
$Month = new Calendar_Month($_POST['y'],$_POST['m']); |
$Day = new Calendar_Day($_POST['y'],$_POST['m'],$_POST['d']); |
$Hour = new Calendar_Hour($_POST['y'],$_POST['m'],$_POST['d'],$_POST['h']); |
$Minute = new Calendar_Minute($_POST['y'],$_POST['m'],$_POST['d'],$_POST['h'],$_POST['i']); |
$Second = new Calendar_Second($_POST['y'],$_POST['m'],$_POST['d'],$_POST['h'],$_POST['i'],$_POST['s']); |
?> |
<p><b>Set the alarm clock</p></p> |
<form action="<?php echo ( $_SERVER['PHP_SELF'] ); ?>" method="post"> |
Year: <input type="text" name="y" value="<?php echo ( $_POST['y'] ); ?>" size="4"> |
Month:<select name="m"> |
<?php |
$selection = array($Month); |
$Year->build($selection); |
while ( $Child = & $Year->fetch() ) { |
if ( $Child->isSelected() ) { |
echo ( "<option value=\"".$Child->thisMonth()."\" selected>".$Child->thisMonth()."\n" ); |
} else { |
echo ( "<option value=\"".$Child->thisMonth()."\">".$Child->thisMonth()."\n" ); |
} |
} |
?> |
</select> |
Day:<select name="d"> |
<?php |
$selection = array($Day); |
$Month->build($selection); |
while ( $Child = & $Month->fetch() ) { |
if ( $Child->isSelected() ) { |
echo ( "<option value=\"".$Child->thisDay()."\" selected>".$Child->thisDay()."\n" ); |
} else { |
echo ( "<option value=\"".$Child->thisDay()."\">".$Child->thisDay()."\n" ); |
} |
} |
?> |
</select> |
Hour:<select name="h"> |
<?php |
$selection = array($Hour); |
$Day->build($selection); |
while ( $Child = & $Day->fetch() ) { |
if ( $Child->isSelected() ) { |
echo ( "<option value=\"".$Child->thisHour()."\" selected>".$Child->thisHour()."\n" ); |
} else { |
echo ( "<option value=\"".$Child->thisHour()."\">".$Child->thisHour()."\n" ); |
} |
} |
?> |
</select> |
Minute:<select name="i"> |
<?php |
$selection = array($Minute); |
$Hour->build($selection); |
while ( $Child = & $Hour->fetch() ) { |
if ( $Child->isSelected() ) { |
echo ( "<option value=\"".$Child->thisMinute()."\" selected>".$Child->thisMinute()."\n" ); |
} else { |
echo ( "<option value=\"".$Child->thisMinute()."\">".$Child->thisMinute()."\n" ); |
} |
} |
?> |
</select> |
Second:<select name="s"> |
<?php |
$selection = array($Second); |
$Minute->build($selection); |
while ( $Child = & $Minute->fetch() ) { |
if ( $Child->isSelected() ) { |
echo ( "<option value=\"".$Child->thisSecond()."\" selected>".$Child->thisSecond()."\n" ); |
} else { |
echo ( "<option value=\"".$Child->thisSecond()."\">".$Child->thisSecond()."\n" ); |
} |
} |
?> |
</select> |
<input type="submit" name="update" value="Set Alarm"><br> |
<?php |
} |
?> |
<?php echo ( '<p><b>Took: '.(getmicrotime()-$start).' seconds</b></p>' ); ?> |
</body> |
</html> |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/11.phps |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/11.phps |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/6.php |
---|
New file |
0,0 → 1,210 |
<?php |
/** |
* Description: A "personal planner" with some WML for fun |
* Note this is done the stupid way - a giant if/else for WML or HTML |
* could be greatly simplified with some HTML/WML rendering classes... |
*/ |
function getmicrotime(){ |
list($usec, $sec) = explode(" ",microtime()); |
return ((float)$usec + (float)$sec); |
} |
$start = getmicrotime(); |
if ( !@include 'Calendar/Calendar.php' ) { |
define('CALENDAR_ROOT','../../'); |
} |
require_once CALENDAR_ROOT.'Month/Weekdays.php'; |
require_once CALENDAR_ROOT.'Day.php'; |
if (!isset($_GET['y'])) $_GET['y'] = date('Y'); |
if (!isset($_GET['m'])) $_GET['m'] = date('n'); |
if (!isset($_GET['d'])) $_GET['d'] = date('j'); |
$Month = & new Calendar_Month_Weekdays($_GET['y'],$_GET['m']); |
$Day = & new Calendar_Day($_GET['y'],$_GET['m'],$_GET['d']); |
$selection = array($Day); |
#-----------------------------------------------------------------------------# |
if ( isset($_GET['mime']) && $_GET['mime']=='wml' ) { |
header ('Content-Type: text/vnd.wap.wml'); |
echo ( '<?xml version="1.0"?>' ); |
?> |
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"> |
<wml> |
<big><strong>Personal Planner Rendered with WML</strong></big> |
<?php |
if ( isset($_GET['viewday']) ) { |
?> |
<p><strong>Viewing <?php echo ( date('l, jS of F, Y',$Day->getTimeStamp()) ); ?></strong></p> |
<p> |
<anchor> |
Back to Month View |
<go href="<?php |
echo ( "?y=".$Day->thisYear()."&m=". |
$Day->thisMonth()."&d=".$Day->thisDay()."&mime=wml" ); |
?>"/> |
</anchor> |
</p> |
<table> |
<?php |
$Day->build(); |
while ( $Hour = & $Day->fetch() ) { |
echo ( "<tr>\n" ); |
echo ( "<td>".date('g a',$Hour->getTimeStamp())."</td><td>Free time!</td>\n" ); |
echo ( "</tr>\n" ); |
} |
?> |
</table> |
<?php |
} else { |
?> |
<p><strong><?php echo ( date('F Y',$Month->getTimeStamp()) ); ?></strong></p> |
<table> |
<tr> |
<td>M</td><td>T</td><td>W</td><td>T</td><td>F</td><td>S</td><td>S</td> |
</tr> |
<?php |
$Month->build($selection); |
while ( $Day = $Month->fetch() ) { |
if ( $Day->isFirst() ) { |
echo ( "<tr>\n" ); |
} |
if ( $Day->isEmpty() ) { |
echo ( "<td></td>\n" ); |
} else if ( $Day->isSelected() ) { |
echo ( "<td><anchor><strong><u>".$Day->thisDay()."</u></strong>\n<go href=\"".$_SERVER['PHP_SELF']."?viewday=true&y=". |
$Day->thisYear()."&m=".$Day->thisMonth()."&d=".$Day->thisDay(). |
"&mime=wml\" />\n</anchor></td>\n" ); |
} else { |
echo ( "<td><anchor>".$Day->thisDay()."\n<go href=\"?viewday=true&y=". |
$Day->thisYear()."&m=".$Day->thisMonth()."&d=".$Day->thisDay(). |
"&mime=wml\" /></anchor></td>\n" ); |
} |
if ( $Day->isLast() ) { |
echo ( "</tr>\n" ); |
} |
} |
?> |
<tr> |
<td> |
<anchor> |
<< |
<go href="<?php |
echo ( "?y=".$Month->thisYear()."&m=". |
$Month->prevMonth()."&d=".$Month->thisDay()."&mime=wml" ); |
?>"/> |
</anchor> |
</td> |
<td></td><td></td><td></td><td></td><td></td> |
<td> |
<anchor> |
>> |
<go href="<?php |
echo ( "?y=".$Month->thisYear()."&m=". |
$Month->nextMonth()."&d=".$Month->thisDay()."&mime=wml" ); |
?>"/> |
</anchor> |
</td> |
</tr> |
</table> |
<?php |
} |
?> |
<p><a href="<?php echo ( $_SERVER['PHP_SELF'] ); ?>">Back to HTML</a></p> |
<?php echo ( '<p>Took: '.(getmicrotime()-$start).' seconds</p>' ); ?> |
</wml> |
<?php |
#-----------------------------------------------------------------------------# |
} else { |
?> |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> |
<html> |
<head> |
<title> HTML (+WML) Personal Planner </title> |
</head> |
<body> |
<h1>Personal Planner Rendered with HTML</h1> |
<p>To view in WML, click <a href="<?php echo ( $_SERVER['PHP_SELF'] ); ?>?mime=wml">here</a> or place a ?mime=wml at the end of any URL. |
Note that <a href="http://www.opera.com/download">Opera</a> supports WML natively and Mozilla / Firefox has the WMLBrowser |
plugin: <a href="http://wmlbrowser.mozdev.org">wmlbrowser.mozdev.org</a></p> |
<?php |
if ( isset($_GET['viewday']) ) { |
?> |
<p><strong>Viewing <?php echo ( date('l, jS of F, Y',$Day->getTimeStamp()) ); ?></strong></p> |
<p> |
<anchor> |
<a href="<?php |
echo ( "?y=".$Day->thisYear()."&m=". |
$Day->thisMonth()."&d=".$Day->thisDay()); |
?>">Back to Month View</a> |
</p> |
<table> |
<?php |
$Day->build(); |
while ( $Hour = & $Day->fetch() ) { |
echo ( "<tr>\n" ); |
echo ( "<td>".date('g a',$Hour->getTimeStamp())."</td><td>Free time!</td>\n" ); |
echo ( "</tr>\n" ); |
} |
?> |
</table> |
<?php |
} else { |
?> |
<p><strong><?php echo ( date('F Y',$Month->getTimeStamp()) ); ?></strong></p> |
<table> |
<tr> |
<td>M</td><td>T</td><td>W</td><td>T</td><td>F</td><td>S</td><td>S</td> |
</tr> |
<?php |
$Month->build($selection); |
while ( $Day = $Month->fetch() ) { |
if ( $Day->isFirst() ) { |
echo ( "<tr>\n" ); |
} |
if ( $Day->isEmpty() ) { |
echo ( "<td></td>\n" ); |
} else if ( $Day->isSelected() ) { |
echo ( "<td><a href=\"".$_SERVER['PHP_SELF']."?viewday=true&y=". |
$Day->thisYear()."&m=".$Day->thisMonth()."&d=".$Day->thisDay(). |
"&wml\"><strong><u>".$Day->thisDay()."</u></strong></a></td>\n" ); |
} else { |
echo ( "<td><a href=\"".$_SERVER['PHP_SELF']."?viewday=true&y=". |
$Day->thisYear()."&m=".$Day->thisMonth()."&d=".$Day->thisDay(). |
"\">".$Day->thisDay()."</a></td>\n" ); |
} |
if ( $Day->isLast() ) { |
echo ( "</tr>\n" ); |
} |
} |
?> |
<tr> |
<td> |
<a href="<?php |
echo ( "?y=".$Month->thisYear()."&m=". |
$Month->prevMonth()."&d=".$Month->thisDay() ); |
?>"> |
<<</a> |
</td> |
<td></td><td></td><td></td><td></td><td></td> |
<td> |
<a href="<?php |
echo ( "?y=".$Month->thisYear()."&m=". |
$Month->nextMonth()."&d=".$Month->thisDay() ); |
?>">>></a> |
</td> |
</tr> |
</table> |
<?php |
} |
?> |
<?php echo ( '<p><b>Took: '.(getmicrotime()-$start).' seconds</b></p>' ); ?> |
</body> |
</html> |
<?php |
} |
?> |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/21.phps |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/21.phps |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/7.php |
---|
New file |
0,0 → 1,92 |
<?php |
/** |
* Description: a SOAP Calendar Server |
*/ |
if (!@include('SOAP'.DIRECTORY_SEPARATOR.'Server.php')) { |
die('You must have PEAR::SOAP installed'); |
} |
if (!@include 'Calendar'.DIRECTORY_SEPARATOR.'Calendar.php') { |
define('CALENDAR_ROOT', '../../'); |
} |
class Calendar_Server |
{ |
var $__dispatch_map = array(); |
var $__typedef = array(); |
function Calendar_Server() |
{ |
$this->__dispatch_map['getMonth'] = |
array('in' => array('year' => 'int', 'month'=>'int'), |
'out' => array('month' => '{urn:PEAR_SOAP_Calendar}Month'), |
); |
$this->__typedef['Month'] = array ( |
'monthname' => 'string', |
'days' => '{urn:PEAR_SOAP_Calendar}MonthDays' |
); |
$this->__typedef['MonthDays'] = array (array ('{urn:PEAR_SOAP_Calendar}Day')); |
$this->__typedef['Day'] = array ( |
'isFirst' => 'int', |
'isLast' => 'int', |
'isEmpty' => 'int', |
'day' => 'int' ); |
} |
function __dispatch($methodname) |
{ |
if (isset($this->__dispatch_map[$methodname])) |
return $this->__dispatch_map[$methodname]; |
return NULL; |
} |
function getMonth($year, $month) |
{ |
require_once(CALENDAR_ROOT.'Month'.DIRECTORY_SEPARATOR.'Weekdays.php'); |
$Month = & new Calendar_Month_Weekdays($year,$month); |
if (!$Month->isValid()) { |
$V = & $Month->getValidator(); |
$errorMsg = ''; |
while ($error = $V->fetch()) { |
$errorMsg .= $error->toString()."\n"; |
} |
return new SOAP_Fault($errorMsg, 'Client'); |
} else { |
$monthname = date('F Y', $Month->getTimeStamp()); |
$days = array(); |
$Month->build(); |
while ($Day = & $Month->fetch()) { |
$day = array( |
'isFirst' => (int)$Day->isFirst(), |
'isLast' => (int)$Day->isLast(), |
'isEmpty' => (int)$Day->isEmpty(), |
'day' => (int)$Day->thisDay(), |
); |
$days[] = $day; |
} |
return array('monthname' => $monthname, 'days' => $days); |
} |
} |
} |
$server = new SOAP_Server(); |
$server->_auto_translation = true; |
$calendar = new Calendar_Server(); |
$server->addObjectMap($calendar, 'urn:PEAR_SOAP_Calendar'); |
if (strtoupper($_SERVER['REQUEST_METHOD'])=='POST') { |
$server->service($GLOBALS['HTTP_RAW_POST_DATA']); |
} else { |
require_once 'SOAP'.DIRECTORY_SEPARATOR.'Disco.php'; |
$disco = new SOAP_DISCO_Server($server, "PEAR_SOAP_Calendar"); |
if (isset($_SERVER['QUERY_STRING']) && |
strcasecmp($_SERVER['QUERY_STRING'], 'wsdl')==0) { |
header("Content-type: text/xml"); |
echo $disco->getWSDL(); |
} else { |
echo 'This is a PEAR::SOAP Calendar Server. For client try <a href="8.php">here</a><br />'; |
echo 'For WSDL try <a href="?wsdl">here</a>'; |
} |
exit; |
} |
?> |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/13.phps |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/13.phps |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/8.php |
---|
New file |
0,0 → 1,70 |
<?php |
/** |
* Description: client for the SOAP Calendar Server |
*/ |
if ( version_compare(phpversion(), "5.0.0", ">") ) { |
die('PHP 5 has problems with PEAR::SOAP Client (8.0RC3) |
- remove @ before include below to see why'); |
} |
if (!@include('SOAP'.DIRECTORY_SEPARATOR.'Client.php')) { |
die('You must have PEAR::SOAP installed'); |
} |
// Just to save manaul modification... |
$basePath = explode('/', $_SERVER['SCRIPT_NAME']); |
array_pop($basePath); |
$basePath = implode('/', $basePath); |
$url = 'http://'.$_SERVER['SERVER_NAME'].$basePath.'/7.php?wsdl'; |
if (!isset($_GET['y'])) $_GET['y'] = date('Y'); |
if (!isset($_GET['m'])) $_GET['m'] = date('n'); |
$wsdl = new SOAP_WSDL ($url); |
echo ( '<pre>'.$wsdl->generateProxyCode().'</pre>' ); |
$calendarClient = $wsdl->getProxy(); |
$month = $calendarClient->getMonth((int)$_GET['y'],(int)$_GET['m']); |
if ( PEAR::isError($month) ) { |
die ( $month->toString() ); |
} |
?> |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> |
<html> |
<head> |
<title> Calendar over the Wire </title> |
</head> |
<body> |
<h1>Calendar Over the Wire (featuring PEAR::SOAP)</h1> |
<table> |
<caption><b><?php echo ( $month->monthname );?></b></caption> |
<tr> |
<th>M</th><th>T</th><th>W</th><th>T</th><th>F</th><th>S</th><th>S</th> |
</tr> |
<?php |
foreach ( $month->days as $day ) { |
if ( $day->isFirst === 1 ) |
echo ( "<tr>\n" ); |
if ( $day->isEmpty === 1 ) { |
echo ( "<td></td>" ); |
} else { |
echo ( "<td>".$day->day."</td>" ); |
} |
if ( $day->isLast === 1 ) |
echo ( "</tr>\n" ); |
} |
?> |
<tr> |
</table> |
<p>Enter Year and Month to View:</p> |
<form action="<?php echo ( $_SERVER['PHP_SELF'] ); ?>" method="get"> |
Year: <input type="text" size="4" name="y" value="<?php echo ( $_GET['y'] ); ?>"> |
Month: <input type="text" size="2" name="m" value="<?php echo ( $_GET['m'] ); ?>"> |
<input type="submit" value="Fetch Calendar"> |
</form> |
</body> |
</html> |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/23.phps |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/23.phps |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/9.php |
---|
New file |
0,0 → 1,16 |
<?php |
/** |
* Description: simple example on i18N |
*/ |
if ( !@include 'Calendar/Calendar.php' ) { |
define('CALENDAR_ROOT','../../'); |
} |
require_once CALENDAR_ROOT.'Day.php'; |
$Day = & new Calendar_Day(2003,10,23); |
setlocale (LC_TIME, "de_DE"); // Unix based (probably) |
// setlocale (LC_TIME, "ge"); // Windows |
echo ( strftime('%A %d %B %Y',$Day->getTimeStamp())); |
?> |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/15.phps |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/15.phps |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/17.phps |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/17.phps |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/19.phps |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/19.phps |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/10.php |
---|
New file |
0,0 → 1,93 |
<?php |
/** |
* Description: demonstrates a decorator to provide simple output formatting |
* on the month while still allowing the days to be accessed via the decorator |
* In practice you _wouldn't_ do this - each decorator comes with a performance |
* hit for extra method calls. For this example some simple functions could help |
* format the month while the days are accessed via the normal Month object |
*/ |
if ( !@include 'Calendar/Calendar.php' ) { |
define('CALENDAR_ROOT','../../'); |
} |
require_once CALENDAR_ROOT.'Month/Weekdays.php'; |
require_once CALENDAR_ROOT.'Decorator.php'; |
// Decorate a Month with methods to improve formatting |
class MonthDecorator extends Calendar_Decorator { |
/** |
* @param Calendar_Month |
*/ |
function MonthDecorator(& $Month) { |
parent::Calendar_Decorator($Month); |
} |
/** |
* Override the prevMonth method to format the output |
*/ |
function prevMonth() { |
$prevStamp = parent::prevMonth(TRUE); |
// Build the URL for the previous month |
return $_SERVER['PHP_SELF'].'?y='.date('Y',$prevStamp). |
'&m='.date('n',$prevStamp).'&d='.date('j',$prevStamp); |
} |
/** |
* Override the thisMonth method to format the output |
*/ |
function thisMonth() { |
$thisStamp = parent::thisMonth(TRUE); |
// A human readable string from this month |
return date('F Y',$thisStamp); |
} |
/** |
* Override the nextMonth method to format the output |
*/ |
function nextMonth() { |
$nextStamp = parent::nextMonth(TRUE); |
// Build the URL for next month |
return $_SERVER['PHP_SELF'].'?y='.date('Y',$nextStamp). |
'&m='.date('n',$nextStamp).'&d='.date('j',$nextStamp); |
} |
} |
if (!isset($_GET['y'])) $_GET['y'] = date('Y'); |
if (!isset($_GET['m'])) $_GET['m'] = date('n'); |
// Creata a month as usual |
$Month = new Calendar_Month_Weekdays($_GET['y'],$_GET['m']); |
// Pass it to the decorator and use the decorator from now on... |
$MonthDecorator = new MonthDecorator($Month); |
$MonthDecorator->build(); |
?> |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> |
<html> |
<head> |
<title> A Simple Decorator </title> |
</head> |
<body> |
<h1>A Simple Decorator</h1> |
<table> |
<caption><?php echo ( $MonthDecorator->thisMonth() ); ?></caption> |
<?php |
while ( $Day = $MonthDecorator->fetch() ) { |
if ( $Day->isFirst() ) { |
echo ( "\n<tr>\n" ); |
} |
if ( $Day->isEmpty() ) { |
echo ( "<td> </td>" ); |
} else { |
echo ( "<td>".$Day->thisDay()."</td>" ); |
} |
if ( $Day->isLast() ) { |
echo ( "\n</tr>\n" ); |
} |
} |
?> |
<tr> |
<td><a href="<?php echo ($MonthDecorator->prevMonth()); ?>">Prev</a></td> |
<td colspan="5"> </td> |
<td><a href="<?php echo ($MonthDecorator->nextMonth()); ?>">Next</a></td> |
</tr> |
</table> |
</body> |
</html> |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/11.php |
---|
New file |
0,0 → 1,109 |
<?php |
/** |
* Description: demonstrates a decorator used to "attach a payload" to a selection |
* to make it available when iterating over calendar children |
*/ |
if ( !@include 'Calendar/Calendar.php' ) { |
define('CALENDAR_ROOT','../../'); |
} |
require_once CALENDAR_ROOT.'Day.php'; |
require_once CALENDAR_ROOT.'Hour.php'; |
require_once CALENDAR_ROOT.'Decorator.php'; |
// Decorator to "attach" functionality to selected hours |
class DiaryEvent extends Calendar_Decorator { |
var $entry; |
function DiaryEvent($calendar) { |
Calendar_Decorator::Calendar_Decorator($calendar); |
} |
function setEntry($entry) { |
$this->entry = $entry; |
} |
function getEntry() { |
return $this->entry; |
} |
} |
// Create a day to view the hours for |
$Day = & new Calendar_Day(2003,10,24); |
// A sample query to get the data for today (NOT ACTUALLY USED HERE) |
$sql = " |
SELECT |
* |
FROM |
diary |
WHERE |
eventtime >= '".$Day->thisDay(TRUE)."' |
AND |
eventtime < '".$Day->nextDay(TRUE)."';"; |
// An array simulating data from a database |
$result = array ( |
array('eventtime'=>mktime(9,0,0,10,24,2003),'entry'=>'Meeting with sales team'), |
array('eventtime'=>mktime(11,0,0,10,24,2003),'entry'=>'Conference call with Widget Inc.'), |
array('eventtime'=>mktime(15,0,0,10,24,2003),'entry'=>'Presentation to board of directors') |
); |
// An array to place selected hours in |
$selection = array(); |
// Loop through the "database result" |
foreach ( $result as $row ) { |
$Hour = new Calendar_Hour(2000,1,1,1); // Create Hour with dummy values |
$Hour->setTimeStamp($row['eventtime']); // Set the real time with setTimeStamp |
// Create the decorator, passing it the Hour |
$DiaryEvent = new DiaryEvent($Hour); |
// Attach the payload |
$DiaryEvent->setEntry($row['entry']); |
// Add the decorator to the selection |
$selection[] = $DiaryEvent; |
} |
// Build the hours in that day, passing the selection |
$Day->build($selection); |
?> |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> |
<html> |
<head> |
<title> Passing a Selection Payload with a Decorator </title> |
</head> |
<body> |
<h1>Passing a Selection "Payload" using a Decorator</h1> |
<table> |
<caption><b>Your Schedule for <?php echo ( date('D nS F Y',$Day->thisDay(TRUE)) ); ?></b></caption> |
<tr> |
<th width="5%">Time</th> |
<th>Entry</th> |
</tr> |
<?php |
while ( $Hour = & $Day->fetch() ) { |
$hour = $Hour->thisHour(); |
$minute = $Hour->thisMinute(); |
// Office hours only... |
if ( $hour >= 8 && $hour <= 18 ) { |
echo ( "<tr>\n" ); |
echo ( "<td>$hour:$minute</td>\n" ); |
// If the hour is selected, call the decorator method... |
if ( $Hour->isSelected() ) { |
echo ( "<td bgcolor=\"silver\">".$Hour->getEntry()."</td>\n" ); |
} else { |
echo ( "<td> </td>\n" ); |
} |
echo ( "</tr>\n" ); |
} |
} |
?> |
</table> |
<p>The query to fetch this data, with help from PEAR::Calendar, might be;</p> |
<pre> |
<?php echo ( $sql ); ?> |
</pre> |
</body> |
</html> |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/12.php |
---|
New file |
0,0 → 1,116 |
<?php |
/** |
* Description: a complete year |
*/ |
function getmicrotime(){ |
list($usec, $sec) = explode(" ",microtime()); |
return ((float)$usec + (float)$sec); |
} |
$start = getmicrotime(); |
if ( !@include 'Calendar/Calendar.php' ) { |
define('CALENDAR_ROOT','../../'); |
} |
require_once CALENDAR_ROOT.'Year.php'; |
define ('CALENDAR_MONTH_STATE',CALENDAR_USE_MONTH_WEEKDAYS); |
if ( !isset($_GET['year']) ) $_GET['year'] = date('Y'); |
$Year = new Calendar_Year($_GET['year']); |
$Year->build(); |
?> |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> |
<html> |
<head> |
<title> <?php echo ( $Year->thisYear() ); ?> </title> |
<style type="text/css"> |
body { |
font-family: Georgia, serif; |
} |
caption.year { |
font-weight: bold; |
font-size: 120%; |
font-color: navy; |
} |
caption.month { |
font-size: 110%; |
font-color: navy; |
} |
table.month { |
border: thin groove #800080 |
} |
tr { |
vertical-align: top; |
} |
th, td { |
text-align: right; |
font-size: 70%; |
} |
#prev { |
float: left; |
font-size: 70%; |
} |
#next { |
float: right; |
font-size: 70%; |
} |
</style> |
</head> |
<body> |
<table> |
<caption class="year"> |
<?php echo ( $Year->thisYear() ); ?> |
<div id="next"> |
<a href="?year=<?php echo ( $Year->nextYear() ); ?>">>></a> |
</div> |
<div id="prev"> |
<a href="?year=<?php echo ( $Year->prevYear() ); ?>"><<</a> |
</div> |
</caption> |
<?php |
$i = 0; |
while ( $Month = $Year->fetch() ) { |
switch ( $i ) { |
case 0: |
echo ( "<tr>\n" ); |
break; |
case 3: |
case 6: |
case 9: |
echo ( "</tr>\n<tr>\n" ); |
break; |
case 12: |
echo ( "</tr>\n" ); |
break; |
} |
echo ( "<td>\n<table class=\"month\">\n" ); |
echo ( "<caption class=\"month\">".date('F',$Month->thisMonth(TRUE))."</caption>" ); |
echo ( "<tr>\n<th>M</th><th>T</th><th>W</th><th>T</th><th>F</th><th>S</th><th>S</th>\n</tr>" ); |
$Month->build(); |
while ( $Day = $Month->fetch() ) { |
if ( $Day->isFirst() ) { |
echo ( "<tr>\n" ); |
} |
if ( $Day->isEmpty() ) { |
echo ( "<td> </td>\n" ); |
} else { |
echo ( "<td>".$Day->thisDay()."</td>\n" ); |
} |
if ( $Day->isLast() ) { |
echo ( "</tr>\n" ); |
} |
} |
echo ( "</table>\n</td>\n" ); |
$i++; |
} |
?> |
</table> |
<p>Took: <?php echo ((getmicrotime()-$start)); ?></p> |
</body> |
</html> |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/1.phps |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/1.phps |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/13.php |
---|
New file |
0,0 → 1,99 |
<?php |
/** |
* Description: same as 1.php, but using the PEAR::Date engine |
* Notice the use of the CALENDAR_ENGINE constant, which |
* switches the calculation "engine" |
* Note: make sure PEAR::Date is a stable release!!! |
*/ |
function getmicrotime(){ |
list($usec, $sec) = explode(" ",microtime()); |
return ((float)$usec + (float)$sec); |
} |
// Switch to PEAR::Date engine |
define('CALENDAR_ENGINE','PearDate'); |
if ( !@include 'Calendar/Calendar.php' ) { |
define('CALENDAR_ROOT','../../'); |
} |
if (!isset($_GET['y'])) $_GET['y'] = 2003; |
if (!isset($_GET['m'])) $_GET['m'] = 8; |
if (!isset($_GET['d'])) $_GET['d'] = 9; |
if (!isset($_GET['h'])) $_GET['h'] = 12; |
if (!isset($_GET['i'])) $_GET['i'] = 34; |
if (!isset($_GET['s'])) $_GET['s'] = 46; |
switch ( @$_GET['view'] ) { |
default: |
$_GET['view'] = 'calendar_year'; |
case 'calendar_year': |
require_once CALENDAR_ROOT.'Year.php'; |
$c = new Calendar_Year($_GET['y']); |
break; |
case 'calendar_month': |
require_once CALENDAR_ROOT.'Month.php'; |
$c = new Calendar_Month($_GET['y'],$_GET['m']); |
break; |
case 'calendar_day': |
require_once CALENDAR_ROOT.'Day.php'; |
$c = new Calendar_Day($_GET['y'],$_GET['m'],$_GET['d']); |
break; |
case 'calendar_hour': |
require_once CALENDAR_ROOT.'Hour.php'; |
$c = new Calendar_Hour($_GET['y'],$_GET['m'],$_GET['d'],$_GET['h']); |
break; |
case 'calendar_minute': |
require_once CALENDAR_ROOT.'Minute.php'; |
$c = new Calendar_Minute($_GET['y'],$_GET['m'],$_GET['d'],$_GET['h'],$_GET['i']); |
break; |
case 'calendar_second': |
require_once CALENDAR_ROOT.'Second.php'; |
$c = new Calendar_Second($_GET['y'],$_GET['m'],$_GET['d'],$_GET['h'],$_GET['i'],$_GET['s']); |
break; |
} |
// Convert timestamp to human readable date |
$date = new Date($c->getTimestamp()); |
echo ( '<h1>Using PEAR::Date engine</h1>' ); |
echo ( 'Viewing: '.@$_GET['view'].'<br />' ); |
echo ( 'The time is now: '.$date->format('%Y %a %e %T').'<br >' ); |
$i = 1; |
echo ( '<h1>First Iteration</h1>' ); |
echo ( '<p>The first iteration is more "expensive", the calendar data |
structures having to be built.</p>' ); |
$start = getmicrotime(); |
$c->build(); |
while ( $e = $c->fetch() ) { |
$class = strtolower(get_class($e)); |
$link ="&y=".$e->thisYear()."&m=".$e->thisMonth()."&d=".$e->thisDay(). |
"&h=".$e->thisHour()."&i=".$e->thisMinute()."&s=".$e->thisSecond(); |
$method = 'this'.str_replace('calendar_','',$class); |
echo ( "<a href=\"".$_SERVER['PHP_SELF']."?view=".$class.$link."\">".$e->{$method}()."</a> : " ); |
if ( ($i % 10) == 0 ) { |
echo ( '<br>' ); |
} |
$i++; |
} |
echo ( '<p><b>Took: '.(getmicrotime()-$start).' seconds</b></p>' ); |
$i = 1; |
echo ( '<h1>Second Iteration</h1>' ); |
echo ( '<p>This second iteration is faster, the data structures |
being re-used</p>' ); |
$start = getmicrotime(); |
while ( $e = $c->fetch() ) { |
$class = strtolower(get_class($e)); |
$link ="&y=".$e->thisYear()."&m=".$e->thisMonth()."&d=".$e->thisDay(). |
"&h=".$e->thisHour()."&i=".$e->thisMinute()."&s=".$e->thisSecond(); |
$method = 'this'.str_replace('calendar_','',$class); |
echo ( "<a href=\"".$_SERVER['PHP_SELF']."?view=".$class.$link."\">".$e->{$method}()."</a> : " ); |
if ( ($i % 10) == 0 ) { |
echo ( '<br>' ); |
} |
$i++; |
} |
echo ( '<p><b>Took: '.(getmicrotime()-$start).' seconds</b></p>' ); |
?> |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/14.php |
---|
New file |
0,0 → 1,141 |
<?php |
/** |
* Description: same as 3.php, but using the PEAR::Date engine |
* Note: make sure PEAR::Date is a stable release!!! |
*/ |
function getmicrotime(){ |
list($usec, $sec) = explode(" ",microtime()); |
return ((float)$usec + (float)$sec); |
} |
$start = getmicrotime(); |
// Switch to PEAR::Date engine |
define('CALENDAR_ENGINE', 'PearDate'); |
if (!@include 'Calendar'.DIRECTORY_SEPARATOR.'Calendar.php') { |
define('CALENDAR_ROOT','../../'); |
} |
require_once CALENDAR_ROOT.'Month/Weekdays.php'; |
require_once CALENDAR_ROOT.'Day.php'; |
// Initialize GET variables if not set |
if (!isset($_GET['y'])) $_GET['y'] = date('Y'); |
if (!isset($_GET['m'])) $_GET['m'] = date('m'); |
if (!isset($_GET['d'])) $_GET['d'] = date('d'); |
// Build the month |
$month = new Calendar_Month_Weekdays($_GET['y'], $_GET['m']); |
// Create an array of days which are "selected" |
// Used for Week::build() below |
$selectedDays = array ( |
new Calendar_Day($_GET['y'], $_GET['m'], $_GET['d']), |
new Calendar_Day($_GET['y'], 12, 25), |
); |
// Build the days in the month |
$month->build($selectedDays); |
// Construct strings for next/previous links |
$PMonth = $month->prevMonth('object'); // Get previous month as object |
$prev = $_SERVER['PHP_SELF'].'?y='.$PMonth->thisYear().'&m='.$PMonth->thisMonth().'&d='.$PMonth->thisDay(); |
$NMonth = $month->nextMonth('object'); |
$next = $_SERVER['PHP_SELF'].'?y='.$NMonth->thisYear().'&m='.$NMonth->thisMonth().'&d='.$NMonth->thisDay(); |
$thisDate = new Date($month->thisMonth('timestamp')); |
?> |
<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN"> |
<html> |
<head> |
<title> Calendar using PEAR::Date Engine </title> |
<style text="text/css"> |
table { |
background-color: silver; |
} |
caption { |
font-family: verdana; |
font-size: 12px; |
background-color: while; |
} |
.prevMonth { |
font-size: 10px; |
text-align: left; |
} |
.nextMonth { |
font-size: 10px; |
text-align: right; |
} |
th { |
font-family: verdana; |
font-size: 11px; |
color: navy; |
text-align: right; |
} |
td { |
font-family: verdana; |
font-size: 11px; |
text-align: right; |
} |
.selected { |
background-color: yellow; |
} |
</style> |
</head> |
<body> |
<h2>Calendar using PEAR::Date Engine</h2> |
<table class="calendar"> |
<caption> |
<?php echo $thisDate->format('%B %Y'); ?> |
</caption> |
<tr> |
<th>M</th> |
<th>T</th> |
<th>W</th> |
<th>T</th> |
<th>F</th> |
<th>S</th> |
<th>S</th> |
</tr> |
<?php |
while ($day = $month->fetch()) { |
// Build a link string for each day |
$link = $_SERVER['PHP_SELF']. |
'?y='.$day->thisYear(). |
'&m='.$day->thisMonth(). |
'&d='.$day->thisDay(); |
// isFirst() to find start of week |
if ($day->isFirst()) |
echo "<tr>\n"; |
if ($day->isSelected()) { |
echo '<td class="selected">'.$day->thisDay().'</td>'."\n"; |
} else if ($day->isEmpty()) { |
echo '<td> </td>'."\n"; |
} else { |
echo '<td><a href="'.$link.'">'.$day->thisDay().'</a></td>'."\n"; |
} |
// isLast() to find end of week |
if ($day->isLast()) { |
echo "</tr>\n"; |
} |
} |
?> |
<tr> |
<td> |
<a href="<?php echo $prev; ?>" class="prevMonth"><< </a> |
</td> |
<td colspan="5"> </td> |
<td> |
<a href="<?php echo $next; ?>" class="nextMonth"> >></a> |
</td> |
</tr> |
</table> |
<?php |
echo '<p><b>Took: '.(getmicrotime()-$start).' seconds</b></p>'; |
?> |
</body> |
</html> |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/index.html |
---|
New file |
0,0 → 1,49 |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" |
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> |
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> |
<head> |
<title>PEAR::Calendar Examples</title> |
<style type="text/css"> |
body { |
font-family: georgia, serif; |
} |
pre { |
background-color: silver; |
} |
code { |
color: navy; |
background-color: #e2e3e4; |
} |
</style> |
</head> |
<body> |
<h1>PEAR::Calendar Examples</h1> |
<p>$Id: index.html,v 1.1 2005-09-30 14:58:00 ddelon Exp $</p> |
<ul> |
<li><a href="1.php">1.php</a> [<a href="1.phps">src</a>] - shows basic usage, passing all the way down from <code>Calendar_Year</code> to <code>Calendar_Second</code> - more of a quick test it's working</li> |
<li><a href="2.php">2.php</a> [<a href="2.phps">src</a>] - shows how to build a tabular month using <code>Calendar_Month_Weeks</code>, <code>Calendar_Week</code>, <code>Calendar_Day</code> as well as selecting some dates.</li> |
<li><a href="3.php">3.php</a> [<a href="3.phps">src</a>] - shows how to build a tabular month using <code>Calendar_Month_Weekdays</code> and <code>Calendar_Day</code>, as well as selecting some dates (this method is faster).</li> |
<li><a href="4.php">4.php</a> [<a href="4.phps">src</a>] - shows how to use PEAR::Calendar for validation.</li> |
<li><a href="5.php">5.php</a> [<a href="5.phps">src</a>] - shows PEAR::Calendar in use to help generate a form.</li> |
<li><a href="6.php">6.php</a> [<a href="6.phps">src</a>] - a month and day "planner" calendar, which can be rendered both as HTML and WML.</li> |
<li><a href="7.php">7.php</a> [<a href="7.phps">src</a>] - a simple SOAP Calendar Server, using PEAR::SOAP and PEAR::Calendar</li> |
<li><a href="8.php">8.php</a> [<a href="8.phps">src</a>] - a WSDL SOAP client for the SOAP Calendar Server</li> |
<li><a href="9.php">9.php</a> [<a href="9.phps">src</a>] - quick example of i18n with <code>setlocale</code> (not working on SF)</li> |
<li><a href="10.php">10.php</a> [<a href="10.phps">src</a>] - an example of extending <code>Calendar_Decorator</code> to modify output</li> |
<li><a href="11.php">11.php</a> [<a href="11.phps">src</a>] - attaching a "payload" (e.g. results of a DB query) to a calendar using <code>Calendar_Decorator</code> to allow the payload to be available inside the main loop.</li> |
<li><a href="12.php">12.php</a> [<a href="12.phps">src</a>] - a complete year with months.</li> |
<li><a href="13.php">13.php</a> [<a href="13.phps">src</a>] - same as 1.php but using <code>Calendar_Engine_PearDate</code>, (see <a href="http://pear.php.net/Date">PEAR::Date</a>).</li> |
<li><a href="14.php">14.php</a> [<a href="14.phps">src</a>] - same as 3.php but using <code>Calendar_Engine_PearDate</code></li> |
<li><a href="15.php">15.php</a> [<a href="15.phps">src</a>] - paging through weeks </li> |
<li><a href="16.php">16.php</a> [<a href="16.phps">src</a>] - demonstrates using the Uri decorator. <i>Note</i> you should prefer <code>Calendar_Util_Uri</code> (see below) in most cases, for performance </li> |
<li><a href="17.php">17.php</a> [<a href="17.phps">src</a>] - demonstrates using the Textual decorator</li> |
<li><a href="18.php">18.php</a> [<a href="18.phps">src</a>] - demonstrates using the Wrapper decorator</li> |
<li><a href="19.php">19.php</a> [<a href="19.phps">src</a>] - demonstrates using the Weekday decorator</li> |
<li><a href="20.php">20.php</a> [<a href="20.phps">src</a>] - shows how to attach a "payload" spanning multiple days, with more than one entry per day</li> |
<li><a href="21.php">21.php</a> [<a href="21.phps">src</a>] - same as 12.php but using <code>Calendar_Month_Weeks</code> instead of <code>Calendar_Month_Weekdays</code> to allow the week in the year or week in the month to be displayed.</li> |
<li><a href="22.php">22.php</a> [<a href="22.phps">src</a>] - demonstrates use of <code>Calendar_Util_Uri</code>.</li> |
<li><a href="22.php">23.php</a> [<a href="23.phps">src</a>] - demonstrates use of <code>Calendar_Util_Textual</code>.</li> |
</ul> |
</body> |
</html> |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/15.php |
---|
New file |
0,0 → 1,58 |
<?php |
/** |
* Shows more on how a week can be used |
*/ |
function getmicrotime() { |
list($usec, $sec) = explode(" ", microtime()); |
return ((float)$usec + (float)$sec); |
} |
$start = getmicrotime(); |
if (!@include 'Calendar/Calendar.php') { |
define('CALENDAR_ROOT', '../../'); |
} |
require_once CALENDAR_ROOT.'Week.php'; |
if (!isset($_GET['y'])) $_GET['y'] = date('Y'); |
if (!isset($_GET['m'])) $_GET['m'] = date('m'); |
if (!isset($_GET['d'])) $_GET['d'] = 1; |
// Build the month |
$Week = new Calendar_Week($_GET['y'], $_GET['m'], $_GET['d']); |
/* |
$Validator = $Week->getValidator(); |
if (!$Validator->isValidWeek()) { |
die ('Please enter a valid week!'); |
} |
*/ |
?> |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> |
<html> |
<head> |
<title> Paging Weeks </title> |
</head> |
<body> |
<h1>Paging Weeks</h1> |
<h2>Week: <?php echo $Week->thisWeek().' '.date('F Y',$Week->thisMonth(true)); ?></h2> |
<?php |
$Week->build(); |
while ($Day = $Week->fetch()) { |
echo '<p>'.date('jS F',$Day->thisDay(true))."</p>\n"; |
} |
$days = $Week->fetchAll(); |
$prevWeek = $Week->prevWeek('array'); |
$prevWeekLink = $_SERVER['PHP_SELF']. |
'?y='.$prevWeek['year']. |
'&m='.$prevWeek['month']. |
'&d='.$prevWeek['day']; |
$nextWeek = $Week->nextWeek('array'); |
$nextWeekLink = $_SERVER['PHP_SELF']. |
'?y='.$nextWeek['year']. |
'&m='.$nextWeek['month']. |
'&d='.$nextWeek['day']; |
?> |
<p><a href="<?php echo $prevWeekLink; ?>"><<</a> | <a href="<?php echo $nextWeekLink; ?>">>></a></p> |
</body> |
</html> |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/3.phps |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/3.phps |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/16.php |
---|
New file |
0,0 → 1,31 |
<?php |
/** |
* Description: demonstrates using the Uri decorator |
*/ |
if (!@include 'Calendar/Calendar.php') { |
define('CALENDAR_ROOT', '../../'); |
} |
require_once CALENDAR_ROOT.'Month/Weekdays.php'; |
require_once CALENDAR_ROOT.'Decorator/Uri.php'; |
if (!isset($_GET['jahr'])) $_GET['jahr'] = date('Y'); |
if (!isset($_GET['monat'])) $_GET['monat'] = date('m'); |
// Build the month |
$Calendar = new Calendar_Month_Weekdays($_GET['jahr'], $_GET['monat']); |
echo ( '<p>The current month is ' |
.$Calendar->thisMonth().' of year '.$Calendar->thisYear().'</p>'); |
$Uri = & new Calendar_Decorator_Uri($Calendar); |
$Uri->setFragments('jahr','monat'); |
// $Uri->setSeperator('/'); // Default is & |
// $Uri->setScalar(); // Omit variable names |
echo ( "<pre>Previous Uri:\t".$Uri->prev('month')."\n" ); |
echo ( "This Uri:\t".$Uri->this('month')."\n" ); |
echo ( "Next Uri:\t".$Uri->next('month')."\n</pre>" ); |
?> |
<p> |
<a href="<?php echo($_SERVER['PHP_SELF'].'?'.$Uri->prev('month'));?>">Prev</a> : |
<a href="<?php echo($_SERVER['PHP_SELF'].'?'.$Uri->next('month'));?>">Next</a> |
</p> |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/17.php |
---|
New file |
0,0 → 1,71 |
<?php |
/** |
* Description: demonstrates using the Textual decorator |
*/ |
if (!@include 'Calendar'.DIRECTORY_SEPARATOR.'Calendar.php') { |
define('CALENDAR_ROOT', '../../'); |
} |
require_once CALENDAR_ROOT.'Day.php'; |
require_once CALENDAR_ROOT.'Month'.DIRECTORY_SEPARATOR.'Weekdays.php'; |
require_once CALENDAR_ROOT.'Decorator'.DIRECTORY_SEPARATOR.'Textual.php'; |
// Could change language like this |
// setlocale (LC_TIME, "de_DE"); // Unix based (probably) |
// setlocale (LC_TIME, "ge"); // Windows |
echo "<hr>Calling: Calendar_Decorator_Textual::monthNames('long');<pre>"; |
print_r(Calendar_Decorator_Textual::monthNames('long')); |
echo '</pre>'; |
echo "<hr>Calling: Calendar_Decorator_Textual::weekdayNames('two');<pre>"; |
print_r(Calendar_Decorator_Textual::weekdayNames('two')); |
echo '</pre>'; |
echo "<hr>Creating: new Calendar_Day(date('Y'), date('n'), date('d'));<br />"; |
$Calendar = new Calendar_Day(date('Y'), date('n'), date('d')); |
// Decorate |
$Textual = & new Calendar_Decorator_Textual($Calendar); |
echo '<hr>Previous month is: '.$Textual->prevMonthName('two').'<br />'; |
echo 'This month is: '.$Textual->thisMonthName('short').'<br />'; |
echo 'Next month is: '.$Textual->nextMonthName().'<br /><hr />'; |
echo 'Previous day is: '.$Textual->prevDayName().'<br />'; |
echo 'This day is: '.$Textual->thisDayName('short').'<br />'; |
echo 'Next day is: '.$Textual->nextDayName('one').'<br /><hr />'; |
echo "Creating: new Calendar_Month_Weekdays(date('Y'), date('n'), 6); - Saturday is first day of week<br />"; |
$Calendar = new Calendar_Month_Weekdays(date('Y'), date('n'), 6); |
// Decorate |
$Textual = & new Calendar_Decorator_Textual($Calendar); |
?> |
<p>Rendering calendar....</p> |
<table> |
<caption><?php echo $Textual->thisMonthName().' '.$Textual->thisYear(); ?></caption> |
<tr> |
<?php |
$dayheaders = $Textual->orderedWeekdays('short'); |
foreach ($dayheaders as $dayheader) { |
echo '<th>'.$dayheader.'</th>'; |
} |
?> |
</tr> |
<?php |
$Calendar->build(); |
while ($Day = $Calendar->fetch()) { |
if ($Day->isFirst()) { |
echo "<tr>\n"; |
} |
if ($Day->isEmpty()) { |
echo '<td> </td>'; |
} else { |
echo '<td>'.$Day->thisDay().'</td>'; |
} |
if ($Day->isLast()) { |
echo "</tr>\n"; |
} |
} |
?> |
</table> |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/5.phps |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/5.phps |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/18.php |
---|
New file |
0,0 → 1,36 |
<?php |
/** |
* Description: demonstrates using the Wrapper decorator |
*/ |
if (!@include 'Calendar/Calendar.php') { |
define('CALENDAR_ROOT', '../../'); |
} |
require_once CALENDAR_ROOT.'Month.php'; |
require_once CALENDAR_ROOT.'Decorator.php'; // Not really needed but added to help this make sense |
require_once CALENDAR_ROOT.'Decorator/Wrapper.php'; |
class MyBoldDecorator extends Calendar_Decorator |
{ |
function MyBoldDecorator(&$Calendar) |
{ |
parent::Calendar_Decorator($Calendar); |
} |
function thisDay() |
{ |
return '<b>'.parent::thisDay().'</b>'; |
} |
} |
$Month = new Calendar_Month(date('Y'), date('n')); |
$Wrapper = & new Calendar_Decorator_Wrapper($Month); |
$Wrapper->build(); |
echo '<h2>The Wrapper decorator</h2>'; |
echo '<i>Day numbers are rendered in bold</i><br /> <br />'; |
while ($DecoratedDay = $Wrapper->fetch('MyBoldDecorator')) { |
echo $DecoratedDay->thisDay().'<br />'; |
} |
?> |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/19.php |
---|
New file |
0,0 → 1,24 |
<?php |
/** |
* Description: demonstrates using the Weekday decorator |
*/ |
if (!@include 'Calendar'.DIRECTORY_SEPARATOR.'Calendar.php') { |
define('CALENDAR_ROOT', '../../'); |
} |
require_once CALENDAR_ROOT.'Day.php'; |
require_once CALENDAR_ROOT.'Decorator/Weekday.php'; |
$Day = new Calendar_Day(date('Y'), date('n'),date('d')); |
$WeekDay = & new Calendar_Decorator_Weekday($Day); |
// $WeekDay->setFirstDay(0); // Make Sunday first Day |
echo 'Yesterday: '.$WeekDay->prevWeekDay().'<br>'; |
echo 'Today: '.$WeekDay->thisWeekDay().'<br>'; |
echo 'Tomorrow: '.$WeekDay->nextWeekDay().'<br>'; |
$WeekDay->build(); |
echo 'Hours today:<br>'; |
while ( $Hour = $WeekDay->fetch() ) { |
echo $Hour->thisHour().'<br>'; |
} |
?> |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/7.phps |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/7.phps |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/9.phps |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/9.phps |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/10.phps |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/10.phps |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/20.phps |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/20.phps |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/12.phps |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/12.phps |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/22.phps |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/22.phps |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/14.phps |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/14.phps |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/16.phps |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/16.phps |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/18.phps |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/18.phps |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/20.php |
---|
New file |
0,0 → 1,314 |
<?php |
/** |
* Description: demonstrates a decorator used to "attach a payload" to a selection |
* to make it available when iterating over calendar children |
*/ |
//if you use ISO-8601 dates, switch to PearDate engine |
define('CALENDAR_ENGINE', 'PearDate'); |
if ( !@include 'Calendar/Calendar.php' ) { |
define('CALENDAR_ROOT','../../'); |
} |
require_once CALENDAR_ROOT . 'Month/Weekdays.php'; |
require_once CALENDAR_ROOT . 'Day.php'; |
require_once CALENDAR_ROOT . 'Decorator.php'; |
// accepts multiple entries |
class DiaryEvent extends Calendar_Decorator |
{ |
var $entries = array(); |
function DiaryEvent($calendar) { |
Calendar_Decorator::Calendar_Decorator($calendar); |
} |
function addEntry($entry) { |
$this->entries[] = $entry; |
} |
function getEntry() { |
$entry = each($this->entries); |
if ($entry) { |
return $entry['value']; |
} else { |
reset($this->entries); |
return false; |
} |
} |
} |
class MonthPayload_Decorator extends Calendar_Decorator |
{ |
//Calendar engine |
var $cE; |
var $tableHelper; |
var $year; |
var $month; |
var $firstDay = false; |
function build($events=array()) |
{ |
require_once CALENDAR_ROOT . 'Day.php'; |
require_once CALENDAR_ROOT . 'Table/Helper.php'; |
$this->tableHelper = & new Calendar_Table_Helper($this, $this->firstDay); |
$this->cE = & $this->getEngine(); |
$this->year = $this->thisYear(); |
$this->month = $this->thisMonth(); |
$daysInMonth = $this->cE->getDaysInMonth($this->year, $this->month); |
for ($i=1; $i<=$daysInMonth; $i++) { |
$Day = new Calendar_Day(2000,1,1); // Create Day with dummy values |
$Day->setTimeStamp($this->cE->dateToStamp($this->year, $this->month, $i)); |
$this->children[$i] = new DiaryEvent($Day); |
} |
if (count($events) > 0) { |
$this->setSelection($events); |
} |
Calendar_Month_Weekdays::buildEmptyDaysBefore(); |
Calendar_Month_Weekdays::shiftDays(); |
Calendar_Month_Weekdays::buildEmptyDaysAfter(); |
Calendar_Month_Weekdays::setWeekMarkers(); |
return true; |
} |
function setSelection($events) |
{ |
$daysInMonth = $this->cE->getDaysInMonth($this->year, $this->month); |
for ($i=1; $i<=$daysInMonth; $i++) { |
$stamp1 = $this->cE->dateToStamp($this->year, $this->month, $i); |
$stamp2 = $this->cE->dateToStamp($this->year, $this->month, $i+1); |
foreach ($events as $event) { |
if (($stamp1 >= $event['start'] && $stamp1 < $event['end']) || |
($stamp2 >= $event['start'] && $stamp2 < $event['end']) || |
($stamp1 <= $event['start'] && $stamp2 > $event['end']) |
) { |
$this->children[$i]->addEntry($event); |
$this->children[$i]->setSelected(); |
} |
} |
} |
} |
function fetch() |
{ |
$child = each($this->children); |
if ($child) { |
return $child['value']; |
} else { |
reset($this->children); |
return false; |
} |
} |
} |
// Calendar instance used to get the dates in the preferred format: |
// you can switch Calendar Engine and the example still works |
$cal = new Calendar; |
$events = array(); |
//add some events |
$events[] = array( |
'start' => $cal->cE->dateToStamp(2004, 6, 1, 10), |
'end' => $cal->cE->dateToStamp(2004, 6, 1, 12), |
'desc' => 'Important meeting' |
); |
$events[] = array( |
'start' => $cal->cE->dateToStamp(2004, 6, 1, 21), |
'end' => $cal->cE->dateToStamp(2004, 6, 1, 23, 59), |
'desc' => 'Dinner with the boss' |
); |
$events[] = array( |
'start' => $cal->cE->dateToStamp(2004, 6, 5), |
'end' => $cal->cE->dateToStamp(2004, 6, 10, 23, 59), |
'desc' => 'Holidays!' |
); |
$Month = & new Calendar_Month_Weekdays(2004, 6); |
$MonthDecorator = new MonthPayload_Decorator($Month); |
$MonthDecorator->build($events); |
?> |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ text-align: center; |
+ background-color: #e7e3e7; |
+ padding: 5pt; |
+ |
+ |
+ |
+ |
+ |
+ |
+ text-align: left; |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+div.dayNumber { |
+ text-align: right; |
+ background-color: #f8f8f8; |
+ border-bottom: 1px solid #ccc; |
+} |
+ul { |
+ margin-left: 0; |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+<body> |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ echo '<td class="calCell'; |
+ if ($Day->isSelected()) { |
+ echo ' calCellBusy'; |
+ } elseif ($Day->isEmpty()) { |
+ echo ' calCellEmpty'; |
+ } |
+ echo '">'; |
+ echo '<div class="dayNumber">'.$Day->thisDay().'</div>'; |
+ |
+ |
+ |
+ |
+ echo '<div class="dayContents"><ul>'; |
+ while ($entry = $Day->getEntry()) { |
+ echo '<li>'.$entry['desc'].'</li>'; |
+ //you can print the time range as well |
+ } |
+ echo '</ul></div>'; |
+ } |
+ |
+ |
+ |
+ echo "</tr>\n"; |
+ |
+ |
+ |
+ |
+ |
+</html> |
\ No newline at end of file |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/21.php |
---|
New file |
0,0 → 1,139 |
<?php |
/** |
* Description: a complete year with numeric week numbers |
*/ |
function getmicrotime(){ |
list($usec, $sec) = explode(" ",microtime()); |
return ((float)$usec + (float)$sec); |
} |
$start = getmicrotime(); |
if (!@include 'Calendar/Calendar.php') { |
define('CALENDAR_ROOT', '../../'); |
} |
require_once CALENDAR_ROOT.'Year.php'; |
require_once CALENDAR_ROOT.'Month/Weeks.php'; |
define ('CALENDAR_MONTH_STATE',CALENDAR_USE_MONTH_WEEKS); |
if (!isset($_GET['year'])) $_GET['year'] = date('Y'); |
$week_types = array( |
'n_in_year', |
'n_in_month', |
); |
if (!isset($_GET['week_type']) || !in_array($_GET['week_type'],$week_types) ) { |
$_GET['week_type'] = 'n_in_year'; |
} |
$Year = new Calendar_Year($_GET['year']); |
$Year->build(); |
?> |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> |
<html> |
<head> |
<title> <?php echo $Year->thisYear(); ?> </title> |
<style type="text/css"> |
body { |
font-family: Georgia, serif; |
} |
caption.year { |
font-weight: bold; |
font-size: 120%; |
font-color: navy; |
} |
caption.month { |
font-size: 110%; |
font-color: navy; |
} |
table.month { |
border: thin groove #800080 |
} |
tr { |
vertical-align: top; |
} |
th, td { |
text-align: right; |
font-size: 70%; |
} |
#prev { |
float: left; |
font-size: 70%; |
} |
#next { |
float: right; |
font-size: 70%; |
} |
#week_type { |
float: none; |
font-size: 70%; |
} |
.weekNumbers { |
background-color: #e5e5f5; |
padding-right: 3pt; |
} |
</style> |
</head> |
<body> |
<table> |
<caption class="year"> |
<?php echo $Year->thisYear(); ?> |
<div id="next"> |
<a href="?year=<?php echo $Year->nextYear(); ?>&week_type=<?php echo $_GET['week_type']; ?>">>></a> |
</div> |
<div id="prev"> |
<a href="?year=<?php echo $Year->prevYear(); ?>&week_type=<?php echo $_GET['week_type']; ?>"><<</a> |
</div> |
<div id="week_type"> |
<a href="?year=<?php echo $Year->thisYear(); ?>&week_type=n_in_year">Weeks by Year</a> : |
<a href="?year=<?php echo $Year->thisYear(); ?>&week_type=n_in_month">Weeks by Month</a> |
</div> |
</caption> |
<?php |
$i = 0; |
while ($Month = $Year->fetch()) { |
switch ($i) { |
case 0: |
echo "<tr>\n"; |
break; |
case 3: |
case 6: |
case 9: |
echo "</tr>\n<tr>\n"; |
break; |
case 12: |
echo "</tr>\n"; |
break; |
} |
echo "<td>\n<table class=\"month\">\n"; |
echo '<caption class="month">'.date('F', $Month->thisMonth(TRUE)).'</caption>'; |
echo '<colgroup><col class="weekNumbers"><col span="7"></colgroup>'."\n"; |
echo "<tr>\n<th>Week</th><th>M</th><th>T</th><th>W</th><th>T</th><th>F</th><th>S</th><th>S</th>\n</tr>"; |
$Month->build(); |
while ($Week = $Month->fetch()) { |
echo "<tr>\n"; |
echo '<td>'.$Week->thisWeek($_GET['week_type'])."</td>\n"; |
$Week->build(); |
while ($Day = $Week->fetch()) { |
if ($Day->isEmpty()) { |
echo "<td> </td>\n"; |
} else { |
echo "<td>".$Day->thisDay()."</td>\n"; |
} |
} |
} |
echo "</table>\n</td>\n"; |
$i++; |
} |
?> |
</table> |
<p>Took: <?php echo ((getmicrotime()-$start)); ?></p> |
</body> |
</html> |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/22.php |
---|
New file |
0,0 → 1,46 |
<?php |
/** |
* Description: demonstrates using the Uri util |
*/ |
if (!@include 'Calendar/Calendar.php') { |
define('CALENDAR_ROOT', '../../'); |
} |
require_once CALENDAR_ROOT.'Month/Weekdays.php'; |
require_once CALENDAR_ROOT.'Util/Uri.php'; |
if (!isset($_GET['jahr'])) $_GET['jahr'] = date('Y'); |
if (!isset($_GET['monat'])) $_GET['monat'] = date('m'); |
// Build the month |
$Calendar = new Calendar_Month_Weekdays($_GET['jahr'], $_GET['monat']); |
echo ( '<p>The current month is ' |
.$Calendar->thisMonth().' of year '.$Calendar->thisYear().'</p>'); |
$Uri = & new Calendar_Util_Uri('jahr','monat'); |
$Uri->setFragments('jahr','monat'); |
echo "\"Vector\" URIs<pre>"; |
echo ( "Previous Uri:\t".htmlentities($Uri->prev($Calendar, 'month'))."\n" ); |
echo ( "This Uri:\t".htmlentities($Uri->this($Calendar, 'month'))."\n" ); |
echo ( "Next Uri:\t".htmlentities($Uri->next($Calendar, 'month'))."\n" ); |
echo "</pre>"; |
// Switch to scalar URIs |
$Uri->separator = '/'; // Default is & |
$Uri->scalar = true; // Omit variable names |
echo "\"Scalar\" URIs<pre>"; |
echo ( "Previous Uri:\t".$Uri->prev($Calendar, 'month')."\n" ); |
echo ( "This Uri:\t".$Uri->this($Calendar, 'month')."\n" ); |
echo ( "Next Uri:\t".$Uri->next($Calendar, 'month')."\n" ); |
echo "</pre>"; |
// Restore the vector URIs |
$Uri->separator = '&'; |
$Uri->scalar = false; |
?> |
<p> |
<a href="<?php echo($_SERVER['PHP_SELF'].'?'.$Uri->prev($Calendar, 'month'));?>">Prev</a> : |
<a href="<?php echo($_SERVER['PHP_SELF'].'?'.$Uri->next($Calendar, 'month'));?>">Next</a> |
</p> |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/23.php |
---|
New file |
0,0 → 1,66 |
<?php |
/** |
* Description: demonstrates using the Textual util |
*/ |
if (!@include 'Calendar'.DIRECTORY_SEPARATOR.'Calendar.php') { |
define('CALENDAR_ROOT', '../../'); |
} |
require_once CALENDAR_ROOT.'Day.php'; |
require_once CALENDAR_ROOT.'Month'.DIRECTORY_SEPARATOR.'Weekdays.php'; |
require_once CALENDAR_ROOT.'Util'.DIRECTORY_SEPARATOR.'Textual.php'; |
// Could change language like this |
// setlocale (LC_TIME, "de_DE"); // Unix based (probably) |
// setlocale (LC_TIME, "ge"); // Windows |
echo "<hr>Calling: Calendar_Util_Textual::monthNames('long');<pre>"; |
print_r(Calendar_Util_Textual::monthNames('long')); |
echo '</pre>'; |
echo "<hr>Calling: Calendar_Util_Textual::weekdayNames('two');<pre>"; |
print_r(Calendar_Util_Textual::weekdayNames('two')); |
echo '</pre>'; |
echo "<hr>Creating: new Calendar_Day(date('Y'), date('n'), date('d'));<br />"; |
$Calendar = new Calendar_Day(date('Y'), date('n'), date('d')); |
echo '<hr>Previous month is: '.Calendar_Util_Textual::prevMonthName($Calendar,'two').'<br />'; |
echo 'This month is: '.Calendar_Util_Textual::thisMonthName($Calendar,'short').'<br />'; |
echo 'Next month is: '.Calendar_Util_Textual::nextMonthName($Calendar).'<br /><hr />'; |
echo 'Previous day is: '.Calendar_Util_Textual::prevDayName($Calendar).'<br />'; |
echo 'This day is: '.Calendar_Util_Textual::thisDayName($Calendar,'short').'<br />'; |
echo 'Next day is: '.Calendar_Util_Textual::nextDayName($Calendar,'one').'<br /><hr />'; |
echo "Creating: new Calendar_Month_Weekdays(date('Y'), date('n'), 6); - Saturday is first day of week<br />"; |
$Calendar = new Calendar_Month_Weekdays(date('Y'), date('n'), 6); |
?> |
<p>Rendering calendar....</p> |
<table> |
<caption><?php echo Calendar_Util_Textual::thisMonthName($Calendar).' '.$Calendar->thisYear(); ?></caption> |
<tr> |
<?php |
$dayheaders = Calendar_Util_Textual::orderedWeekdays($Calendar,'short'); |
foreach ($dayheaders as $dayheader) { |
echo '<th>'.$dayheader.'</th>'; |
} |
?> |
</tr> |
<?php |
$Calendar->build(); |
while ($Day = $Calendar->fetch()) { |
if ($Day->isFirst()) { |
echo "<tr>\n"; |
} |
if ($Day->isEmpty()) { |
echo '<td> </td>'; |
} else { |
echo '<td>'.$Day->thisDay().'</td>'; |
} |
if ($Day->isLast()) { |
echo "</tr>\n"; |
} |
} |
?> |
</table> |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/2.phps |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/2.phps |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/4.phps |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/4.phps |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/6.phps |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/6.phps |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/8.phps |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/pear/Calendar/docs/examples/8.phps |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/pear/Calendar/Factory.php |
---|
New file |
0,0 → 1,158 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2002 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.02 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Harry Fuecks <hfuecks@phppatterns.com> | |
// | Lorenzo Alberton <l dot alberton at quipo dot it> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: Factory.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
// |
/** |
* @package Calendar |
* @version $Id: Factory.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
*/ |
/** |
* Allows Calendar include path to be redefined |
* @ignore |
*/ |
if (!defined('CALENDAR_ROOT')) { |
define('CALENDAR_ROOT', 'Calendar'.DIRECTORY_SEPARATOR); |
} |
/** |
* Load Calendar base class |
*/ |
require_once CALENDAR_ROOT.'Calendar.php'; |
/** |
* Constant for the first day of the week (integer e.g. 0-6) |
*/ |
if ( !defined ('CALENDAR_FIRST_DAY_OF_WEEK') ) { |
define ('CALENDAR_FIRST_DAY_OF_WEEK',1); |
} |
/** |
* Contains a factory method to return a Singleton instance of a class |
* implementing the Calendar_Engine_Interface.<br> |
* For Month objects, to control type of month returned, use CALENDAR_MONTH_STATE |
* constact e.g.; |
* <code> |
* require_once 'Calendar/Factory.php'; |
* define ('CALENDAR_MONTH_STATE',CALENDAR_USE_MONTH_WEEKDAYS); // Use Calendar_Month_Weekdays |
* // define ('CALENDAR_MONTH_STATE',CALENDAR_USE_MONTH_WEEKS); // Use Calendar_Month_Weeks |
* // define ('CALENDAR_MONTH_STATE',CALENDAR_USE_MONTH); // Use Calendar_Month |
* </code> |
* It defaults to building Calendar_Month objects.<br> |
* Use the constract CALENDAR_FIRST_DAY_OF_WEEK to control the first day of the week |
* for Month or Week objects (e.g. 0 = Sunday, 6 = Saturday) |
* @package Calendar |
* @access protected |
*/ |
class Calendar_Factory |
{ |
/** |
* Creates a calendar object given the type and units |
* @param string class of calendar object to create |
* @param int year |
* @param int month |
* @param int day |
* @param int hour |
* @param int minute |
* @param int second |
* @return object subclass of Calendar |
* @access public |
* @static |
*/ |
function create($type, $y = 2000, $m = 1, $d = 1, $h = 0, $i = 0, $s = 0) |
{ |
switch ( $type ) { |
case 'Day': |
require_once CALENDAR_ROOT.'Day.php'; |
return new Calendar_Day($y,$m,$d); |
break; |
case 'Month': |
// Set default state for which month type to build |
if (!defined('CALENDAR_MONTH_STATE')) { |
define('CALENDAR_MONTH_STATE', CALENDAR_USE_MONTH); |
} |
switch (CALENDAR_MONTH_STATE) { |
case CALENDAR_USE_MONTH_WEEKDAYS: |
require_once CALENDAR_ROOT.'Month'.DIRECTORY_SEPARATOR.'Weekdays.php'; |
$class = 'Calendar_Month_Weekdays'; |
break; |
case CALENDAR_USE_MONTH_WEEKS: |
require_once CALENDAR_ROOT.'Month'.DIRECTORY_SEPARATOR.'Weeks.php'; |
$class = 'Calendar_Month_Weeks'; |
break; |
case CALENDAR_USE_MONTH: |
default: |
require_once CALENDAR_ROOT.'Month.php'; |
$class = 'Calendar_Month'; |
break; |
} |
return new $class($y,$m,CALENDAR_FIRST_DAY_OF_WEEK); |
break; |
case 'Week': |
require_once CALENDAR_ROOT.'Week.php'; |
return new Calendar_Week($y,$m,$d,CALENDAR_FIRST_DAY_OF_WEEK); |
break; |
case 'Hour': |
require_once CALENDAR_ROOT.'Hour.php'; |
return new Calendar_Hour($y,$m,$d,$h); |
break; |
case 'Minute': |
require_once CALENDAR_ROOT.'Minute.php'; |
return new Calendar_Minute($y,$m,$d,$h,$i); |
break; |
case 'Second': |
require_once CALENDAR_ROOT.'Second.php'; |
return new Calendar_Second($y,$m,$d,$h,$i,$s); |
break; |
case 'Year': |
require_once CALENDAR_ROOT.'Year.php'; |
return new Calendar_Year($y); |
break; |
default: |
require_once 'PEAR.php'; |
PEAR::raiseError( |
'Calendar_Factory::create() unrecognised type: '.$type, null, PEAR_ERROR_TRIGGER, |
E_USER_NOTICE, 'Calendar_Factory::create()'); |
return false; |
break; |
} |
} |
/** |
* Creates an instance of a calendar object, given a type and timestamp |
* @param string type of object to create |
* @param mixed timestamp (depending on Calendar engine being used) |
* @return object subclass of Calendar |
* @access public |
* @static |
*/ |
function & createByTimestamp($type, $stamp) |
{ |
$cE = & Calendar_Engine_Factory::getEngine(); |
$y = $cE->stampToYear($stamp); |
$m = $cE->stampToMonth($stamp); |
$d = $cE->stampToDay($stamp); |
$h = $cE->stampToHour($stamp); |
$i = $cE->stampToMinute($stamp); |
$s = $cE->stampToSecond($stamp); |
return Calendar_Factory::create($type, $y, $m, $d, $h, $i, $s); |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Calendar/Calendar.php |
---|
New file |
0,0 → 1,654 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2002 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.02 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Harry Fuecks <hfuecks@phppatterns.com> | |
// | Lorenzo Alberton <l dot alberton at quipo dot it> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: Calendar.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
// |
/** |
* @package Calendar |
* @version $Id: Calendar.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
*/ |
/** |
* Allows Calendar include path to be redefined |
*/ |
if (!defined('CALENDAR_ROOT')) { |
define('CALENDAR_ROOT', 'Calendar'.DIRECTORY_SEPARATOR); |
} |
/** |
* Constant which defines the calculation engine to use |
*/ |
if (!defined('CALENDAR_ENGINE')) { |
define('CALENDAR_ENGINE', 'UnixTS'); |
} |
/** |
* Define Calendar Month states |
*/ |
define('CALENDAR_USE_MONTH', 1); |
define('CALENDAR_USE_MONTH_WEEKDAYS', 2); |
define('CALENDAR_USE_MONTH_WEEKS', 3); |
/** |
* Contains a factory method to return a Singleton instance of a class |
* implementing the Calendar_Engine_Interface.<br> |
* <b>Note:</b> this class must be modified to "register" alternative |
* Calendar_Engines. The engine used can be controlled with the constant |
* CALENDAR_ENGINE |
* @see Calendar_Engine_Interface |
* @package Calendar |
* @access protected |
*/ |
class Calendar_Engine_Factory |
{ |
/** |
* Returns an instance of the engine |
* @return object instance of a calendar calculation engine |
* @access protected |
*/ |
function & getEngine() |
{ |
static $engine = false; |
switch (CALENDAR_ENGINE) { |
case 'PearDate': |
$class = 'Calendar_Engine_PearDate'; |
break; |
case 'UnixTS': |
default: |
$class = 'Calendar_Engine_UnixTS'; |
break; |
} |
if (!$engine) { |
if (!class_exists($class)) { |
require_once CALENDAR_ROOT.'Engine'.DIRECTORY_SEPARATOR.CALENDAR_ENGINE.'.php'; |
} |
$engine = new $class; |
} |
return $engine; |
} |
} |
/** |
* Base class for Calendar API. This class should not be instantiated |
* directly. |
* @abstract |
* @package Calendar |
*/ |
class Calendar |
{ |
/** |
* Instance of class implementing calendar engine interface |
* @var object |
* @access private |
*/ |
var $cE; |
/** |
* Instance of Calendar_Validator (lazy initialized when isValid() or |
* getValidor() is called |
* @var Calendar_Validator |
* @access private |
*/ |
var $validator; |
/** |
* Year for this calendar object e.g. 2003 |
* @access private |
* @var int |
*/ |
var $year; |
/** |
* Month for this calendar object e.g. 9 |
* @access private |
* @var int |
*/ |
var $month; |
/** |
* Day of month for this calendar object e.g. 23 |
* @access private |
* @var int |
*/ |
var $day; |
/** |
* Hour of day for this calendar object e.g. 13 |
* @access private |
* @var int |
*/ |
var $hour; |
/** |
* Minute of hour this calendar object e.g. 46 |
* @access private |
* @var int |
*/ |
var $minute; |
/** |
* Second of minute this calendar object e.g. 34 |
* @access private |
* @var int |
*/ |
var $second; |
/** |
* Marks this calendar object as selected (e.g. 'today') |
* @access private |
* @var boolean |
*/ |
var $selected = false; |
/** |
* Collection of child calendar objects created from subclasses |
* of Calendar. Type depends on the object which created them. |
* @access private |
* @var array |
*/ |
var $children = array(); |
/** |
* Constructs the Calendar |
* @param int year |
* @param int month |
* @param int day |
* @param int hour |
* @param int minute |
* @param int second |
* @access protected |
*/ |
function Calendar($y = 2000, $m = 1, $d = 1, $h = 0, $i = 0, $s = 0) |
{ |
static $cE = null; |
if (!isset($cE)) { |
$cE = & Calendar_Engine_Factory::getEngine(); |
} |
$this->cE = & $cE; |
$this->year = (int)$y; |
$this->month = (int)$m; |
$this->day = (int)$d; |
$this->hour = (int)$h; |
$this->minute = (int)$i; |
$this->second = (int)$s; |
} |
/** |
* Defines the calendar by a timestamp (Unix or ISO-8601), replacing values |
* passed to the constructor |
* @param int|string Unix or ISO-8601 timestamp |
* @return void |
* @access public |
*/ |
function setTimestamp($ts) |
{ |
$this->year = $this->cE->stampToYear($ts); |
$this->month = $this->cE->stampToMonth($ts); |
$this->day = $this->cE->stampToDay($ts); |
$this->hour = $this->cE->stampToHour($ts); |
$this->minute = $this->cE->stampToMinute($ts); |
$this->second = $this->cE->stampToSecond($ts); |
} |
/** |
* Returns a timestamp from the current date / time values. Format of |
* timestamp depends on Calendar_Engine implementation being used |
* @return int|string timestamp |
* @access public |
*/ |
function getTimestamp() |
{ |
return $this->cE->dateToStamp( |
$this->year, $this->month, $this->day, |
$this->hour, $this->minute, $this->second); |
} |
/** |
* Defines calendar object as selected (e.g. for today) |
* @param boolean state whether Calendar subclass |
* @return void |
* @access public |
*/ |
function setSelected($state = true) |
{ |
$this->selected = $state; |
} |
/** |
* True if the calendar subclass object is selected (e.g. today) |
* @return boolean |
* @access public |
*/ |
function isSelected() |
{ |
return $this->selected; |
} |
/** |
* Adjusts the date (helper method) |
* @return void |
* @access public |
*/ |
function adjust() |
{ |
$stamp = $this->getTimeStamp(); |
$this->year = $this->cE->stampToYear($stamp); |
$this->month = $this->cE->stampToMonth($stamp); |
$this->day = $this->cE->stampToDay($stamp); |
$this->hour = $this->cE->stampToHour($stamp); |
$this->minute = $this->cE->stampToMinute($stamp); |
$this->second = $this->cE->stampToSecond($stamp); |
} |
/** |
* Returns the date as an associative array (helper method) |
* @param mixed timestamp (leave empty for current timestamp) |
* @return array |
* @access public |
*/ |
function toArray($stamp=null) |
{ |
if (is_null($stamp)) { |
$stamp = $this->getTimeStamp(); |
} |
return array( |
'year' => $this->cE->stampToYear($stamp), |
'month' => $this->cE->stampToMonth($stamp), |
'day' => $this->cE->stampToDay($stamp), |
'hour' => $this->cE->stampToHour($stamp), |
'minute' => $this->cE->stampToMinute($stamp), |
'second' => $this->cE->stampToSecond($stamp) |
); |
} |
/** |
* Returns the value as an associative array (helper method) |
* @param string type of date object that return value represents |
* @param string $format ['int' | 'array' | 'timestamp' | 'object'] |
* @param mixed timestamp (depending on Calendar engine being used) |
* @param int integer default value (i.e. give me the answer quick) |
* @return mixed |
* @access private |
*/ |
function returnValue($returnType, $format, $stamp, $default) |
{ |
switch (strtolower($format)) { |
case 'int': |
return $default; |
case 'array': |
return $this->toArray($stamp); |
break; |
case 'object': |
require_once CALENDAR_ROOT.'Factory.php'; |
return Calendar_Factory::createByTimestamp($returnType,$stamp); |
break; |
case 'timestamp': |
default: |
return $stamp; |
break; |
} |
} |
/** |
* Abstract method for building the children of a calendar object. |
* Implemented by Calendar subclasses |
* @param array containing Calendar objects to select (optional) |
* @return boolean |
* @access public |
* @abstract |
*/ |
function build($sDates = array()) |
{ |
require_once 'PEAR.php'; |
PEAR::raiseError( |
'Calendar::build is abstract', null, PEAR_ERROR_TRIGGER, |
E_USER_NOTICE, 'Calendar::build()'); |
return false; |
} |
/** |
* Abstract method for selected data objects called from build |
* @param array |
* @return boolean |
* @access public |
* @abstract |
*/ |
function setSelection($sDates) |
{ |
require_once 'PEAR.php'; |
PEAR::raiseError( |
'Calendar::setSelection is abstract', null, PEAR_ERROR_TRIGGER, |
E_USER_NOTICE, 'Calendar::setSelection()'); |
return false; |
} |
/** |
* Iterator method for fetching child Calendar subclass objects |
* (e.g. a minute from an hour object). On reaching the end of |
* the collection, returns false and resets the collection for |
* further iteratations. |
* @return mixed either an object subclass of Calendar or false |
* @access public |
*/ |
function fetch() |
{ |
$child = each($this->children); |
if ($child) { |
return $child['value']; |
} else { |
reset($this->children); |
return false; |
} |
} |
/** |
* Fetches all child from the current collection of children |
* @return array |
* @access public |
*/ |
function fetchAll() |
{ |
return $this->children; |
} |
/** |
* Get the number Calendar subclass objects stored in the internal |
* collection. |
* @return int |
* @access public |
*/ |
function size() |
{ |
return count($this->children); |
} |
/** |
* Determine whether this date is valid, with the bounds determined by |
* the Calendar_Engine. The call is passed on to |
* Calendar_Validator::isValid |
* @return boolean |
* @access public |
*/ |
function isValid() |
{ |
$validator = & $this->getValidator(); |
return $validator->isValid(); |
} |
/** |
* Returns an instance of Calendar_Validator |
* @return Calendar_Validator |
* @access public |
*/ |
function & getValidator() |
{ |
if (!isset($this->validator)) { |
require_once CALENDAR_ROOT.'Validator.php'; |
$this->validator = & new Calendar_Validator($this); |
} |
return $this->validator; |
} |
/** |
* Returns a reference to the current Calendar_Engine being used. Useful |
* for Calendar_Table_Helper and Caledar_Validator |
* @return object implementing Calendar_Engine_Inteface |
* @access private |
*/ |
function & getEngine() |
{ |
return $this->cE; |
} |
/** |
* Returns the value for the previous year |
* @param string return value format ['int' | 'timestamp' | 'object' | 'array'] |
* @return int e.g. 2002 or timestamp |
* @access public |
*/ |
function prevYear($format = 'int') |
{ |
$ts = $this->cE->dateToStamp($this->year-1, 1, 1, 0, 0, 0); |
return $this->returnValue('Year', $format, $ts, $this->year-1); |
} |
/** |
* Returns the value for this year |
* @param string return value format ['int' | 'timestamp' | 'object' | 'array'] |
* @return int e.g. 2003 or timestamp |
* @access public |
*/ |
function thisYear($format = 'int') |
{ |
$ts = $this->cE->dateToStamp($this->year, 1, 1, 0, 0, 0); |
return $this->returnValue('Year', $format, $ts, $this->year); |
} |
/** |
* Returns the value for next year |
* @param string return value format ['int' | 'timestamp' | 'object' | 'array'] |
* @return int e.g. 2004 or timestamp |
* @access public |
*/ |
function nextYear($format = 'int') |
{ |
$ts = $this->cE->dateToStamp($this->year+1, 1, 1, 0, 0, 0); |
return $this->returnValue('Year', $format, $ts, $this->year+1); |
} |
/** |
* Returns the value for the previous month |
* @param string return value format ['int' | 'timestamp' | 'object' | 'array'] |
* @return int e.g. 4 or Unix timestamp |
* @access public |
*/ |
function prevMonth($format = 'int') |
{ |
$ts = $this->cE->dateToStamp($this->year, $this->month-1, 1, 0, 0, 0); |
return $this->returnValue('Month', $format, $ts, $this->cE->stampToMonth($ts)); |
} |
/** |
* Returns the value for this month |
* @param string return value format ['int' | 'timestamp' | 'object' | 'array'] |
* @return int e.g. 5 or timestamp |
* @access public |
*/ |
function thisMonth($format = 'int') |
{ |
$ts = $this->cE->dateToStamp($this->year, $this->month, 1, 0, 0, 0); |
return $this->returnValue('Month', $format, $ts, $this->month); |
} |
/** |
* Returns the value for next month |
* @param string return value format ['int' | 'timestamp' | 'object' | 'array'] |
* @return int e.g. 6 or timestamp |
* @access public |
*/ |
function nextMonth($format = 'int') |
{ |
$ts = $this->cE->dateToStamp($this->year, $this->month+1, 1, 0, 0, 0); |
return $this->returnValue('Month', $format, $ts, $this->cE->stampToMonth($ts)); |
} |
/** |
* Returns the value for the previous day |
* @param string return value format ['int' | 'timestamp' | 'object' | 'array'] |
* @return int e.g. 10 or timestamp |
* @access public |
*/ |
function prevDay($format = 'int') |
{ |
$ts = $this->cE->dateToStamp( |
$this->year, $this->month, $this->day-1, 0, 0, 0); |
return $this->returnValue('Day', $format, $ts, $this->cE->stampToDay($ts)); |
} |
/** |
* Returns the value for this day |
* @param string return value format ['int' | 'timestamp' | 'object' | 'array'] |
* @return int e.g. 11 or timestamp |
* @access public |
*/ |
function thisDay($format = 'int') |
{ |
$ts = $this->cE->dateToStamp( |
$this->year, $this->month, $this->day, 0, 0, 0); |
return $this->returnValue('Day', $format, $ts, $this->day); |
} |
/** |
* Returns the value for the next day |
* @param string return value format ['int' | 'timestamp' | 'object' | 'array'] |
* @return int e.g. 12 or timestamp |
* @access public |
*/ |
function nextDay($format = 'int') |
{ |
$ts = $this->cE->dateToStamp( |
$this->year, $this->month, $this->day+1, 0, 0, 0); |
return $this->returnValue('Day', $format, $ts, $this->cE->stampToDay($ts)); |
} |
/** |
* Returns the value for the previous hour |
* @param string return value format ['int' | 'timestamp' | 'object' | 'array'] |
* @return int e.g. 13 or timestamp |
* @access public |
*/ |
function prevHour($format = 'int') |
{ |
$ts = $this->cE->dateToStamp( |
$this->year, $this->month, $this->day, $this->hour-1, 0, 0); |
return $this->returnValue('Hour', $format, $ts, $this->cE->stampToHour($ts)); |
} |
/** |
* Returns the value for this hour |
* @param string return value format ['int' | 'timestamp' | 'object' | 'array'] |
* @return int e.g. 14 or timestamp |
* @access public |
*/ |
function thisHour($format = 'int') |
{ |
$ts = $this->cE->dateToStamp( |
$this->year, $this->month, $this->day, $this->hour, 0, 0); |
return $this->returnValue('Hour', $format, $ts, $this->hour); |
} |
/** |
* Returns the value for the next hour |
* @param string return value format ['int' | 'timestamp' | 'object' | 'array'] |
* @return int e.g. 14 or timestamp |
* @access public |
*/ |
function nextHour($format = 'int') |
{ |
$ts = $this->cE->dateToStamp( |
$this->year, $this->month, $this->day, $this->hour+1, 0, 0); |
return $this->returnValue('Hour', $format, $ts, $this->cE->stampToHour($ts)); |
} |
/** |
* Returns the value for the previous minute |
* @param string return value format ['int' | 'timestamp' | 'object' | 'array'] |
* @return int e.g. 23 or timestamp |
* @access public |
*/ |
function prevMinute($format = 'int') |
{ |
$ts = $this->cE->dateToStamp( |
$this->year, $this->month, $this->day, |
$this->hour, $this->minute-1, 0); |
return $this->returnValue('Minute', $format, $ts, $this->cE->stampToMinute($ts)); |
} |
/** |
* Returns the value for this minute |
* @param string return value format ['int' | 'timestamp' | 'object' | 'array'] |
* @return int e.g. 24 or timestamp |
* @access public |
*/ |
function thisMinute($format = 'int') |
{ |
$ts = $this->cE->dateToStamp( |
$this->year, $this->month, $this->day, |
$this->hour, $this->minute, 0); |
return $this->returnValue('Minute', $format, $ts, $this->minute); |
} |
/** |
* Returns the value for the next minute |
* @param string return value format ['int' | 'timestamp' | 'object' | 'array'] |
* @return int e.g. 25 or timestamp |
* @access public |
*/ |
function nextMinute($format = 'int') |
{ |
$ts = $this->cE->dateToStamp( |
$this->year, $this->month, $this->day, |
$this->hour, $this->minute+1, 0); |
return $this->returnValue('Minute', $format, $ts, $this->cE->stampToMinute($ts)); |
} |
/** |
* Returns the value for the previous second |
* @param string return value format ['int' | 'timestamp' | 'object' | 'array'] |
* @return int e.g. 43 or timestamp |
* @access public |
*/ |
function prevSecond($format = 'int') |
{ |
$ts = $this->cE->dateToStamp( |
$this->year, $this->month, $this->day, |
$this->hour, $this->minute, $this->second-1); |
return $this->returnValue('Second', $format, $ts, $this->cE->stampToSecond($ts)); |
} |
/** |
* Returns the value for this second |
* @param string return value format ['int' | 'timestamp' | 'object' | 'array'] |
* @return int e.g. 44 or timestamp |
* @access public |
*/ |
function thisSecond($format = 'int') |
{ |
$ts = $this->cE->dateToStamp( |
$this->year, $this->month, $this->day, |
$this->hour, $this->minute, $this->second); |
return $this->returnValue('Second', $format, $ts, $this->second); |
} |
/** |
* Returns the value for the next second |
* @param string return value format ['int' | 'timestamp' | 'object' | 'array'] |
* @return int e.g. 45 or timestamp |
* @access public |
*/ |
function nextSecond($format = 'int') |
{ |
$ts = $this->cE->dateToStamp( |
$this->year, $this->month, $this->day, |
$this->hour, $this->minute, $this->second+1); |
return $this->returnValue('Second', $format, $ts, $this->cE->stampToSecond($ts)); |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Calendar/Second.php |
---|
New file |
0,0 → 1,98 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2002 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.02 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Harry Fuecks <hfuecks@phppatterns.com> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: Second.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
// |
/** |
* @package Calendar |
* @version $Id: Second.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
*/ |
/** |
* Allows Calendar include path to be redefined |
* @ignore |
*/ |
if (!defined('CALENDAR_ROOT')) { |
define('CALENDAR_ROOT', 'Calendar'.DIRECTORY_SEPARATOR); |
} |
/** |
* Load Calendar base class |
*/ |
require_once CALENDAR_ROOT.'Calendar.php'; |
/** |
* Represents a Second<br /> |
* <b>Note:</b> Seconds do not build other objects |
* so related methods are overridden to return NULL |
* @package Calendar |
*/ |
class Calendar_Second extends Calendar |
{ |
/** |
* Constructs Second |
* @param int year e.g. 2003 |
* @param int month e.g. 5 |
* @param int day e.g. 11 |
* @param int hour e.g. 13 |
* @param int minute e.g. 31 |
* @param int second e.g. 45 |
*/ |
function Calendar_Second($y, $m, $d, $h, $i, $s) |
{ |
Calendar::Calendar($y, $m, $d, $h, $i, $s); |
} |
/** |
* Overwrite build |
* @return NULL |
*/ |
function build() |
{ |
return null; |
} |
/** |
* Overwrite fetch |
* @return NULL |
*/ |
function fetch() |
{ |
return null; |
} |
/** |
* Overwrite fetchAll |
* @return NULL |
*/ |
function fetchAll() |
{ |
return null; |
} |
/** |
* Overwrite size |
* @return NULL |
*/ |
function size() |
{ |
return null; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Calendar/tests/unixts_engine_test.php |
---|
New file |
0,0 → 1,104 |
<?php |
// $Id: unixts_engine_test.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
require_once('simple_include.php'); |
require_once('calendar_include.php'); |
class TestOfUnixTsEngine extends UnitTestCase { |
var $engine; |
function TestOfUnixTsEngine() { |
$this->UnitTestCase('Test of Calendar_Engine_UnixTs'); |
} |
function setUp() { |
$this->engine = new Calendar_Engine_UnixTs(); |
} |
function testGetSecondsInMinute() { |
$this->assertEqual($this->engine->getSecondsInMinute(),60); |
} |
function testGetMinutesInHour() { |
$this->assertEqual($this->engine->getMinutesInHour(),60); |
} |
function testGetHoursInDay() { |
$this->assertEqual($this->engine->getHoursInDay(),24); |
} |
function testGetFirstDayOfWeek() { |
$this->assertEqual($this->engine->getFirstDayOfWeek(),1); |
} |
function testGetWeekDays() { |
$this->assertEqual($this->engine->getWeekDays(),array(0,1,2,3,4,5,6)); |
} |
function testGetDaysInWeek() { |
$this->assertEqual($this->engine->getDaysInWeek(),7); |
} |
function testGetWeekNInYear() { |
$this->assertEqual($this->engine->getWeekNInYear(2003, 11, 3), 45); |
} |
function testGetWeekNInMonth() { |
$this->assertEqual($this->engine->getWeekNInMonth(2003, 11, 3), 2); |
} |
function testGetWeeksInMonth0() { |
$this->assertEqual($this->engine->getWeeksInMonth(2003, 11, 0), 6); //week starts on sunday |
} |
function testGetWeeksInMonth1() { |
$this->assertEqual($this->engine->getWeeksInMonth(2003, 11, 1), 5); //week starts on monday |
} |
function testGetWeeksInMonth2() { |
$this->assertEqual($this->engine->getWeeksInMonth(2003, 2, 6), 4); //week starts on saturday |
} |
function testGetWeeksInMonth3() { |
// Unusual cases that can cause fails (shows up with example 21.php) |
$this->assertEqual($this->engine->getWeeksInMonth(2004,2,1),5); |
$this->assertEqual($this->engine->getWeeksInMonth(2004,8,1),6); |
} |
function testGetDayOfWeek() { |
$this->assertEqual($this->engine->getDayOfWeek(2003, 11, 18), 2); |
} |
function testGetFirstDayInMonth() { |
$this->assertEqual($this->engine->getFirstDayInMonth(2003,10),3); |
} |
function testGetDaysInMonth() { |
$this->assertEqual($this->engine->getDaysInMonth(2003,10),31); |
} |
function testGetMinYears() { |
$test = strpos(PHP_OS, 'WIN') >= 0 ? 1970 : 1902; |
$this->assertEqual($this->engine->getMinYears(),$test); |
} |
function testGetMaxYears() { |
$this->assertEqual($this->engine->getMaxYears(),2037); |
} |
function testDateToStamp() { |
$stamp = mktime(0,0,0,10,15,2003); |
$this->assertEqual($this->engine->dateToStamp(2003,10,15,0,0,0),$stamp); |
} |
function testStampToSecond() { |
$stamp = mktime(13,30,45,10,15,2003); |
$this->assertEqual($this->engine->stampToSecond($stamp),45); |
} |
function testStampToMinute() { |
$stamp = mktime(13,30,45,10,15,2003); |
$this->assertEqual($this->engine->stampToMinute($stamp),30); |
} |
function testStampToHour() { |
$stamp = mktime(13,30,45,10,15,2003); |
$this->assertEqual($this->engine->stampToHour($stamp),13); |
} |
function testStampToDay() { |
$stamp = mktime(13,30,45,10,15,2003); |
$this->assertEqual($this->engine->stampToDay($stamp),15); |
} |
function testStampToMonth() { |
$stamp = mktime(13,30,45,10,15,2003); |
$this->assertEqual($this->engine->stampToMonth($stamp),10); |
} |
function testStampToYear() { |
$stamp = mktime(13,30,45,10,15,2003); |
$this->assertEqual($this->engine->stampToYear($stamp),2003); |
} |
} |
if (!defined('TEST_RUNNING')) { |
define('TEST_RUNNING', true); |
$test = &new TestOfUnixTsEngine(); |
$test->run(new HtmlReporter()); |
} |
?> |
/branches/v1.0-menes/api/pear/Calendar/tests/helper_test.php |
---|
New file |
0,0 → 1,83 |
<?php |
// $Id: helper_test.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
require_once('simple_include.php'); |
require_once('calendar_include.php'); |
Mock::generate('Calendar_Engine_Interface','Mock_Calendar_Engine'); |
Mock::generate('Calendar_Second','Mock_Calendar_Second'); |
class TestOfTableHelper extends UnitTestCase { |
var $mockengine; |
var $mockcal; |
function TestOfTableHelper() { |
$this->UnitTestCase('Test of Calendar_Table_Helper'); |
} |
function setUp() { |
$this->mockengine = new Mock_Calendar_Engine($this); |
$this->mockengine->setReturnValue('getMinYears',1970); |
$this->mockengine->setReturnValue('getMaxYears',2037); |
$this->mockengine->setReturnValue('getMonthsInYear',12); |
$this->mockengine->setReturnValue('getDaysInMonth',31); |
$this->mockengine->setReturnValue('getHoursInDay',24); |
$this->mockengine->setReturnValue('getMinutesInHour',60); |
$this->mockengine->setReturnValue('getSecondsInMinute',60); |
$this->mockengine->setReturnValue('getWeekDays',array(0,1,2,3,4,5,6)); |
$this->mockengine->setReturnValue('getDaysInWeek',7); |
$this->mockengine->setReturnValue('getFirstDayOfWeek',1); |
$this->mockengine->setReturnValue('getFirstDayInMonth',3); |
$this->mockcal = new Mock_Calendar_Second($this); |
$this->mockcal->setReturnValue('thisYear',2003); |
$this->mockcal->setReturnValue('thisMonth',10); |
$this->mockcal->setReturnValue('thisDay',15); |
$this->mockcal->setReturnValue('thisHour',13); |
$this->mockcal->setReturnValue('thisMinute',30); |
$this->mockcal->setReturnValue('thisSecond',45); |
$this->mockcal->setReturnValue('getEngine',$this->mockengine); |
} |
function testGetFirstDay() { |
for ( $i = 0; $i <= 7; $i++ ) { |
$Helper = & new Calendar_Table_Helper($this->mockcal,$i); |
$this->assertEqual($Helper->getFirstDay(),$i); |
} |
} |
function testGetDaysOfWeekMonday() { |
$Helper = & new Calendar_Table_Helper($this->mockcal); |
$this->assertEqual($Helper->getDaysOfWeek(),array(1,2,3,4,5,6,0)); |
} |
function testGetDaysOfWeekSunday() { |
$Helper = & new Calendar_Table_Helper($this->mockcal,0); |
$this->assertEqual($Helper->getDaysOfWeek(),array(0,1,2,3,4,5,6)); |
} |
function testGetDaysOfWeekThursday() { |
$Helper = & new Calendar_Table_Helper($this->mockcal,4); |
$this->assertEqual($Helper->getDaysOfWeek(),array(4,5,6,0,1,2,3)); |
} |
function testGetNumWeeks() { |
$Helper = & new Calendar_Table_Helper($this->mockcal); |
$this->assertEqual($Helper->getNumWeeks(),5); |
} |
function testGetNumTableDaysInMonth() { |
$Helper = & new Calendar_Table_Helper($this->mockcal); |
$this->assertEqual($Helper->getNumTableDaysInMonth(),35); |
} |
function testGetEmptyDaysBefore() { |
$Helper = & new Calendar_Table_Helper($this->mockcal); |
$this->assertEqual($Helper->getEmptyDaysBefore(),2); |
} |
function testGetEmptyDaysAfter() { |
$Helper = & new Calendar_Table_Helper($this->mockcal); |
$this->assertEqual($Helper->getEmptyDaysAfter(),33); |
} |
function testGetEmptyDaysAfterOffset() { |
$Helper = & new Calendar_Table_Helper($this->mockcal); |
$this->assertEqual($Helper->getEmptyDaysAfterOffset(),5); |
} |
} |
if (!defined('TEST_RUNNING')) { |
define('TEST_RUNNING', true); |
$test = &new TestOfTableHelper(); |
$test->run(new HtmlReporter()); |
} |
?> |
/branches/v1.0-menes/api/pear/Calendar/tests/calendar_engine_tests.php |
---|
New file |
0,0 → 1,20 |
<?php |
// $Id: calendar_engine_tests.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
require_once('simple_include.php'); |
require_once('calendar_include.php'); |
class CalendarEngineTests extends GroupTest { |
function CalendarEngineTests() { |
$this->GroupTest('Calendar Engine Tests'); |
$this->addTestFile('peardate_engine_test.php'); |
$this->addTestFile('unixts_engine_test.php'); |
} |
} |
if (!defined('TEST_RUNNING')) { |
define('TEST_RUNNING', true); |
$test = &new CalendarEngineTests(); |
$test->run(new HtmlReporter()); |
} |
?> |
/branches/v1.0-menes/api/pear/Calendar/tests/month_weekdays_test.php |
---|
New file |
0,0 → 1,130 |
<?php |
// $Id: month_weekdays_test.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
require_once('simple_include.php'); |
require_once('calendar_include.php'); |
require_once('./calendar_test.php'); |
class TestOfMonthWeekdays extends TestOfCalendar { |
function TestOfMonthWeekdays() { |
$this->UnitTestCase('Test of Month Weekdays'); |
} |
function setUp() { |
$this->cal = new Calendar_Month_Weekdays(2003,10); |
} |
function testPrevDay () { |
$this->assertEqual(30,$this->cal->prevDay()); |
} |
function testPrevDay_Array () { |
$this->assertEqual( |
array( |
'year' => 2003, |
'month' => 9, |
'day' => 30, |
'hour' => 0, |
'minute' => 0, |
'second' => 0), |
$this->cal->prevDay('array')); |
} |
function testThisDay () { |
$this->assertEqual(1,$this->cal->thisDay()); |
} |
function testNextDay () { |
$this->assertEqual(2,$this->cal->nextDay()); |
} |
function testPrevHour () { |
$this->assertEqual(23,$this->cal->prevHour()); |
} |
function testThisHour () { |
$this->assertEqual(0,$this->cal->thisHour()); |
} |
function testNextHour () { |
$this->assertEqual(1,$this->cal->nextHour()); |
} |
function testPrevMinute () { |
$this->assertEqual(59,$this->cal->prevMinute()); |
} |
function testThisMinute () { |
$this->assertEqual(0,$this->cal->thisMinute()); |
} |
function testNextMinute () { |
$this->assertEqual(1,$this->cal->nextMinute()); |
} |
function testPrevSecond () { |
$this->assertEqual(59,$this->cal->prevSecond()); |
} |
function testThisSecond () { |
$this->assertEqual(0,$this->cal->thisSecond()); |
} |
function testNextSecond () { |
$this->assertEqual(1,$this->cal->nextSecond()); |
} |
function testGetTimeStamp() { |
$stamp = mktime(0,0,0,10,1,2003); |
$this->assertEqual($stamp,$this->cal->getTimeStamp()); |
} |
} |
class TestOfMonthWeekdaysBuild extends TestOfMonthWeekdays { |
function TestOfMonthWeekdaysBuild() { |
$this->UnitTestCase('Test of Month_Weekdays::build()'); |
} |
function testSize() { |
$this->cal->build(); |
$this->assertEqual(35,$this->cal->size()); |
} |
function testFetch() { |
$this->cal->build(); |
$i=0; |
while ( $Child = $this->cal->fetch() ) { |
$i++; |
} |
$this->assertEqual(35,$i); |
} |
function testFetchAll() { |
$this->cal->build(); |
$children = array(); |
$i = 1; |
while ( $Child = $this->cal->fetch() ) { |
$children[$i]=$Child; |
$i++; |
} |
$this->assertEqual($children,$this->cal->fetchAll()); |
} |
function testSelection() { |
require_once(CALENDAR_ROOT . 'Day.php'); |
$selection = array(new Calendar_Day(2003,10,25)); |
$this->cal->build($selection); |
$i = 1; |
while ( $Child = $this->cal->fetch() ) { |
if ( $i == 27 ) |
break; |
$i++; |
} |
$this->assertTrue($Child->isSelected()); |
} |
function testEmptyCount() { |
$this->cal->build(); |
$empty = 0; |
while ( $Child = $this->cal->fetch() ) { |
if ( $Child->isEmpty() ) |
$empty++; |
} |
$this->assertEqual(4,$empty); |
} |
function testEmptyDaysBefore_AfterAdjust() { |
$this->cal = new Calendar_Month_Weekdays(2004,0); |
$this->cal->build(); |
$this->assertEqual(0,$this->cal->tableHelper->getEmptyDaysBefore()); |
} |
} |
if (!defined('TEST_RUNNING')) { |
define('TEST_RUNNING', true); |
$test = &new TestOfMonthWeekdays(); |
$test->run(new HtmlReporter()); |
$test = &new TestOfMonthWeekdaysBuild(); |
$test->run(new HtmlReporter()); |
} |
?> |
/branches/v1.0-menes/api/pear/Calendar/tests/decorator_test.php |
---|
New file |
0,0 → 1,268 |
<?php |
// $Id: decorator_test.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
require_once('simple_include.php'); |
require_once('calendar_include.php'); |
Mock::generate('Calendar_Engine_Interface','Mock_Calendar_Engine'); |
Mock::generate('Calendar_Second','Mock_Calendar_Second'); |
Mock::generate('Calendar_Week','Mock_Calendar_Week'); |
Mock::generate('Calendar_Day','Mock_Calendar_Day'); |
class TestOfDecorator extends UnitTestCase { |
var $mockengine; |
var $mockcal; |
var $decorator; |
function TestOfDecorator() { |
$this->UnitTestCase('Test of Calendar_Decorator'); |
} |
function setUp() { |
$this->mockengine = new Mock_Calendar_Engine($this); |
$this->mockcal = new Mock_Calendar_Second($this); |
$this->mockcal->setReturnValue('prevYear',2002); |
$this->mockcal->setReturnValue('thisYear',2003); |
$this->mockcal->setReturnValue('nextYear',2004); |
$this->mockcal->setReturnValue('prevMonth',9); |
$this->mockcal->setReturnValue('thisMonth',10); |
$this->mockcal->setReturnValue('nextMonth',11); |
$this->mockcal->setReturnValue('prevDay',14); |
$this->mockcal->setReturnValue('thisDay',15); |
$this->mockcal->setReturnValue('nextDay',16); |
$this->mockcal->setReturnValue('prevHour',12); |
$this->mockcal->setReturnValue('thisHour',13); |
$this->mockcal->setReturnValue('nextHour',14); |
$this->mockcal->setReturnValue('prevMinute',29); |
$this->mockcal->setReturnValue('thisMinute',30); |
$this->mockcal->setReturnValue('nextMinute',31); |
$this->mockcal->setReturnValue('prevSecond',44); |
$this->mockcal->setReturnValue('thisSecond',45); |
$this->mockcal->setReturnValue('nextSecond',46); |
$this->mockcal->setReturnValue('getEngine',$this->mockengine); |
$this->mockcal->setReturnValue('getTimestamp',12345); |
} |
function tearDown() { |
unset ( $this->engine ); |
unset ( $this->mockcal ); |
} |
function testPrevYear() { |
$this->mockcal->expectOnce('prevYear',array('int')); |
$Decorator =& new Calendar_Decorator($this->mockcal); |
$this->assertEqual(2002,$Decorator->prevYear()); |
} |
function testThisYear() { |
$this->mockcal->expectOnce('thisYear',array('int')); |
$Decorator =& new Calendar_Decorator($this->mockcal); |
$this->assertEqual(2003,$Decorator->thisYear()); |
} |
function testNextYear() { |
$this->mockcal->expectOnce('nextYear',array('int')); |
$Decorator =& new Calendar_Decorator($this->mockcal); |
$this->assertEqual(2004,$Decorator->nextYear()); |
} |
function testPrevMonth() { |
$this->mockcal->expectOnce('prevMonth',array('int')); |
$Decorator =& new Calendar_Decorator($this->mockcal); |
$this->assertEqual(9,$Decorator->prevMonth()); |
} |
function testThisMonth() { |
$this->mockcal->expectOnce('thisMonth',array('int')); |
$Decorator =& new Calendar_Decorator($this->mockcal); |
$this->assertEqual(10,$Decorator->thisMonth()); |
} |
function testNextMonth() { |
$this->mockcal->expectOnce('nextMonth',array('int')); |
$Decorator =& new Calendar_Decorator($this->mockcal); |
$this->assertEqual(11,$Decorator->nextMonth()); |
} |
function testPrevWeek() { |
$mockweek = & new Mock_Calendar_Week($this); |
$mockweek->setReturnValue('prevWeek',1); |
$mockweek->expectOnce('prevWeek',array('n_in_month')); |
$Decorator =& new Calendar_Decorator($mockweek); |
$this->assertEqual(1,$Decorator->prevWeek()); |
} |
function testThisWeek() { |
$mockweek = & new Mock_Calendar_Week($this); |
$mockweek->setReturnValue('thisWeek',2); |
$mockweek->expectOnce('thisWeek',array('n_in_month')); |
$Decorator =& new Calendar_Decorator($mockweek); |
$this->assertEqual(2,$Decorator->thisWeek()); |
} |
function testNextWeek() { |
$mockweek = & new Mock_Calendar_Week($this); |
$mockweek->setReturnValue('nextWeek',3); |
$mockweek->expectOnce('nextWeek',array('n_in_month')); |
$Decorator =& new Calendar_Decorator($mockweek); |
$this->assertEqual(3,$Decorator->nextWeek()); |
} |
function testPrevDay() { |
$this->mockcal->expectOnce('prevDay',array('int')); |
$Decorator =& new Calendar_Decorator($this->mockcal); |
$this->assertEqual(14,$Decorator->prevDay()); |
} |
function testThisDay() { |
$this->mockcal->expectOnce('thisDay',array('int')); |
$Decorator =& new Calendar_Decorator($this->mockcal); |
$this->assertEqual(15,$Decorator->thisDay()); |
} |
function testNextDay() { |
$this->mockcal->expectOnce('nextDay',array('int')); |
$Decorator =& new Calendar_Decorator($this->mockcal); |
$this->assertEqual(16,$Decorator->nextDay()); |
} |
function testPrevHour() { |
$this->mockcal->expectOnce('prevHour',array('int')); |
$Decorator =& new Calendar_Decorator($this->mockcal); |
$this->assertEqual(12,$Decorator->prevHour()); |
} |
function testThisHour() { |
$this->mockcal->expectOnce('thisHour',array('int')); |
$Decorator =& new Calendar_Decorator($this->mockcal); |
$this->assertEqual(13,$Decorator->thisHour()); |
} |
function testNextHour() { |
$this->mockcal->expectOnce('nextHour',array('int')); |
$Decorator =& new Calendar_Decorator($this->mockcal); |
$this->assertEqual(14,$Decorator->nextHour()); |
} |
function testPrevMinute() { |
$this->mockcal->expectOnce('prevMinute',array('int')); |
$Decorator =& new Calendar_Decorator($this->mockcal); |
$this->assertEqual(29,$Decorator->prevMinute()); |
} |
function testThisMinute() { |
$this->mockcal->expectOnce('thisMinute',array('int')); |
$Decorator =& new Calendar_Decorator($this->mockcal); |
$this->assertEqual(30,$Decorator->thisMinute()); |
} |
function testNextMinute() { |
$this->mockcal->expectOnce('nextMinute',array('int')); |
$Decorator =& new Calendar_Decorator($this->mockcal); |
$this->assertEqual(31,$Decorator->nextMinute()); |
} |
function testPrevSecond() { |
$this->mockcal->expectOnce('prevSecond',array('int')); |
$Decorator =& new Calendar_Decorator($this->mockcal); |
$this->assertEqual(44,$Decorator->prevSecond()); |
} |
function testThisSecond() { |
$this->mockcal->expectOnce('thisSecond',array('int')); |
$Decorator =& new Calendar_Decorator($this->mockcal); |
$this->assertEqual(45,$Decorator->thisSecond()); |
} |
function testNextSecond() { |
$this->mockcal->expectOnce('nextSecond',array('int')); |
$Decorator =& new Calendar_Decorator($this->mockcal); |
$this->assertEqual(46,$Decorator->nextSecond()); |
} |
function testGetEngine() { |
$Decorator =& new Calendar_Decorator($this->mockcal); |
$this->assertIsA($Decorator->getEngine(),'Mock_Calendar_Engine'); |
} |
function testSetTimestamp() { |
$this->mockcal->expectOnce('setTimestamp',array('12345')); |
$Decorator =& new Calendar_Decorator($this->mockcal); |
$Decorator->setTimestamp('12345'); |
} |
function testGetTimestamp() { |
$Decorator =& new Calendar_Decorator($this->mockcal); |
$this->assertEqual(12345,$Decorator->getTimestamp()); |
} |
function testSetSelected() { |
$this->mockcal->expectOnce('setSelected',array(true)); |
$Decorator =& new Calendar_Decorator($this->mockcal); |
$Decorator->setSelected(); |
} |
function testIsSelected() { |
$this->mockcal->setReturnValue('isSelected',true); |
$Decorator =& new Calendar_Decorator($this->mockcal); |
$this->assertTrue($Decorator->isSelected()); |
} |
function testAdjust() { |
$this->mockcal->expectOnce('adjust',array()); |
$Decorator =& new Calendar_Decorator($this->mockcal); |
$Decorator->adjust(); |
} |
function testToArray() { |
$this->mockcal->expectOnce('toArray',array(12345)); |
$testArray = array('foo'=>'bar'); |
$this->mockcal->setReturnValue('toArray',$testArray); |
$Decorator =& new Calendar_Decorator($this->mockcal); |
$this->assertEqual($testArray,$Decorator->toArray(12345)); |
} |
function testReturnValue() { |
$this->mockcal->expectOnce('returnValue',array('a','b','c','d')); |
$this->mockcal->setReturnValue('returnValue','foo'); |
$Decorator =& new Calendar_Decorator($this->mockcal); |
$this->assertEqual('foo',$Decorator->returnValue('a','b','c','d')); |
} |
function testSetFirst() { |
$mockday = & new Mock_Calendar_Day($this); |
$mockday->expectOnce('setFirst',array(true)); |
$Decorator =& new Calendar_Decorator($mockday); |
$Decorator->setFirst(); |
} |
function testSetLast() { |
$mockday = & new Mock_Calendar_Day($this); |
$mockday->expectOnce('setLast',array(true)); |
$Decorator =& new Calendar_Decorator($mockday); |
$Decorator->setLast(); |
} |
function testIsFirst() { |
$mockday = & new Mock_Calendar_Day($this); |
$mockday->setReturnValue('isFirst',TRUE); |
$Decorator =& new Calendar_Decorator($mockday); |
$this->assertTrue($Decorator->isFirst()); |
} |
function testIsLast() { |
$mockday = & new Mock_Calendar_Day($this); |
$mockday->setReturnValue('isLast',TRUE); |
$Decorator =& new Calendar_Decorator($mockday); |
$this->assertTrue($Decorator->isLast()); |
} |
function testSetEmpty() { |
$mockday = & new Mock_Calendar_Day($this); |
$mockday->expectOnce('setEmpty',array(true)); |
$Decorator =& new Calendar_Decorator($mockday); |
$Decorator->setEmpty(); |
} |
function testIsEmpty() { |
$mockday = & new Mock_Calendar_Day($this); |
$mockday->setReturnValue('isEmpty',TRUE); |
$Decorator =& new Calendar_Decorator($mockday); |
$this->assertTrue($Decorator->isEmpty()); |
} |
function testBuild() { |
$testArray=array('foo'=>'bar'); |
$this->mockcal->expectOnce('build',array($testArray)); |
$Decorator =& new Calendar_Decorator($this->mockcal); |
$Decorator->build($testArray); |
} |
function testFetch() { |
$this->mockcal->expectOnce('fetch',array()); |
$Decorator =& new Calendar_Decorator($this->mockcal); |
$Decorator->fetch(); |
} |
function testFetchAll() { |
$this->mockcal->expectOnce('fetchAll',array()); |
$Decorator =& new Calendar_Decorator($this->mockcal); |
$Decorator->fetchAll(); |
} |
function testSize() { |
$this->mockcal->expectOnce('size',array()); |
$Decorator =& new Calendar_Decorator($this->mockcal); |
$Decorator->size(); |
} |
function testIsValid() { |
$this->mockcal->expectOnce('isValid',array()); |
$Decorator =& new Calendar_Decorator($this->mockcal); |
$Decorator->isValid(); |
} |
function testGetValidator() { |
$this->mockcal->expectOnce('getValidator',array()); |
$Decorator =& new Calendar_Decorator($this->mockcal); |
$Decorator->getValidator(); |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Calendar/tests/month_weeks_test.php |
---|
New file |
0,0 → 1,125 |
<?php |
// $Id: month_weeks_test.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
require_once('simple_include.php'); |
require_once('calendar_include.php'); |
require_once('./calendar_test.php'); |
class TestOfMonthWeeks extends TestOfCalendar { |
function TestOfMonthWeeks() { |
$this->UnitTestCase('Test of Month Weeks'); |
} |
function setUp() { |
$this->cal = new Calendar_Month_Weeks(2003,10); |
} |
function testPrevDay () { |
$this->assertEqual(30,$this->cal->prevDay()); |
} |
function testPrevDay_Array () { |
$this->assertEqual( |
array( |
'year' => 2003, |
'month' => 9, |
'day' => 30, |
'hour' => 0, |
'minute' => 0, |
'second' => 0), |
$this->cal->prevDay('array')); |
} |
function testThisDay () { |
$this->assertEqual(1,$this->cal->thisDay()); |
} |
function testNextDay () { |
$this->assertEqual(2,$this->cal->nextDay()); |
} |
function testPrevHour () { |
$this->assertEqual(23,$this->cal->prevHour()); |
} |
function testThisHour () { |
$this->assertEqual(0,$this->cal->thisHour()); |
} |
function testNextHour () { |
$this->assertEqual(1,$this->cal->nextHour()); |
} |
function testPrevMinute () { |
$this->assertEqual(59,$this->cal->prevMinute()); |
} |
function testThisMinute () { |
$this->assertEqual(0,$this->cal->thisMinute()); |
} |
function testNextMinute () { |
$this->assertEqual(1,$this->cal->nextMinute()); |
} |
function testPrevSecond () { |
$this->assertEqual(59,$this->cal->prevSecond()); |
} |
function testThisSecond () { |
$this->assertEqual(0,$this->cal->thisSecond()); |
} |
function testNextSecond () { |
$this->assertEqual(1,$this->cal->nextSecond()); |
} |
function testGetTimeStamp() { |
$stamp = mktime(0,0,0,10,1,2003); |
$this->assertEqual($stamp,$this->cal->getTimeStamp()); |
} |
} |
class TestOfMonthWeeksBuild extends TestOfMonthWeeks { |
function TestOfMonthWeeksBuild() { |
$this->UnitTestCase('Test of Month_Weeks::build()'); |
} |
function testSize() { |
$this->cal->build(); |
$this->assertEqual(5,$this->cal->size()); |
} |
function testFetch() { |
$this->cal->build(); |
$i=0; |
while ( $Child = $this->cal->fetch() ) { |
$i++; |
} |
$this->assertEqual(5,$i); |
} |
/* Recusive dependency issue with SimpleTest |
function testFetchAll() { |
$this->cal->build(); |
$children = array(); |
$i = 1; |
while ( $Child = $this->cal->fetch() ) { |
$children[$i]=$Child; |
$i++; |
} |
$this->assertEqual($children,$this->cal->fetchAll()); |
} |
*/ |
function testSelection() { |
require_once(CALENDAR_ROOT . 'Week.php'); |
$selection = array(new Calendar_Week(2003, 10, 12)); |
$this->cal->build($selection); |
$i = 1; |
while ($Child = $this->cal->fetch()) { |
if ($i == 2) { |
break; //12-10-2003 is the 2nd day of the week |
} |
$i++; |
} |
$this->assertTrue($Child->isSelected()); |
} |
function testEmptyDaysBefore_AfterAdjust() { |
$this->cal = new Calendar_Month_Weeks(2004,0); |
$this->cal->build(); |
$this->assertEqual(0,$this->cal->tableHelper->getEmptyDaysBefore()); |
} |
} |
if (!defined('TEST_RUNNING')) { |
define('TEST_RUNNING', true); |
$test = &new TestOfMonthWeeks(); |
$test->run(new HtmlReporter()); |
$test = &new TestOfMonthWeeksBuild(); |
$test->run(new HtmlReporter()); |
} |
?> |
/branches/v1.0-menes/api/pear/Calendar/tests/util_textual_test.php |
---|
New file |
0,0 → 1,191 |
<?php |
// $Id: util_textual_test.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
require_once('simple_include.php'); |
require_once('calendar_include.php'); |
require_once('./decorator_test.php'); |
class TestOfUtilTextual extends UnitTestCase { |
var $mockengine; |
var $mockcal; |
function TestOfUtilTextual() { |
$this->UnitTestCase('Test of Calendar_Util_Textual'); |
} |
function setUp() { |
$this->mockengine = new Mock_Calendar_Engine($this); |
$this->mockcal = new Mock_Calendar_Second($this); |
$this->mockcal->setReturnValue('prevYear',2002); |
$this->mockcal->setReturnValue('thisYear',2003); |
$this->mockcal->setReturnValue('nextYear',2004); |
$this->mockcal->setReturnValue('prevMonth',9); |
$this->mockcal->setReturnValue('thisMonth',10); |
$this->mockcal->setReturnValue('nextMonth',11); |
$this->mockcal->setReturnValue('prevDay',14); |
$this->mockcal->setReturnValue('thisDay',15); |
$this->mockcal->setReturnValue('nextDay',16); |
$this->mockcal->setReturnValue('prevHour',12); |
$this->mockcal->setReturnValue('thisHour',13); |
$this->mockcal->setReturnValue('nextHour',14); |
$this->mockcal->setReturnValue('prevMinute',29); |
$this->mockcal->setReturnValue('thisMinute',30); |
$this->mockcal->setReturnValue('nextMinute',31); |
$this->mockcal->setReturnValue('prevSecond',44); |
$this->mockcal->setReturnValue('thisSecond',45); |
$this->mockcal->setReturnValue('nextSecond',46); |
$this->mockcal->setReturnValue('getEngine',$this->mockengine); |
$this->mockcal->setReturnValue('getTimestamp',12345); |
} |
function tearDown() { |
unset ( $this->engine ); |
unset ( $this->mockcal ); |
} |
function testMonthNamesLong() { |
$monthNames = array( |
1=>'January', |
2=>'February', |
3=>'March', |
4=>'April', |
5=>'May', |
6=>'June', |
7=>'July', |
8=>'August', |
9=>'September', |
10=>'October', |
11=>'November', |
12=>'December', |
); |
$this->assertEqual($monthNames,Calendar_Util_Textual::monthNames()); |
} |
function testMonthNamesShort() { |
$monthNames = array( |
1=>'Jan', |
2=>'Feb', |
3=>'Mar', |
4=>'Apr', |
5=>'May', |
6=>'Jun', |
7=>'Jul', |
8=>'Aug', |
9=>'Sep', |
10=>'Oct', |
11=>'Nov', |
12=>'Dec', |
); |
$this->assertEqual($monthNames,Calendar_Util_Textual::monthNames('short')); |
} |
function testMonthNamesTwo() { |
$monthNames = array( |
1=>'Ja', |
2=>'Fe', |
3=>'Ma', |
4=>'Ap', |
5=>'Ma', |
6=>'Ju', |
7=>'Ju', |
8=>'Au', |
9=>'Se', |
10=>'Oc', |
11=>'No', |
12=>'De', |
); |
$this->assertEqual($monthNames,Calendar_Util_Textual::monthNames('two')); |
} |
function testMonthNamesOne() { |
$monthNames = array( |
1=>'J', |
2=>'F', |
3=>'M', |
4=>'A', |
5=>'M', |
6=>'J', |
7=>'J', |
8=>'A', |
9=>'S', |
10=>'O', |
11=>'N', |
12=>'D', |
); |
$this->assertEqual($monthNames,Calendar_Util_Textual::monthNames('one')); |
} |
function testWeekdayNamesLong() { |
$weekdayNames = array( |
0=>'Sunday', |
1=>'Monday', |
2=>'Tuesday', |
3=>'Wednesday', |
4=>'Thursday', |
5=>'Friday', |
6=>'Saturday', |
); |
$this->assertEqual($weekdayNames,Calendar_Util_Textual::weekdayNames()); |
} |
function testWeekdayNamesShort() { |
$weekdayNames = array( |
0=>'Sun', |
1=>'Mon', |
2=>'Tue', |
3=>'Wed', |
4=>'Thu', |
5=>'Fri', |
6=>'Sat', |
); |
$this->assertEqual($weekdayNames,Calendar_Util_Textual::weekdayNames('short')); |
} |
function testWeekdayNamesTwo() { |
$weekdayNames = array( |
0=>'Su', |
1=>'Mo', |
2=>'Tu', |
3=>'We', |
4=>'Th', |
5=>'Fr', |
6=>'Sa', |
); |
$this->assertEqual($weekdayNames,Calendar_Util_Textual::weekdayNames('two')); |
} |
function testWeekdayNamesOne() { |
$weekdayNames = array( |
0=>'S', |
1=>'M', |
2=>'T', |
3=>'W', |
4=>'T', |
5=>'F', |
6=>'S', |
); |
$this->assertEqual($weekdayNames,Calendar_Util_Textual::weekdayNames('one')); |
} |
function testPrevMonthNameShort() { |
$this->assertEqual('Sep',Calendar_Util_Textual::prevMonthName($this->mockcal,'short')); |
} |
function testThisMonthNameShort() { |
$this->assertEqual('Oct',Calendar_Util_Textual::thisMonthName($this->mockcal,'short')); |
} |
function testNextMonthNameShort() { |
$this->assertEqual('Nov',Calendar_Util_Textual::nextMonthName($this->mockcal,'short')); |
} |
function testThisDayNameShort() { |
$this->assertEqual('Wed',Calendar_Util_Textual::thisDayName($this->mockcal,'short')); |
} |
function testOrderedWeekdaysShort() { |
$weekdayNames = array( |
0=>'Sun', |
1=>'Mon', |
2=>'Tue', |
3=>'Wed', |
4=>'Thu', |
5=>'Fri', |
6=>'Sat', |
); |
$this->assertEqual($weekdayNames,Calendar_Util_Textual::orderedWeekdays($this->mockcal,'short')); |
} |
} |
if (!defined('TEST_RUNNING')) { |
define('TEST_RUNNING', true); |
$test = &new TestOfUtilTextual(); |
$test->run(new HtmlReporter()); |
} |
?> |
/branches/v1.0-menes/api/pear/Calendar/tests/validator_unit_test.php |
---|
New file |
0,0 → 1,210 |
<?php |
// $Id: validator_unit_test.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
require_once('simple_include.php'); |
require_once('calendar_include.php'); |
Mock::generate('Calendar_Engine_Interface','Mock_Calendar_Engine'); |
Mock::generate('Calendar_Second','Mock_Calendar_Second'); |
class TestOfValidator extends UnitTestCase { |
var $mockengine; |
var $mockcal; |
function TestOfValidator() { |
$this->UnitTestCase('Test of Validator'); |
} |
function setUp() { |
$this->mockengine = new Mock_Calendar_Engine($this); |
$this->mockengine->setReturnValue('getMinYears',1970); |
$this->mockengine->setReturnValue('getMaxYears',2037); |
$this->mockengine->setReturnValue('getMonthsInYear',12); |
$this->mockengine->setReturnValue('getDaysInMonth',30); |
$this->mockengine->setReturnValue('getHoursInDay',24); |
$this->mockengine->setReturnValue('getMinutesInHour',60); |
$this->mockengine->setReturnValue('getSecondsInMinute',60); |
$this->mockcal = new Mock_Calendar_Second($this); |
$this->mockcal->setReturnValue('getEngine',$this->mockengine); |
} |
function tearDown() { |
unset ($this->mockengine); |
unset ($this->mocksecond); |
} |
function testIsValidYear() { |
$this->mockcal->setReturnValue('thisYear',2000); |
$Validator = & new Calendar_Validator($this->mockcal); |
$this->assertTrue($Validator->isValidYear()); |
} |
function testIsValidYearTooSmall() { |
$this->mockcal->setReturnValue('thisYear',1969); |
$Validator = & new Calendar_Validator($this->mockcal); |
$this->assertFalse($Validator->isValidYear()); |
} |
function testIsValidYearTooLarge() { |
$this->mockcal->setReturnValue('thisYear',2038); |
$Validator = & new Calendar_Validator($this->mockcal); |
$this->assertFalse($Validator->isValidYear()); |
} |
function testIsValidMonth() { |
$this->mockcal->setReturnValue('thisMonth',10); |
$Validator = & new Calendar_Validator($this->mockcal); |
$this->assertTrue($Validator->isValidMonth()); |
} |
function testIsValidMonthTooSmall() { |
$this->mockcal->setReturnValue('thisMonth',0); |
$Validator = & new Calendar_Validator($this->mockcal); |
$this->assertFalse($Validator->isValidMonth()); |
} |
function testIsValidMonthTooLarge() { |
$this->mockcal->setReturnValue('thisMonth',13); |
$Validator = & new Calendar_Validator($this->mockcal); |
$this->assertFalse($Validator->isValidMonth()); |
} |
function testIsValidDay() { |
$this->mockcal->setReturnValue('thisDay',10); |
$Validator = & new Calendar_Validator($this->mockcal); |
$this->assertTrue($Validator->isValidDay()); |
} |
function testIsValidDayTooSmall() { |
$this->mockcal->setReturnValue('thisDay',0); |
$Validator = & new Calendar_Validator($this->mockcal); |
$this->assertFalse($Validator->isValidDay()); |
} |
function testIsValidDayTooLarge() { |
$this->mockcal->setReturnValue('thisDay',31); |
$Validator = & new Calendar_Validator($this->mockcal); |
$this->assertFalse($Validator->isValidDay()); |
} |
function testIsValidHour() { |
$this->mockcal->setReturnValue('thisHour',10); |
$Validator = & new Calendar_Validator($this->mockcal); |
$this->assertTrue($Validator->isValidHour()); |
} |
function testIsValidHourTooSmall() { |
$this->mockcal->setReturnValue('thisHour',-1); |
$Validator = & new Calendar_Validator($this->mockcal); |
$this->assertFalse($Validator->isValidHour()); |
} |
function testIsValidHourTooLarge() { |
$this->mockcal->setReturnValue('thisHour',24); |
$Validator = & new Calendar_Validator($this->mockcal); |
$this->assertFalse($Validator->isValidHour()); |
} |
function testIsValidMinute() { |
$this->mockcal->setReturnValue('thisMinute',30); |
$Validator = & new Calendar_Validator($this->mockcal); |
$this->assertTrue($Validator->isValidMinute()); |
} |
function testIsValidMinuteTooSmall() { |
$this->mockcal->setReturnValue('thisMinute',-1); |
$Validator = & new Calendar_Validator($this->mockcal); |
$this->assertFalse($Validator->isValidMinute()); |
} |
function testIsValidMinuteTooLarge() { |
$this->mockcal->setReturnValue('thisMinute',60); |
$Validator = & new Calendar_Validator($this->mockcal); |
$this->assertFalse($Validator->isValidMinute()); |
} |
function testIsValidSecond() { |
$this->mockcal->setReturnValue('thisSecond',30); |
$Validator = & new Calendar_Validator($this->mockcal); |
$this->assertTrue($Validator->isValidSecond()); |
} |
function testIsValidSecondTooSmall() { |
$this->mockcal->setReturnValue('thisSecond',-1); |
$Validator = & new Calendar_Validator($this->mockcal); |
$this->assertFalse($Validator->isValidSecond()); |
} |
function testIsValidSecondTooLarge() { |
$this->mockcal->setReturnValue('thisSecond',60); |
$Validator = & new Calendar_Validator($this->mockcal); |
$this->assertFalse($Validator->isValidSecond()); |
} |
function testIsValid() { |
$this->mockcal->setReturnValue('thisYear',2000); |
$this->mockcal->setReturnValue('thisMonth',5); |
$this->mockcal->setReturnValue('thisDay',15); |
$this->mockcal->setReturnValue('thisHour',13); |
$this->mockcal->setReturnValue('thisMinute',30); |
$this->mockcal->setReturnValue('thisSecond',40); |
$Validator = & new Calendar_Validator($this->mockcal); |
$this->assertTrue($Validator->isValid()); |
} |
function testIsValidAllWrong() { |
$this->mockcal->setReturnValue('thisYear',2038); |
$this->mockcal->setReturnValue('thisMonth',13); |
$this->mockcal->setReturnValue('thisDay',31); |
$this->mockcal->day = 31; |
$this->mockcal->setReturnValue('thisHour',24); |
$this->mockcal->setReturnValue('thisMinute',60); |
$this->mockcal->setReturnValue('thisSecond',60); |
$Validator = & new Calendar_Validator($this->mockcal); |
$this->assertFalse($Validator->isValid()); |
$i = 0; |
while ( $Validator->fetch() ) { |
$i++; |
} |
$this->assertEqual($i,6); |
} |
} |
class TestOfValidatorLive extends UnitTestCase { |
function TestOfValidatorLive() { |
$this->UnitTestCase('Test of Validator Live'); |
} |
function testYear() { |
$Unit = new Calendar_Year(2038); |
$Validator = & $Unit->getValidator(); |
$this->assertFalse($Validator->isValidYear()); |
} |
function testMonth() { |
$Unit = new Calendar_Month(2000,13); |
$Validator = & $Unit->getValidator(); |
$this->assertFalse($Validator->isValidMonth()); |
} |
/* |
function testWeek() { |
$Unit = new Calendar_Week(2000,12,7); |
$Validator = & $Unit->getValidator(); |
$this->assertFalse($Validator->isValidWeek()); |
} |
*/ |
function testDay() { |
$Unit = new Calendar_Day(2000,12,32); |
$Validator = & $Unit->getValidator(); |
$this->assertFalse($Validator->isValidDay()); |
} |
function testHour() { |
$Unit = new Calendar_Hour(2000,12,20,24); |
$Validator = & $Unit->getValidator(); |
$this->assertFalse($Validator->isValidHour()); |
} |
function testMinute() { |
$Unit = new Calendar_Minute(2000,12,20,23,60); |
$Validator = & $Unit->getValidator(); |
$this->assertFalse($Validator->isValidMinute()); |
} |
function testSecond() { |
$Unit = new Calendar_Second(2000,12,20,23,59,60); |
$Validator = & $Unit->getValidator(); |
$this->assertFalse($Validator->isValidSecond()); |
} |
function testAllBad() { |
$Unit = new Calendar_Second(2000,13,32,24,60,60); |
$this->assertFalse($Unit->isValid()); |
$Validator = & $Unit->getValidator(); |
$i = 0; |
while ( $Validator->fetch() ) { |
$i++; |
} |
$this->assertEqual($i,5); |
} |
} |
if (!defined('TEST_RUNNING')) { |
define('TEST_RUNNING', true); |
$test = &new TestOfValidator(); |
$test->run(new HtmlReporter()); |
$test = &new TestOfValidatorLive(); |
$test->run(new HtmlReporter()); |
} |
?> |
/branches/v1.0-menes/api/pear/Calendar/tests/month_test.php |
---|
New file |
0,0 → 1,119 |
<?php |
// $Id: month_test.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
require_once('simple_include.php'); |
require_once('calendar_include.php'); |
require_once('./calendar_test.php'); |
class TestOfMonth extends TestOfCalendar { |
function TestOfMonth() { |
$this->UnitTestCase('Test of Month'); |
} |
function setUp() { |
$this->cal = new Calendar_Month(2003,10); |
} |
function testPrevMonth_Object() { |
$this->assertEqual(new Calendar_Month(2003, 9), $this->cal->prevMonth('object')); |
} |
function testPrevDay () { |
$this->assertEqual(30,$this->cal->prevDay()); |
} |
function testPrevDay_Array () { |
$this->assertEqual( |
array( |
'year' => 2003, |
'month' => 9, |
'day' => 30, |
'hour' => 0, |
'minute' => 0, |
'second' => 0), |
$this->cal->prevDay('array')); |
} |
function testThisDay () { |
$this->assertEqual(1,$this->cal->thisDay()); |
} |
function testNextDay () { |
$this->assertEqual(2,$this->cal->nextDay()); |
} |
function testPrevHour () { |
$this->assertEqual(23,$this->cal->prevHour()); |
} |
function testThisHour () { |
$this->assertEqual(0,$this->cal->thisHour()); |
} |
function testNextHour () { |
$this->assertEqual(1,$this->cal->nextHour()); |
} |
function testPrevMinute () { |
$this->assertEqual(59,$this->cal->prevMinute()); |
} |
function testThisMinute () { |
$this->assertEqual(0,$this->cal->thisMinute()); |
} |
function testNextMinute () { |
$this->assertEqual(1,$this->cal->nextMinute()); |
} |
function testPrevSecond () { |
$this->assertEqual(59,$this->cal->prevSecond()); |
} |
function testThisSecond () { |
$this->assertEqual(0,$this->cal->thisSecond()); |
} |
function testNextSecond () { |
$this->assertEqual(1,$this->cal->nextSecond()); |
} |
function testGetTimeStamp() { |
$stamp = mktime(0,0,0,10,1,2003); |
$this->assertEqual($stamp,$this->cal->getTimeStamp()); |
} |
} |
class TestOfMonthBuild extends TestOfMonth { |
function TestOfMonthBuild() { |
$this->UnitTestCase('Test of Month::build()'); |
} |
function testSize() { |
$this->cal->build(); |
$this->assertEqual(31,$this->cal->size()); |
} |
function testFetch() { |
$this->cal->build(); |
$i=0; |
while ( $Child = $this->cal->fetch() ) { |
$i++; |
} |
$this->assertEqual(31,$i); |
} |
function testFetchAll() { |
$this->cal->build(); |
$children = array(); |
$i = 1; |
while ( $Child = $this->cal->fetch() ) { |
$children[$i]=$Child; |
$i++; |
} |
$this->assertEqual($children,$this->cal->fetchAll()); |
} |
function testSelection() { |
require_once(CALENDAR_ROOT . 'Day.php'); |
$selection = array(new Calendar_Day(2003,10,25)); |
$this->cal->build($selection); |
$i = 1; |
while ( $Child = $this->cal->fetch() ) { |
if ( $i == 25 ) |
break; |
$i++; |
} |
$this->assertTrue($Child->isSelected()); |
} |
} |
if (!defined('TEST_RUNNING')) { |
define('TEST_RUNNING', true); |
$test = &new TestOfMonth(); |
$test->run(new HtmlReporter()); |
$test = &new TestOfMonthBuild(); |
$test->run(new HtmlReporter()); |
} |
?> |
/branches/v1.0-menes/api/pear/Calendar/tests/decorator_textual_test.php |
---|
New file |
0,0 → 1,174 |
<?php |
// $Id: decorator_textual_test.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
require_once('simple_include.php'); |
require_once('calendar_include.php'); |
require_once('./decorator_test.php'); |
class TestOfDecoratorTextual extends TestOfDecorator { |
function TestOfDecoratorTextual() { |
$this->UnitTestCase('Test of Calendar_Decorator_Textual'); |
} |
function testMonthNamesLong() { |
$Textual = new Calendar_Decorator_Textual($this->mockcal); |
$monthNames = array( |
1=>'January', |
2=>'February', |
3=>'March', |
4=>'April', |
5=>'May', |
6=>'June', |
7=>'July', |
8=>'August', |
9=>'September', |
10=>'October', |
11=>'November', |
12=>'December', |
); |
$this->assertEqual($monthNames,$Textual->monthNames()); |
} |
function testMonthNamesShort() { |
$Textual = new Calendar_Decorator_Textual($this->mockcal); |
$monthNames = array( |
1=>'Jan', |
2=>'Feb', |
3=>'Mar', |
4=>'Apr', |
5=>'May', |
6=>'Jun', |
7=>'Jul', |
8=>'Aug', |
9=>'Sep', |
10=>'Oct', |
11=>'Nov', |
12=>'Dec', |
); |
$this->assertEqual($monthNames,$Textual->monthNames('short')); |
} |
function testMonthNamesTwo() { |
$Textual = new Calendar_Decorator_Textual($this->mockcal); |
$monthNames = array( |
1=>'Ja', |
2=>'Fe', |
3=>'Ma', |
4=>'Ap', |
5=>'Ma', |
6=>'Ju', |
7=>'Ju', |
8=>'Au', |
9=>'Se', |
10=>'Oc', |
11=>'No', |
12=>'De', |
); |
$this->assertEqual($monthNames,$Textual->monthNames('two')); |
} |
function testMonthNamesOne() { |
$Textual = new Calendar_Decorator_Textual($this->mockcal); |
$monthNames = array( |
1=>'J', |
2=>'F', |
3=>'M', |
4=>'A', |
5=>'M', |
6=>'J', |
7=>'J', |
8=>'A', |
9=>'S', |
10=>'O', |
11=>'N', |
12=>'D', |
); |
$this->assertEqual($monthNames,$Textual->monthNames('one')); |
} |
function testWeekdayNamesLong() { |
$Textual = new Calendar_Decorator_Textual($this->mockcal); |
$weekdayNames = array( |
0=>'Sunday', |
1=>'Monday', |
2=>'Tuesday', |
3=>'Wednesday', |
4=>'Thursday', |
5=>'Friday', |
6=>'Saturday', |
); |
$this->assertEqual($weekdayNames,$Textual->weekdayNames()); |
} |
function testWeekdayNamesShort() { |
$Textual = new Calendar_Decorator_Textual($this->mockcal); |
$weekdayNames = array( |
0=>'Sun', |
1=>'Mon', |
2=>'Tue', |
3=>'Wed', |
4=>'Thu', |
5=>'Fri', |
6=>'Sat', |
); |
$this->assertEqual($weekdayNames,$Textual->weekdayNames('short')); |
} |
function testWeekdayNamesTwo() { |
$Textual = new Calendar_Decorator_Textual($this->mockcal); |
$weekdayNames = array( |
0=>'Su', |
1=>'Mo', |
2=>'Tu', |
3=>'We', |
4=>'Th', |
5=>'Fr', |
6=>'Sa', |
); |
$this->assertEqual($weekdayNames,$Textual->weekdayNames('two')); |
} |
function testWeekdayNamesOne() { |
$Textual = new Calendar_Decorator_Textual($this->mockcal); |
$weekdayNames = array( |
0=>'S', |
1=>'M', |
2=>'T', |
3=>'W', |
4=>'T', |
5=>'F', |
6=>'S', |
); |
$this->assertEqual($weekdayNames,$Textual->weekdayNames('one')); |
} |
function testPrevMonthNameShort() { |
$Textual = new Calendar_Decorator_Textual($this->mockcal); |
$this->assertEqual('Sep',$Textual->prevMonthName('short')); |
} |
function testThisMonthNameShort() { |
$Textual = new Calendar_Decorator_Textual($this->mockcal); |
$this->assertEqual('Oct',$Textual->thisMonthName('short')); |
} |
function testNextMonthNameShort() { |
$Textual = new Calendar_Decorator_Textual($this->mockcal); |
$this->assertEqual('Nov',$Textual->nextMonthName('short')); |
} |
function testThisDayNameShort() { |
$Textual = new Calendar_Decorator_Textual($this->mockcal); |
$this->assertEqual('Wed',$Textual->thisDayName('short')); |
} |
function testOrderedWeekdaysShort() { |
$weekdayNames = array( |
0=>'Sun', |
1=>'Mon', |
2=>'Tue', |
3=>'Wed', |
4=>'Thu', |
5=>'Fri', |
6=>'Sat', |
); |
$Textual = new Calendar_Decorator_Textual($this->mockcal); |
$this->assertEqual($weekdayNames,$Textual->orderedWeekdays('short')); |
} |
} |
if (!defined('TEST_RUNNING')) { |
define('TEST_RUNNING', true); |
$test = &new TestOfDecoratorTextual(); |
$test->run(new HtmlReporter()); |
} |
?> |
/branches/v1.0-menes/api/pear/Calendar/tests/all_tests.php |
---|
New file |
0,0 → 1,34 |
<?php |
// $Id: all_tests.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
require_once('simple_include.php'); |
require_once('calendar_include.php'); |
define("TEST_RUNNING", true); |
require_once('./calendar_tests.php'); |
require_once('./calendar_tabular_tests.php'); |
require_once('./validator_tests.php'); |
require_once('./calendar_engine_tests.php'); |
require_once('./calendar_engine_tests.php'); |
require_once('./table_helper_tests.php'); |
require_once('./decorator_tests.php'); |
require_once('./util_tests.php'); |
class AllTests extends GroupTest { |
function AllTests() { |
$this->GroupTest('All PEAR::Calendar Tests'); |
$this->AddTestCase(new CalendarTests()); |
$this->AddTestCase(new CalendarTabularTests()); |
$this->AddTestCase(new ValidatorTests()); |
$this->AddTestCase(new CalendarEngineTests()); |
$this->AddTestCase(new TableHelperTests()); |
$this->AddTestCase(new DecoratorTests()); |
$this->AddTestCase(new UtilTests()); |
} |
} |
$test = &new AllTests(); |
$test->run(new HtmlReporter()); |
?> |
/branches/v1.0-menes/api/pear/Calendar/tests/week_test.php |
---|
New file |
0,0 → 1,226 |
<?php |
// $Id: week_test.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
require_once('simple_include.php'); |
require_once('calendar_include.php'); |
require_once('./calendar_test.php'); |
class TestOfWeek extends TestOfCalendar { |
function TestOfWeek() { |
$this->UnitTestCase('Test of Week'); |
} |
function setUp() { |
$this->cal = new Calendar_Week(2003, 10, 9, 1); //force firstDay = monday |
//print_r($this->cal); |
} |
function testPrevDay () { |
$this->assertEqual(8, $this->cal->prevDay()); |
} |
function testPrevDay_Array () { |
$this->assertEqual( |
array( |
'year' => 2003, |
'month' => 10, |
'day' => 8, |
'hour' => 0, |
'minute' => 0, |
'second' => 0), |
$this->cal->prevDay('array')); |
} |
function testThisDay () { |
$this->assertEqual(9, $this->cal->thisDay()); |
} |
function testNextDay () { |
$this->assertEqual(10, $this->cal->nextDay()); |
} |
function testPrevHour () { |
$this->assertEqual(23, $this->cal->prevHour()); |
} |
function testThisHour () { |
$this->assertEqual(0, $this->cal->thisHour()); |
} |
function testNextHour () { |
$this->assertEqual(1, $this->cal->nextHour()); |
} |
function testPrevMinute () { |
$this->assertEqual(59, $this->cal->prevMinute()); |
} |
function testThisMinute () { |
$this->assertEqual(0, $this->cal->thisMinute()); |
} |
function testNextMinute () { |
$this->assertEqual(1, $this->cal->nextMinute()); |
} |
function testPrevSecond () { |
$this->assertEqual(59, $this->cal->prevSecond()); |
} |
function testThisSecond () { |
$this->assertEqual(0, $this->cal->thisSecond()); |
} |
function testNextSecond () { |
$this->assertEqual(1, $this->cal->nextSecond()); |
} |
function testGetTimeStamp() { |
$stamp = mktime(0,0,0,10,9,2003); |
$this->assertEqual($stamp,$this->cal->getTimeStamp()); |
} |
function testNewTimeStamp() { |
$stamp = mktime(0,0,0,7,28,2004); |
$this->cal->setTimestamp($stamp); |
$this->assertEqual('30 2004', date('W Y', $this->cal->prevWeek(true))); |
$this->assertEqual('31 2004', date('W Y', $this->cal->thisWeek(true))); |
$this->assertEqual('32 2004', date('W Y', $this->cal->nextWeek(true))); |
} |
function testPrevWeekInMonth() { |
$this->assertEqual(1, $this->cal->prevWeek()); |
} |
function testThisWeekInMonth() { |
$this->assertEqual(2, $this->cal->thisWeek()); |
} |
function testNextWeekInMonth() { |
$this->assertEqual(3, $this->cal->nextWeek()); |
} |
function testPrevWeekInYear() { |
$this->assertEqual(40, $this->cal->prevWeek('n_in_year')); |
} |
function testThisWeekInYear() { |
$this->assertEqual(41, $this->cal->thisWeek('n_in_year')); |
} |
function testNextWeekInYear() { |
$this->assertEqual(42, $this->cal->nextWeek('n_in_year')); |
} |
function testPrevWeekArray() { |
$testArray = array( |
'year'=>2003, |
'month'=>9, |
'day'=>29, |
'hour'=>0, |
'minute'=>0, |
'second'=>0 |
); |
$this->assertEqual($testArray, $this->cal->prevWeek('array')); |
} |
function testThisWeekArray() { |
$testArray = array( |
'year'=>2003, |
'month'=>10, |
'day'=>6, |
'hour'=>0, |
'minute'=>0, |
'second'=>0 |
); |
$this->assertEqual($testArray, $this->cal->thisWeek('array')); |
} |
function testNextWeekArray() { |
$testArray = array( |
'year'=>2003, |
'month'=>10, |
'day'=>13, |
'hour'=>0, |
'minute'=>0, |
'second'=>0 |
); |
$this->assertEqual($testArray, $this->cal->nextWeek('array')); |
} |
function testPrevWeekObject() { |
$testWeek = new Calendar_Week(2003,9,29); |
$Week = $this->cal->prevWeek('object'); |
$this->assertEqual($testWeek->getTimeStamp(),$Week->getTimeStamp()); |
} |
function testThisWeekObject() { |
$testWeek = new Calendar_Week(2003,10,6); |
$Week = $this->cal->thisWeek('object'); |
$this->assertEqual($testWeek->getTimeStamp(),$Week->getTimeStamp()); |
} |
function testNextWeekObject() { |
$testWeek = new Calendar_Week(2003,10,13); |
$Week = $this->cal->nextWeek('object'); |
$this->assertEqual($testWeek->getTimeStamp(),$Week->getTimeStamp()); |
} |
} |
class TestOfWeekBuild extends TestOfWeek { |
function TestOfWeekBuild() { |
$this->UnitTestCase('Test of Week::build()'); |
} |
function testSize() { |
$this->cal->build(); |
$this->assertEqual(7, $this->cal->size()); |
} |
function testFetch() { |
$this->cal->build(); |
$i=0; |
while ($Child = $this->cal->fetch()) { |
$i++; |
} |
$this->assertEqual(7, $i); |
} |
function testFetchAll() { |
$this->cal->build(); |
$children = array(); |
$i = 1; |
while ( $Child = $this->cal->fetch() ) { |
$children[$i]=$Child; |
$i++; |
} |
$this->assertEqual($children,$this->cal->fetchAll()); |
} |
function testSelection() { |
require_once(CALENDAR_ROOT . 'Day.php'); |
$selection = array(new Calendar_Day(2003, 10, 7)); |
$this->cal->build($selection); |
$i = 1; |
while ($Child = $this->cal->fetch()) { |
if ($i == 2) { |
break; //07-10-2003 is the 2nd day of the week |
} |
$i++; |
} |
$this->assertTrue($Child->isSelected()); |
} |
function testSelectionCornerCase() { |
require_once(CALENDAR_ROOT . 'Day.php'); |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ new Calendar_Day(2004, 01, 03) |
+ ); |
+ $this->cal = new Calendar_Week(2003, 12, 31, 0); |
+ |
+ |
+ $this->assertTrue($Day->isSelected()); |
+ } |
+ |
+ |
+ |
+ $this->assertTrue($Day->isSelected()); |
+ } |
+ } |
+} |
+if (!defined('TEST_RUNNING')) { |
+ define('TEST_RUNNING', true); |
+ $test = &new TestOfWeek(); |
+ $test->run(new HtmlReporter()); |
+ $test = &new TestOfWeekBuild(); |
+ $test->run(new HtmlReporter()); |
+} |
+?> |
\ No newline at end of file |
/branches/v1.0-menes/api/pear/Calendar/tests/calendar_tests.php |
---|
New file |
0,0 → 1,25 |
<?php |
// $Id: calendar_tests.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
require_once('simple_include.php'); |
require_once('calendar_include.php'); |
class CalendarTests extends GroupTest { |
function CalendarTests() { |
$this->GroupTest('Calendar Tests'); |
$this->addTestFile('calendar_test.php'); |
$this->addTestFile('year_test.php'); |
$this->addTestFile('month_test.php'); |
$this->addTestFile('day_test.php'); |
$this->addTestFile('hour_test.php'); |
$this->addTestFile('minute_test.php'); |
$this->addTestFile('second_test.php'); |
} |
} |
if (!defined('TEST_RUNNING')) { |
define('TEST_RUNNING', true); |
$test = &new CalendarTests(); |
$test->run(new HtmlReporter()); |
} |
?> |
/branches/v1.0-menes/api/pear/Calendar/tests/util_uri_test.php |
---|
New file |
0,0 → 1,54 |
<?php |
// $Id: util_uri_test.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
require_once('simple_include.php'); |
require_once('calendar_include.php'); |
Mock::generate('Calendar_Day','Mock_Calendar_Day'); |
Mock::generate('Calendar_Engine_Interface','Mock_Calendar_Engine'); |
class TestOfUtilUri extends UnitTestCase { |
var $MockCal; |
function TestOfUtilUri() { |
$this->UnitTestCase('Test of Calendar_Util_Uri'); |
} |
function setUp() { |
$this->MockCal = & new Mock_Calendar_Day($this); |
$this->MockCal->setReturnValue('getEngine',new Mock_Calendar_Engine($this)); |
} |
function testFragments() { |
$Uri = new Calendar_Util_Uri('y','m','d','h','m','s'); |
$Uri->setFragments('year','month','day','hour','minute','second'); |
$this->assertEqual( |
'year=&month=&day=&hour=&minute=&second=', |
$Uri->this($this->MockCal, 'second') |
); |
} |
function testScalarFragments() { |
$Uri = new Calendar_Util_Uri('year','month','day','hour','minute','second'); |
$Uri->scalar = true; |
$this->assertEqual( |
'&&&&&', |
$Uri->this($this->MockCal, 'second') |
); |
} |
function testSetSeperator() { |
$Uri = new Calendar_Util_Uri('year','month','day','hour','minute','second'); |
$Uri->separator = '/'; |
$this->assertEqual( |
'year=/month=/day=/hour=/minute=/second=', |
$Uri->this($this->MockCal, 'second') |
); |
} |
} |
if (!defined('TEST_RUNNING')) { |
define('TEST_RUNNING', true); |
$test = &new TestOfUtilUri(); |
$test->run(new HtmlReporter()); |
} |
?> |
/branches/v1.0-menes/api/pear/Calendar/tests/simple_include.php |
---|
New file |
0,0 → 1,10 |
<?php |
// $Id: simple_include.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
if (!defined('SIMPLE_TEST')) { |
define('SIMPLE_TEST', '../../../simpletest/'); |
} |
require_once(SIMPLE_TEST . 'unit_tester.php'); |
require_once(SIMPLE_TEST . 'reporter.php'); |
require_once(SIMPLE_TEST . 'mock_objects.php'); |
?> |
/branches/v1.0-menes/api/pear/Calendar/tests/validator_error_test.php |
---|
New file |
0,0 → 1,34 |
<?php |
// $Id: validator_error_test.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
require_once('simple_include.php'); |
require_once('calendar_include.php'); |
class TestOfValidationError extends UnitTestCase { |
var $vError; |
function TestOfValidationError() { |
$this->UnitTestCase('Test of Validation Error'); |
} |
function setUp() { |
$this->vError = new Calendar_Validation_Error('foo',20,'bar'); |
} |
function testGetUnit() { |
$this->assertEqual($this->vError->getUnit(),'foo'); |
} |
function testGetValue() { |
$this->assertEqual($this->vError->getValue(),20); |
} |
function testGetMessage() { |
$this->assertEqual($this->vError->getMessage(),'bar'); |
} |
function testToString() { |
$this->assertEqual($this->vError->toString(),'foo = 20 [bar]'); |
} |
} |
if (!defined('TEST_RUNNING')) { |
define('TEST_RUNNING', true); |
$test = &new TestOfValidationError(); |
$test->run(new HtmlReporter()); |
} |
?> |
/branches/v1.0-menes/api/pear/Calendar/tests/util_tests.php |
---|
New file |
0,0 → 1,20 |
<?php |
// $Id: util_tests.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
require_once('simple_include.php'); |
require_once('calendar_include.php'); |
class UtilTests extends GroupTest { |
function UtilTests() { |
$this->GroupTest('Util Tests'); |
$this->addTestFile('util_uri_test.php'); |
$this->addTestFile('util_textual_test.php'); |
} |
} |
if (!defined('TEST_RUNNING')) { |
define('TEST_RUNNING', true); |
$test = &new UtilTests(); |
$test->run(new HtmlReporter()); |
} |
?> |
/branches/v1.0-menes/api/pear/Calendar/tests/year_test.php |
---|
New file |
0,0 → 1,142 |
<?php |
// $Id: year_test.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
require_once('simple_include.php'); |
require_once('calendar_include.php'); |
require_once('./calendar_test.php'); |
class TestOfYear extends TestOfCalendar { |
function TestOfYear() { |
$this->UnitTestCase('Test of Year'); |
} |
function setUp() { |
$this->cal = new Calendar_Year(2003); |
} |
function testPrevYear_Object() { |
$this->assertEqual(new Calendar_Year(2002), $this->cal->prevYear('object')); |
} |
function testThisYear_Object() { |
$this->assertEqual(new Calendar_Year(2003), $this->cal->thisYear('object')); |
} |
function testPrevMonth () { |
$this->assertEqual(12,$this->cal->prevMonth()); |
} |
function testPrevMonth_Array () { |
$this->assertEqual( |
array( |
'year' => 2002, |
'month' => 12, |
'day' => 1, |
'hour' => 0, |
'minute' => 0, |
'second' => 0), |
$this->cal->prevMonth('array')); |
} |
function testThisMonth () { |
$this->assertEqual(1,$this->cal->thisMonth()); |
} |
function testNextMonth () { |
$this->assertEqual(2,$this->cal->nextMonth()); |
} |
function testPrevDay () { |
$this->assertEqual(31,$this->cal->prevDay()); |
} |
function testPrevDay_Array () { |
$this->assertEqual( |
array( |
'year' => 2002, |
'month' => 12, |
'day' => 31, |
'hour' => 0, |
'minute' => 0, |
'second' => 0), |
$this->cal->prevDay('array')); |
} |
function testThisDay () { |
$this->assertEqual(1,$this->cal->thisDay()); |
} |
function testNextDay () { |
$this->assertEqual(2,$this->cal->nextDay()); |
} |
function testPrevHour () { |
$this->assertEqual(23,$this->cal->prevHour()); |
} |
function testThisHour () { |
$this->assertEqual(0,$this->cal->thisHour()); |
} |
function testNextHour () { |
$this->assertEqual(1,$this->cal->nextHour()); |
} |
function testPrevMinute () { |
$this->assertEqual(59,$this->cal->prevMinute()); |
} |
function testThisMinute () { |
$this->assertEqual(0,$this->cal->thisMinute()); |
} |
function testNextMinute () { |
$this->assertEqual(1,$this->cal->nextMinute()); |
} |
function testPrevSecond () { |
$this->assertEqual(59,$this->cal->prevSecond()); |
} |
function testThisSecond () { |
$this->assertEqual(0,$this->cal->thisSecond()); |
} |
function testNextSecond () { |
$this->assertEqual(1,$this->cal->nextSecond()); |
} |
function testGetTimeStamp() { |
$stamp = mktime(0,0,0,1,1,2003); |
$this->assertEqual($stamp,$this->cal->getTimeStamp()); |
} |
} |
class TestOfYearBuild extends TestOfYear { |
function TestOfYearBuild() { |
$this->UnitTestCase('Test of Year::build()'); |
} |
function testSize() { |
$this->cal->build(); |
$this->assertEqual(12,$this->cal->size()); |
} |
function testFetch() { |
$this->cal->build(); |
$i=0; |
while ( $Child = $this->cal->fetch() ) { |
$i++; |
} |
$this->assertEqual(12,$i); |
} |
function testFetchAll() { |
$this->cal->build(); |
$children = array(); |
$i = 1; |
while ( $Child = $this->cal->fetch() ) { |
$children[$i]=$Child; |
$i++; |
} |
$this->assertEqual($children,$this->cal->fetchAll()); |
} |
function testSelection() { |
require_once(CALENDAR_ROOT . 'Month.php'); |
$selection = array(new Calendar_Month(2003,10)); |
$this->cal->build($selection); |
$i = 1; |
while ( $Child = $this->cal->fetch() ) { |
if ( $i == 10 ) |
break; |
$i++; |
} |
$this->assertTrue($Child->isSelected()); |
} |
} |
if (!defined('TEST_RUNNING')) { |
define('TEST_RUNNING', true); |
$test = &new TestOfYear(); |
$test->run(new HtmlReporter()); |
$test = &new TestOfYearBuild(); |
$test->run(new HtmlReporter()); |
} |
?> |
/branches/v1.0-menes/api/pear/Calendar/tests/decorator_uri_test.php |
---|
New file |
0,0 → 1,37 |
<?php |
// $Id: decorator_uri_test.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
require_once('simple_include.php'); |
require_once('calendar_include.php'); |
require_once('./decorator_test.php'); |
class TestOfDecoratorUri extends TestOfDecorator { |
function TestOfDecoratorUri() { |
$this->UnitTestCase('Test of Calendar_Decorator_Uri'); |
} |
function testFragments() { |
$Uri = new Calendar_Decorator_Uri($this->mockcal); |
$Uri->setFragments('year','month','day','hour','minute','second'); |
$this->assertEqual('year=&month=&day=&hour=&minute=&second=',$Uri->this('second')); |
} |
function testScalarFragments() { |
$Uri = new Calendar_Decorator_Uri($this->mockcal); |
$Uri->setFragments('year','month','day','hour','minute','second'); |
$Uri->setScalar(); |
$this->assertEqual('&&&&&',$Uri->this('second')); |
} |
function testSetSeperator() { |
$Uri = new Calendar_Decorator_Uri($this->mockcal); |
$Uri->setFragments('year','month','day','hour','minute','second'); |
$Uri->setSeparator('/'); |
$this->assertEqual('year=/month=/day=/hour=/minute=/second=',$Uri->this('second')); |
} |
} |
if (!defined('TEST_RUNNING')) { |
define('TEST_RUNNING', true); |
$test = &new TestOfDecoratorUri(); |
$test->run(new HtmlReporter()); |
} |
?> |
/branches/v1.0-menes/api/pear/Calendar/tests/minute_test.php |
---|
New file |
0,0 → 1,99 |
<?php |
// $Id: minute_test.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
require_once('simple_include.php'); |
require_once('calendar_include.php'); |
require_once('./calendar_test.php'); |
class TestOfMinute extends TestOfCalendar { |
function TestOfMinute() { |
$this->UnitTestCase('Test of Minute'); |
} |
function setUp() { |
$this->cal = new Calendar_Minute(2003,10,25,13,32); |
} |
function testPrevDay_Array () { |
$this->assertEqual( |
array( |
'year' => 2003, |
'month' => 10, |
'day' => 24, |
'hour' => 0, |
'minute' => 0, |
'second' => 0), |
$this->cal->prevDay('array')); |
} |
function testPrevSecond () { |
$this->assertEqual(59,$this->cal->prevSecond()); |
} |
function testThisSecond () { |
$this->assertEqual(0,$this->cal->thisSecond()); |
} |
function testThisSecond_Timestamp () { |
$this->assertEqual($this->cal->cE->dateToStamp( |
2003, 10, 25, 13, 32, 0), |
$this->cal->thisSecond('timestamp')); |
} |
function testNextSecond () { |
$this->assertEqual(1,$this->cal->nextSecond()); |
} |
function testNextSecond_Timestamp () { |
$this->assertEqual($this->cal->cE->dateToStamp( |
2003, 10, 25, 13, 32, 1), |
$this->cal->nextSecond('timestamp')); |
} |
function testGetTimeStamp() { |
$stamp = mktime(13,32,0,10,25,2003); |
$this->assertEqual($stamp,$this->cal->getTimeStamp()); |
} |
} |
class TestOfMinuteBuild extends TestOfMinute { |
function TestOfMinuteBuild() { |
$this->UnitTestCase('Test of Minute::build()'); |
} |
function testSize() { |
$this->cal->build(); |
$this->assertEqual(60,$this->cal->size()); |
} |
function testFetch() { |
$this->cal->build(); |
$i=0; |
while ( $Child = $this->cal->fetch() ) { |
$i++; |
} |
$this->assertEqual(60,$i); |
} |
function testFetchAll() { |
$this->cal->build(); |
$children = array(); |
$i = 0; |
while ( $Child = $this->cal->fetch() ) { |
$children[$i]=$Child; |
$i++; |
} |
$this->assertEqual($children,$this->cal->fetchAll()); |
} |
function testSelection() { |
require_once(CALENDAR_ROOT . 'Second.php'); |
$selection = array(new Calendar_Second(2003,10,25,13,32,43)); |
$this->cal->build($selection); |
$i = 0; |
while ( $Child = $this->cal->fetch() ) { |
if ( $i == 43 ) |
break; |
$i++; |
} |
$this->assertTrue($Child->isSelected()); |
} |
} |
if (!defined('TEST_RUNNING')) { |
define('TEST_RUNNING', true); |
$test = &new TestOfMinute(); |
$test->run(new HtmlReporter()); |
$test = &new TestOfMinuteBuild(); |
$test->run(new HtmlReporter()); |
} |
?> |
/branches/v1.0-menes/api/pear/Calendar/tests/decorator_tests.php |
---|
New file |
0,0 → 1,21 |
<?php |
// $Id: decorator_tests.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
require_once('simple_include.php'); |
require_once('calendar_include.php'); |
class DecoratorTests extends GroupTest { |
function DecoratorTests() { |
$this->GroupTest('Decorator Tests'); |
$this->addTestFile('decorator_test.php'); |
$this->addTestFile('decorator_textual_test.php'); |
$this->addTestFile('decorator_uri_test.php'); |
} |
} |
if (!defined('TEST_RUNNING')) { |
define('TEST_RUNNING', true); |
$test = &new DecoratorTests(); |
$test->run(new HtmlReporter()); |
} |
?> |
/branches/v1.0-menes/api/pear/Calendar/tests/calendar_tabular_tests.php |
---|
New file |
0,0 → 1,21 |
<?php |
// $Id: calendar_tabular_tests.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
require_once('simple_include.php'); |
require_once('calendar_include.php'); |
class CalendarTabularTests extends GroupTest { |
function CalendarTabularTests() { |
$this->GroupTest('Calendar Tabular Tests'); |
$this->addTestFile('month_weekdays_test.php'); |
$this->addTestFile('month_weeks_test.php'); |
$this->addTestFile('week_test.php'); |
} |
} |
if (!defined('TEST_RUNNING')) { |
define('TEST_RUNNING', true); |
$test = &new CalendarTabularTests(); |
$test->run(new HtmlReporter()); |
} |
?> |
/branches/v1.0-menes/api/pear/Calendar/tests/validator_tests.php |
---|
New file |
0,0 → 1,20 |
<?php |
// $Id: validator_tests.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
require_once('simple_include.php'); |
require_once('calendar_include.php'); |
class ValidatorTests extends GroupTest { |
function ValidatorTests() { |
$this->GroupTest('Validator Tests'); |
$this->addTestFile('validator_unit_test.php'); |
$this->addTestFile('validator_error_test.php'); |
} |
} |
if (!defined('TEST_RUNNING')) { |
define('TEST_RUNNING', true); |
$test = &new ValidatorTests(); |
$test->run(new HtmlReporter()); |
} |
?> |
/branches/v1.0-menes/api/pear/Calendar/tests/README |
---|
New file |
0,0 → 1,7 |
These tests require Simple Test: http://www.lastcraft.com/simple_test.php |
Ideally they would use PEAR::PHPUnit but the current version has bugs and |
lacks alot of the functionality (e.g. Mock Objects) which Simple Test |
provides. |
Modifying the simple_include.php script for your simple test install dir |
/branches/v1.0-menes/api/pear/Calendar/tests/table_helper_tests.php |
---|
New file |
0,0 → 1,19 |
<?php |
// $Id: table_helper_tests.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
require_once('simple_include.php'); |
require_once('calendar_include.php'); |
class TableHelperTests extends GroupTest { |
function TableHelperTests() { |
$this->GroupTest('Table Helper Tests'); |
$this->addTestFile('helper_test.php'); |
} |
} |
if (!defined('TEST_RUNNING')) { |
define('TEST_RUNNING', true); |
$test = &new TableHelperTests(); |
$test->run(new HtmlReporter()); |
} |
?> |
/branches/v1.0-menes/api/pear/Calendar/tests/calendar_test.php |
---|
New file |
0,0 → 1,115 |
<?php |
// $Id: calendar_test.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
require_once('simple_include.php'); |
require_once('calendar_include.php'); |
class TestOfCalendar extends UnitTestCase { |
var $cal; |
function TestOfCalendar($name='Test of Calendar') { |
$this->UnitTestCase($name); |
} |
function setUp() { |
$this->cal = new Calendar(2003,10,25,13,32,43); |
} |
function tearDown() { |
unset($this->cal); |
} |
function testPrevYear () { |
$this->assertEqual(2002,$this->cal->prevYear()); |
} |
function testPrevYear_Array () { |
$this->assertEqual( |
array( |
'year' => 2002, |
'month' => 1, |
'day' => 1, |
'hour' => 0, |
'minute' => 0, |
'second' => 0), |
$this->cal->prevYear('array')); |
} |
function testThisYear () { |
$this->assertEqual(2003,$this->cal->thisYear()); |
} |
function testNextYear () { |
$this->assertEqual(2004,$this->cal->nextYear()); |
} |
function testPrevMonth () { |
$this->assertEqual(9,$this->cal->prevMonth()); |
} |
function testPrevMonth_Array () { |
$this->assertEqual( |
array( |
'year' => 2003, |
'month' => 9, |
'day' => 1, |
'hour' => 0, |
'minute' => 0, |
'second' => 0), |
$this->cal->prevMonth('array')); |
} |
function testThisMonth () { |
$this->assertEqual(10,$this->cal->thisMonth()); |
} |
function testNextMonth () { |
$this->assertEqual(11,$this->cal->nextMonth()); |
} |
function testPrevDay () { |
$this->assertEqual(24,$this->cal->prevDay()); |
} |
function testPrevDay_Array () { |
$this->assertEqual( |
array( |
'year' => 2003, |
'month' => 10, |
'day' => 24, |
'hour' => 0, |
'minute' => 0, |
'second' => 0), |
$this->cal->prevDay('array')); |
} |
function testThisDay () { |
$this->assertEqual(25,$this->cal->thisDay()); |
} |
function testNextDay () { |
$this->assertEqual(26,$this->cal->nextDay()); |
} |
function testPrevHour () { |
$this->assertEqual(12,$this->cal->prevHour()); |
} |
function testThisHour () { |
$this->assertEqual(13,$this->cal->thisHour()); |
} |
function testNextHour () { |
$this->assertEqual(14,$this->cal->nextHour()); |
} |
function testPrevMinute () { |
$this->assertEqual(31,$this->cal->prevMinute()); |
} |
function testThisMinute () { |
$this->assertEqual(32,$this->cal->thisMinute()); |
} |
function testNextMinute () { |
$this->assertEqual(33,$this->cal->nextMinute()); |
} |
function testPrevSecond () { |
$this->assertEqual(42,$this->cal->prevSecond()); |
} |
function testThisSecond () { |
$this->assertEqual(43,$this->cal->thisSecond()); |
} |
function testNextSecond () { |
$this->assertEqual(44,$this->cal->nextSecond()); |
} |
function testSetTimeStamp() { |
$stamp = mktime(13,32,43,10,25,2003); |
$this->cal->setTimeStamp($stamp); |
$this->assertEqual($stamp,$this->cal->getTimeStamp()); |
} |
function testGetTimeStamp() { |
$stamp = mktime(13,32,43,10,25,2003); |
$this->assertEqual($stamp,$this->cal->getTimeStamp()); |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Calendar/tests/peardate_engine_test.php |
---|
New file |
0,0 → 1,124 |
<?php |
// $Id: peardate_engine_test.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
require_once('simple_include.php'); |
require_once('calendar_include.php'); |
class TestOfPearDateEngine extends UnitTestCase { |
var $engine; |
function TestOfPearDateEngine() { |
$this->UnitTestCase('Test of Calendar_Engine_PearDate'); |
} |
function setUp() { |
$this->engine = new Calendar_Engine_PearDate(); |
} |
function testGetSecondsInMinute() { |
$this->assertEqual($this->engine->getSecondsInMinute(),60); |
} |
function testGetMinutesInHour() { |
$this->assertEqual($this->engine->getMinutesInHour(),60); |
} |
function testGetHoursInDay() { |
$this->assertEqual($this->engine->getHoursInDay(),24); |
} |
function testGetFirstDayOfWeek() { |
$this->assertEqual($this->engine->getFirstDayOfWeek(),1); |
} |
function testGetWeekDays() { |
$this->assertEqual($this->engine->getWeekDays(),array(0,1,2,3,4,5,6)); |
} |
function testGetDaysInWeek() { |
$this->assertEqual($this->engine->getDaysInWeek(),7); |
} |
function testGetWeekNInYear() { |
$this->assertEqual($this->engine->getWeekNInYear(2003, 11, 3), 45); |
} |
function testGetWeekNInMonth() { |
$this->assertEqual($this->engine->getWeekNInMonth(2003, 11, 3), 2); |
} |
function testGetWeeksInMonth0() { |
$this->assertEqual($this->engine->getWeeksInMonth(2003, 11, 0), 6); //week starts on sunday |
} |
function testGetWeeksInMonth1() { |
$this->assertEqual($this->engine->getWeeksInMonth(2003, 11, 1), 5); //week starts on monday |
} |
function testGetWeeksInMonth2() { |
$this->assertEqual($this->engine->getWeeksInMonth(2003, 2, 6), 4); //week starts on saturday |
} |
function testGetWeeksInMonth3() { |
// Unusual cases that can cause fails (shows up with example 21.php) |
$this->assertEqual($this->engine->getWeeksInMonth(2004,2,1),5); |
$this->assertEqual($this->engine->getWeeksInMonth(2004,8,1),6); |
} |
function testGetDayOfWeek() { |
$this->assertEqual($this->engine->getDayOfWeek(2003, 11, 18), 2); |
} |
function testGetFirstDayInMonth() { |
$this->assertEqual($this->engine->getFirstDayInMonth(2003,10),3); |
} |
function testGetDaysInMonth() { |
$this->assertEqual($this->engine->getDaysInMonth(2003,10),31); |
} |
function testGetMinYears() { |
$this->assertEqual($this->engine->getMinYears(),0); |
} |
function testGetMaxYears() { |
$this->assertEqual($this->engine->getMaxYears(),9999); |
} |
function testDateToStamp() { |
$stamp = '2003-10-15 13:30:45'; |
$this->assertEqual($this->engine->dateToStamp(2003,10,15,13,30,45),$stamp); |
} |
function testStampToSecond() { |
$stamp = '2003-10-15 13:30:45'; |
$this->assertEqual($this->engine->stampToSecond($stamp),45); |
} |
function testStampToMinute() { |
$stamp = '2003-10-15 13:30:45'; |
$this->assertEqual($this->engine->stampToMinute($stamp),30); |
} |
function testStampToHour() { |
$stamp = '2003-10-15 13:30:45'; |
$this->assertEqual($this->engine->stampToHour($stamp),13); |
} |
function testStampToDay() { |
$stamp = '2003-10-15 13:30:45'; |
$this->assertEqual($this->engine->stampToDay($stamp),15); |
} |
function testStampToMonth() { |
$stamp = '2003-10-15 13:30:45'; |
$this->assertEqual($this->engine->stampToMonth($stamp),10); |
} |
function testStampToYear() { |
$stamp = '2003-10-15 13:30:45'; |
$this->assertEqual($this->engine->stampToYear($stamp),2003); |
} |
function testAdjustDate() { |
$stamp = '2004-01-01 13:30:45'; |
$y = $this->engine->stampToYear($stamp); |
$m = $this->engine->stampToMonth($stamp); |
$d = $this->engine->stampToDay($stamp); |
//the first day of the month should be thursday |
$this->assertEqual($this->engine->getDayOfWeek($y, $m, $d), 4); |
$m--; // 2004-00-01 => 2003-12-01 |
$this->engine->adjustDate($y, $m, $d, $dummy, $dummy, $dummy); |
$this->assertEqual($y, 2003); |
$this->assertEqual($m, 12); |
$this->assertEqual($d, 1); |
// get last day and check if it's wednesday |
$d = $this->engine->getDaysInMonth($y, $m); |
$this->assertEqual($this->engine->getDayOfWeek($y, $m, $d), 3); |
} |
} |
if (!defined('TEST_RUNNING')) { |
define('TEST_RUNNING', true); |
$test = &new TestOfPearDateEngine(); |
$test->run(new HtmlReporter()); |
} |
?> |
/branches/v1.0-menes/api/pear/Calendar/tests/second_test.php |
---|
New file |
0,0 → 1,34 |
<?php |
// $Id: second_test.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
require_once('simple_include.php'); |
require_once('calendar_include.php'); |
require_once('./calendar_test.php'); |
class TestOfSecond extends TestOfCalendar { |
function TestOfSecond() { |
$this->UnitTestCase('Test of Second'); |
} |
function setUp() { |
$this->cal = new Calendar_Second(2003,10,25,13,32,43); |
} |
function testPrevDay_Array () { |
$this->assertEqual( |
array( |
'year' => 2003, |
'month' => 10, |
'day' => 24, |
'hour' => 0, |
'minute' => 0, |
'second' => 0), |
$this->cal->prevDay('array')); |
} |
} |
if (!defined('TEST_RUNNING')) { |
define('TEST_RUNNING', true); |
$test = &new TestOfSecond(); |
$test->run(new HtmlReporter()); |
} |
?> |
/branches/v1.0-menes/api/pear/Calendar/tests/calendar_include.php |
---|
New file |
0,0 → 1,28 |
<?php |
// $Id: calendar_include.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
if ( !@include 'Calendar/Calendar.php' ) { |
@define('CALENDAR_ROOT','../'); |
} |
require_once(CALENDAR_ROOT . 'Year.php'); |
require_once(CALENDAR_ROOT . 'Month.php'); |
require_once(CALENDAR_ROOT . 'Day.php'); |
require_once(CALENDAR_ROOT . 'Week.php'); |
require_once(CALENDAR_ROOT . 'Hour.php'); |
require_once(CALENDAR_ROOT . 'Minute.php'); |
require_once(CALENDAR_ROOT . 'Second.php'); |
require_once(CALENDAR_ROOT . 'Month.php'); |
require_once(CALENDAR_ROOT . 'Decorator.php'); |
require_once(CALENDAR_ROOT . 'Month/Weekdays.php'); |
require_once(CALENDAR_ROOT . 'Month/Weeks.php'); |
require_once(CALENDAR_ROOT . 'Validator.php'); |
require_once(CALENDAR_ROOT . 'Engine/Interface.php'); |
require_once(CALENDAR_ROOT . 'Engine/UnixTs.php'); |
require_once(CALENDAR_ROOT . 'Engine/PearDate.php'); |
require_once(CALENDAR_ROOT . 'Table/Helper.php'); |
require_once(CALENDAR_ROOT . 'Decorator/Textual.php'); |
require_once(CALENDAR_ROOT . 'Decorator/Uri.php'); |
require_once(CALENDAR_ROOT . 'Decorator/Weekday.php'); |
require_once(CALENDAR_ROOT . 'Decorator/Wrapper.php'); |
require_once(CALENDAR_ROOT . 'Util/Uri.php'); |
require_once(CALENDAR_ROOT . 'Util/Textual.php'); |
?> |
/branches/v1.0-menes/api/pear/Calendar/tests/day_test.php |
---|
New file |
0,0 → 1,107 |
<?php |
// $Id: day_test.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
require_once('simple_include.php'); |
require_once('calendar_include.php'); |
require_once('./calendar_test.php'); |
class TestOfDay extends TestOfCalendar { |
function TestOfDay() { |
$this->UnitTestCase('Test of Day'); |
} |
function setUp() { |
$this->cal = new Calendar_Day(2003,10,25); |
} |
function testPrevDay_Array () { |
$this->assertEqual( |
array( |
'year' => 2003, |
'month' => 10, |
'day' => 24, |
'hour' => 0, |
'minute' => 0, |
'second' => 0), |
$this->cal->prevDay('array')); |
} |
function testPrevHour () { |
$this->assertEqual(23,$this->cal->prevHour()); |
} |
function testThisHour () { |
$this->assertEqual(0,$this->cal->thisHour()); |
} |
function testNextHour () { |
$this->assertEqual(1,$this->cal->nextHour()); |
} |
function testPrevMinute () { |
$this->assertEqual(59,$this->cal->prevMinute()); |
} |
function testThisMinute () { |
$this->assertEqual(0,$this->cal->thisMinute()); |
} |
function testNextMinute () { |
$this->assertEqual(1,$this->cal->nextMinute()); |
} |
function testPrevSecond () { |
$this->assertEqual(59,$this->cal->prevSecond()); |
} |
function testThisSecond () { |
$this->assertEqual(0,$this->cal->thisSecond()); |
} |
function testNextSecond () { |
$this->assertEqual(1,$this->cal->nextSecond()); |
} |
function testGetTimeStamp() { |
$stamp = mktime(0,0,0,10,25,2003); |
$this->assertEqual($stamp,$this->cal->getTimeStamp()); |
} |
} |
class TestOfDayBuild extends TestOfDay { |
function TestOfDayBuild() { |
$this->UnitTestCase('Test of Day::build()'); |
} |
function testSize() { |
$this->cal->build(); |
$this->assertEqual(24,$this->cal->size()); |
} |
function testFetch() { |
$this->cal->build(); |
$i=0; |
while ( $Child = $this->cal->fetch() ) { |
$i++; |
} |
$this->assertEqual(24,$i); |
} |
function testFetchAll() { |
$this->cal->build(); |
$children = array(); |
$i = 0; |
while ( $Child = $this->cal->fetch() ) { |
$children[$i]=$Child; |
$i++; |
} |
$this->assertEqual($children,$this->cal->fetchAll()); |
} |
function testSelection() { |
require_once(CALENDAR_ROOT . 'Hour.php'); |
$selection = array(new Calendar_Hour(2003,10,25,13)); |
$this->cal->build($selection); |
$i = 0; |
while ( $Child = $this->cal->fetch() ) { |
if ( $i == 13 ) |
break; |
$i++; |
} |
$this->assertTrue($Child->isSelected()); |
} |
} |
if (!defined('TEST_RUNNING')) { |
define('TEST_RUNNING', true); |
$test = &new TestOfDay(); |
$test->run(new HtmlReporter()); |
$test = &new TestOfDayBuild(); |
$test->run(new HtmlReporter()); |
} |
?> |
/branches/v1.0-menes/api/pear/Calendar/tests/hour_test.php |
---|
New file |
0,0 → 1,98 |
<?php |
// $Id: hour_test.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
require_once('simple_include.php'); |
require_once('calendar_include.php'); |
require_once('./calendar_test.php'); |
class TestOfHour extends TestOfCalendar { |
function TestOfHour() { |
$this->UnitTestCase('Test of Hour'); |
} |
function setUp() { |
$this->cal = new Calendar_Hour(2003,10,25,13); |
} |
function testPrevDay_Array () { |
$this->assertEqual( |
array( |
'year' => 2003, |
'month' => 10, |
'day' => 24, |
'hour' => 0, |
'minute' => 0, |
'second' => 0), |
$this->cal->prevDay('array')); |
} |
function testPrevMinute () { |
$this->assertEqual(59,$this->cal->prevMinute()); |
} |
function testThisMinute () { |
$this->assertEqual(0,$this->cal->thisMinute()); |
} |
function testNextMinute () { |
$this->assertEqual(1,$this->cal->nextMinute()); |
} |
function testPrevSecond () { |
$this->assertEqual(59,$this->cal->prevSecond()); |
} |
function testThisSecond () { |
$this->assertEqual(0,$this->cal->thisSecond()); |
} |
function testNextSecond () { |
$this->assertEqual(1,$this->cal->nextSecond()); |
} |
function testGetTimeStamp() { |
$stamp = mktime(13,0,0,10,25,2003); |
$this->assertEqual($stamp,$this->cal->getTimeStamp()); |
} |
} |
class TestOfHourBuild extends TestOfHour { |
function TestOfHourBuild() { |
$this->UnitTestCase('Test of Hour::build()'); |
} |
function testSize() { |
$this->cal->build(); |
$this->assertEqual(60,$this->cal->size()); |
} |
function testFetch() { |
$this->cal->build(); |
$i=0; |
while ( $Child = $this->cal->fetch() ) { |
$i++; |
} |
$this->assertEqual(60,$i); |
} |
function testFetchAll() { |
$this->cal->build(); |
$children = array(); |
$i = 0; |
while ( $Child = $this->cal->fetch() ) { |
$children[$i]=$Child; |
$i++; |
} |
$this->assertEqual($children,$this->cal->fetchAll()); |
} |
function testSelection() { |
require_once(CALENDAR_ROOT . 'Minute.php'); |
$selection = array(new Calendar_Minute(2003,10,25,13,32)); |
$this->cal->build($selection); |
$i = 0; |
while ( $Child = $this->cal->fetch() ) { |
if ( $i == 32 ) |
break; |
$i++; |
} |
$this->assertTrue($Child->isSelected()); |
} |
} |
if (!defined('TEST_RUNNING')) { |
define('TEST_RUNNING', true); |
$test = &new TestOfHour(); |
$test->run(new HtmlReporter()); |
$test = &new TestOfHourBuild(); |
$test->run(new HtmlReporter()); |
} |
?> |
/branches/v1.0-menes/api/pear/Calendar/Day.php |
---|
New file |
0,0 → 1,197 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2002 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.02 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Harry Fuecks <hfuecks@phppatterns.com> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: Day.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
// |
/** |
* @package Calendar |
* @version $Id: Day.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
*/ |
/** |
* Allows Calendar include path to be redefined |
* @ignore |
*/ |
if (!defined('CALENDAR_ROOT')) { |
define('CALENDAR_ROOT', 'Calendar'.DIRECTORY_SEPARATOR); |
} |
/** |
* Load Calendar base class |
*/ |
require_once CALENDAR_ROOT.'Calendar.php'; |
/** |
* Represents a Day and builds Hours. |
* <code> |
* require_once 'Calendar'.DIRECTORY_SEPARATOR.'Day.php'; |
* $Day = & new Calendar_Day(2003, 10, 21); // Oct 21st 2003 |
* while ($Hour = & $Day->fetch()) { |
* echo $Hour->thisHour().'<br />'; |
* } |
* </code> |
* @package Calendar |
* @access public |
*/ |
class Calendar_Day extends Calendar |
{ |
/** |
* Marks the Day at the beginning of a week |
* @access private |
* @var boolean |
*/ |
var $first = false; |
/** |
* Marks the Day at the end of a week |
* @access private |
* @var boolean |
*/ |
var $last = false; |
/** |
* Used for tabular calendars |
* @access private |
* @var boolean |
*/ |
var $empty = false; |
/** |
* Constructs Calendar_Day |
* @param int year e.g. 2003 |
* @param int month e.g. 8 |
* @param int day e.g. 15 |
* @access public |
*/ |
function Calendar_Day($y, $m, $d) |
{ |
Calendar::Calendar($y, $m, $d); |
} |
/** |
* Builds the Hours of the Day |
* @param array (optional) Caledar_Hour objects representing selected dates |
* @return boolean |
* @access public |
*/ |
function build($sDates = array()) |
{ |
require_once CALENDAR_ROOT.'Hour.php'; |
$hID = $this->cE->getHoursInDay($this->year, $this->month, $this->day); |
for ($i=0; $i < $hID; $i++) { |
$this->children[$i]= |
new Calendar_Hour($this->year, $this->month, $this->day, $i); |
} |
if (count($sDates) > 0) { |
$this->setSelection($sDates); |
} |
return true; |
} |
/** |
* Called from build() |
* @param array |
* @return void |
* @access private |
*/ |
function setSelection($sDates) |
{ |
foreach ($sDates as $sDate) { |
if ($this->year == $sDate->thisYear() |
&& $this->month == $sDate->thisMonth() |
&& $this->day == $sDate->thisDay()) |
{ |
$key = (int)$sDate->thisHour(); |
if (isset($this->children[$key])) { |
$sDate->setSelected(); |
$this->children[$key] = $sDate; |
} |
} |
} |
} |
/** |
* Defines Day object as first in a week |
* Only used by Calendar_Month_Weekdays::build() |
* @param boolean state |
* @return void |
* @access private |
*/ |
function setFirst ($state = true) |
{ |
$this->first = $state; |
} |
/** |
* Defines Day object as last in a week |
* Used only following Calendar_Month_Weekdays::build() |
* @param boolean state |
* @return void |
* @access private |
*/ |
function setLast($state = true) |
{ |
$this->last = $state; |
} |
/** |
* Returns true if Day object is first in a Week |
* Only relevant when Day is created by Calendar_Month_Weekdays::build() |
* @return boolean |
* @access public |
*/ |
function isFirst() { |
return $this->first; |
} |
/** |
* Returns true if Day object is last in a Week |
* Only relevant when Day is created by Calendar_Month_Weekdays::build() |
* @return boolean |
* @access public |
*/ |
function isLast() |
{ |
return $this->last; |
} |
/** |
* Defines Day object as empty |
* Only used by Calendar_Month_Weekdays::build() |
* @param boolean state |
* @return void |
* @access private |
*/ |
function setEmpty ($state = true) |
{ |
$this->empty = $state; |
} |
/** |
* @return boolean |
* @access public |
*/ |
function isEmpty() |
{ |
return $this->empty; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Calendar/Hour.php |
---|
New file |
0,0 → 1,113 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2002 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.02 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Harry Fuecks <hfuecks@phppatterns.com> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: Hour.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
// |
/** |
* @package Calendar |
* @version $Id: Hour.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
*/ |
/** |
* Allows Calendar include path to be redefined |
* @ignore |
*/ |
if (!defined('CALENDAR_ROOT')) { |
define('CALENDAR_ROOT', 'Calendar'.DIRECTORY_SEPARATOR); |
} |
/** |
* Load Calendar base class |
*/ |
require_once CALENDAR_ROOT.'Calendar.php'; |
/** |
* Represents an Hour and builds Minutes |
* <code> |
* require_once 'Calendar'.DIRECTORY_SEPARATOR.'Hour.php'; |
* $Hour = & new Calendar_Hour(2003, 10, 21, 15); // Oct 21st 2003, 3pm |
* $Hour->build(); // Build Calendar_Minute objects |
* while ($Minute = & $Hour->fetch()) { |
* echo $Minute->thisMinute().'<br />'; |
* } |
* </code> |
* @package Calendar |
* @access public |
*/ |
class Calendar_Hour extends Calendar |
{ |
/** |
* Constructs Calendar_Hour |
* @param int year e.g. 2003 |
* @param int month e.g. 5 |
* @param int day e.g. 11 |
* @param int hour e.g. 13 |
* @access public |
*/ |
function Calendar_Hour($y, $m, $d, $h) |
{ |
Calendar::Calendar($y, $m, $d, $h); |
} |
/** |
* Builds the Minutes in the Hour |
* @param array (optional) Calendar_Minute objects representing selected dates |
* @return boolean |
* @access public |
*/ |
function build($sDates=array()) |
{ |
require_once CALENDAR_ROOT.'Minute.php'; |
$mIH = $this->cE->getMinutesInHour($this->year, $this->month, $this->day, |
$this->hour); |
for ($i=0; $i < $mIH; $i++) { |
$this->children[$i]= |
new Calendar_Minute($this->year, $this->month, $this->day, |
$this->hour, $i); |
} |
if (count($sDates) > 0) { |
$this->setSelection($sDates); |
} |
return true; |
} |
/** |
* Called from build() |
* @param array |
* @return void |
* @access private |
*/ |
function setSelection($sDates) |
{ |
foreach ($sDates as $sDate) { |
if ($this->year == $sDate->thisYear() |
&& $this->month == $sDate->thisMonth() |
&& $this->day == $sDate->thisDay() |
&& $this->hour == $sDate->thisHour()) |
{ |
$key = (int)$sDate->thisMinute(); |
if (isset($this->children[$key])) { |
$sDate->setSelected(); |
$this->children[$key] = $sDate; |
} |
} |
} |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Calendar/Engine/UnixTS.php |
---|
New file |
0,0 → 1,372 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2002 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.02 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Harry Fuecks <hfuecks@phppatterns.com> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: UnixTS.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
// |
/** |
* @package Calendar |
* @version $Id: UnixTS.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
*/ |
/** |
* Performs calendar calculations based on the PHP date() function and |
* Unix timestamps (using PHP's mktime() function). |
* @package Calendar |
* @access protected |
*/ |
class Calendar_Engine_UnixTS /* implements Calendar_Engine_Interface */ |
{ |
/** |
* Makes sure a given timestamp is only ever parsed once |
* <pre> |
* array ( |
* [0] => year (e.g 2003), |
* [1] => month (e.g 9), |
* [2] => day (e.g 6), |
* [3] => hour (e.g 14), |
* [4] => minute (e.g 34), |
* [5] => second (e.g 45), |
* [6] => num days in month (e.g. 31), |
* [7] => week in year (e.g. 50), |
* [8] => day in week (e.g. 0 for Sunday) |
* ) |
* </pre> |
* Uses a static variable to prevent date() being used twice |
* for a date which is already known |
* @param int Unix timestamp |
* @return array |
* @access protected |
*/ |
function stampCollection($stamp) |
{ |
static $stamps = array(); |
if ( !isset($stamps[$stamp]) ) { |
$date = @date('Y n j H i s t W w',$stamp); |
$stamps[$stamp] = sscanf($date, "%d %d %d %d %d %d %d %d %d"); |
} |
return $stamps[$stamp]; |
} |
/** |
* Returns a numeric year given a timestamp |
* @param int Unix timestamp |
* @return int year (e.g. 2003) |
* @access protected |
*/ |
function stampToYear($stamp) |
{ |
$date = Calendar_Engine_UnixTS::stampCollection($stamp); |
return (int)$date[0]; |
} |
/** |
* Returns a numeric month given a timestamp |
* @param int Unix timestamp |
* @return int month (e.g. 9) |
* @access protected |
*/ |
function stampToMonth($stamp) |
{ |
$date = Calendar_Engine_UnixTS::stampCollection($stamp); |
return (int)$date[1]; |
} |
/** |
* Returns a numeric day given a timestamp |
* @param int Unix timestamp |
* @return int day (e.g. 15) |
* @access protected |
*/ |
function stampToDay($stamp) |
{ |
$date = Calendar_Engine_UnixTS::stampCollection($stamp); |
return (int)$date[2]; |
} |
/** |
* Returns a numeric hour given a timestamp |
* @param int Unix timestamp |
* @return int hour (e.g. 13) |
* @access protected |
*/ |
function stampToHour($stamp) |
{ |
$date = Calendar_Engine_UnixTS::stampCollection($stamp); |
return (int)$date[3]; |
} |
/** |
* Returns a numeric minute given a timestamp |
* @param int Unix timestamp |
* @return int minute (e.g. 34) |
* @access protected |
*/ |
function stampToMinute($stamp) |
{ |
$date = Calendar_Engine_UnixTS::stampCollection($stamp); |
return (int)$date[4]; |
} |
/** |
* Returns a numeric second given a timestamp |
* @param int Unix timestamp |
* @return int second (e.g. 51) |
* @access protected |
*/ |
function stampToSecond($stamp) |
{ |
$date = Calendar_Engine_UnixTS::stampCollection($stamp); |
return (int)$date[5]; |
} |
/** |
* Returns a timestamp |
* @param int year (2003) |
* @param int month (9) |
* @param int day (13) |
* @param int hour (13) |
* @param int minute (34) |
* @param int second (53) |
* @return int Unix timestamp |
* @access protected |
*/ |
function dateToStamp($y, $m, $d, $h=0, $i=0, $s=0) |
{ |
static $dates = array(); |
if ( !isset($dates[$y][$m][$d][$h][$i][$s]) ) { |
$dates[$y][$m][$d][$h][$i][$s] = @mktime($h, $i, $s, $m, $d, $y); |
} |
return $dates[$y][$m][$d][$h][$i][$s]; |
} |
/** |
* The upper limit on years that the Calendar Engine can work with |
* @return int (2037) |
* @access protected |
*/ |
function getMaxYears() |
{ |
return 2037; |
} |
/** |
* The lower limit on years that the Calendar Engine can work with |
* @return int (1970 if it's Windows and 1902 for all other OSs) |
* @access protected |
*/ |
function getMinYears() |
{ |
return $min = strpos(PHP_OS, 'WIN') === false ? 1902 : 1970; |
} |
/** |
* Returns the number of months in a year |
* @return int (12) |
* @access protected |
*/ |
function getMonthsInYear($y=null) |
{ |
return 12; |
} |
/** |
* Returns the number of days in a month, given year and month |
* @param int year (2003) |
* @param int month (9) |
* @return int days in month |
* @access protected |
*/ |
function getDaysInMonth($y, $m) |
{ |
$stamp = Calendar_Engine_UnixTS::dateToStamp($y,$m,1); |
$date = Calendar_Engine_UnixTS::stampCollection($stamp); |
return $date[6]; |
} |
/** |
* Returns numeric representation of the day of the week in a month, |
* given year and month |
* @param int year (2003) |
* @param int month (9) |
* @return int from 0 to 6 |
* @access protected |
*/ |
function getFirstDayInMonth($y, $m) |
{ |
$stamp = Calendar_Engine_UnixTS::dateToStamp($y,$m,1); |
$date = Calendar_Engine_UnixTS::stampCollection($stamp); |
return $date[8]; |
} |
/** |
* Returns the number of days in a week |
* @param int year (2003) |
* @param int month (9) |
* @param int day (4) |
* @return int (7) |
* @access protected |
*/ |
function getDaysInWeek($y=NULL, $m=NULL, $d=NULL) |
{ |
return 7; |
} |
/** |
* Returns the number of the week in the year (ISO-8601), given a date |
* @param int year (2003) |
* @param int month (9) |
* @param int day (4) |
* @return int week number |
* @access protected |
*/ |
function getWeekNInYear($y, $m, $d) |
{ |
$stamp = Calendar_Engine_UnixTS::dateToStamp($y,$m,$d); |
$date = Calendar_Engine_UnixTS::stampCollection($stamp); |
return $date[7]; |
} |
/** |
* Returns the number of the week in the month, given a date |
* @param int year (2003) |
* @param int month (9) |
* @param int day (4) |
* @param int first day of the week (default: monday) |
* @return int week number |
* @access protected |
*/ |
function getWeekNInMonth($y, $m, $d, $firstDay=1) |
{ |
$weekEnd = ($firstDay == 0) ? $this->getDaysInWeek()-1 : $firstDay-1; |
$end_of_week = 1; |
while (@date('w', @mktime(0, 0, 0, $m, $end_of_week, $y)) != $weekEnd) { |
++$end_of_week; //find first weekend of the month |
} |
$w = 1; |
while ($d > $end_of_week) { |
++$w; |
$end_of_week += $this->getDaysInWeek(); |
} |
return $w; |
} |
/** |
* Returns the number of weeks in the month |
* @param int year (2003) |
* @param int month (9) |
* @param int first day of the week (default: monday) |
* @return int weeks number |
* @access protected |
*/ |
function getWeeksInMonth($y, $m, $firstDay=1) |
{ |
$FDOM = $this->getFirstDayInMonth($y, $m); |
if ($FDOM > $firstDay) { |
$firstWeekDays = $this->getDaysInWeek() - $FDOM + $firstDay; |
$weeks = 1; |
} else { |
$firstWeekDays = $firstDay - $FDOM; |
$weeks = 0; |
} |
$firstWeekDays %= $this->getDaysInWeek(); |
$result = (int)(ceil(($this->getDaysInMonth($y, $m) - $firstWeekDays) / |
$this->getDaysInWeek()) + $weeks); |
// Hack - 0 as FDOM is a special case |
if ( $FDOM != 0 ) { |
return $result; |
} else { |
return $result + 1; |
} |
} |
/** |
* Returns the number of the day of the week (0=sunday, 1=monday...) |
* @param int year (2003) |
* @param int month (9) |
* @param int day (4) |
* @return int weekday number |
* @access protected |
*/ |
function getDayOfWeek($y, $m, $d) |
{ |
$stamp = Calendar_Engine_UnixTS::dateToStamp($y,$m,$d); |
$date = Calendar_Engine_UnixTS::stampCollection($stamp); |
return $date[8]; |
} |
/** |
* Returns a list of integer days of the week beginning 0 |
* @param int year (2003) |
* @param int month (9) |
* @param int day (4) |
* @return array (0,1,2,3,4,5,6) 1 = Monday |
* @access protected |
*/ |
function getWeekDays($y=NULL, $m=NULL, $d=NULL) |
{ |
return array(0, 1, 2, 3, 4, 5, 6); |
} |
/** |
* Returns the default first day of the week |
* @param int year (2003) |
* @param int month (9) |
* @param int day (4) |
* @return int (default 1 = Monday) |
* @access protected |
*/ |
function getFirstDayOfWeek($y=NULL, $m=NULL, $d=NULL) |
{ |
return 1; |
} |
/** |
* Returns the number of hours in a day |
* @return int (24) |
* @access protected |
*/ |
function getHoursInDay($y=null,$m=null,$d=null) |
{ |
return 24; |
} |
/** |
* Returns the number of minutes in an hour |
* @return int (60) |
* @access protected |
*/ |
function getMinutesInHour($y=null,$m=null,$d=null,$h=null) |
{ |
return 60; |
} |
/** |
* Returns the number of seconds in a minutes |
* @return int (60) |
* @access protected |
*/ |
function getSecondsInMinute($y=null,$m=null,$d=null,$h=null,$i=null) |
{ |
return 60; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Calendar/Engine/Interface.php |
---|
New file |
0,0 → 1,293 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2002 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.02 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Harry Fuecks <hfuecks@phppatterns.com> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: Interface.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
// |
/** |
* @package Calendar |
* @version $Id: Interface.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
*/ |
/** |
* The methods the classes implementing the Calendar_Engine must implement. |
* Note this class is not used but simply to help development |
* @package Calendar |
* @access protected |
*/ |
class Calendar_Engine_Interface |
{ |
/** |
* Provides a mechansim to make sure parsing of timestamps |
* into human dates is only performed once per timestamp. |
* Typically called "internally" by methods like stampToYear. |
* Return value can vary, depending on the specific implementation |
* @param int timestamp (depending on implementation) |
* @return mixed |
* @access protected |
*/ |
function stampCollection($stamp) |
{ |
} |
/** |
* Returns a numeric year given a timestamp |
* @param int timestamp (depending on implementation) |
* @return int year (e.g. 2003) |
* @access protected |
*/ |
function stampToYear($stamp) |
{ |
} |
/** |
* Returns a numeric month given a timestamp |
* @param int timestamp (depending on implementation) |
* @return int month (e.g. 9) |
* @access protected |
*/ |
function stampToMonth($stamp) |
{ |
} |
/** |
* Returns a numeric day given a timestamp |
* @param int timestamp (depending on implementation) |
* @return int day (e.g. 15) |
* @access protected |
*/ |
function stampToDay($stamp) |
{ |
} |
/** |
* Returns a numeric hour given a timestamp |
* @param int timestamp (depending on implementation) |
* @return int hour (e.g. 13) |
* @access protected |
*/ |
function stampToHour($stamp) |
{ |
} |
/** |
* Returns a numeric minute given a timestamp |
* @param int timestamp (depending on implementation) |
* @return int minute (e.g. 34) |
* @access protected |
*/ |
function stampToMinute($stamp) |
{ |
} |
/** |
* Returns a numeric second given a timestamp |
* @param int timestamp (depending on implementation) |
* @return int second (e.g. 51) |
* @access protected |
*/ |
function stampToSecond($stamp) |
{ |
} |
/** |
* Returns a timestamp. Can be worth "caching" generated |
* timestamps in a static variable, identified by the |
* params this method accepts, to timestamp will only |
* be calculated once. |
* @param int year (e.g. 2003) |
* @param int month (e.g. 9) |
* @param int day (e.g. 13) |
* @param int hour (e.g. 13) |
* @param int minute (e.g. 34) |
* @param int second (e.g. 53) |
* @return int (depends on implementation) |
* @access protected |
*/ |
function dateToStamp($y,$m,$d,$h,$i,$s) |
{ |
} |
/** |
* The upper limit on years that the Calendar Engine can work with |
* @return int (e.g. 2037) |
* @access protected |
*/ |
function getMaxYears() |
{ |
} |
/** |
* The lower limit on years that the Calendar Engine can work with |
* @return int (e.g 1902) |
* @access protected |
*/ |
function getMinYears() |
{ |
} |
/** |
* Returns the number of months in a year |
* @param int (optional) year to get months for |
* @return int (e.g. 12) |
* @access protected |
*/ |
function getMonthsInYear($y=null) |
{ |
} |
/** |
* Returns the number of days in a month, given year and month |
* @param int year (e.g. 2003) |
* @param int month (e.g. 9) |
* @return int days in month |
* @access protected |
*/ |
function getDaysInMonth($y, $m) |
{ |
} |
/** |
* Returns numeric representation of the day of the week in a month, |
* given year and month |
* @param int year (e.g. 2003) |
* @param int month (e.g. 9) |
* @return int |
* @access protected |
*/ |
function getFirstDayInMonth ($y, $m) |
{ |
} |
/** |
* Returns the number of days in a week |
* @param int year (2003) |
* @param int month (9) |
* @param int day (4) |
* @return int (e.g. 7) |
* @access protected |
*/ |
function getDaysInWeek($y=NULL, $m=NULL, $d=NULL) |
{ |
} |
/** |
* Returns the number of the week in the year (ISO-8601), given a date |
* @param int year (2003) |
* @param int month (9) |
* @param int day (4) |
* @return int week number |
* @access protected |
*/ |
function getWeekNInYear($y, $m, $d) |
{ |
} |
/** |
* Returns the number of the week in the month, given a date |
* @param int year (2003) |
* @param int month (9) |
* @param int day (4) |
* @param int first day of the week (default: 1 - monday) |
* @return int week number |
* @access protected |
*/ |
function getWeekNInMonth($y, $m, $d, $firstDay=1) |
{ |
} |
/** |
* Returns the number of weeks in the month |
* @param int year (2003) |
* @param int month (9) |
* @param int first day of the week (default: 1 - monday) |
* @return int weeks number |
* @access protected |
*/ |
function getWeeksInMonth($y, $m) |
{ |
} |
/** |
* Returns the number of the day of the week (0=sunday, 1=monday...) |
* @param int year (2003) |
* @param int month (9) |
* @param int day (4) |
* @return int weekday number |
* @access protected |
*/ |
function getDayOfWeek($y, $m, $d) |
{ |
} |
/** |
* Returns the numeric values of the days of the week. |
* @param int year (2003) |
* @param int month (9) |
* @param int day (4) |
* @return array list of numeric values of days in week, beginning 0 |
* @access protected |
*/ |
function getWeekDays($y=NULL, $m=NULL, $d=NULL) |
{ |
} |
/** |
* Returns the default first day of the week as an integer. Must be a |
* member of the array returned from getWeekDays |
* @param int year (2003) |
* @param int month (9) |
* @param int day (4) |
* @return int (e.g. 1 for Monday) |
* @see getWeekDays |
* @access protected |
*/ |
function getFirstDayOfWeek($y=NULL, $m=NULL, $d=NULL) |
{ |
} |
/** |
* Returns the number of hours in a day<br> |
* @param int (optional) day to get hours for |
* @return int (e.g. 24) |
* @access protected |
*/ |
function getHoursInDay($y=null,$m=null,$d=null) |
{ |
} |
/** |
* Returns the number of minutes in an hour |
* @param int (optional) hour to get minutes for |
* @return int |
* @access protected |
*/ |
function getMinutesInHour($y=null,$m=null,$d=null,$h=null) |
{ |
} |
/** |
* Returns the number of seconds in a minutes |
* @param int (optional) minute to get seconds for |
* @return int |
* @access protected |
*/ |
function getSecondsInMinute($y=null,$m=null,$d=null,$h=null,$i=null) |
{ |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Calendar/Engine/PearDate.php |
---|
New file |
0,0 → 1,413 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2002 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.02 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Lorenzo Alberton <l dot alberton at quipo dot it> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: PearDate.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
// |
/** |
* @package Calendar |
* @version $Id: PearDate.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
*/ |
/** |
* Load PEAR::Date class |
*/ |
require_once 'Date.php'; |
/** |
* Performs calendar calculations based on the PEAR::Date class |
* Timestamps are in the ISO-8601 format (YYYY-MM-DD HH:MM:SS) |
* @package Calendar |
* @access protected |
*/ |
class Calendar_Engine_PearDate /* implements Calendar_Engine_Interface */ |
{ |
/** |
* Makes sure a given timestamp is only ever parsed once |
* Uses a static variable to prevent date() being used twice |
* for a date which is already known |
* @param mixed Any timestamp format recognized by Pear::Date |
* @return object Pear::Date object |
* @access protected |
*/ |
function stampCollection($stamp) |
{ |
static $stamps = array(); |
if (!isset($stamps[$stamp])) { |
$stamps[$stamp] = new Date($stamp); |
} |
return $stamps[$stamp]; |
} |
/** |
* Returns a numeric year given a iso-8601 datetime |
* @param string iso-8601 datetime (YYYY-MM-DD HH:MM:SS) |
* @return int year (e.g. 2003) |
* @access protected |
*/ |
function stampToYear($stamp) |
{ |
$date = Calendar_Engine_PearDate::stampCollection($stamp); |
return (int)$date->year; |
} |
/** |
* Returns a numeric month given a iso-8601 datetime |
* @param string iso-8601 datetime (YYYY-MM-DD HH:MM:SS) |
* @return int month (e.g. 9) |
* @access protected |
*/ |
function stampToMonth($stamp) |
{ |
$date = Calendar_Engine_PearDate::stampCollection($stamp); |
return (int)$date->month; |
} |
/** |
* Returns a numeric day given a iso-8601 datetime |
* @param string iso-8601 datetime (YYYY-MM-DD HH:MM:SS) |
* @return int day (e.g. 15) |
* @access protected |
*/ |
function stampToDay($stamp) |
{ |
$date = Calendar_Engine_PearDate::stampCollection($stamp); |
return (int)$date->day; |
} |
/** |
* Returns a numeric hour given a iso-8601 datetime |
* @param string iso-8601 datetime (YYYY-MM-DD HH:MM:SS) |
* @return int hour (e.g. 13) |
* @access protected |
*/ |
function stampToHour($stamp) |
{ |
$date = Calendar_Engine_PearDate::stampCollection($stamp); |
return (int)$date->hour; |
} |
/** |
* Returns a numeric minute given a iso-8601 datetime |
* @param string iso-8601 datetime (YYYY-MM-DD HH:MM:SS) |
* @return int minute (e.g. 34) |
* @access protected |
*/ |
function stampToMinute($stamp) |
{ |
$date = Calendar_Engine_PearDate::stampCollection($stamp); |
return (int)$date->minute; |
} |
/** |
* Returns a numeric second given a iso-8601 datetime |
* @param string iso-8601 datetime (YYYY-MM-DD HH:MM:SS) |
* @return int second (e.g. 51) |
* @access protected |
*/ |
function stampToSecond($stamp) |
{ |
$date = Calendar_Engine_PearDate::stampCollection($stamp); |
return (int)$date->second; |
} |
/** |
* Returns a iso-8601 datetime |
* @param int year (2003) |
* @param int month (9) |
* @param int day (13) |
* @param int hour (13) |
* @param int minute (34) |
* @param int second (53) |
* @return string iso-8601 datetime |
* @access protected |
*/ |
function dateToStamp($y, $m, $d, $h=0, $i=0, $s=0) |
{ |
$r = array(); |
Calendar_Engine_PearDate::adjustDate($y, $m, $d, $h, $i, $s); |
$key = $y.$m.$d.$h.$i.$s; |
if (!isset($r[$key])) { |
$r[$key] = sprintf("%04d-%02d-%02d %02d:%02d:%02d", |
$y, $m, $d, $h, $i, $s); |
} |
return $r[$key]; |
} |
/** |
* Set the correct date values (useful for math operations on dates) |
* @param int year (2003) |
* @param int month (9) |
* @param int day (13) |
* @param int hour (13) |
* @param int minute (34) |
* @param int second (53) |
* @access protected |
*/ |
function adjustDate(&$y, &$m, &$d, &$h, &$i, &$s) |
{ |
if ($s < 0) { |
$m -= floor($s / 60); |
$s = -$s % 60; |
} |
if ($s > 60) { |
$m += floor($s / 60); |
$s %= 60; |
} |
if ($i < 0) { |
$h -= floor($i / 60); |
$i = -$i % 60; |
} |
if ($i > 60) { |
$h += floor($i / 60); |
$i %= 60; |
} |
if ($h < 0) { |
$d -= floor($h / 24); |
$h = -$h % 24; |
} |
if ($h > 24) { |
$d += floor($h / 24); |
$h %= 24; |
} |
for(; $m < 1; $y--, $m+=12); |
for(; $m > 12; $y++, $m-=12); |
while ($d < 1) { |
if ($m > 1) { |
$m--; |
} else { |
$m = 12; |
$y--; |
} |
$d += Date_Calc::daysInMonth($m, $y); |
} |
for ($max_days = Date_Calc::daysInMonth($m, $y); $d > $max_days; ) { |
$d -= $max_days; |
if ($m < 12) { |
$m++; |
} else { |
$m = 1; |
$y++; |
} |
} |
} |
/** |
* The upper limit on years that the Calendar Engine can work with |
* @return int 9999 |
* @access protected |
*/ |
function getMaxYears() |
{ |
return 9999; |
} |
/** |
* The lower limit on years that the Calendar Engine can work with |
* @return int 0 |
* @access protected |
*/ |
function getMinYears() |
{ |
return 0; |
} |
/** |
* Returns the number of months in a year |
* @return int (12) |
* @access protected |
*/ |
function getMonthsInYear($y=null) |
{ |
return 12; |
} |
/** |
* Returns the number of days in a month, given year and month |
* @param int year (2003) |
* @param int month (9) |
* @return int days in month |
* @access protected |
*/ |
function getDaysInMonth($y, $m) |
{ |
return (int)Date_Calc::daysInMonth($m, $y); |
} |
/** |
* Returns numeric representation of the day of the week in a month, |
* given year and month |
* @param int year (2003) |
* @param int month (9) |
* @return int from 0 to 7 |
* @access protected |
*/ |
function getFirstDayInMonth($y, $m) |
{ |
return (int)Date_Calc::dayOfWeek(1, $m, $y); |
} |
/** |
* Returns the number of days in a week |
* @param int year (2003) |
* @param int month (9) |
* @param int day (4) |
* @return int (7) |
* @access protected |
*/ |
function getDaysInWeek($y=NULL, $m=NULL, $d=NULL) |
{ |
return 7; |
} |
/** |
* Returns the number of the week in the year (ISO-8601), given a date |
* @param int year (2003) |
* @param int month (9) |
* @param int day (4) |
* @return int week number |
* @access protected |
*/ |
function getWeekNInYear($y, $m, $d) |
{ |
return Date_Calc::weekOfYear($d, $m, $y); //beware, Date_Calc doesn't follow ISO-8601 standard! |
} |
/** |
* Returns the number of the week in the month, given a date |
* @param int year (2003) |
* @param int month (9) |
* @param int day (4) |
* @param int first day of the week (default: monday) |
* @return int week number |
* @access protected |
*/ |
function getWeekNInMonth($y, $m, $d, $firstDay=1) |
{ |
$weekEnd = ($firstDay == 0) ? $this->getDaysInWeek()-1 : $firstDay-1; |
$end_of_week = (int)Date_Calc::nextDayOfWeek($weekEnd, 1, $m, $y, '%e', true); |
$w = 1; |
while ($d > $end_of_week) { |
++$w; |
$end_of_week += $this->getDaysInWeek(); |
} |
return $w; |
} |
/** |
* Returns the number of weeks in the month |
* @param int year (2003) |
* @param int month (9) |
* @param int first day of the week (default: monday) |
* @return int weeks number |
* @access protected |
*/ |
function getWeeksInMonth($y, $m, $firstDay=1) |
{ |
$FDOM = Date_Calc::firstOfMonthWeekday($m, $y); |
if ($FDOM > $firstDay) { |
$firstWeekDays = $this->getDaysInWeek() - $FDOM + $firstDay; |
$weeks = 1; |
} else { |
$firstWeekDays = $firstDay - $FDOM; |
$weeks = 0; |
} |
$firstWeekDays %= $this->getDaysInWeek(); |
$result = (int)(ceil(($this->getDaysInMonth($y, $m) - $firstWeekDays) / |
$this->getDaysInWeek()) + $weeks); |
if ( $FDOM != 0 ) { |
return $result; |
} else { |
return $result + 1; |
} |
} |
/** |
* Returns the number of the day of the week (0=sunday, 1=monday...) |
* @param int year (2003) |
* @param int month (9) |
* @param int day (4) |
* @return int weekday number |
* @access protected |
*/ |
function getDayOfWeek($y, $m, $d) |
{ |
return Date_Calc::dayOfWeek($d, $m, $y); |
} |
/** |
* Returns a list of integer days of the week beginning 0 |
* @param int year (2003) |
* @param int month (9) |
* @param int day (4) |
* @return array (0, 1, 2, 3, 4, 5, 6) 1 = Monday |
* @access protected |
*/ |
function getWeekDays($y=NULL, $m=NULL, $d=NULL) |
{ |
return array(0, 1, 2, 3, 4, 5, 6); |
} |
/** |
* Returns the default first day of the week |
* @param int year (2003) |
* @param int month (9) |
* @param int day (4) |
* @return int (default 1 = Monday) |
* @access protected |
*/ |
function getFirstDayOfWeek($y=NULL, $m=NULL, $d=NULL) |
{ |
return 1; |
} |
/** |
* Returns the number of hours in a day |
* @return int (24) |
* @access protected |
*/ |
function getHoursInDay($y=null,$m=null,$d=null) |
{ |
return 24; |
} |
/** |
* Returns the number of minutes in an hour |
* @return int (60) |
* @access protected |
*/ |
function getMinutesInHour($y=null,$m=null,$d=null,$h=null) |
{ |
return 60; |
} |
/** |
* Returns the number of seconds in a minutes |
* @return int (60) |
* @access protected |
*/ |
function getSecondsInMinute($y=null,$m=null,$d=null,$h=null,$i=null) |
{ |
return 60; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Calendar/Decorator.php |
---|
New file |
0,0 → 1,557 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2002 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.02 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Harry Fuecks <hfuecks@phppatterns.com> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: Decorator.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
// |
/** |
* @package Calendar |
* @version $Id: Decorator.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
*/ |
/** |
* Decorates any calendar class. |
* Create a subclass of this class for your own "decoration". |
* Used for "selections" |
* <code> |
* class DayDecorator extends Calendar_Decorator |
* { |
* function thisDay($format = 'int') |
* { |
.* $day = parent::thisDay('timestamp'); |
.* return date('D', $day); |
* } |
* } |
* $Day = & new Calendar_Day(2003, 10, 25); |
* $DayDecorator = & new DayDecorator($Day); |
* echo $DayDecorator->thisDay(); // Outputs "Sat" |
* </code> |
* @abstract |
* @package Calendar |
*/ |
class Calendar_Decorator |
{ |
/** |
* Subclass of Calendar being decorated |
* @var object |
* @access private |
*/ |
var $calendar; |
/** |
* Constructs the Calendar_Decorator |
* @param object subclass to Calendar to decorate |
*/ |
function Calendar_Decorator(& $calendar) |
{ |
$this->calendar = & $calendar; |
} |
/** |
* Defines the calendar by a Unix timestamp, replacing values |
* passed to the constructor |
* @param int Unix timestamp |
* @return void |
* @access public |
*/ |
function setTimestamp($ts) |
{ |
$this->calendar->setTimestamp($ts); |
} |
/** |
* Returns a timestamp from the current date / time values. Format of |
* timestamp depends on Calendar_Engine implementation being used |
* @return int timestamp |
* @access public |
*/ |
function getTimestamp() |
{ |
return $this->calendar->getTimeStamp(); |
} |
/** |
* Defines calendar object as selected (e.g. for today) |
* @param boolean state whether Calendar subclass |
* @return void |
* @access public |
*/ |
function setSelected($state = true) |
{ |
$this->calendar->setSelected($state = true); |
} |
/** |
* True if the calendar subclass object is selected (e.g. today) |
* @return boolean |
* @access public |
*/ |
function isSelected() |
{ |
return $this->calendar->isSelected(); |
} |
/** |
* Adjusts the date (helper method) |
* @return void |
* @access public |
*/ |
function adjust() |
{ |
$this->calendar->adjust(); |
} |
/** |
* Returns the date as an associative array (helper method) |
* @param mixed timestamp (leave empty for current timestamp) |
* @return array |
* @access public |
*/ |
function toArray($stamp=null) |
{ |
return $this->calendar->toArray($stamp); |
} |
/** |
* Returns the value as an associative array (helper method) |
* @param string type of date object that return value represents |
* @param string $format ['int' | 'array' | 'timestamp' | 'object'] |
* @param mixed timestamp (depending on Calendar engine being used) |
* @param int integer default value (i.e. give me the answer quick) |
* @return mixed |
* @access private |
*/ |
function returnValue($returnType, $format, $stamp, $default) |
{ |
return $this->calendar->returnValue($returnType, $format, $stamp, $default); |
} |
/** |
* Defines Day object as first in a week |
* Only used by Calendar_Month_Weekdays::build() |
* @param boolean state |
* @return void |
* @access private |
*/ |
function setFirst ($state = true) |
{ |
if ( method_exists($this->calendar,'setFirst') ) { |
$this->calendar->setFirst($state); |
} |
} |
/** |
* Defines Day object as last in a week |
* Used only following Calendar_Month_Weekdays::build() |
* @param boolean state |
* @return void |
* @access private |
*/ |
function setLast($state = true) |
{ |
if ( method_exists($this->calendar,'setLast') ) { |
$this->calendar->setLast($state); |
} |
} |
/** |
* Returns true if Day object is first in a Week |
* Only relevant when Day is created by Calendar_Month_Weekdays::build() |
* @return boolean |
* @access public |
*/ |
function isFirst() { |
if ( method_exists($this->calendar,'isFirst') ) { |
return $this->calendar->isFirst(); |
} |
} |
/** |
* Returns true if Day object is last in a Week |
* Only relevant when Day is created by Calendar_Month_Weekdays::build() |
* @return boolean |
* @access public |
*/ |
function isLast() |
{ |
if ( method_exists($this->calendar,'isLast') ) { |
return $this->calendar->isLast(); |
} |
} |
/** |
* Defines Day object as empty |
* Only used by Calendar_Month_Weekdays::build() |
* @param boolean state |
* @return void |
* @access private |
*/ |
function setEmpty ($state = true) |
{ |
if ( method_exists($this->calendar,'setEmpty') ) { |
$this->calendar->setEmpty($state); |
} |
} |
/** |
* @return boolean |
* @access public |
*/ |
function isEmpty() |
{ |
if ( method_exists($this->calendar,'isEmpty') ) { |
return $this->calendar->isEmpty(); |
} |
} |
/** |
* Build the children |
* @param array containing Calendar objects to select (optional) |
* @return boolean |
* @access public |
* @abstract |
*/ |
function build($sDates = array()) |
{ |
$this->calendar->build($sDates); |
} |
/** |
* Iterator method for fetching child Calendar subclass objects |
* (e.g. a minute from an hour object). On reaching the end of |
* the collection, returns false and resets the collection for |
* further iteratations. |
* @return mixed either an object subclass of Calendar or false |
* @access public |
*/ |
function fetch() |
{ |
return $this->calendar->fetch(); |
} |
/** |
* Fetches all child from the current collection of children |
* @return array |
* @access public |
*/ |
function fetchAll() |
{ |
return $this->calendar->fetchAll(); |
} |
/** |
* Get the number Calendar subclass objects stored in the internal |
* collection. |
* @return int |
* @access public |
*/ |
function size() |
{ |
return $this->calendar->size(); |
} |
/** |
* Determine whether this date is valid, with the bounds determined by |
* the Calendar_Engine. The call is passed on to |
* Calendar_Validator::isValid |
* @return boolean |
* @access public |
*/ |
function isValid() |
{ |
return $this->calendar->isValid(); |
} |
/** |
* Returns an instance of Calendar_Validator |
* @return Calendar_Validator |
* @access public |
*/ |
function & getValidator() |
{ |
return $this->calendar->getValidator(); |
} |
/** |
* Returns a reference to the current Calendar_Engine being used. Useful |
* for Calendar_Table_Helper and Caledar_Validator |
* @return object implementing Calendar_Engine_Inteface |
* @access private |
*/ |
function & getEngine() |
{ |
return $this->calendar->getEngine(); |
} |
/** |
* Returns the value for the previous year |
* @param string return value format ['int' | 'timestamp' | 'object' | 'array'] |
* @return int e.g. 2002 or timestamp |
* @access public |
*/ |
function prevYear($format = 'int') |
{ |
return $this->calendar->prevYear($format); |
} |
/** |
* Returns the value for this year |
* @param string return value format ['int' | 'timestamp' | 'object' | 'array'] |
* @return int e.g. 2003 or timestamp |
* @access public |
*/ |
function thisYear($format = 'int') |
{ |
return $this->calendar->thisYear($format); |
} |
/** |
* Returns the value for next year |
* @param string return value format ['int' | 'timestamp' | 'object' | 'array'] |
* @return int e.g. 2004 or timestamp |
* @access public |
*/ |
function nextYear($format = 'int') |
{ |
return $this->calendar->nextYear($format); |
} |
/** |
* Returns the value for the previous month |
* @param string return value format ['int' | 'timestamp' | 'object' | 'array'] |
* @return int e.g. 4 or Unix timestamp |
* @access public |
*/ |
function prevMonth($format = 'int') |
{ |
return $this->calendar->prevMonth($format); |
} |
/** |
* Returns the value for this month |
* @param string return value format ['int' | 'timestamp' | 'object' | 'array'] |
* @return int e.g. 5 or timestamp |
* @access public |
*/ |
function thisMonth($format = 'int') |
{ |
return $this->calendar->thisMonth($format); |
} |
/** |
* Returns the value for next month |
* @param string return value format ['int' | 'timestamp' | 'object' | 'array'] |
* @return int e.g. 6 or timestamp |
* @access public |
*/ |
function nextMonth($format = 'int') |
{ |
return $this->calendar->nextMonth($format); |
} |
/** |
* Returns the value for the previous week |
* @param string return value format ['int' | 'timestamp' | 'object' | 'array'] |
* @return int e.g. 4 or Unix timestamp |
* @access public |
*/ |
function prevWeek($format = 'n_in_month') |
{ |
if ( method_exists($this->calendar,'prevWeek') ) { |
return $this->calendar->prevWeek($format); |
} else { |
require_once 'PEAR.php'; |
PEAR::raiseError( |
'Cannot call prevWeek on Calendar object of type: '. |
get_class($this->calendar), 133, PEAR_ERROR_TRIGGER, |
E_USER_NOTICE, 'Calendar_Decorator::prevWeek()'); |
return false; |
} |
} |
/** |
* Returns the value for this week |
* @param string return value format ['int' | 'timestamp' | 'object' | 'array'] |
* @return int e.g. 5 or timestamp |
* @access public |
*/ |
function thisWeek($format = 'n_in_month') |
{ |
if ( method_exists($this->calendar,'thisWeek') ) { |
return $this->calendar->thisWeek($format); |
} else { |
require_once 'PEAR.php'; |
PEAR::raiseError( |
'Cannot call thisWeek on Calendar object of type: '. |
get_class($this->calendar), 133, PEAR_ERROR_TRIGGER, |
E_USER_NOTICE, 'Calendar_Decorator::thisWeek()'); |
return false; |
} |
} |
/** |
* Returns the value for next week |
* @param string return value format ['int' | 'timestamp' | 'object' | 'array'] |
* @return int e.g. 6 or timestamp |
* @access public |
*/ |
function nextWeek($format = 'n_in_month') |
{ |
if ( method_exists($this->calendar,'nextWeek') ) { |
return $this->calendar->nextWeek($format); |
} else { |
require_once 'PEAR.php'; |
PEAR::raiseError( |
'Cannot call thisWeek on Calendar object of type: '. |
get_class($this->calendar), 133, PEAR_ERROR_TRIGGER, |
E_USER_NOTICE, 'Calendar_Decorator::nextWeek()'); |
return false; |
} |
} |
/** |
* Returns the value for the previous day |
* @param string return value format ['int' | 'timestamp' | 'object' | 'array'] |
* @return int e.g. 10 or timestamp |
* @access public |
*/ |
function prevDay($format = 'int') { |
return $this->calendar->prevDay($format); |
} |
/** |
* Returns the value for this day |
* @param string return value format ['int' | 'timestamp' | 'object' | 'array'] |
* @return int e.g. 11 or timestamp |
* @access public |
*/ |
function thisDay($format = 'int') |
{ |
return $this->calendar->thisDay($format); |
} |
/** |
* Returns the value for the next day |
* @param string return value format ['int' | 'timestamp' | 'object' | 'array'] |
* @return int e.g. 12 or timestamp |
* @access public |
*/ |
function nextDay($format = 'int') |
{ |
return $this->calendar->nextDay($format); |
} |
/** |
* Returns the value for the previous hour |
* @param string return value format ['int' | 'timestamp' | 'object' | 'array'] |
* @return int e.g. 13 or timestamp |
* @access public |
*/ |
function prevHour($format = 'int') |
{ |
return $this->calendar->prevHour($format); |
} |
/** |
* Returns the value for this hour |
* @param string return value format ['int' | 'timestamp' | 'object' | 'array'] |
* @return int e.g. 14 or timestamp |
* @access public |
*/ |
function thisHour($format = 'int') |
{ |
return $this->calendar->thisHour($format); |
} |
/** |
* Returns the value for the next hour |
* @param string return value format ['int' | 'timestamp' | 'object' | 'array'] |
* @return int e.g. 14 or timestamp |
* @access public |
*/ |
function nextHour($format = 'int') |
{ |
return $this->calendar->nextHour($format); |
} |
/** |
* Returns the value for the previous minute |
* @param string return value format ['int' | 'timestamp' | 'object' | 'array'] |
* @return int e.g. 23 or timestamp |
* @access public |
*/ |
function prevMinute($format = 'int') |
{ |
return $this->calendar->prevMinute($format); |
} |
/** |
* Returns the value for this minute |
* @param string return value format ['int' | 'timestamp' | 'object' | 'array'] |
* @return int e.g. 24 or timestamp |
* @access public |
*/ |
function thisMinute($format = 'int') |
{ |
return $this->calendar->thisMinute($format); |
} |
/** |
* Returns the value for the next minute |
* @param string return value format ['int' | 'timestamp' | 'object' | 'array'] |
* @return int e.g. 25 or timestamp |
* @access public |
*/ |
function nextMinute($format = 'int') |
{ |
return $this->calendar->nextMinute($format); |
} |
/** |
* Returns the value for the previous second |
* @param string return value format ['int' | 'timestamp' | 'object' | 'array'] |
* @return int e.g. 43 or timestamp |
* @access public |
*/ |
function prevSecond($format = 'int') |
{ |
return $this->calendar->prevSecond($format); |
} |
/** |
* Returns the value for this second |
* @param string return value format ['int' | 'timestamp' | 'object' | 'array'] |
* @return int e.g. 44 or timestamp |
* @access public |
*/ |
function thisSecond($format = 'int') |
{ |
return $this->calendar->thisSecond($format); |
} |
/** |
* Returns the value for the next second |
* @param string return value format ['int' | 'timestamp' | 'object' | 'array'] |
* @return int e.g. 45 or timestamp |
* @access public |
*/ |
function nextSecond($format = 'int') |
{ |
return $this->calendar->nextSecond($format); |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Calendar/Validator.php |
---|
New file |
0,0 → 1,335 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2002 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.02 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Harry Fuecks <hfuecks@phppatterns.com> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: Validator.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
// |
/** |
* @package Calendar |
* @version $Id: Validator.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
*/ |
/** |
* Validation Error Messages |
*/ |
if (!defined('CALENDAR_VALUE_TOOSMALL')) { |
define('CALENDAR_VALUE_TOOSMALL', 'Too small: min = '); |
} |
if (!defined('CALENDAR_VALUE_TOOLARGE')) { |
define('CALENDAR_VALUE_TOOLARGE', 'Too large: max = '); |
} |
/** |
* Used to validate any given Calendar date object. Instances of this class |
* can be obtained from any data object using the getValidator method |
* @see Calendar::getValidator() |
* @package Calendar |
* @access public |
*/ |
class Calendar_Validator |
{ |
/** |
* Instance of the Calendar date object to validate |
* @var object |
* @access private |
*/ |
var $calendar; |
/** |
* Instance of the Calendar_Engine |
* @var object |
* @access private |
*/ |
var $cE; |
/** |
* Array of errors for validation failures |
* @var array |
* @access private |
*/ |
var $errors = array(); |
/** |
* Constructs Calendar_Validator |
* @param object subclass of Calendar |
* @access public |
*/ |
function Calendar_Validator(& $calendar) |
{ |
$this->calendar = & $calendar; |
$this->cE = & $calendar->getEngine(); |
} |
/** |
* Calls all the other isValidXXX() methods in the validator |
* @return boolean |
* @access public |
*/ |
function isValid() |
{ |
$checks = array('isValidYear', 'isValidMonth', 'isValidDay', |
'isValidHour', 'isValidMinute', 'isValidSecond'); |
$valid = true; |
foreach ($checks as $check) { |
if (!$this->{$check}()) { |
$valid = false; |
} |
} |
return $valid; |
} |
/** |
* Check whether this is a valid year |
* @return boolean |
* @access public |
*/ |
function isValidYear() |
{ |
$y = $this->calendar->thisYear(); |
$min = $this->cE->getMinYears(); |
if ($min > $y) { |
$this->errors[] = new Calendar_Validation_Error( |
'Year', $y, CALENDAR_VALUE_TOOSMALL.$min); |
return false; |
} |
$max = $this->cE->getMaxYears(); |
if ($y > $max) { |
$this->errors[] = new Calendar_Validation_Error( |
'Year', $y, CALENDAR_VALUE_TOOLARGE.$max); |
return false; |
} |
return true; |
} |
/** |
* Check whether this is a valid month |
* @return boolean |
* @access public |
*/ |
function isValidMonth() |
{ |
$m = $this->calendar->thisMonth(); |
$min = 1; |
if ($min > $m) { |
$this->errors[] = new Calendar_Validation_Error( |
'Month', $m, CALENDAR_VALUE_TOOSMALL.$min); |
return false; |
} |
$max = $this->cE->getMonthsInYear($this->calendar->thisYear()); |
if ($m > $max) { |
$this->errors[] = new Calendar_Validation_Error( |
'Month', $m, CALENDAR_VALUE_TOOLARGE.$max); |
return false; |
} |
return true; |
} |
/** |
* Check whether this is a valid day |
* @return boolean |
* @access public |
*/ |
function isValidDay() |
{ |
$d = $this->calendar->thisDay(); |
$min = 1; |
if ($min > $d) { |
$this->errors[] = new Calendar_Validation_Error( |
'Day', $d, CALENDAR_VALUE_TOOSMALL.$min); |
return false; |
} |
$max = $this->cE->getDaysInMonth( |
$this->calendar->thisYear(), $this->calendar->thisMonth()); |
if ($d > $max) { |
$this->errors[] = new Calendar_Validation_Error( |
'Day', $d, CALENDAR_VALUE_TOOLARGE.$max); |
return false; |
} |
return true; |
} |
/** |
* Check whether this is a valid hour |
* @return boolean |
* @access public |
*/ |
function isValidHour() |
{ |
$h = $this->calendar->thisHour(); |
$min = 0; |
if ($min > $h) { |
$this->errors[] = new Calendar_Validation_Error( |
'Hour', $h, CALENDAR_VALUE_TOOSMALL.$min); |
return false; |
} |
$max = ($this->cE->getHoursInDay($this->calendar->thisDay())-1); |
if ($h > $max) { |
$this->errors[] = new Calendar_Validation_Error( |
'Hour', $h, CALENDAR_VALUE_TOOLARGE.$max); |
return false; |
} |
return true; |
} |
/** |
* Check whether this is a valid minute |
* @return boolean |
* @access public |
*/ |
function isValidMinute() |
{ |
$i = $this->calendar->thisMinute(); |
$min = 0; |
if ($min > $i) { |
$this->errors[] = new Calendar_Validation_Error( |
'Minute', $i, CALENDAR_VALUE_TOOSMALL.$min); |
return false; |
} |
$max = ($this->cE->getMinutesInHour($this->calendar->thisHour())-1); |
if ($i > $max) { |
$this->errors[] = new Calendar_Validation_Error( |
'Minute', $i, CALENDAR_VALUE_TOOLARGE.$max); |
return false; |
} |
return true; |
} |
/** |
* Check whether this is a valid second |
* @return boolean |
* @access public |
*/ |
function isValidSecond() |
{ |
$s = $this->calendar->thisSecond(); |
$min = 0; |
if ($min > $s) { |
$this->errors[] = new Calendar_Validation_Error( |
'Second', $s, CALENDAR_VALUE_TOOSMALL.$min); |
return false; |
} |
$max = ($this->cE->getSecondsInMinute($this->calendar->thisMinute())-1); |
if ($s > $max) { |
$this->errors[] = new Calendar_Validation_Error( |
'Second', $s, CALENDAR_VALUE_TOOLARGE.$max); |
return false; |
} |
return true; |
} |
/** |
* Iterates over any validation errors |
* @return mixed either Calendar_Validation_Error or false |
* @access public |
*/ |
function fetch() |
{ |
$error = each ($this->errors); |
if ($error) { |
return $error['value']; |
} else { |
reset($this->errors); |
return false; |
} |
} |
} |
/** |
* For Validation Error messages |
* @see Calendar::fetch() |
* @package Calendar |
* @access public |
*/ |
class Calendar_Validation_Error |
{ |
/** |
* Date unit (e.g. month,hour,second) which failed test |
* @var string |
* @access private |
*/ |
var $unit; |
/** |
* Value of unit which failed test |
* @var int |
* @access private |
*/ |
var $value; |
/** |
* Validation error message |
* @var string |
* @access private |
*/ |
var $message; |
/** |
* Constructs Calendar_Validation_Error |
* @param string Date unit (e.g. month,hour,second) |
* @param int Value of unit which failed test |
* @param string Validation error message |
* @access protected |
*/ |
function Calendar_Validation_Error($unit,$value,$message) |
{ |
$this->unit = $unit; |
$this->value = $value; |
$this->message = $message; |
} |
/** |
* Returns the Date unit |
* @return string |
* @access public |
*/ |
function getUnit() |
{ |
return $this->unit; |
} |
/** |
* Returns the value of the unit |
* @return int |
* @access public |
*/ |
function getValue() |
{ |
return $this->value; |
} |
/** |
* Returns the validation error message |
* @return string |
* @access public |
*/ |
function getMessage() |
{ |
return $this->message; |
} |
/** |
* Returns a string containing the unit, value and error message |
* @return string |
* @access public |
*/ |
function toString () |
{ |
return $this->unit.' = '.$this->value.' ['.$this->message.']'; |
} |
} |
?> |
/branches/v1.0-menes/api/pear/Calendar/Month.php |
---|
New file |
0,0 → 1,113 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2002 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.02 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Harry Fuecks <hfuecks@phppatterns.com> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: Month.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
// |
/** |
* @package Calendar |
* @version $Id: Month.php,v 1.1 2005-09-30 14:58:00 ddelon Exp $ |
*/ |
/** |
* Allows Calendar include path to be redefined |
* @ignore |
*/ |
if (!defined('CALENDAR_ROOT')) { |
define('CALENDAR_ROOT', 'Calendar'.DIRECTORY_SEPARATOR); |
} |
/** |
* Load Calendar base class |
*/ |
require_once CALENDAR_ROOT.'Calendar.php'; |
/** |
* Represents a Month and builds Days |
* <code> |
* require_once 'Calendar'.DIRECTORY_SEPARATOR.'Month.php'; |
* $Month = & new Calendar_Month(2003, 10); // Oct 2003 |
* $Month->build(); // Build Calendar_Day objects |
* while ($Day = & $Month->fetch()) { |
* echo $Day->thisDay().'<br />'; |
* } |
* </code> |
* @package Calendar |
* @access public |
*/ |
class Calendar_Month extends Calendar |
{ |
/** |
* Constructs Calendar_Month |
* @param int year e.g. 2003 |
* @param int month e.g. 5 |
* @param int (optional) unused in this class |
* @access public |
*/ |
function Calendar_Month($y, $m, $firstDay=null) |
{ |
Calendar::Calendar($y, $m); |
} |
/** |
* Builds Day objects for this Month. Creates as many Calendar_Day objects |
* as there are days in the month |
* @param array (optional) Calendar_Day objects representing selected dates |
* @return boolean |
* @access public |
*/ |
function build($sDates=array()) |
{ |
require_once CALENDAR_ROOT.'Day.php'; |
$daysInMonth = $this->cE->getDaysInMonth($this->year, $this->month); |
for ($i=1; $i<=$daysInMonth; $i++) { |
$this->children[$i] = new Calendar_Day($this->year, $this->month, $i); |
} |
if (count($sDates) > 0) { |
$this->setSelection($sDates); |
} |
return true; |
} |
/** |
* Called from build() |
* @param array |
* @return void |
* @access private |
*/ |
function setSelection($sDates) |
{ |
foreach ($sDates as $sDate) { |
if ($this->year == $sDate->thisYear() |
&& $this->month == $sDate->thisMonth() ) |
{ |
$key = $sDate->thisDay(); |
if (isset($this->children[$key])) { |
$sDate->setSelected(); |
$class = strtolower(get_class($sDate)); |
if ( $class == 'calendar_day' || $class == 'calendar_decorator' ) { |
$sDate->setFirst($this->children[$key]->isFirst()); |
$sDate->setLast($this->children[$key]->isLast()); |
} |
$this->children[$key] = $sDate; |
} |
} |
} |
} |
} |
?> |
/branches/v1.0-menes/api/pear/DB.php |
---|
New file |
0,0 → 1,1388 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ |
/** |
* Database independent query interface |
* |
* PHP versions 4 and 5 |
* |
* LICENSE: This source file is subject to version 3.0 of the PHP license |
* that is available through the world-wide-web at the following URI: |
* http://www.php.net/license/3_0.txt. If you did not receive a copy of |
* the PHP License and are unable to obtain it through the web, please |
* send a note to license@php.net so we can mail you a copy immediately. |
* |
* @category Database |
* @package DB |
* @author Stig Bakken <ssb@php.net> |
* @author Tomas V.V.Cox <cox@idecnet.com> |
* @author Daniel Convissor <danielc@php.net> |
* @copyright 1997-2005 The PHP Group |
* @license http://www.php.net/license/3_0.txt PHP License 3.0 |
* @version CVS: $Id: DB.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $ |
* @link http://pear.php.net/package/DB |
*/ |
/** |
* Obtain the PEAR class so it can be extended from |
*/ |
require_once 'PEAR.php'; |
// {{{ constants |
// {{{ error codes |
/**#@+ |
* One of PEAR DB's portable error codes. |
* @see DB_common::errorCode(), DB::errorMessage() |
* |
* {@internal If you add an error code here, make sure you also add a textual |
* version of it in DB::errorMessage().}} |
*/ |
/** |
* The code returned by many methods upon success |
*/ |
define('DB_OK', 1); |
/** |
* Unkown error |
*/ |
define('DB_ERROR', -1); |
/** |
* Syntax error |
*/ |
define('DB_ERROR_SYNTAX', -2); |
/** |
* Tried to insert a duplicate value into a primary or unique index |
*/ |
define('DB_ERROR_CONSTRAINT', -3); |
/** |
* An identifier in the query refers to a non-existant object |
*/ |
define('DB_ERROR_NOT_FOUND', -4); |
/** |
* Tried to create a duplicate object |
*/ |
define('DB_ERROR_ALREADY_EXISTS', -5); |
/** |
* The current driver does not support the action you attempted |
*/ |
define('DB_ERROR_UNSUPPORTED', -6); |
/** |
* The number of parameters does not match the number of placeholders |
*/ |
define('DB_ERROR_MISMATCH', -7); |
/** |
* A literal submitted did not match the data type expected |
*/ |
define('DB_ERROR_INVALID', -8); |
/** |
* The current DBMS does not support the action you attempted |
*/ |
define('DB_ERROR_NOT_CAPABLE', -9); |
/** |
* A literal submitted was too long so the end of it was removed |
*/ |
define('DB_ERROR_TRUNCATED', -10); |
/** |
* A literal number submitted did not match the data type expected |
*/ |
define('DB_ERROR_INVALID_NUMBER', -11); |
/** |
* A literal date submitted did not match the data type expected |
*/ |
define('DB_ERROR_INVALID_DATE', -12); |
/** |
* Attempt to divide something by zero |
*/ |
define('DB_ERROR_DIVZERO', -13); |
/** |
* A database needs to be selected |
*/ |
define('DB_ERROR_NODBSELECTED', -14); |
/** |
* Could not create the object requested |
*/ |
define('DB_ERROR_CANNOT_CREATE', -15); |
/** |
* Could not drop the database requested because it does not exist |
*/ |
define('DB_ERROR_CANNOT_DROP', -17); |
/** |
* An identifier in the query refers to a non-existant table |
*/ |
define('DB_ERROR_NOSUCHTABLE', -18); |
/** |
* An identifier in the query refers to a non-existant column |
*/ |
define('DB_ERROR_NOSUCHFIELD', -19); |
/** |
* The data submitted to the method was inappropriate |
*/ |
define('DB_ERROR_NEED_MORE_DATA', -20); |
/** |
* The attempt to lock the table failed |
*/ |
define('DB_ERROR_NOT_LOCKED', -21); |
/** |
* The number of columns doesn't match the number of values |
*/ |
define('DB_ERROR_VALUE_COUNT_ON_ROW', -22); |
/** |
* The DSN submitted has problems |
*/ |
define('DB_ERROR_INVALID_DSN', -23); |
/** |
* Could not connect to the database |
*/ |
define('DB_ERROR_CONNECT_FAILED', -24); |
/** |
* The PHP extension needed for this DBMS could not be found |
*/ |
define('DB_ERROR_EXTENSION_NOT_FOUND',-25); |
/** |
* The present user has inadequate permissions to perform the task requestd |
*/ |
define('DB_ERROR_ACCESS_VIOLATION', -26); |
/** |
* The database requested does not exist |
*/ |
define('DB_ERROR_NOSUCHDB', -27); |
/** |
* Tried to insert a null value into a column that doesn't allow nulls |
*/ |
define('DB_ERROR_CONSTRAINT_NOT_NULL',-29); |
/**#@-*/ |
// }}} |
// {{{ prepared statement-related |
/**#@+ |
* Identifiers for the placeholders used in prepared statements. |
* @see DB_common::prepare() |
*/ |
/** |
* Indicates a scalar (<kbd>?</kbd>) placeholder was used |
* |
* Quote and escape the value as necessary. |
*/ |
define('DB_PARAM_SCALAR', 1); |
/** |
* Indicates an opaque (<kbd>&</kbd>) placeholder was used |
* |
* The value presented is a file name. Extract the contents of that file |
* and place them in this column. |
*/ |
define('DB_PARAM_OPAQUE', 2); |
/** |
* Indicates a misc (<kbd>!</kbd>) placeholder was used |
* |
* The value should not be quoted or escaped. |
*/ |
define('DB_PARAM_MISC', 3); |
/**#@-*/ |
// }}} |
// {{{ binary data-related |
/**#@+ |
* The different ways of returning binary data from queries. |
*/ |
/** |
* Sends the fetched data straight through to output |
*/ |
define('DB_BINMODE_PASSTHRU', 1); |
/** |
* Lets you return data as usual |
*/ |
define('DB_BINMODE_RETURN', 2); |
/** |
* Converts the data to hex format before returning it |
* |
* For example the string "123" would become "313233". |
*/ |
define('DB_BINMODE_CONVERT', 3); |
/**#@-*/ |
// }}} |
// {{{ fetch modes |
/**#@+ |
* Fetch Modes. |
* @see DB_common::setFetchMode() |
*/ |
/** |
* Indicates the current default fetch mode should be used |
* @see DB_common::$fetchmode |
*/ |
define('DB_FETCHMODE_DEFAULT', 0); |
/** |
* Column data indexed by numbers, ordered from 0 and up |
*/ |
define('DB_FETCHMODE_ORDERED', 1); |
/** |
* Column data indexed by column names |
*/ |
define('DB_FETCHMODE_ASSOC', 2); |
/** |
* Column data as object properties |
*/ |
define('DB_FETCHMODE_OBJECT', 3); |
/** |
* For multi-dimensional results, make the column name the first level |
* of the array and put the row number in the second level of the array |
* |
* This is flipped from the normal behavior, which puts the row numbers |
* in the first level of the array and the column names in the second level. |
*/ |
define('DB_FETCHMODE_FLIPPED', 4); |
/**#@-*/ |
/**#@+ |
* Old fetch modes. Left here for compatibility. |
*/ |
define('DB_GETMODE_ORDERED', DB_FETCHMODE_ORDERED); |
define('DB_GETMODE_ASSOC', DB_FETCHMODE_ASSOC); |
define('DB_GETMODE_FLIPPED', DB_FETCHMODE_FLIPPED); |
/**#@-*/ |
// }}} |
// {{{ tableInfo() && autoPrepare()-related |
/**#@+ |
* The type of information to return from the tableInfo() method. |
* |
* Bitwised constants, so they can be combined using <kbd>|</kbd> |
* and removed using <kbd>^</kbd>. |
* |
* @see DB_common::tableInfo() |
* |
* {@internal Since the TABLEINFO constants are bitwised, if more of them are |
* added in the future, make sure to adjust DB_TABLEINFO_FULL accordingly.}} |
*/ |
define('DB_TABLEINFO_ORDER', 1); |
define('DB_TABLEINFO_ORDERTABLE', 2); |
define('DB_TABLEINFO_FULL', 3); |
/**#@-*/ |
/**#@+ |
* The type of query to create with the automatic query building methods. |
* @see DB_common::autoPrepare(), DB_common::autoExecute() |
*/ |
define('DB_AUTOQUERY_INSERT', 1); |
define('DB_AUTOQUERY_UPDATE', 2); |
/**#@-*/ |
// }}} |
// {{{ portability modes |
/**#@+ |
* Portability Modes. |
* |
* Bitwised constants, so they can be combined using <kbd>|</kbd> |
* and removed using <kbd>^</kbd>. |
* |
* @see DB_common::setOption() |
* |
* {@internal Since the PORTABILITY constants are bitwised, if more of them are |
* added in the future, make sure to adjust DB_PORTABILITY_ALL accordingly.}} |
*/ |
/** |
* Turn off all portability features |
*/ |
define('DB_PORTABILITY_NONE', 0); |
/** |
* Convert names of tables and fields to lower case |
* when using the get*(), fetch*() and tableInfo() methods |
*/ |
define('DB_PORTABILITY_LOWERCASE', 1); |
/** |
* Right trim the data output by get*() and fetch*() |
*/ |
define('DB_PORTABILITY_RTRIM', 2); |
/** |
* Force reporting the number of rows deleted |
*/ |
define('DB_PORTABILITY_DELETE_COUNT', 4); |
/** |
* Enable hack that makes numRows() work in Oracle |
*/ |
define('DB_PORTABILITY_NUMROWS', 8); |
/** |
* Makes certain error messages in certain drivers compatible |
* with those from other DBMS's |
* |
* + mysql, mysqli: change unique/primary key constraints |
* DB_ERROR_ALREADY_EXISTS -> DB_ERROR_CONSTRAINT |
* |
* + odbc(access): MS's ODBC driver reports 'no such field' as code |
* 07001, which means 'too few parameters.' When this option is on |
* that code gets mapped to DB_ERROR_NOSUCHFIELD. |
*/ |
define('DB_PORTABILITY_ERRORS', 16); |
/** |
* Convert null values to empty strings in data output by |
* get*() and fetch*() |
*/ |
define('DB_PORTABILITY_NULL_TO_EMPTY', 32); |
/** |
* Turn on all portability features |
*/ |
define('DB_PORTABILITY_ALL', 63); |
/**#@-*/ |
// }}} |
// }}} |
// {{{ class DB |
/** |
* Database independent query interface |
* |
* The main "DB" class is simply a container class with some static |
* methods for creating DB objects as well as some utility functions |
* common to all parts of DB. |
* |
* The object model of DB is as follows (indentation means inheritance): |
* <pre> |
* DB The main DB class. This is simply a utility class |
* with some "static" methods for creating DB objects as |
* well as common utility functions for other DB classes. |
* |
* DB_common The base for each DB implementation. Provides default |
* | implementations (in OO lingo virtual methods) for |
* | the actual DB implementations as well as a bunch of |
* | query utility functions. |
* | |
* +-DB_mysql The DB implementation for MySQL. Inherits DB_common. |
* When calling DB::factory or DB::connect for MySQL |
* connections, the object returned is an instance of this |
* class. |
* </pre> |
* |
* @category Database |
* @package DB |
* @author Stig Bakken <ssb@php.net> |
* @author Tomas V.V.Cox <cox@idecnet.com> |
* @author Daniel Convissor <danielc@php.net> |
* @copyright 1997-2005 The PHP Group |
* @license http://www.php.net/license/3_0.txt PHP License 3.0 |
* @version Release: @package_version@ |
* @link http://pear.php.net/package/DB |
*/ |
class DB |
{ |
// {{{ &factory() |
/** |
* Create a new DB object for the specified database type but don't |
* connect to the database |
* |
* @param string $type the database type (eg "mysql") |
* @param array $options an associative array of option names and values |
* |
* @return object a new DB object. A DB_Error object on failure. |
* |
* @see DB_common::setOption() |
*/ |
function &factory($type, $options = false) |
{ |
if (!is_array($options)) { |
$options = array('persistent' => $options); |
} |
if (isset($options['debug']) && $options['debug'] >= 2) { |
// expose php errors with sufficient debug level |
include_once "DB/{$type}.php"; |
} else { |
@include_once "DB/{$type}.php"; |
} |
$classname = "DB_${type}"; |
if (!class_exists($classname)) { |
$tmp = PEAR::raiseError(null, DB_ERROR_NOT_FOUND, null, null, |
"Unable to include the DB/{$type}.php" |
. " file for '$dsn'", |
'DB_Error', true); |
return $tmp; |
} |
@$obj =& new $classname; |
foreach ($options as $option => $value) { |
$test = $obj->setOption($option, $value); |
if (DB::isError($test)) { |
return $test; |
} |
} |
return $obj; |
} |
// }}} |
// {{{ &connect() |
/** |
* Create a new DB object including a connection to the specified database |
* |
* Example 1. |
* <code> |
* require_once 'DB.php'; |
* |
* $dsn = 'pgsql://user:password@host/database'; |
* $options = array( |
* 'debug' => 2, |
* 'portability' => DB_PORTABILITY_ALL, |
* ); |
* |
* $db =& DB::connect($dsn, $options); |
* if (PEAR::isError($db)) { |
* die($db->getMessage()); |
* } |
* </code> |
* |
* @param mixed $dsn the string "data source name" or array in the |
* format returned by DB::parseDSN() |
* @param array $options an associative array of option names and values |
* |
* @return object a new DB object. A DB_Error object on failure. |
* |
* @uses DB_dbase::connect(), DB_fbsql::connect(), DB_ibase::connect(), |
* DB_ifx::connect(), DB_msql::connect(), DB_mssql::connect(), |
* DB_mysql::connect(), DB_mysqli::connect(), DB_oci8::connect(), |
* DB_odbc::connect(), DB_pgsql::connect(), DB_sqlite::connect(), |
* DB_sybase::connect() |
* |
* @uses DB::parseDSN(), DB_common::setOption(), PEAR::isError() |
*/ |
function &connect($dsn, $options = array()) |
{ |
$dsninfo = DB::parseDSN($dsn); |
$type = $dsninfo['phptype']; |
if (!is_array($options)) { |
/* |
* For backwards compatibility. $options used to be boolean, |
* indicating whether the connection should be persistent. |
*/ |
$options = array('persistent' => $options); |
} |
if (isset($options['debug']) && $options['debug'] >= 2) { |
// expose php errors with sufficient debug level |
include_once "DB/${type}.php"; |
} else { |
@include_once "DB/${type}.php"; |
} |
$classname = "DB_${type}"; |
if (!class_exists($classname)) { |
$tmp = PEAR::raiseError(null, DB_ERROR_NOT_FOUND, null, null, |
"Unable to include the DB/{$type}.php" |
. " file for '$dsn'", |
'DB_Error', true); |
return $tmp; |
} |
@$obj =& new $classname; |
foreach ($options as $option => $value) { |
$test = $obj->setOption($option, $value); |
if (DB::isError($test)) { |
return $test; |
} |
} |
$err = $obj->connect($dsninfo, $obj->getOption('persistent')); |
if (DB::isError($err)) { |
$err->addUserInfo($dsn); |
return $err; |
} |
return $obj; |
} |
// }}} |
// {{{ apiVersion() |
/** |
* Return the DB API version |
* |
* @return string the DB API version number |
*/ |
function apiVersion() |
{ |
return '@package_version@'; |
} |
// }}} |
// {{{ isError() |
/** |
* Determines if a variable is a DB_Error object |
* |
* @param mixed $value the variable to check |
* |
* @return bool whether $value is DB_Error object |
*/ |
function isError($value) |
{ |
return is_a($value, 'DB_Error'); |
} |
// }}} |
// {{{ isConnection() |
/** |
* Determines if a value is a DB_<driver> object |
* |
* @param mixed $value the value to test |
* |
* @return bool whether $value is a DB_<driver> object |
*/ |
function isConnection($value) |
{ |
return (is_object($value) && |
is_subclass_of($value, 'db_common') && |
method_exists($value, 'simpleQuery')); |
} |
// }}} |
// {{{ isManip() |
/** |
* Tell whether a query is a data manipulation or data definition query |
* |
* Examples of data manipulation queries are INSERT, UPDATE and DELETE. |
* Examples of data definition queries are CREATE, DROP, ALTER, GRANT, |
* REVOKE. |
* |
* @param string $query the query |
* |
* @return boolean whether $query is a data manipulation query |
*/ |
function isManip($query) |
{ |
$manips = 'INSERT|UPDATE|DELETE|REPLACE|' |
. 'CREATE|DROP|' |
. 'LOAD DATA|SELECT .* INTO|COPY|' |
. 'ALTER|GRANT|REVOKE|' |
. 'LOCK|UNLOCK'; |
if (preg_match('/^\s*"?(' . $manips . ')\s+/i', $query)) { |
return true; |
} |
return false; |
} |
// }}} |
// {{{ errorMessage() |
/** |
* Return a textual error message for a DB error code |
* |
* @param integer $value the DB error code |
* |
* @return string the error message or false if the error code was |
* not recognized |
*/ |
function errorMessage($value) |
{ |
static $errorMessages; |
if (!isset($errorMessages)) { |
$errorMessages = array( |
DB_ERROR => 'unknown error', |
DB_ERROR_ACCESS_VIOLATION => 'insufficient permissions', |
DB_ERROR_ALREADY_EXISTS => 'already exists', |
DB_ERROR_CANNOT_CREATE => 'can not create', |
DB_ERROR_CANNOT_DROP => 'can not drop', |
DB_ERROR_CONNECT_FAILED => 'connect failed', |
DB_ERROR_CONSTRAINT => 'constraint violation', |
DB_ERROR_CONSTRAINT_NOT_NULL=> 'null value violates not-null constraint', |
DB_ERROR_DIVZERO => 'division by zero', |
DB_ERROR_EXTENSION_NOT_FOUND=> 'extension not found', |
DB_ERROR_INVALID => 'invalid', |
DB_ERROR_INVALID_DATE => 'invalid date or time', |
DB_ERROR_INVALID_DSN => 'invalid DSN', |
DB_ERROR_INVALID_NUMBER => 'invalid number', |
DB_ERROR_MISMATCH => 'mismatch', |
DB_ERROR_NEED_MORE_DATA => 'insufficient data supplied', |
DB_ERROR_NODBSELECTED => 'no database selected', |
DB_ERROR_NOSUCHDB => 'no such database', |
DB_ERROR_NOSUCHFIELD => 'no such field', |
DB_ERROR_NOSUCHTABLE => 'no such table', |
DB_ERROR_NOT_CAPABLE => 'DB backend not capable', |
DB_ERROR_NOT_FOUND => 'not found', |
DB_ERROR_NOT_LOCKED => 'not locked', |
DB_ERROR_SYNTAX => 'syntax error', |
DB_ERROR_UNSUPPORTED => 'not supported', |
DB_ERROR_TRUNCATED => 'truncated', |
DB_ERROR_VALUE_COUNT_ON_ROW => 'value count on row', |
DB_OK => 'no error', |
); |
} |
if (DB::isError($value)) { |
$value = $value->getCode(); |
} |
return isset($errorMessages[$value]) ? $errorMessages[$value] |
: $errorMessages[DB_ERROR]; |
} |
// }}} |
// {{{ parseDSN() |
/** |
* Parse a data source name |
* |
* Additional keys can be added by appending a URI query string to the |
* end of the DSN. |
* |
* The format of the supplied DSN is in its fullest form: |
* <code> |
* phptype(dbsyntax)://username:password@protocol+hostspec/database?option=8&another=true |
* </code> |
* |
* Most variations are allowed: |
* <code> |
* phptype://username:password@protocol+hostspec:110//usr/db_file.db?mode=0644 |
* phptype://username:password@hostspec/database_name |
* phptype://username:password@hostspec |
* phptype://username@hostspec |
* phptype://hostspec/database |
* phptype://hostspec |
* phptype(dbsyntax) |
* phptype |
* </code> |
* |
* @param string $dsn Data Source Name to be parsed |
* |
* @return array an associative array with the following keys: |
* + phptype: Database backend used in PHP (mysql, odbc etc.) |
* + dbsyntax: Database used with regards to SQL syntax etc. |
* + protocol: Communication protocol to use (tcp, unix etc.) |
* + hostspec: Host specification (hostname[:port]) |
* + database: Database to use on the DBMS server |
* + username: User name for login |
* + password: Password for login |
*/ |
function parseDSN($dsn) |
{ |
$parsed = array( |
'phptype' => false, |
'dbsyntax' => false, |
'username' => false, |
'password' => false, |
'protocol' => false, |
'hostspec' => false, |
'port' => false, |
'socket' => false, |
'database' => false, |
); |
if (is_array($dsn)) { |
$dsn = array_merge($parsed, $dsn); |
if (!$dsn['dbsyntax']) { |
$dsn['dbsyntax'] = $dsn['phptype']; |
} |
return $dsn; |
} |
// Find phptype and dbsyntax |
if (($pos = strpos($dsn, '://')) !== false) { |
$str = substr($dsn, 0, $pos); |
$dsn = substr($dsn, $pos + 3); |
} else { |
$str = $dsn; |
$dsn = null; |
} |
// Get phptype and dbsyntax |
// $str => phptype(dbsyntax) |
if (preg_match('|^(.+?)\((.*?)\)$|', $str, $arr)) { |
$parsed['phptype'] = $arr[1]; |
$parsed['dbsyntax'] = !$arr[2] ? $arr[1] : $arr[2]; |
} else { |
$parsed['phptype'] = $str; |
$parsed['dbsyntax'] = $str; |
} |
if (!count($dsn)) { |
return $parsed; |
} |
// Get (if found): username and password |
// $dsn => username:password@protocol+hostspec/database |
if (($at = strrpos($dsn,'@')) !== false) { |
$str = substr($dsn, 0, $at); |
$dsn = substr($dsn, $at + 1); |
if (($pos = strpos($str, ':')) !== false) { |
$parsed['username'] = rawurldecode(substr($str, 0, $pos)); |
$parsed['password'] = rawurldecode(substr($str, $pos + 1)); |
} else { |
$parsed['username'] = rawurldecode($str); |
} |
} |
// Find protocol and hostspec |
if (preg_match('|^([^(]+)\((.*?)\)/?(.*?)$|', $dsn, $match)) { |
// $dsn => proto(proto_opts)/database |
$proto = $match[1]; |
$proto_opts = $match[2] ? $match[2] : false; |
$dsn = $match[3]; |
} else { |
// $dsn => protocol+hostspec/database (old format) |
if (strpos($dsn, '+') !== false) { |
list($proto, $dsn) = explode('+', $dsn, 2); |
} |
if (strpos($dsn, '/') !== false) { |
list($proto_opts, $dsn) = explode('/', $dsn, 2); |
} else { |
$proto_opts = $dsn; |
$dsn = null; |
} |
} |
// process the different protocol options |
$parsed['protocol'] = (!empty($proto)) ? $proto : 'tcp'; |
$proto_opts = rawurldecode($proto_opts); |
if ($parsed['protocol'] == 'tcp') { |
if (strpos($proto_opts, ':') !== false) { |
list($parsed['hostspec'], |
$parsed['port']) = explode(':', $proto_opts); |
} else { |
$parsed['hostspec'] = $proto_opts; |
} |
} elseif ($parsed['protocol'] == 'unix') { |
$parsed['socket'] = $proto_opts; |
} |
// Get dabase if any |
// $dsn => database |
if ($dsn) { |
if (($pos = strpos($dsn, '?')) === false) { |
// /database |
$parsed['database'] = rawurldecode($dsn); |
} else { |
// /database?param1=value1¶m2=value2 |
$parsed['database'] = rawurldecode(substr($dsn, 0, $pos)); |
$dsn = substr($dsn, $pos + 1); |
if (strpos($dsn, '&') !== false) { |
$opts = explode('&', $dsn); |
} else { // database?param1=value1 |
$opts = array($dsn); |
} |
foreach ($opts as $opt) { |
list($key, $value) = explode('=', $opt); |
if (!isset($parsed[$key])) { |
// don't allow params overwrite |
$parsed[$key] = rawurldecode($value); |
} |
} |
} |
} |
return $parsed; |
} |
// }}} |
} |
// }}} |
// {{{ class DB_Error |
/** |
* DB_Error implements a class for reporting portable database error |
* messages |
* |
* @category Database |
* @package DB |
* @author Stig Bakken <ssb@php.net> |
* @copyright 1997-2005 The PHP Group |
* @license http://www.php.net/license/3_0.txt PHP License 3.0 |
* @version Release: @package_version@ |
* @link http://pear.php.net/package/DB |
*/ |
class DB_Error extends PEAR_Error |
{ |
// {{{ constructor |
/** |
* DB_Error constructor |
* |
* @param mixed $code DB error code, or string with error message |
* @param int $mode what "error mode" to operate in |
* @param int $level what error level to use for $mode & |
* PEAR_ERROR_TRIGGER |
* @param mixed $debuginfo additional debug info, such as the last query |
* |
* @see PEAR_Error |
*/ |
function DB_Error($code = DB_ERROR, $mode = PEAR_ERROR_RETURN, |
$level = E_USER_NOTICE, $debuginfo = null) |
{ |
if (is_int($code)) { |
$this->PEAR_Error('DB Error: ' . DB::errorMessage($code), $code, |
$mode, $level, $debuginfo); |
} else { |
$this->PEAR_Error("DB Error: $code", DB_ERROR, |
$mode, $level, $debuginfo); |
} |
} |
// }}} |
} |
// }}} |
// {{{ class DB_result |
/** |
* This class implements a wrapper for a DB result set |
* |
* A new instance of this class will be returned by the DB implementation |
* after processing a query that returns data. |
* |
* @category Database |
* @package DB |
* @author Stig Bakken <ssb@php.net> |
* @copyright 1997-2005 The PHP Group |
* @license http://www.php.net/license/3_0.txt PHP License 3.0 |
* @version Release: @package_version@ |
* @link http://pear.php.net/package/DB |
*/ |
class DB_result |
{ |
// {{{ properties |
/** |
* Should results be freed automatically when there are no more rows? |
* @var boolean |
* @see DB_common::$options |
*/ |
var $autofree; |
/** |
* A reference to the DB_<driver> object |
* @var object |
*/ |
var $dbh; |
/** |
* The current default fetch mode |
* @var integer |
* @see DB_common::$fetchmode |
*/ |
var $fetchmode; |
/** |
* The name of the class into which results should be fetched when |
* DB_FETCHMODE_OBJECT is in effect |
* |
* @var string |
* @see DB_common::$fetchmode_object_class |
*/ |
var $fetchmode_object_class; |
/** |
* The number of rows to fetch from a limit query |
* @var integer |
*/ |
var $limit_count = null; |
/** |
* The row to start fetching from in limit queries |
* @var integer |
*/ |
var $limit_from = null; |
/** |
* The execute parameters that created this result |
* @var array |
* @since Property available since Release 1.7.0 |
*/ |
var $parameters; |
/** |
* The query string that created this result |
* |
* Copied here incase it changes in $dbh, which is referenced |
* |
* @var string |
* @since Property available since Release 1.7.0 |
*/ |
var $query; |
/** |
* The query result resource id created by PHP |
* @var resource |
*/ |
var $result; |
/** |
* The present row being dealt with |
* @var integer |
*/ |
var $row_counter = null; |
/** |
* The prepared statement resource id created by PHP in $dbh |
* |
* This resource is only available when the result set was created using |
* a driver's native execute() method, not PEAR DB's emulated one. |
* |
* Copied here incase it changes in $dbh, which is referenced |
* |
* {@internal Mainly here because the InterBase/Firebird API is only |
* able to retrieve data from result sets if the statemnt handle is |
* still in scope.}} |
* |
* @var resource |
* @since Property available since Release 1.7.0 |
*/ |
var $statement; |
// }}} |
// {{{ constructor |
/** |
* This constructor sets the object's properties |
* |
* @param object &$dbh the DB object reference |
* @param resource $result the result resource id |
* @param array $options an associative array with result options |
* |
* @return void |
*/ |
function DB_result(&$dbh, $result, $options = array()) |
{ |
$this->autofree = $dbh->options['autofree']; |
$this->dbh = &$dbh; |
$this->fetchmode = $dbh->fetchmode; |
$this->fetchmode_object_class = $dbh->fetchmode_object_class; |
$this->parameters = $dbh->last_parameters; |
$this->query = $dbh->last_query; |
$this->result = $result; |
$this->statement = empty($dbh->last_stmt) ? null : $dbh->last_stmt; |
foreach ($options as $key => $value) { |
$this->setOption($key, $value); |
} |
} |
/** |
* Set options for the DB_result object |
* |
* @param string $key the option to set |
* @param mixed $value the value to set the option to |
* |
* @return void |
*/ |
function setOption($key, $value = null) |
{ |
switch ($key) { |
case 'limit_from': |
$this->limit_from = $value; |
break; |
case 'limit_count': |
$this->limit_count = $value; |
} |
} |
// }}} |
// {{{ fetchRow() |
/** |
* Fetch a row of data and return it by reference into an array |
* |
* The type of array returned can be controlled either by setting this |
* method's <var>$fetchmode</var> parameter or by changing the default |
* fetch mode setFetchMode() before calling this method. |
* |
* There are two options for standardizing the information returned |
* from databases, ensuring their values are consistent when changing |
* DBMS's. These portability options can be turned on when creating a |
* new DB object or by using setOption(). |
* |
* + <var>DB_PORTABILITY_LOWERCASE</var> |
* convert names of fields to lower case |
* |
* + <var>DB_PORTABILITY_RTRIM</var> |
* right trim the data |
* |
* @param int $fetchmode the constant indicating how to format the data |
* @param int $rownum the row number to fetch (index starts at 0) |
* |
* @return mixed an array or object containing the row's data, |
* NULL when the end of the result set is reached |
* or a DB_Error object on failure. |
* |
* @see DB_common::setOption(), DB_common::setFetchMode() |
*/ |
function &fetchRow($fetchmode = DB_FETCHMODE_DEFAULT, $rownum = null) |
{ |
if ($fetchmode === DB_FETCHMODE_DEFAULT) { |
$fetchmode = $this->fetchmode; |
} |
if ($fetchmode === DB_FETCHMODE_OBJECT) { |
$fetchmode = DB_FETCHMODE_ASSOC; |
$object_class = $this->fetchmode_object_class; |
} |
if ($this->limit_from !== null) { |
if ($this->row_counter === null) { |
$this->row_counter = $this->limit_from; |
// Skip rows |
if ($this->dbh->features['limit'] === false) { |
$i = 0; |
while ($i++ < $this->limit_from) { |
$this->dbh->fetchInto($this->result, $arr, $fetchmode); |
} |
} |
} |
if ($this->row_counter >= ($this->limit_from + $this->limit_count)) |
{ |
if ($this->autofree) { |
$this->free(); |
} |
$tmp = null; |
return $tmp; |
} |
if ($this->dbh->features['limit'] === 'emulate') { |
$rownum = $this->row_counter; |
} |
$this->row_counter++; |
} |
$res = $this->dbh->fetchInto($this->result, $arr, $fetchmode, $rownum); |
if ($res === DB_OK) { |
if (isset($object_class)) { |
// The default mode is specified in the |
// DB_common::fetchmode_object_class property |
if ($object_class == 'stdClass') { |
$arr = (object) $arr; |
} else { |
$arr = &new $object_class($arr); |
} |
} |
return $arr; |
} |
if ($res == null && $this->autofree) { |
$this->free(); |
} |
return $res; |
} |
// }}} |
// {{{ fetchInto() |
/** |
* Fetch a row of data into an array which is passed by reference |
* |
* The type of array returned can be controlled either by setting this |
* method's <var>$fetchmode</var> parameter or by changing the default |
* fetch mode setFetchMode() before calling this method. |
* |
* There are two options for standardizing the information returned |
* from databases, ensuring their values are consistent when changing |
* DBMS's. These portability options can be turned on when creating a |
* new DB object or by using setOption(). |
* |
* + <var>DB_PORTABILITY_LOWERCASE</var> |
* convert names of fields to lower case |
* |
* + <var>DB_PORTABILITY_RTRIM</var> |
* right trim the data |
* |
* @param array &$arr the variable where the data should be placed |
* @param int $fetchmode the constant indicating how to format the data |
* @param int $rownum the row number to fetch (index starts at 0) |
* |
* @return mixed DB_OK if a row is processed, NULL when the end of the |
* result set is reached or a DB_Error object on failure |
* |
* @see DB_common::setOption(), DB_common::setFetchMode() |
*/ |
function fetchInto(&$arr, $fetchmode = DB_FETCHMODE_DEFAULT, $rownum = null) |
{ |
if ($fetchmode === DB_FETCHMODE_DEFAULT) { |
$fetchmode = $this->fetchmode; |
} |
if ($fetchmode === DB_FETCHMODE_OBJECT) { |
$fetchmode = DB_FETCHMODE_ASSOC; |
$object_class = $this->fetchmode_object_class; |
} |
if ($this->limit_from !== null) { |
if ($this->row_counter === null) { |
$this->row_counter = $this->limit_from; |
// Skip rows |
if ($this->dbh->features['limit'] === false) { |
$i = 0; |
while ($i++ < $this->limit_from) { |
$this->dbh->fetchInto($this->result, $arr, $fetchmode); |
} |
} |
} |
if ($this->row_counter >= ( |
$this->limit_from + $this->limit_count)) |
{ |
if ($this->autofree) { |
$this->free(); |
} |
return null; |
} |
if ($this->dbh->features['limit'] === 'emulate') { |
$rownum = $this->row_counter; |
} |
$this->row_counter++; |
} |
$res = $this->dbh->fetchInto($this->result, $arr, $fetchmode, $rownum); |
if ($res === DB_OK) { |
if (isset($object_class)) { |
// default mode specified in the |
// DB_common::fetchmode_object_class property |
if ($object_class == 'stdClass') { |
$arr = (object) $arr; |
} else { |
$arr = new $object_class($arr); |
} |
} |
return DB_OK; |
} |
if ($res == null && $this->autofree) { |
$this->free(); |
} |
return $res; |
} |
// }}} |
// {{{ numCols() |
/** |
* Get the the number of columns in a result set |
* |
* @return int the number of columns. A DB_Error object on failure. |
*/ |
function numCols() |
{ |
return $this->dbh->numCols($this->result); |
} |
// }}} |
// {{{ numRows() |
/** |
* Get the number of rows in a result set |
* |
* @return int the number of rows. A DB_Error object on failure. |
*/ |
function numRows() |
{ |
if ($this->dbh->features['numrows'] === 'emulate' |
&& $this->dbh->options['portability'] & DB_PORTABILITY_NUMROWS) |
{ |
if ($this->dbh->features['prepare']) { |
$res = $this->dbh->query($this->query, $this->parameters); |
} else { |
$res = $this->dbh->query($this->query); |
} |
if (DB::isError($res)) { |
return $res; |
} |
$i = 0; |
while ($res->fetchInto($tmp, DB_FETCHMODE_ORDERED)) { |
$i++; |
} |
return $i; |
} else { |
return $this->dbh->numRows($this->result); |
} |
} |
// }}} |
// {{{ nextResult() |
/** |
* Get the next result if a batch of queries was executed |
* |
* @return bool true if a new result is available or false if not |
*/ |
function nextResult() |
{ |
return $this->dbh->nextResult($this->result); |
} |
// }}} |
// {{{ free() |
/** |
* Frees the resources allocated for this result set |
* |
* @return bool true on success. A DB_Error object on failure. |
*/ |
function free() |
{ |
$err = $this->dbh->freeResult($this->result); |
if (DB::isError($err)) { |
return $err; |
} |
$this->result = false; |
$this->statement = false; |
return true; |
} |
// }}} |
// {{{ tableInfo() |
/** |
* @see DB_common::tableInfo() |
* @deprecated Method deprecated some time before Release 1.2 |
*/ |
function tableInfo($mode = null) |
{ |
if (is_string($mode)) { |
return $this->dbh->raiseError(DB_ERROR_NEED_MORE_DATA); |
} |
return $this->dbh->tableInfo($this, $mode); |
} |
// }}} |
// {{{ getQuery() |
/** |
* Determine the query string that created this result |
* |
* @return string the query string |
* |
* @since Method available since Release 1.7.0 |
*/ |
function getQuery() |
{ |
return $this->query; |
} |
// }}} |
// {{{ getRowCounter() |
/** |
* Tells which row number is currently being processed |
* |
* @return integer the current row being looked at. Starts at 1. |
*/ |
function getRowCounter() |
{ |
return $this->row_counter; |
} |
// }}} |
} |
// }}} |
// {{{ class DB_row |
/** |
* PEAR DB Row Object |
* |
* The object contains a row of data from a result set. Each column's data |
* is placed in a property named for the column. |
* |
* @category Database |
* @package DB |
* @author Stig Bakken <ssb@php.net> |
* @copyright 1997-2005 The PHP Group |
* @license http://www.php.net/license/3_0.txt PHP License 3.0 |
* @version Release: @package_version@ |
* @link http://pear.php.net/package/DB |
* @see DB_common::setFetchMode() |
*/ |
class DB_row |
{ |
// {{{ constructor |
/** |
* The constructor places a row's data into properties of this object |
* |
* @param array the array containing the row's data |
* |
* @return void |
*/ |
function DB_row(&$arr) |
{ |
foreach ($arr as $key => $value) { |
$this->$key = &$arr[$key]; |
} |
} |
// }}} |
} |
// }}} |
/* |
* Local variables: |
* tab-width: 4 |
* c-basic-offset: 4 |
* End: |
*/ |
?> |
/branches/v1.0-menes/api/fichier/FIC_manipulation.fonct.php |
---|
New file |
0,0 → 1,138 |
<?php |
/*vim: set expandtab tabstop=4 shiftwidth=4: */ |
// +------------------------------------------------------------------------------------------------------+ |
// | PHP version 4.1 | |
// +------------------------------------------------------------------------------------------------------+ |
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) | |
// +------------------------------------------------------------------------------------------------------+ |
// | This library is free software; you can redistribute it and/or | |
// | modify it under the terms of the GNU Lesser General Public | |
// | License as published by the Free Software Foundation; either | |
// | version 2.1 of the License, or (at your option) any later version. | |
// | | |
// | This library 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 | |
// | Lesser General Public License for more details. | |
// | | |
// | You should have received a copy of the GNU Lesser General Public | |
// | License along with this library; if not, write to the Free Software | |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
// +------------------------------------------------------------------------------------------------------+ |
// CVS : $Id: FIC_manipulation.fonct.php,v 1.3 2004-10-19 15:57:03 jpm Exp $ |
/** |
* Bibliothèque de fonctions permettant de manipuler des fichier ou des dossiers. |
* |
* Contient des fonctions permettant de manipuler des fichier ou des dossiers. |
* |
*@package Fichier |
//Auteur original : |
*@author Jean-Pascal MILCENT <jpm@tela-botanica.org> |
//Autres auteurs : |
*@author Aucun |
*@copyright Tela-Botanica 2000-2004 |
*@version $Revision: 1.3 $ $Date: 2004-10-19 15:57:03 $ |
// +------------------------------------------------------------------------------------------------------+ |
*/ |
// +------------------------------------------------------------------------------------------------------+ |
// | LISTE de FONCTIONS | |
// +------------------------------------------------------------------------------------------------------+ |
/** |
* Fonction supprimerDossier() - Supprime un fichier ou un dossier et tout son contenu. |
* |
* Fonction récursive supprimant tout le contenu d'un dossier. |
* Auteur d'origine : Aidan Lister (http://aidan.dotgeek.org/lib/?file=function.rmdirr.php) |
* Traduction française et ajout gestion séparateur : Jean-Pascal Milcent |
* |
* @author Aidan Lister <aidan@php.net> |
* @author Jean-Pascal Milcent <jpm@tela-botanica.org> |
* @version 1.0.0 |
* @param string le chemin du dossier à supprimer. |
* @param string le caractère représentant le séparateur dans un chemin d'accès. |
* @return bool retoure TRUE en cas de succès, FALSE dans le cas contraire. |
*/ |
function supprimerDossier($dossier_nom, $separateur = '/') |
{ |
// Simple suppression d'un fichier |
if (is_file($dossier_nom)) { |
return unlink($dossier_nom); |
} |
if (is_dir($dossier_nom)) { |
// Analyse du dossier |
$dossier = dir($dossier_nom); |
while (false !== $entree = $dossier->read()) { |
// Nous sautons les pointeurs |
if ($entree == '.' || $entree == '..') { |
continue; |
} |
// Suppression du dossier ou appel récursif de la fonction |
if (is_dir($dossier_nom.$separateur.$entree)) { |
supprimerDossier($dossier_nom.$separateur.$entree, $separateur); |
} else { |
unlink($dossier_nom.$separateur.$entree); |
} |
} |
// Nettoyage |
$dossier->close(); |
return rmdir($dossier_nom); |
} else { |
return false; |
} |
} |
/** |
* Fonction creerDossier() - Créer une structure de dossier. |
* |
* Fonction récursive créant une structure de dossiers. |
* Auteur d'origine : Aidan Lister (http://aidan.dotgeek.org/lib/?file=function.mkdirr.php) |
* Traduction française et ajout gestion séparateur : Jean-Pascal Milcent |
* |
* @author Aidan Lister <aidan@php.net> |
* @version 1.0.0 |
* @param string la structure de dossier à créer. |
* @param string le mode de création du répertoire. |
* @param string le caractère représentant le séparateur dans un chemin d'accès. |
* @return bool retourne TRUE en cas de succès, FALSE dans le cas contraire. |
*/ |
function creerDossier($chemin, $mode = null, $separateur = '/') |
{ |
// Check if directory already exists |
if (is_dir($chemin) || empty($chemin)) { |
return true; |
} |
// Ensure a file does not already exist with the same name |
if (is_file($chemin)) { |
trigger_error('mkdirr() File exists', E_USER_WARNING); |
return false; |
} |
// Crawl up the directory tree |
$chemin_suite = substr($chemin, 0, strrpos($chemin, $separateur)); |
if (creerDossier($chemin_suite, $mode, $separateur)) { |
if (!file_exists($chemin)) { |
return @mkdir($chemin, $mode); |
} |
} |
return false; |
} |
/* +--Fin du code ----------------------------------------------------------------------------------------+ |
* |
* $Log: not supported by cvs2svn $ |
* Revision 1.2 2004/10/18 10:12:22 jpm |
* Traduction commentaires... |
* |
* Revision 1.1 2004/10/18 10:09:12 jpm |
* Ajout d'une fonction permettant de supprimer récursivement un répertoire. |
* |
* |
* +-- Fin du code ----------------------------------------------------------------------------------------+ |
*/ |
?> |
/branches/v1.0-menes/api/fckeditor/fckeditor.lasso |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/fckeditor.lasso |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/fckeditor.asp |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/fckeditor.asp |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/fckeditor.cfm |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/fckeditor.cfm |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/fckeditor.afp |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/fckeditor.afp |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/fckeditor.php |
---|
New file |
0,0 → 1,162 |
<?php |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckeditor.php |
* This is the integration file for PHP. |
* |
* It defines the FCKeditor class that can be used to create editor |
* instances in PHP pages on server side. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
class FCKeditor |
{ |
var $InstanceName ; |
var $BasePath ; |
var $Width ; |
var $Height ; |
var $ToolbarSet ; |
var $Value ; |
var $Config ; |
// PHP 5 Constructor (by Marcus Bointon <coolbru@users.sourceforge.net>) |
function __construct( $instanceName ) |
{ |
$this->InstanceName = $instanceName ; |
$this->BasePath = '/fckeditor/' ; |
$this->Width = '100%' ; |
$this->Height = '200' ; |
$this->ToolbarSet = 'Default' ; |
$this->Value = '' ; |
$this->Config = array() ; |
} |
// PHP 4 Contructor |
function FCKeditor( $instanceName ) |
{ |
$this->__construct( $instanceName ) ; |
} |
function Create() |
{ |
echo $this->CreateHtml() ; |
} |
function CreateHtml() |
{ |
$HtmlValue = htmlspecialchars( $this->Value ) ; |
$Html = '<div>' ; |
if ( $this->IsCompatible() ) |
{ |
if ( isset( $_GET['fcksource'] ) && $_GET['fcksource'] == "true" ) |
$File = 'fckeditor.original.html' ; |
else |
$File = 'fckeditor.html' ; |
$Link = "{$this->BasePath}editor/{$File}?InstanceName={$this->InstanceName}" ; |
if ( $this->ToolbarSet != '' ) |
$Link .= "&Toolbar={$this->ToolbarSet}" ; |
// Render the linked hidden field. |
$Html .= "<input type=\"hidden\" id=\"{$this->InstanceName}\" name=\"{$this->InstanceName}\" value=\"{$HtmlValue}\" style=\"display:none\" />" ; |
// Render the configurations hidden field. |
$Html .= "<input type=\"hidden\" id=\"{$this->InstanceName}___Config\" value=\"" . $this->GetConfigFieldString() . "\" style=\"display:none\" />" ; |
// Render the editor IFRAME. |
$Html .= "<iframe id=\"{$this->InstanceName}___Frame\" src=\"{$Link}\" width=\"{$this->Width}\" height=\"{$this->Height}\" frameborder=\"0\" scrolling=\"no\"></iframe>" ; |
} |
else |
{ |
if ( strpos( $this->Width, '%' ) === false ) |
$WidthCSS = $this->Width . 'px' ; |
else |
$WidthCSS = $this->Width ; |
if ( strpos( $this->Height, '%' ) === false ) |
$HeightCSS = $this->Height . 'px' ; |
else |
$HeightCSS = $this->Height ; |
$Html .= "<textarea name=\"{$this->InstanceName}\" rows=\"4\" cols=\"40\" style=\"width: {$WidthCSS}; height: {$HeightCSS}\">{$HtmlValue}</textarea>" ; |
} |
$Html .= '</div>' ; |
return $Html ; |
} |
function IsCompatible() |
{ |
global $HTTP_USER_AGENT ; |
if ( isset( $HTTP_USER_AGENT ) ) |
$sAgent = $HTTP_USER_AGENT ; |
else |
$sAgent = $_SERVER['HTTP_USER_AGENT'] ; |
if ( strpos($sAgent, 'MSIE') !== false && strpos($sAgent, 'mac') === false && strpos($sAgent, 'Opera') === false ) |
{ |
$iVersion = (float)substr($sAgent, strpos($sAgent, 'MSIE') + 5, 3) ; |
return ($iVersion >= 5.5) ; |
} |
else if ( strpos($sAgent, 'Gecko/') !== false ) |
{ |
$iVersion = (int)substr($sAgent, strpos($sAgent, 'Gecko/') + 6, 8) ; |
return ($iVersion >= 20030210) ; |
} |
else |
return false ; |
} |
function GetConfigFieldString() |
{ |
$sParams = '' ; |
$bFirst = true ; |
foreach ( $this->Config as $sKey => $sValue ) |
{ |
if ( $bFirst == false ) |
$sParams .= '&' ; |
else |
$bFirst = false ; |
if ( $sValue === true ) |
$sParams .= $this->EncodeConfig( $sKey ) . '=true' ; |
else if ( $sValue === false ) |
$sParams .= $this->EncodeConfig( $sKey ) . '=false' ; |
else |
$sParams .= $this->EncodeConfig( $sKey ) . '=' . $this->EncodeConfig( $sValue ) ; |
} |
return $sParams ; |
} |
function EncodeConfig( $valueToEncode ) |
{ |
$chars = array( |
'&' => '%26', |
'=' => '%3D', |
'"' => '%22' ) ; |
return strtr( $valueToEncode, $chars ) ; |
} |
} |
?> |
/branches/v1.0-menes/api/fckeditor/fckeditor.py |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/fckeditor.py |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/fcktemplates.xml |
---|
New file |
0,0 → 1,98 |
<?xml version="1.0" encoding="utf-8" ?> |
<!-- |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fcktemplates.xml |
* This is the sample templates definitions file. It makes the "templates" |
* command completely customizable. |
* See FCKConfig.TemplatesXmlPath in the configuration file. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
--> |
<Templates imagesBasePath="fck_template/images/"> |
<Template title="Image and Title" image="template1.gif"> |
<Description>One main image with a title and text that surround the image.</Description> |
<Html> |
<![CDATA[ |
<img style="MARGIN-RIGHT: 10px" height="100" alt="" width="100" align="left"/> |
<h3>Type the title here</h3> |
Type the text here |
]]> |
</Html> |
</Template> |
<Template title="Strange Template" image="template2.gif"> |
<Description>A template that defines two colums, each one with a title, and some text.</Description> |
<Html> |
<![CDATA[ |
<table cellspacing="0" cellpadding="0" width="100%" border="0"> |
<tbody> |
<tr> |
<td width="50%"> |
<h3>Title 1</h3> |
</td> |
<td> </td> |
<td width="50%"> |
<h3>Title 2</h3> |
</td> |
</tr> |
<tr> |
<td>Text 1</td> |
<td> </td> |
<td>Text 2</td> |
</tr> |
</tbody> |
</table> |
More text goes here. |
]]> |
</Html> |
</Template> |
<Template title="Text and Table" image="template3.gif"> |
<Description>A title with some text and a table.</Description> |
<Html> |
<![CDATA[ |
<table align="left" width="80%" border="0" cellspacing="0" cellpadding="0"><tr><td> |
<h3>Title goes here</h3> |
<p> |
<table style="FLOAT: right" cellspacing="0" cellpadding="0" width="150" border="1"> |
<tbody> |
<tr> |
<td align="center" colspan="3"><strong>Table title</strong></td> |
</tr> |
<tr> |
<td> </td> |
<td> </td> |
<td> </td> |
</tr> |
<tr> |
<td> </td> |
<td> </td> |
<td> </td> |
</tr> |
<tr> |
<td> </td> |
<td> </td> |
<td> </td> |
</tr> |
<tr> |
<td> </td> |
<td> </td> |
<td> </td> |
</tr> |
</tbody> |
</table> |
Type the text here</p> |
</td></tr></table> |
]]> |
</Html> |
</Template> |
</Templates> |
/branches/v1.0-menes/api/fckeditor/fckconfig.js |
---|
New file |
0,0 → 1,184 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckconfig.js |
* Editor configuration settings. |
* |
* Follow this link for more information: |
* http://wiki.fckeditor.net/Developer%27s_Guide/Configuration/Configurations_Settings |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
FCKConfig.CustomConfigurationsPath = '' ; |
FCKConfig.EditorAreaCSS = FCKConfig.BasePath + 'css/fck_editorarea.css' ; |
FCKConfig.ToolbarComboPreviewCSS = '' ; |
FCKConfig.DocType = '' ; |
FCKConfig.BaseHref = '' ; |
FCKConfig.FullPage = false ; |
FCKConfig.Debug = false ; |
FCKConfig.AllowQueryStringDebug = true ; |
FCKConfig.SkinPath = FCKConfig.BasePath + 'skins/default/' ; |
FCKConfig.PreloadImages = [ FCKConfig.SkinPath + 'images/toolbar.start.gif', FCKConfig.SkinPath + 'images/toolbar.buttonarrow.gif' ] ; |
FCKConfig.PluginsPath = FCKConfig.BasePath + 'plugins/' ; |
// FCKConfig.Plugins.Add( 'autogrow' ) ; |
FCKConfig.AutoGrowMax = 400 ; |
// FCKConfig.ProtectedSource.Add( /<%[\s\S]*?%>/g ) ; // ASP style server side code <%...%> |
// FCKConfig.ProtectedSource.Add( /<\?[\s\S]*?\?>/g ) ; // PHP style server side code |
// FCKConfig.ProtectedSource.Add( /(<asp:[^\>]+>[\s|\S]*?<\/asp:[^\>]+>)|(<asp:[^\>]+\/>)/gi ) ; // ASP.Net style tags <asp:control> |
FCKConfig.AutoDetectLanguage = true ; |
FCKConfig.DefaultLanguage = 'en' ; |
FCKConfig.ContentLangDirection = 'ltr' ; |
FCKConfig.ProcessHTMLEntities = true ; |
FCKConfig.IncludeLatinEntities = true ; |
FCKConfig.IncludeGreekEntities = true ; |
FCKConfig.ProcessNumericEntities = false ; |
FCKConfig.AdditionalNumericEntities = '' ; // Single Quote: "'" |
FCKConfig.FillEmptyBlocks = true ; |
FCKConfig.FormatSource = true ; |
FCKConfig.FormatOutput = true ; |
FCKConfig.FormatIndentator = ' ' ; |
FCKConfig.ForceStrongEm = true ; |
FCKConfig.GeckoUseSPAN = false ; |
FCKConfig.StartupFocus = false ; |
FCKConfig.ForcePasteAsPlainText = false ; |
FCKConfig.AutoDetectPasteFromWord = true ; // IE only. |
FCKConfig.ForceSimpleAmpersand = false ; |
FCKConfig.TabSpaces = 0 ; |
FCKConfig.ShowBorders = true ; |
FCKConfig.SourcePopup = false ; |
FCKConfig.UseBROnCarriageReturn = false ; // IE only. |
FCKConfig.ToolbarStartExpanded = true ; |
FCKConfig.ToolbarCanCollapse = true ; |
FCKConfig.IgnoreEmptyParagraphValue = true ; |
FCKConfig.PreserveSessionOnFileBrowser = false ; |
FCKConfig.FloatingPanelsZIndex = 10000 ; |
FCKConfig.TemplateReplaceAll = true ; |
FCKConfig.TemplateReplaceCheckbox = true ; |
FCKConfig.ToolbarLocation = 'In' ; |
FCKConfig.ToolbarSets["Default"] = [ |
['Source','DocProps','-','Save','NewPage','Preview','-','Templates'], |
['Cut','Copy','Paste','PasteText','PasteWord','-','Print','SpellCheck'], |
['Undo','Redo','-','Find','Replace','-','SelectAll','RemoveFormat'], |
['Form','Checkbox','Radio','TextField','Textarea','Select','Button','ImageButton','HiddenField'], |
'/', |
['Bold','Italic','Underline','StrikeThrough','-','Subscript','Superscript'], |
['OrderedList','UnorderedList','-','Outdent','Indent'], |
['JustifyLeft','JustifyCenter','JustifyRight','JustifyFull'], |
['Link','Unlink','Anchor'], |
['Image','Flash','Table','Rule','Smiley','SpecialChar','PageBreak','UniversalKey'], |
'/', |
['Style','FontFormat','FontName','FontSize'], |
['TextColor','BGColor'], |
['FitWindow','-','About'] |
] ; |
FCKConfig.ToolbarSets["Basic"] = [ |
['Bold','Italic','-','OrderedList','UnorderedList','-','Link','Unlink','-','About'] |
] ; |
FCKConfig.ContextMenu = ['Generic','Link','Anchor','Image','Flash','Select','Textarea','Checkbox','Radio','TextField','HiddenField','ImageButton','Button','BulletedList','NumberedList','Table','Form'] ; |
FCKConfig.FontColors = '000000,993300,333300,003300,003366,000080,333399,333333,800000,FF6600,808000,808080,008080,0000FF,666699,808080,FF0000,FF9900,99CC00,339966,33CCCC,3366FF,800080,999999,FF00FF,FFCC00,FFFF00,00FF00,00FFFF,00CCFF,993366,C0C0C0,FF99CC,FFCC99,FFFF99,CCFFCC,CCFFFF,99CCFF,CC99FF,FFFFFF' ; |
FCKConfig.FontNames = 'Arial;Comic Sans MS;Courier New;Tahoma;Times New Roman;Verdana' ; |
FCKConfig.FontSizes = '1/xx-small;2/x-small;3/small;4/medium;5/large;6/x-large;7/xx-large' ; |
FCKConfig.FontFormats = 'p;div;pre;address;h1;h2;h3;h4;h5;h6' ; |
FCKConfig.StylesXmlPath = FCKConfig.EditorPath + 'fckstyles.xml' ; |
FCKConfig.TemplatesXmlPath = FCKConfig.EditorPath + 'fcktemplates.xml' ; |
FCKConfig.SpellChecker = 'ieSpell' ; // 'ieSpell' | 'SpellerPages' |
FCKConfig.IeSpellDownloadUrl = 'http://wcarchive.cdrom.com/pub/simtelnet/handheld/webbrow1/ieSpellSetup240428.exe' ; |
FCKConfig.MaxUndoLevels = 15 ; |
FCKConfig.DisableObjectResizing = false ; |
FCKConfig.DisableFFTableHandles = true ; |
FCKConfig.LinkDlgHideTarget = false ; |
FCKConfig.LinkDlgHideAdvanced = false ; |
FCKConfig.ImageDlgHideLink = false ; |
FCKConfig.ImageDlgHideAdvanced = false ; |
FCKConfig.FlashDlgHideAdvanced = false ; |
// The following value defines which File Browser connector and Quick Upload |
// "uploader" to use. It is valid for the default implementaion and it is here |
// just to make this configuration file cleaner. |
// It is not possible to change this value using an external file or even |
// inline when creating the editor instance. In that cases you must set the |
// values of LinkBrowserURL, ImageBrowserURL and so on. |
// Custom implementations should just ignore it. |
var _FileBrowserLanguage = 'asp' ; // asp | aspx | cfm | lasso | perl | php | py |
var _QuickUploadLanguage = 'asp' ; // asp | aspx | cfm | lasso | php |
// Don't care about the following line. It just calculates the correct connector |
// extension to use for the default File Browser (Perl uses "cgi"). |
var _FileBrowserExtension = _FileBrowserLanguage == 'perl' ? 'cgi' : _FileBrowserLanguage ; |
FCKConfig.LinkBrowser = true ; |
FCKConfig.LinkBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.html?Connector=connectors/' + _FileBrowserLanguage + '/connector.' + _FileBrowserExtension ; |
FCKConfig.LinkBrowserWindowWidth = FCKConfig.ScreenWidth * 0.7 ; // 70% |
FCKConfig.LinkBrowserWindowHeight = FCKConfig.ScreenHeight * 0.7 ; // 70% |
FCKConfig.ImageBrowser = true ; |
FCKConfig.ImageBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.html?Type=Image&Connector=connectors/' + _FileBrowserLanguage + '/connector.' + _FileBrowserExtension ; |
FCKConfig.ImageBrowserWindowWidth = FCKConfig.ScreenWidth * 0.7 ; // 70% ; |
FCKConfig.ImageBrowserWindowHeight = FCKConfig.ScreenHeight * 0.7 ; // 70% ; |
FCKConfig.FlashBrowser = true ; |
FCKConfig.FlashBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.html?Type=Flash&Connector=connectors/' + _FileBrowserLanguage + '/connector.' + _FileBrowserExtension ; |
FCKConfig.FlashBrowserWindowWidth = FCKConfig.ScreenWidth * 0.7 ; //70% ; |
FCKConfig.FlashBrowserWindowHeight = FCKConfig.ScreenHeight * 0.7 ; //70% ; |
FCKConfig.LinkUpload = true ; |
FCKConfig.LinkUploadURL = FCKConfig.BasePath + 'filemanager/upload/' + _QuickUploadLanguage + '/upload.' + _QuickUploadLanguage ; |
FCKConfig.LinkUploadAllowedExtensions = "" ; // empty for all |
FCKConfig.LinkUploadDeniedExtensions = ".(php|php3|php5|phtml|asp|aspx|ascx|jsp|cfm|cfc|pl|bat|exe|dll|reg|cgi)$" ; // empty for no one |
FCKConfig.ImageUpload = true ; |
FCKConfig.ImageUploadURL = FCKConfig.BasePath + 'filemanager/upload/' + _QuickUploadLanguage + '/upload.' + _QuickUploadLanguage + '?Type=Image' ; |
FCKConfig.ImageUploadAllowedExtensions = ".(jpg|gif|jpeg|png)$" ; // empty for all |
FCKConfig.ImageUploadDeniedExtensions = "" ; // empty for no one |
FCKConfig.FlashUpload = true ; |
FCKConfig.FlashUploadURL = FCKConfig.BasePath + 'filemanager/upload/' + _QuickUploadLanguage + '/upload.' + _QuickUploadLanguage + '?Type=Flash' ; |
FCKConfig.FlashUploadAllowedExtensions = ".(swf|fla)$" ; // empty for all |
FCKConfig.FlashUploadDeniedExtensions = "" ; // empty for no one |
FCKConfig.SmileyPath = FCKConfig.BasePath + 'images/smiley/msn/' ; |
FCKConfig.SmileyImages = ['regular_smile.gif','sad_smile.gif','wink_smile.gif','teeth_smile.gif','confused_smile.gif','tounge_smile.gif','embaressed_smile.gif','omg_smile.gif','whatchutalkingabout_smile.gif','angry_smile.gif','angel_smile.gif','shades_smile.gif','devil_smile.gif','cry_smile.gif','lightbulb.gif','thumbs_down.gif','thumbs_up.gif','heart.gif','broken_heart.gif','kiss.gif','envelope.gif'] ; |
FCKConfig.SmileyColumns = 8 ; |
FCKConfig.SmileyWindowWidth = 320 ; |
FCKConfig.SmileyWindowHeight = 240 ; |
/branches/v1.0-menes/api/fckeditor/fckeditor.cfc |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/fckeditor.cfc |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/fckeditor.pl |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/fckeditor.pl |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/fckeditor.js |
---|
New file |
0,0 → 1,211 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckeditor.js |
* This is the integration file for JavaScript. |
* |
* It defines the FCKeditor class that can be used to create editor |
* instances in a HTML page in the client side. For server side |
* operations, use the specific integration system. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
// FCKeditor Class |
var FCKeditor = function( instanceName, width, height, toolbarSet, value ) |
{ |
// Properties |
this.InstanceName = instanceName ; |
this.Width = width || '100%' ; |
this.Height = height || '200' ; |
this.ToolbarSet = toolbarSet || 'Default' ; |
this.Value = value || '' ; |
this.BasePath = '/fckeditor/' ; |
this.CheckBrowser = true ; |
this.DisplayErrors = true ; |
this.EnableSafari = false ; // This is a temporary property, while Safari support is under development. |
this.EnableOpera = false ; // This is a temporary property, while Opera support is under development. |
this.Config = new Object() ; |
// Events |
this.OnError = null ; // function( source, errorNumber, errorDescription ) |
} |
FCKeditor.prototype.Version = '2.3.2' ; |
FCKeditor.prototype.VersionBuild = '1082' ; |
FCKeditor.prototype.Create = function() |
{ |
document.write( this.CreateHtml() ) ; |
} |
FCKeditor.prototype.CreateHtml = function() |
{ |
// Check for errors |
if ( !this.InstanceName || this.InstanceName.length == 0 ) |
{ |
this._ThrowError( 701, 'You must specify an instance name.' ) ; |
return ; |
} |
var sHtml = '<div>' ; |
if ( !this.CheckBrowser || FCKeditor_IsCompatibleBrowser() ) |
{ |
sHtml += '<input type="hidden" id="' + this.InstanceName + '" name="' + this.InstanceName + '" value="' + this._HTMLEncode( this.Value ) + '" style="display:none" />' ; |
sHtml += this._GetConfigHtml() ; |
sHtml += this._GetIFrameHtml() ; |
} |
else |
{ |
var sWidth = this.Width.toString().indexOf('%') > 0 ? this.Width : this.Width + 'px' ; |
var sHeight = this.Height.toString().indexOf('%') > 0 ? this.Height : this.Height + 'px' ; |
sHtml += '<textarea name="' + this.InstanceName + '" rows="4" cols="40" style="width:' + sWidth + ';height:' + sHeight + '">' + this._HTMLEncode( this.Value ) + '<\/textarea>' ; |
} |
sHtml += '</div>' ; |
return sHtml ; |
} |
FCKeditor.prototype.ReplaceTextarea = function() |
{ |
if ( !this.CheckBrowser || FCKeditor_IsCompatibleBrowser() ) |
{ |
// We must check the elements firstly using the Id and then the name. |
var oTextarea = document.getElementById( this.InstanceName ) ; |
var colElementsByName = document.getElementsByName( this.InstanceName ) ; |
var i = 0; |
while ( oTextarea || i == 0 ) |
{ |
if ( oTextarea && oTextarea.tagName.toLowerCase() == 'textarea' ) |
break ; |
oTextarea = colElementsByName[i++] ; |
} |
if ( !oTextarea ) |
{ |
alert( 'Error: The TEXTAREA with id or name set to "' + this.InstanceName + '" was not found' ) ; |
return ; |
} |
oTextarea.style.display = 'none' ; |
this._InsertHtmlBefore( this._GetConfigHtml(), oTextarea ) ; |
this._InsertHtmlBefore( this._GetIFrameHtml(), oTextarea ) ; |
} |
} |
FCKeditor.prototype._InsertHtmlBefore = function( html, element ) |
{ |
if ( element.insertAdjacentHTML ) // IE |
element.insertAdjacentHTML( 'beforeBegin', html ) ; |
else // Gecko |
{ |
var oRange = document.createRange() ; |
oRange.setStartBefore( element ) ; |
var oFragment = oRange.createContextualFragment( html ); |
element.parentNode.insertBefore( oFragment, element ) ; |
} |
} |
FCKeditor.prototype._GetConfigHtml = function() |
{ |
var sConfig = '' ; |
for ( var o in this.Config ) |
{ |
if ( sConfig.length > 0 ) sConfig += '&' ; |
sConfig += escape(o) + '=' + escape( this.Config[o] ) ; |
} |
return '<input type="hidden" id="' + this.InstanceName + '___Config" value="' + sConfig + '" style="display:none" />' ; |
} |
FCKeditor.prototype._GetIFrameHtml = function() |
{ |
var sFile = 'fckeditor.html' ; |
try |
{ |
if ( (/fcksource=true/i).test( window.top.location.search ) ) |
sFile = 'fckeditor.original.html' ; |
} |
catch (e) { /* Ignore it. Much probably we are inside a FRAME where the "top" is in another domain (security error). */ } |
var sLink = this.BasePath + 'editor/' + sFile + '?InstanceName=' + this.InstanceName ; |
if (this.ToolbarSet) sLink += '&Toolbar=' + this.ToolbarSet ; |
return '<iframe id="' + this.InstanceName + '___Frame" src="' + sLink + '" width="' + this.Width + '" height="' + this.Height + '" frameborder="0" scrolling="no"></iframe>' ; |
} |
// Deprecated (to be removed in the 3.0). |
FCKeditor.prototype._IsCompatibleBrowser = function() |
{ |
return FCKeditor_IsCompatibleBrowser() ; |
} |
FCKeditor.prototype._ThrowError = function( errorNumber, errorDescription ) |
{ |
this.ErrorNumber = errorNumber ; |
this.ErrorDescription = errorDescription ; |
if ( this.DisplayErrors ) |
{ |
document.write( '<div style="COLOR: #ff0000">' ) ; |
document.write( '[ FCKeditor Error ' + this.ErrorNumber + ': ' + this.ErrorDescription + ' ]' ) ; |
document.write( '</div>' ) ; |
} |
if ( typeof( this.OnError ) == 'function' ) |
this.OnError( this, errorNumber, errorDescription ) ; |
} |
FCKeditor.prototype._HTMLEncode = function( text ) |
{ |
if ( typeof( text ) != "string" ) |
text = text.toString() ; |
text = text.replace( |
/&/g, "&").replace( |
/"/g, """).replace( |
/</g, "<").replace( |
/>/g, ">") ; |
return text ; |
} |
function FCKeditor_IsCompatibleBrowser() |
{ |
var sAgent = navigator.userAgent.toLowerCase() ; |
// Internet Explorer |
if ( sAgent.indexOf("msie") != -1 && sAgent.indexOf("mac") == -1 && sAgent.indexOf("opera") == -1 ) |
{ |
var sBrowserVersion = navigator.appVersion.match(/MSIE (.\..)/)[1] ; |
return ( sBrowserVersion >= 5.5 ) ; |
} |
// Gecko (Opera 9 tries to behave like Gecko at this point). |
if ( navigator.product == "Gecko" && navigator.productSub >= 20030210 && !( typeof(opera) == 'object' && opera.postError ) ) |
return true ; |
// Opera |
if ( this.EnableOpera && navigator.appName == 'Opera' && parseInt( navigator.appVersion ) >= 9 ) |
return true ; |
// Safari |
if ( this.EnableSafari && sAgent.indexOf( 'safari' ) != -1 ) |
return ( sAgent.match( /safari\/(\d+)/ )[1] >= 312 ) ; // Build must be at least 312 (1.3) |
return false ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/frmupload.html |
---|
New file |
0,0 → 1,109 |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> |
<!-- |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: frmupload.html |
* Page used to upload new files in the current folder. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
--> |
<html xmlns="http://www.w3.org/1999/xhtml"> |
<head> |
<link href="browser.css" type="text/css" rel="stylesheet" /> |
<script type="text/javascript" src="js/common.js"></script> |
<script type="text/javascript"> |
function SetCurrentFolder( resourceType, folderPath ) |
{ |
var sUrl = oConnector.ConnectorUrl + 'Command=FileUpload' ; |
sUrl += '&Type=' + resourceType ; |
sUrl += '&CurrentFolder=' + escape( folderPath ) ; |
document.getElementById('frmUpload').action = sUrl ; |
} |
function OnSubmit() |
{ |
if ( document.getElementById('NewFile').value.length == 0 ) |
{ |
alert( 'Please select a file from your computer' ) ; |
return false ; |
} |
// Set the interface elements. |
document.getElementById('eUploadMessage').innerHTML = 'Upload a new file in this folder (Upload in progress, please wait...)' ; |
document.getElementById('btnUpload').disabled = true ; |
return true ; |
} |
function OnUploadCompleted( errorNumber, data ) |
{ |
// Reset the Upload Worker Frame. |
window.parent.frames['frmUploadWorker'].location = '../../../../../fckblank.html' ; |
// Reset the upload form (On IE we must do a little trick to avout problems). |
if ( document.all ) |
document.getElementById('NewFile').outerHTML = '<input id="NewFile" name="NewFile" style="WIDTH: 100%" type="file">' ; |
else |
document.getElementById('frmUpload').reset() ; |
// Reset the interface elements. |
document.getElementById('eUploadMessage').innerHTML = 'Upload a new file in this folder' ; |
document.getElementById('btnUpload').disabled = false ; |
switch ( errorNumber ) |
{ |
case 0 : |
window.parent.frames['frmResourcesList'].Refresh() ; |
break ; |
case 1 : // Custom error. |
alert( data ) ; |
break ; |
case 201 : |
window.parent.frames['frmResourcesList'].Refresh() ; |
alert( 'A file with the same name is already available. The uploaded file has been renamed to "' + data + '"' ) ; |
break ; |
case 202 : |
alert( 'Invalid file' ) ; |
break ; |
default : |
alert( 'Error on file upload. Error number: ' + errorNumber ) ; |
break ; |
} |
} |
window.onload = function() |
{ |
window.top.IsLoadedUpload = true ; |
} |
</script> |
</head> |
<body bottommargin="0" topmargin="0"> |
<form id="frmUpload" action="" target="frmUploadWorker" method="post" enctype="multipart/form-data" onsubmit="return OnSubmit();"> |
<table height="100%" cellspacing="0" cellpadding="0" width="100%" border="0"> |
<tr> |
<td nowrap="nowrap"> |
<span id="eUploadMessage">Upload a new file in this folder</span><br> |
<table cellspacing="0" cellpadding="0" width="100%" border="0"> |
<tr> |
<td width="100%"><input id="NewFile" name="NewFile" style="WIDTH: 100%" type="file"></td> |
<td nowrap="nowrap"> <input id="btnUpload" type="submit" value="Upload"></td> |
</tr> |
</table> |
</td> |
</tr> |
</table> |
</form> |
</body> |
</html> |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/js/fckxml.js |
---|
New file |
0,0 → 1,116 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckxml.js |
* Defines the FCKXml object that is used for XML data calls |
* and XML processing. |
* This script is shared by almost all pages that compose the |
* File Browser frameset. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
var FCKXml = function() |
{} |
FCKXml.prototype.GetHttpRequest = function() |
{ |
// Gecko / IE7 |
if ( typeof(XMLHttpRequest) != 'undefined' ) |
return new XMLHttpRequest() ; |
// IE6 |
try { return new ActiveXObject("Msxml2.XMLHTTP") ; } |
catch(e) {} |
// IE5 |
try { return new ActiveXObject("Microsoft.XMLHTTP") ; } |
catch(e) {} |
} |
FCKXml.prototype.LoadUrl = function( urlToCall, asyncFunctionPointer ) |
{ |
var oFCKXml = this ; |
var bAsync = ( typeof(asyncFunctionPointer) == 'function' ) ; |
var oXmlHttp = this.GetHttpRequest() ; |
oXmlHttp.open( "GET", urlToCall, bAsync ) ; |
if ( bAsync ) |
{ |
oXmlHttp.onreadystatechange = function() |
{ |
if ( oXmlHttp.readyState == 4 ) |
{ |
oFCKXml.DOMDocument = oXmlHttp.responseXML ; |
if ( oXmlHttp.status == 200 || oXmlHttp.status == 304 ) |
asyncFunctionPointer( oFCKXml ) ; |
else |
alert( 'XML request error: ' + oXmlHttp.statusText + ' (' + oXmlHttp.status + ')' ) ; |
} |
} |
} |
oXmlHttp.send( null ) ; |
if ( ! bAsync ) |
{ |
if ( oXmlHttp.status == 200 || oXmlHttp.status == 304 ) |
this.DOMDocument = oXmlHttp.responseXML ; |
else |
{ |
alert( 'XML request error: ' + oXmlHttp.statusText + ' (' + oXmlHttp.status + ')' ) ; |
} |
} |
} |
FCKXml.prototype.SelectNodes = function( xpath ) |
{ |
if ( navigator.userAgent.indexOf('MSIE') >= 0 ) // IE |
return this.DOMDocument.selectNodes( xpath ) ; |
else // Gecko |
{ |
var aNodeArray = new Array(); |
var xPathResult = this.DOMDocument.evaluate( xpath, this.DOMDocument, |
this.DOMDocument.createNSResolver(this.DOMDocument.documentElement), XPathResult.ORDERED_NODE_ITERATOR_TYPE, null) ; |
if ( xPathResult ) |
{ |
var oNode = xPathResult.iterateNext() ; |
while( oNode ) |
{ |
aNodeArray[aNodeArray.length] = oNode ; |
oNode = xPathResult.iterateNext(); |
} |
} |
return aNodeArray ; |
} |
} |
FCKXml.prototype.SelectSingleNode = function( xpath ) |
{ |
if ( navigator.userAgent.indexOf('MSIE') >= 0 ) // IE |
return this.DOMDocument.selectSingleNode( xpath ) ; |
else // Gecko |
{ |
var xPathResult = this.DOMDocument.evaluate( xpath, this.DOMDocument, |
this.DOMDocument.createNSResolver(this.DOMDocument.documentElement), 9, null); |
if ( xPathResult && xPathResult.singleNodeValue ) |
return xPathResult.singleNodeValue ; |
else |
return null ; |
} |
} |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/js/common.js |
---|
New file |
0,0 → 1,51 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: common.js |
* Common objects and functions shared by all pages that compose the |
* File Browser dialog window. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
function AddSelectOption( selectElement, optionText, optionValue ) |
{ |
var oOption = document.createElement("OPTION") ; |
oOption.text = optionText ; |
oOption.value = optionValue ; |
selectElement.options.add(oOption) ; |
return oOption ; |
} |
var oConnector = window.parent.oConnector ; |
var oIcons = window.parent.oIcons ; |
function StringBuilder( value ) |
{ |
this._Strings = new Array( value || '' ) ; |
} |
StringBuilder.prototype.Append = function( value ) |
{ |
if ( value ) |
this._Strings.push( value ) ; |
} |
StringBuilder.prototype.ToString = function() |
{ |
return this._Strings.join( '' ) ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/connectors/php/commands.php |
---|
New file |
0,0 → 1,218 |
<?php |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: commands.php |
* This is the File Manager Connector for PHP. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
function GetFolders( $resourceType, $currentFolder ) |
{ |
// Map the virtual path to the local server path. |
$sServerDir = ServerMapFolder( $resourceType, $currentFolder ) ; |
// Array that will hold the folders names. |
$aFolders = array() ; |
$oCurrentFolder = opendir( $sServerDir ) ; |
while ( $sFile = readdir( $oCurrentFolder ) ) |
{ |
if ( $sFile != '.' && $sFile != '..' && is_dir( $sServerDir . $sFile ) ) |
$aFolders[] = '<Folder name="' . ConvertToXmlAttribute( $sFile ) . '" />' ; |
} |
closedir( $oCurrentFolder ) ; |
// Open the "Folders" node. |
echo "<Folders>" ; |
natcasesort( $aFolders ) ; |
foreach ( $aFolders as $sFolder ) |
echo $sFolder ; |
// Close the "Folders" node. |
echo "</Folders>" ; |
} |
function GetFoldersAndFiles( $resourceType, $currentFolder ) |
{ |
// Map the virtual path to the local server path. |
$sServerDir = ServerMapFolder( $resourceType, $currentFolder ) ; |
// Arrays that will hold the folders and files names. |
$aFolders = array() ; |
$aFiles = array() ; |
$oCurrentFolder = opendir( $sServerDir ) ; |
while ( $sFile = readdir( $oCurrentFolder ) ) |
{ |
if ( $sFile != '.' && $sFile != '..' ) |
{ |
if ( is_dir( $sServerDir . $sFile ) ) |
$aFolders[] = '<Folder name="' . ConvertToXmlAttribute( $sFile ) . '" />' ; |
else |
{ |
$iFileSize = filesize( $sServerDir . $sFile ) ; |
if ( $iFileSize > 0 ) |
{ |
$iFileSize = round( $iFileSize / 1024 ) ; |
if ( $iFileSize < 1 ) $iFileSize = 1 ; |
} |
$aFiles[] = '<File name="' . ConvertToXmlAttribute( $sFile ) . '" size="' . $iFileSize . '" />' ; |
} |
} |
} |
// Send the folders |
natcasesort( $aFolders ) ; |
echo '<Folders>' ; |
foreach ( $aFolders as $sFolder ) |
echo $sFolder ; |
echo '</Folders>' ; |
// Send the files |
natcasesort( $aFiles ) ; |
echo '<Files>' ; |
foreach ( $aFiles as $sFiles ) |
echo $sFiles ; |
echo '</Files>' ; |
} |
function CreateFolder( $resourceType, $currentFolder ) |
{ |
$sErrorNumber = '0' ; |
$sErrorMsg = '' ; |
if ( isset( $_GET['NewFolderName'] ) ) |
{ |
$sNewFolderName = $_GET['NewFolderName'] ; |
if ( strpos( $sNewFolderName, '..' ) !== FALSE ) |
$sErrorNumber = '102' ; // Invalid folder name. |
else |
{ |
// Map the virtual path to the local server path of the current folder. |
$sServerDir = ServerMapFolder( $resourceType, $currentFolder ) ; |
if ( is_writable( $sServerDir ) ) |
{ |
$sServerDir .= $sNewFolderName ; |
$sErrorMsg = CreateServerFolder( $sServerDir ) ; |
switch ( $sErrorMsg ) |
{ |
case '' : |
$sErrorNumber = '0' ; |
break ; |
case 'Invalid argument' : |
case 'No such file or directory' : |
$sErrorNumber = '102' ; // Path too long. |
break ; |
default : |
$sErrorNumber = '110' ; |
break ; |
} |
} |
else |
$sErrorNumber = '103' ; |
} |
} |
else |
$sErrorNumber = '102' ; |
// Create the "Error" node. |
echo '<Error number="' . $sErrorNumber . '" originalDescription="' . ConvertToXmlAttribute( $sErrorMsg ) . '" />' ; |
} |
function FileUpload( $resourceType, $currentFolder ) |
{ |
$sErrorNumber = '0' ; |
$sFileName = '' ; |
if ( isset( $_FILES['NewFile'] ) && !is_null( $_FILES['NewFile']['tmp_name'] ) ) |
{ |
global $Config ; |
$oFile = $_FILES['NewFile'] ; |
// Map the virtual path to the local server path. |
$sServerDir = ServerMapFolder( $resourceType, $currentFolder ) ; |
// Get the uploaded file name. |
$sFileName = $oFile['name'] ; |
// Replace dots in the name with underscores (only one dot can be there... security issue). |
if ( $Config['ForceSingleExtension'] ) |
$sFileName = preg_replace( '/\\.(?![^.]*$)/', '_', $sFileName ) ; |
$sOriginalFileName = $sFileName ; |
// Get the extension. |
$sExtension = substr( $sFileName, ( strrpos($sFileName, '.') + 1 ) ) ; |
$sExtension = strtolower( $sExtension ) ; |
$arAllowed = $Config['AllowedExtensions'][$resourceType] ; |
$arDenied = $Config['DeniedExtensions'][$resourceType] ; |
if ( ( count($arAllowed) == 0 || in_array( $sExtension, $arAllowed ) ) && ( count($arDenied) == 0 || !in_array( $sExtension, $arDenied ) ) ) |
{ |
$iCounter = 0 ; |
while ( true ) |
{ |
$sFilePath = $sServerDir . $sFileName ; |
if ( is_file( $sFilePath ) ) |
{ |
$iCounter++ ; |
$sFileName = RemoveExtension( $sOriginalFileName ) . '(' . $iCounter . ').' . $sExtension ; |
$sErrorNumber = '201' ; |
} |
else |
{ |
move_uploaded_file( $oFile['tmp_name'], $sFilePath ) ; |
if ( is_file( $sFilePath ) ) |
{ |
$oldumask = umask(0) ; |
chmod( $sFilePath, 0777 ) ; |
umask( $oldumask ) ; |
} |
break ; |
} |
} |
} |
else |
$sErrorNumber = '202' ; |
} |
else |
$sErrorNumber = '202' ; |
echo '<script type="text/javascript">' ; |
echo 'window.parent.frames["frmUpload"].OnUploadCompleted(' . $sErrorNumber . ',"' . str_replace( '"', '\\"', $sFileName ) . '") ;' ; |
echo '</script>' ; |
exit ; |
} |
?> |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/connectors/php/config.php |
---|
New file |
0,0 → 1,51 |
<?php |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: config.php |
* Configuration file for the File Manager Connector for PHP. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
global $Config ; |
// SECURITY: You must explicitelly enable this "connector". (Set it to "true"). |
$Config['Enabled'] = false ; |
// Path to user files relative to the document root. |
$Config['UserFilesPath'] = '/UserFiles/' ; |
// Fill the following value it you prefer to specify the absolute path for the |
// user files directory. Usefull if you are using a virtual directory, symbolic |
// link or alias. Examples: 'C:\\MySite\\UserFiles\\' or '/root/mysite/UserFiles/'. |
// Attention: The above 'UserFilesPath' must point to the same directory. |
$Config['UserFilesAbsolutePath'] = '' ; |
// Due to security issues with Apache modules, it is reccomended to leave the |
// following setting enabled. |
$Config['ForceSingleExtension'] = true ; |
$Config['AllowedExtensions']['File'] = array() ; |
$Config['DeniedExtensions']['File'] = array('php','php2','php3','php4','php5','phtml','pwml','inc','asp','aspx','ascx','jsp','cfm','cfc','pl','bat','exe','com','dll','vbs','js','reg','cgi','htaccess') ; |
$Config['AllowedExtensions']['Image'] = array('jpg','gif','jpeg','png') ; |
$Config['DeniedExtensions']['Image'] = array() ; |
$Config['AllowedExtensions']['Flash'] = array('swf','fla') ; |
$Config['DeniedExtensions']['Flash'] = array() ; |
$Config['AllowedExtensions']['Media'] = array('swf','fla','jpg','gif','jpeg','png','avi','mpg','mpeg') ; |
$Config['DeniedExtensions']['Media'] = array() ; |
?> |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/connectors/php/io.php |
---|
New file |
0,0 → 1,97 |
<?php |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: io.php |
* This is the File Manager Connector for ASP. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
function GetUrlFromPath( $resourceType, $folderPath ) |
{ |
if ( $resourceType == '' ) |
return RemoveFromEnd( $GLOBALS["UserFilesPath"], '/' ) . $folderPath ; |
else |
return $GLOBALS["UserFilesPath"] . $resourceType . $folderPath ; |
} |
function RemoveExtension( $fileName ) |
{ |
return substr( $fileName, 0, strrpos( $fileName, '.' ) ) ; |
} |
function ServerMapFolder( $resourceType, $folderPath ) |
{ |
// Get the resource type directory. |
$sResourceTypePath = $GLOBALS["UserFilesDirectory"] . $resourceType . '/' ; |
// Ensure that the directory exists. |
CreateServerFolder( $sResourceTypePath ) ; |
// Return the resource type directory combined with the required path. |
return $sResourceTypePath . RemoveFromStart( $folderPath, '/' ) ; |
} |
function GetParentFolder( $folderPath ) |
{ |
$sPattern = "-[/\\\\][^/\\\\]+[/\\\\]?$-" ; |
return preg_replace( $sPattern, '', $folderPath ) ; |
} |
function CreateServerFolder( $folderPath ) |
{ |
$sParent = GetParentFolder( $folderPath ) ; |
// Check if the parent exists, or create it. |
if ( !file_exists( $sParent ) ) |
{ |
$sErrorMsg = CreateServerFolder( $sParent ) ; |
if ( $sErrorMsg != '' ) |
return $sErrorMsg ; |
} |
if ( !file_exists( $folderPath ) ) |
{ |
// Turn off all error reporting. |
error_reporting( 0 ) ; |
// Enable error tracking to catch the error. |
ini_set( 'track_errors', '1' ) ; |
// To create the folder with 0777 permissions, we need to set umask to zero. |
$oldumask = umask(0) ; |
mkdir( $folderPath, 0777 ) ; |
umask( $oldumask ) ; |
$sErrorMsg = $php_errormsg ; |
// Restore the configurations. |
ini_restore( 'track_errors' ) ; |
ini_restore( 'error_reporting' ) ; |
return $sErrorMsg ; |
} |
else |
return '' ; |
} |
function GetRootPath() |
{ |
$sRealPath = realpath( './' ) ; |
$sSelfPath = $_SERVER['PHP_SELF'] ; |
$sSelfPath = substr( $sSelfPath, 0, strrpos( $sSelfPath, '/' ) ) ; |
return substr( $sRealPath, 0, strlen( $sRealPath ) - strlen( $sSelfPath ) ) ; |
} |
?> |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/connectors/php/connector.php |
---|
New file |
0,0 → 1,109 |
<?php |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: connector.php |
* This is the File Manager Connector for PHP. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
ob_start() ; |
include('config.php') ; |
include('util.php') ; |
include('io.php') ; |
include('basexml.php') ; |
include('commands.php') ; |
if ( !$Config['Enabled'] ) |
SendError( 1, 'This connector is disabled. Please check the "editor/filemanager/browser/default/connectors/php/config.php" file' ) ; |
// Get the "UserFiles" path. |
$GLOBALS["UserFilesPath"] = '' ; |
if ( isset( $Config['UserFilesPath'] ) ) |
$GLOBALS["UserFilesPath"] = $Config['UserFilesPath'] ; |
else if ( isset( $_GET['ServerPath'] ) ) |
$GLOBALS["UserFilesPath"] = $_GET['ServerPath'] ; |
else |
$GLOBALS["UserFilesPath"] = '/UserFiles/' ; |
if ( ! ereg( '/$', $GLOBALS["UserFilesPath"] ) ) |
$GLOBALS["UserFilesPath"] .= '/' ; |
if ( strlen( $Config['UserFilesAbsolutePath'] ) > 0 ) |
{ |
$GLOBALS["UserFilesDirectory"] = $Config['UserFilesAbsolutePath'] ; |
if ( ! ereg( '/$', $GLOBALS["UserFilesDirectory"] ) ) |
$GLOBALS["UserFilesDirectory"] .= '/' ; |
} |
else |
{ |
// Map the "UserFiles" path to a local directory. |
$GLOBALS["UserFilesDirectory"] = GetRootPath() . $GLOBALS["UserFilesPath"] ; |
} |
DoResponse() ; |
function DoResponse() |
{ |
if ( !isset( $_GET['Command'] ) || !isset( $_GET['Type'] ) || !isset( $_GET['CurrentFolder'] ) ) |
return ; |
// Get the main request informaiton. |
$sCommand = $_GET['Command'] ; |
$sResourceType = $_GET['Type'] ; |
$sCurrentFolder = $_GET['CurrentFolder'] ; |
// Check if it is an allowed type. |
if ( !in_array( $sResourceType, array('File','Image','Flash','Media') ) ) |
return ; |
// Check the current folder syntax (must begin and start with a slash). |
if ( ! ereg( '/$', $sCurrentFolder ) ) $sCurrentFolder .= '/' ; |
if ( strpos( $sCurrentFolder, '/' ) !== 0 ) $sCurrentFolder = '/' . $sCurrentFolder ; |
// Check for invalid folder paths (..) |
if ( strpos( $sCurrentFolder, '..' ) ) |
SendError( 102, "" ) ; |
// File Upload doesn't have to Return XML, so it must be intercepted before anything. |
if ( $sCommand == 'FileUpload' ) |
{ |
FileUpload( $sResourceType, $sCurrentFolder ) ; |
return ; |
} |
CreateXmlHeader( $sCommand, $sResourceType, $sCurrentFolder ) ; |
// Execute the required command. |
switch ( $sCommand ) |
{ |
case 'GetFolders' : |
GetFolders( $sResourceType, $sCurrentFolder ) ; |
break ; |
case 'GetFoldersAndFiles' : |
GetFoldersAndFiles( $sResourceType, $sCurrentFolder ) ; |
break ; |
case 'CreateFolder' : |
CreateFolder( $sResourceType, $sCurrentFolder ) ; |
break ; |
} |
CreateXmlFooter() ; |
exit ; |
} |
?> |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/connectors/php/basexml.php |
---|
New file |
0,0 → 1,71 |
<?php |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: basexml.php |
* These functions define the base of the XML response sent by the PHP |
* connector. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
function SetXmlHeaders() |
{ |
ob_end_clean() ; |
// Prevent the browser from caching the result. |
// Date in the past |
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT') ; |
// always modified |
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT') ; |
// HTTP/1.1 |
header('Cache-Control: no-store, no-cache, must-revalidate') ; |
header('Cache-Control: post-check=0, pre-check=0', false) ; |
// HTTP/1.0 |
header('Pragma: no-cache') ; |
// Set the response format. |
header( 'Content-Type:text/xml; charset=utf-8' ) ; |
} |
function CreateXmlHeader( $command, $resourceType, $currentFolder ) |
{ |
SetXmlHeaders() ; |
// Create the XML document header. |
echo '<?xml version="1.0" encoding="utf-8" ?>' ; |
// Create the main "Connector" node. |
echo '<Connector command="' . $command . '" resourceType="' . $resourceType . '">' ; |
// Add the current folder node. |
echo '<CurrentFolder path="' . ConvertToXmlAttribute( $currentFolder ) . '" url="' . ConvertToXmlAttribute( GetUrlFromPath( $resourceType, $currentFolder ) ) . '" />' ; |
} |
function CreateXmlFooter() |
{ |
echo '</Connector>' ; |
} |
function SendError( $number, $text ) |
{ |
SetXmlHeaders() ; |
// Create the XML document header |
echo '<?xml version="1.0" encoding="utf-8" ?>' ; |
echo '<Connector><Error number="' . $number . '" text="' . htmlspecialchars( $text ) . '" /></Connector>' ; |
exit ; |
} |
?> |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/connectors/php/util.php |
---|
New file |
0,0 → 1,37 |
<?php |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: util.php |
* This is the File Manager Connector for ASP. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
function RemoveFromStart( $sourceString, $charToRemove ) |
{ |
$sPattern = '|^' . $charToRemove . '+|' ; |
return preg_replace( $sPattern, '', $sourceString ) ; |
} |
function RemoveFromEnd( $sourceString, $charToRemove ) |
{ |
$sPattern = '|' . $charToRemove . '+$|' ; |
return preg_replace( $sPattern, '', $sourceString ) ; |
} |
function ConvertToXmlAttribute( $value ) |
{ |
return utf8_encode( htmlspecialchars( $value ) ) ; |
} |
?> |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/connectors/test.html |
---|
New file |
0,0 → 1,177 |
<!-- |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: test.html |
* Test page for the File Browser connectors. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
--> |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> |
<html xmlns="http://www.w3.org/1999/xhtml"> |
<head> |
<title>FCKeditor - Connectors Tests</title> |
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5" /> |
<script type="text/javascript"> |
function BuildBaseUrl( command ) |
{ |
var sUrl = |
document.getElementById('cmbConnector').value + |
'?Command=' + command + |
'&Type=' + document.getElementById('cmbType').value + |
'&CurrentFolder=' + document.getElementById('txtFolder').value ; |
return sUrl ; |
} |
function SetFrameUrl( url ) |
{ |
if ( document.all ) |
eRunningFrame.document.location = url ; |
else |
document.getElementById('eRunningFrame').src = url ; |
document.getElementById('eUrl').innerHTML = url ; |
} |
function GetFolders() |
{ |
SetFrameUrl( BuildBaseUrl( 'GetFolders' ) ) ; |
return false ; |
} |
function GetFoldersAndFiles() |
{ |
SetFrameUrl( BuildBaseUrl( 'GetFoldersAndFiles' ) ) ; |
return false ; |
} |
function CreateFolder() |
{ |
var sFolder = prompt( 'Type the folder name:', 'Test Folder' ) ; |
if ( ! sFolder ) |
return ; |
var sUrl = BuildBaseUrl( 'CreateFolder' ) ; |
sUrl += '&NewFolderName=' + escape( sFolder ) ; |
SetFrameUrl( sUrl ) ; |
return false ; |
} |
function OnUploadCompleted( errorNumber, fileName ) |
{ |
switch ( errorNumber ) |
{ |
case 0 : |
alert( 'File uploaded with no errors' ) ; |
break ; |
case 201 : |
GetFoldersAndFiles() |
alert( 'A file with the same name is already available. The uploaded file has been renamed to "' + fileName + '"' ) ; |
break ; |
case 202 : |
alert( 'Invalid file' ) ; |
break ; |
default : |
alert( 'Error on file upload. Error number: ' + errorNumber ) ; |
break ; |
} |
} |
this.frames.frmUpload = this ; |
function SetAction() |
{ |
var sUrl = BuildBaseUrl( 'FileUpload' ) ; |
document.getElementById('eUrl').innerHTML = sUrl ; |
document.getElementById('frmUpload').action = sUrl ; |
} |
</script> |
</head> |
<body> |
<table height="100%" cellspacing="0" cellpadding="0" width="100%" border="0"> |
<tr> |
<td> |
<table cellspacing="0" cellpadding="0" border="0"> |
<tr> |
<td> |
Connector:<br /> |
<select id="cmbConnector" name="cmbConnector"> |
<option value="asp/connector.asp" selected="selected">ASP</option> |
<option value="aspx/connector.aspx">ASP.Net</option> |
<option value="cfm/connector.cfm">ColdFusion</option> |
<option value="lasso/connector.lasso">Lasso</option> |
<option value="perl/connector.cgi">Perl</option> |
<option value="php/connector.php">PHP</option> |
<option value="py/connector.py">Python</option> |
</select> |
</td> |
<td> |
</td> |
<td> |
Current Folder<br /> |
<input id="txtFolder" type="text" value="/" name="txtFolder" /></td> |
<td> |
</td> |
<td> |
Resource Type<br /> |
<select id="cmbType" name="cmbType"> |
<option value="File" selected="selected">File</option> |
<option value="Image">Image</option> |
<option value="Flash">Flash</option> |
<option value="Media">Media</option> |
<option value="Invalid">Invalid Type (for testing)</option> |
</select> |
</td> |
</tr> |
</table> |
<br /> |
<table cellspacing="0" cellpadding="0" border="0"> |
<tr> |
<td valign="top"> |
<a href="#" onclick="GetFolders();">Get Folders</a></td> |
<td> |
</td> |
<td valign="top"> |
<a href="#" onclick="GetFoldersAndFiles();">Get Folders and Files</a></td> |
<td> |
</td> |
<td valign="top"> |
<a href="#" onclick="CreateFolder();">Create Folder</a></td> |
<td> |
</td> |
<td valign="top"> |
<form id="frmUpload" action="" target="eRunningFrame" method="post" enctype="multipart/form-data"> |
File Upload<br /> |
<input id="txtFileUpload" type="file" name="NewFile" /> |
<input type="submit" value="Upload" onclick="SetAction();" /> |
</form> |
</td> |
</tr> |
</table> |
<br /> |
URL: <span id="eUrl"></span> |
</td> |
</tr> |
<tr> |
<td height="100%" valign="top"> |
<iframe id="eRunningFrame" src="../../../../fckblank.html" name="eRunningFrame" width="100%" |
height="100%"></iframe> |
</td> |
</tr> |
</table> |
</body> |
</html> |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/frmactualfolder.html |
---|
New file |
0,0 → 1,63 |
<!-- |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: frmactualfolder.html |
* This page shows the actual folder path. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
--> |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> |
<html> |
<head> |
<link href="browser.css" type="text/css" rel="stylesheet"> |
<script type="text/javascript"> |
function OnResize() |
{ |
divName.style.width = "1px" ; |
divName.style.width = tdName.offsetWidth + "px" ; |
} |
function SetCurrentFolder( resourceType, folderPath ) |
{ |
document.getElementById('tdName').innerHTML = folderPath ; |
} |
window.onload = function() |
{ |
window.top.IsLoadedActualFolder = true ; |
} |
</script> |
</head> |
<body bottomMargin="0" topMargin="0"> |
<table height="100%" cellSpacing="0" cellPadding="0" width="100%" border="0"> |
<tr> |
<td> |
<button style="WIDTH: 100%" type="button"> |
<table cellSpacing="0" cellPadding="0" width="100%" border="0"> |
<tr> |
<td><img height="32" alt="" src="images/FolderOpened32.gif" width="32"></td> |
<td> </td> |
<td id="tdName" width="100%" nowrap class="ActualFolder">/</td> |
<td> </td> |
<td><img height="8" src="images/ButtonArrow.gif" width="12"></td> |
<td> </td> |
</tr> |
</table> |
</button> |
</td> |
</tr> |
</table> |
</body> |
</html> |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/frmresourceslist.html |
---|
New file |
0,0 → 1,150 |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> |
<!-- |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: frmresourceslist.html |
* This page shows all resources available in a folder in the File Browser. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
--> |
<html xmlns="http://www.w3.org/1999/xhtml"> |
<head> |
<link href="browser.css" type="text/css" rel="stylesheet" /> |
<script type="text/javascript" src="js/common.js"></script> |
<script type="text/javascript"> |
var oListManager = new Object() ; |
oListManager.Clear = function() |
{ |
document.body.innerHTML = '' ; |
} |
oListManager.GetFolderRowHtml = function( folderName, folderPath ) |
{ |
// Build the link to view the folder. |
var sLink = '<a href="#" onclick="OpenFolder(\'' + folderPath.replace( /'/g, '\\\'') + '\');return false;">' ; |
return '<tr>' + |
'<td width="16">' + |
sLink + |
'<img alt="" src="images/Folder.gif" width="16" height="16" border="0"></a>' + |
'</td><td nowrap colspan="2"> ' + |
sLink + |
folderName + |
'</a>' + |
'</td></tr>' ; |
} |
oListManager.GetFileRowHtml = function( fileName, fileUrl, fileSize ) |
{ |
// Build the link to view the folder. |
var sLink = '<a href="#" onclick="OpenFile(\'' + fileUrl.replace( /'/g, '\\\'') + '\');return false;">' ; |
// Get the file icon. |
var sIcon = oIcons.GetIcon( fileName ) ; |
return '<tr>' + |
'<td width="16">' + |
sLink + |
'<img alt="" src="images/icons/' + sIcon + '.gif" width="16" height="16" border="0"></a>' + |
'</td><td> ' + |
sLink + |
fileName + |
'</a>' + |
'</td><td align="right" nowrap> ' + |
fileSize + |
' KB' + |
'</td></tr>' ; |
} |
function OpenFolder( folderPath ) |
{ |
// Load the resources list for this folder. |
window.parent.frames['frmFolders'].LoadFolders( folderPath ) ; |
} |
function OpenFile( fileUrl ) |
{ |
window.top.opener.SetUrl( fileUrl ) ; |
window.top.close() ; |
window.top.opener.focus() ; |
} |
function LoadResources( resourceType, folderPath ) |
{ |
oListManager.Clear() ; |
oConnector.ResourceType = resourceType ; |
oConnector.CurrentFolder = folderPath ; |
oConnector.SendCommand( 'GetFoldersAndFiles', null, GetFoldersAndFilesCallBack ) ; |
} |
function Refresh() |
{ |
LoadResources( oConnector.ResourceType, oConnector.CurrentFolder ) ; |
} |
function GetFoldersAndFilesCallBack( fckXml ) |
{ |
if ( oConnector.CheckError( fckXml ) != 0 ) |
return ; |
// Get the current folder path. |
var oNode = fckXml.SelectSingleNode( 'Connector/CurrentFolder' ) ; |
var sCurrentFolderPath = oNode.attributes.getNamedItem('path').value ; |
var sCurrentFolderUrl = oNode.attributes.getNamedItem('url').value ; |
// var dTimer = new Date() ; |
var oHtml = new StringBuilder( '<table id="tableFiles" cellspacing="1" cellpadding="0" width="100%" border="0">' ) ; |
// Add the Folders. |
var oNodes = fckXml.SelectNodes( 'Connector/Folders/Folder' ) ; |
for ( var i = 0 ; i < oNodes.length ; i++ ) |
{ |
var sFolderName = oNodes[i].attributes.getNamedItem('name').value ; |
oHtml.Append( oListManager.GetFolderRowHtml( sFolderName, sCurrentFolderPath + sFolderName + "/" ) ) ; |
} |
// Add the Files. |
var oNodes = fckXml.SelectNodes( 'Connector/Files/File' ) ; |
for ( var i = 0 ; i < oNodes.length ; i++ ) |
{ |
var oNode = oNodes[i] ; |
var sFileName = oNode.attributes.getNamedItem('name').value ; |
var sFileSize = oNode.attributes.getNamedItem('size').value ; |
// Get the optional "url" attribute. If not available, build the url. |
var oFileUrlAtt = oNodes[i].attributes.getNamedItem('url') ; |
var sFileUrl = oFileUrlAtt != null ? oFileUrlAtt.value : sCurrentFolderUrl + sFileName ; |
oHtml.Append( oListManager.GetFileRowHtml( sFileName, sFileUrl, sFileSize ) ) ; |
} |
oHtml.Append( '</table>' ) ; |
document.body.innerHTML = oHtml.ToString() ; |
// window.top.document.title = 'Finished processing in ' + ( ( ( new Date() ) - dTimer ) / 1000 ) + ' seconds' ; |
} |
window.onload = function() |
{ |
window.top.IsLoadedResourcesList = true ; |
} |
</script> |
</head> |
<body class="FileArea" bottommargin="10" leftmargin="10" topmargin="10" rightmargin="10"> |
</body> |
</html> |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/frmresourcetype.html |
---|
New file |
0,0 → 1,61 |
<!-- |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: frmresourcetype.html |
* This page shows the list of available resource types. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
--> |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> |
<html> |
<head> |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> |
<link href="browser.css" type="text/css" rel="stylesheet"> |
<script type="text/javascript" src="js/common.js"></script> |
<script language="javascript"> |
function SetResourceType( type ) |
{ |
window.parent.frames["frmFolders"].SetResourceType( type ) ; |
} |
var aTypes = [ |
['File','File'], |
['Image','Image'], |
['Flash','Flash'], |
['Media','Media'] |
] ; |
window.onload = function() |
{ |
for ( var i = 0 ; i < aTypes.length ; i++ ) |
{ |
if ( oConnector.ShowAllTypes || aTypes[i][0] == oConnector.ResourceType ) |
AddSelectOption( document.getElementById('cmbType'), aTypes[i][1], aTypes[i][0] ) ; |
} |
} |
</script> |
</head> |
<body bottomMargin="0" topMargin="0"> |
<table height="100%" cellSpacing="0" cellPadding="0" width="100%" border="0"> |
<tr> |
<td nowrap> |
Resource Type<BR> |
<select id="cmbType" style="WIDTH: 100%" onchange="SetResourceType(this.value);"> |
</select> |
</td> |
</tr> |
</table> |
</body> |
</html> |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/Folder.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/Folder.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/FolderOpened32.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/FolderOpened32.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/spacer.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/spacer.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/Folder32.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/Folder32.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/FolderUp.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/FolderUp.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/ButtonArrow.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/ButtonArrow.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/FolderOpened.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/FolderOpened.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/pdf.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/pdf.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/default.icon.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/default.icon.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/dll.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/dll.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/js.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/js.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/swt.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/swt.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/bmp.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/bmp.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/txt.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/txt.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/avi.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/avi.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/32/exe.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/32/exe.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/32/rdp.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/32/rdp.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/32/htm.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/32/htm.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/32/ai.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/32/ai.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/32/vsd.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/32/vsd.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/32/swf.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/32/swf.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/32/mp3.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/32/mp3.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/32/xml.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/32/xml.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/32/zip.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/32/zip.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/32/fla.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/32/fla.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/32/mdb.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/32/mdb.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/32/ppt.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/32/ppt.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/32/html.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/32/html.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/32/cs.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/32/cs.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/32/doc.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/32/doc.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/32/gif.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/32/gif.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/32/xls.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/32/xls.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/32/pdf.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/32/pdf.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/32/default.icon.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/32/default.icon.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/32/dll.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/32/dll.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/32/js.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/32/js.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/32/swt.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/32/swt.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/32/bmp.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/32/bmp.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/32/avi.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/32/avi.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/32/txt.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/32/txt.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/32/jpg.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/32/jpg.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/jpg.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/jpg.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/exe.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/exe.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/rdp.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/rdp.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/htm.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/htm.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/ai.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/ai.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/vsd.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/vsd.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/mp3.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/mp3.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/swf.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/swf.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/xml.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/xml.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/mdb.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/mdb.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/fla.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/fla.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/zip.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/zip.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/ppt.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/ppt.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/html.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/html.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/cs.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/cs.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/doc.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/doc.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/gif.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/gif.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/xls.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/images/icons/xls.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/browser.html |
---|
New file |
0,0 → 1,148 |
<!-- |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: browser.html |
* This page compose the File Browser dialog frameset. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
--> |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> |
<html> |
<head> |
<title>FCKeditor - Resources Browser</title> |
<link href="browser.css" type="text/css" rel="stylesheet"> |
<script type="text/javascript" src="js/fckxml.js"></script> |
<script language="javascript"> |
function GetUrlParam( paramName ) |
{ |
var oRegex = new RegExp( '[\?&]' + paramName + '=([^&]+)', 'i' ) ; |
var oMatch = oRegex.exec( window.top.location.search ) ; |
if ( oMatch && oMatch.length > 1 ) |
return unescape( oMatch[1] ) ; |
else |
return '' ; |
} |
var oConnector = new Object() ; |
oConnector.CurrentFolder = '/' ; |
var sConnUrl = GetUrlParam( 'Connector' ) ; |
// Gecko has some problems when using relative URLs (not starting with slash). |
if ( sConnUrl.substr(0,1) != '/' && sConnUrl.indexOf( '://' ) < 0 ) |
sConnUrl = window.location.href.replace( /browser.html.*$/, '' ) + sConnUrl ; |
oConnector.ConnectorUrl = sConnUrl + ( sConnUrl.indexOf('?') != -1 ? '&' : '?' ) ; |
var sServerPath = GetUrlParam( 'ServerPath' ) ; |
if ( sServerPath.length > 0 ) |
oConnector.ConnectorUrl += 'ServerPath=' + escape( sServerPath ) + '&' ; |
oConnector.ResourceType = GetUrlParam( 'Type' ) ; |
oConnector.ShowAllTypes = ( oConnector.ResourceType.length == 0 ) ; |
if ( oConnector.ShowAllTypes ) |
oConnector.ResourceType = 'File' ; |
oConnector.SendCommand = function( command, params, callBackFunction ) |
{ |
var sUrl = this.ConnectorUrl + 'Command=' + command ; |
sUrl += '&Type=' + this.ResourceType ; |
sUrl += '&CurrentFolder=' + escape( this.CurrentFolder ) ; |
if ( params ) sUrl += '&' + params ; |
var oXML = new FCKXml() ; |
if ( callBackFunction ) |
oXML.LoadUrl( sUrl, callBackFunction ) ; // Asynchronous load. |
else |
return oXML.LoadUrl( sUrl ) ; |
} |
oConnector.CheckError = function( responseXml ) |
{ |
var iErrorNumber = 0 |
var oErrorNode = responseXml.SelectSingleNode( 'Connector/Error' ) ; |
if ( oErrorNode ) |
{ |
iErrorNumber = parseInt( oErrorNode.attributes.getNamedItem('number').value ) ; |
switch ( iErrorNumber ) |
{ |
case 0 : |
break ; |
case 1 : // Custom error. Message placed in the "text" attribute. |
alert( oErrorNode.attributes.getNamedItem('text').value ) ; |
break ; |
case 101 : |
alert( 'Folder already exists' ) ; |
break ; |
case 102 : |
alert( 'Invalid folder name' ) ; |
break ; |
case 103 : |
alert( 'You have no permissions to create the folder' ) ; |
break ; |
case 110 : |
alert( 'Unknown error creating folder' ) ; |
break ; |
default : |
alert( 'Error on your request. Error number: ' + iErrorNumber ) ; |
break ; |
} |
} |
return iErrorNumber ; |
} |
var oIcons = new Object() ; |
oIcons.AvailableIconsArray = [ |
'ai','avi','bmp','cs','dll','doc','exe','fla','gif','htm','html','jpg','js', |
'mdb','mp3','pdf','ppt','rdp','swf','swt','txt','vsd','xls','xml','zip' ] ; |
oIcons.AvailableIcons = new Object() ; |
for ( var i = 0 ; i < oIcons.AvailableIconsArray.length ; i++ ) |
oIcons.AvailableIcons[ oIcons.AvailableIconsArray[i] ] = true ; |
oIcons.GetIcon = function( fileName ) |
{ |
var sExtension = fileName.substr( fileName.lastIndexOf('.') + 1 ).toLowerCase() ; |
if ( this.AvailableIcons[ sExtension ] == true ) |
return sExtension ; |
else |
return 'default.icon' ; |
} |
</script> |
</head> |
<frameset cols="150,*" class="Frame" framespacing="3" bordercolor="#f1f1e3" frameborder="1"> |
<frameset rows="50,*" framespacing="0"> |
<frame src="frmresourcetype.html" scrolling="no" frameborder="0"> |
<frame name="frmFolders" src="frmfolders.html" scrolling="auto" frameborder="1"> |
</frameset> |
<frameset rows="50,*,50" framespacing="0"> |
<frame name="frmActualFolder" src="frmactualfolder.html" scrolling="no" frameborder="0"> |
<frame name="frmResourcesList" src="frmresourceslist.html" scrolling="auto" frameborder="1"> |
<frameset cols="150,*,0" framespacing="0" frameborder="0"> |
<frame name="frmCreateFolder" src="frmcreatefolder.html" scrolling="no" frameborder="0"> |
<frame name="frmUpload" src="frmupload.html" scrolling="no" frameborder="0"> |
<frame name="frmUploadWorker" src="../../../fckblank.html" scrolling="no" frameborder="0"> |
</frameset> |
</frameset> |
</frameset> |
</html> |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/frmfolders.html |
---|
New file |
0,0 → 1,192 |
<!-- |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: frmfolders.html |
* This page shows the list of folders available in the parent folder |
* of the current folder. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
--> |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> |
<html> |
<head> |
<link href="browser.css" type="text/css" rel="stylesheet"> |
<script type="text/javascript" src="js/common.js"></script> |
<script language="javascript"> |
var sActiveFolder ; |
var bIsLoaded = false ; |
var iIntervalId ; |
var oListManager = new Object() ; |
oListManager.Init = function() |
{ |
this.Table = document.getElementById('tableFiles') ; |
this.UpRow = document.getElementById('trUp') ; |
this.TableRows = new Object() ; |
} |
oListManager.Clear = function() |
{ |
// Remove all other rows available. |
while ( this.Table.rows.length > 1 ) |
this.Table.deleteRow(1) ; |
// Reset the TableRows collection. |
this.TableRows = new Object() ; |
} |
oListManager.AddItem = function( folderName, folderPath ) |
{ |
// Create the new row. |
var oRow = this.Table.insertRow(-1) ; |
oRow.className = 'FolderListFolder' ; |
// Build the link to view the folder. |
var sLink = '<a href="#" onclick="OpenFolder(\'' + folderPath + '\');return false;">' ; |
// Add the folder icon cell. |
var oCell = oRow.insertCell(-1) ; |
oCell.width = 16 ; |
oCell.innerHTML = sLink + '<img alt="" src="images/spacer.gif" width="16" height="16" border="0"></a>' ; |
// Add the folder name cell. |
oCell = oRow.insertCell(-1) ; |
oCell.noWrap = true ; |
oCell.innerHTML = ' ' + sLink + folderName + '</a>' ; |
this.TableRows[ folderPath ] = oRow ; |
} |
oListManager.ShowUpFolder = function( upFolderPath ) |
{ |
this.UpRow.style.display = ( upFolderPath != null ? '' : 'none' ) ; |
if ( upFolderPath != null ) |
{ |
document.getElementById('linkUpIcon').onclick = document.getElementById('linkUp').onclick = function() |
{ |
LoadFolders( upFolderPath ) ; |
return false ; |
} |
} |
} |
function CheckLoaded() |
{ |
if ( window.top.IsLoadedActualFolder |
&& window.top.IsLoadedCreateFolder |
&& window.top.IsLoadedUpload |
&& window.top.IsLoadedResourcesList ) |
{ |
window.clearInterval( iIntervalId ) ; |
bIsLoaded = true ; |
OpenFolder( sActiveFolder ) ; |
} |
} |
function OpenFolder( folderPath ) |
{ |
sActiveFolder = folderPath ; |
if ( ! bIsLoaded ) |
{ |
if ( ! iIntervalId ) |
iIntervalId = window.setInterval( CheckLoaded, 100 ) ; |
return ; |
} |
// Change the style for the select row (to show the opened folder). |
for ( var sFolderPath in oListManager.TableRows ) |
{ |
oListManager.TableRows[ sFolderPath ].className = |
( sFolderPath == folderPath ? 'FolderListCurrentFolder' : 'FolderListFolder' ) ; |
} |
// Set the current folder in all frames. |
window.parent.frames['frmActualFolder'].SetCurrentFolder( oConnector.ResourceType, folderPath ) ; |
window.parent.frames['frmCreateFolder'].SetCurrentFolder( oConnector.ResourceType, folderPath ) ; |
window.parent.frames['frmUpload'].SetCurrentFolder( oConnector.ResourceType, folderPath ) ; |
// Load the resources list for this folder. |
window.parent.frames['frmResourcesList'].LoadResources( oConnector.ResourceType, folderPath ) ; |
} |
function LoadFolders( folderPath ) |
{ |
// Clear the folders list. |
oListManager.Clear() ; |
// Get the parent folder path. |
var sParentFolderPath ; |
if ( folderPath != '/' ) |
sParentFolderPath = folderPath.substring( 0, folderPath.lastIndexOf( '/', folderPath.length - 2 ) + 1 ) ; |
// Show/Hide the Up Folder. |
oListManager.ShowUpFolder( sParentFolderPath ) ; |
if ( folderPath != '/' ) |
{ |
sActiveFolder = folderPath ; |
oConnector.CurrentFolder = sParentFolderPath |
oConnector.SendCommand( 'GetFolders', null, GetFoldersCallBack ) ; |
} |
else |
OpenFolder( '/' ) ; |
} |
function GetFoldersCallBack( fckXml ) |
{ |
if ( oConnector.CheckError( fckXml ) != 0 ) |
return ; |
// Get the current folder path. |
var oNode = fckXml.SelectSingleNode( 'Connector/CurrentFolder' ) ; |
var sCurrentFolderPath = oNode.attributes.getNamedItem('path').value ; |
var oNodes = fckXml.SelectNodes( 'Connector/Folders/Folder' ) ; |
for ( var i = 0 ; i < oNodes.length ; i++ ) |
{ |
var sFolderName = oNodes[i].attributes.getNamedItem('name').value ; |
oListManager.AddItem( sFolderName, sCurrentFolderPath + sFolderName + "/" ) ; |
} |
OpenFolder( sActiveFolder ) ; |
} |
function SetResourceType( type ) |
{ |
oConnector.ResourceType = type ; |
LoadFolders( '/' ) ; |
} |
window.onload = function() |
{ |
oListManager.Init() ; |
LoadFolders( '/' ) ; |
} |
</script> |
</head> |
<body class="FileArea" bottomMargin="10" leftMargin="10" topMargin="10" rightMargin="10"> |
<table id="tableFiles" cellSpacing="0" cellPadding="0" width="100%" border="0"> |
<tr id="trUp" style="DISPLAY: none"> |
<td width="16"><a id="linkUpIcon" href="#"><img alt="" src="images/FolderUp.gif" width="16" height="16" border="0"></a></td> |
<td nowrap width="100%"> <a id="linkUp" href="#">..</a></td> |
</tr> |
</table> |
</body> |
</html> |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/frmcreatefolder.html |
---|
New file |
0,0 → 1,109 |
<!-- |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: frmcreatefolder.html |
* Page used to create new folders in the current folder. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
--> |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> |
<html> |
<head> |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> |
<link href="browser.css" type="text/css" rel="stylesheet"> |
<script type="text/javascript" src="js/common.js"></script> |
<script language="javascript"> |
function SetCurrentFolder( resourceType, folderPath ) |
{ |
oConnector.ResourceType = resourceType ; |
oConnector.CurrentFolder = folderPath |
} |
function CreateFolder() |
{ |
var sFolderName ; |
while ( true ) |
{ |
sFolderName = prompt( 'Type the name of the new folder:', '' ) ; |
if ( sFolderName == null ) |
return ; |
else if ( sFolderName.length == 0 ) |
alert( 'Please type the folder name' ) ; |
else |
break ; |
} |
oConnector.SendCommand( 'CreateFolder', 'NewFolderName=' + escape( sFolderName) , CreateFolderCallBack ) ; |
} |
function CreateFolderCallBack( fckXml ) |
{ |
if ( oConnector.CheckError( fckXml ) == 0 ) |
window.parent.frames['frmResourcesList'].Refresh() ; |
/* |
// Get the current folder path. |
var oNode = fckXml.SelectSingleNode( 'Connector/Error' ) ; |
var iErrorNumber = parseInt( oNode.attributes.getNamedItem('number').value ) ; |
switch ( iErrorNumber ) |
{ |
case 0 : |
window.parent.frames['frmResourcesList'].Refresh() ; |
break ; |
case 101 : |
alert( 'Folder already exists' ) ; |
break ; |
case 102 : |
alert( 'Invalid folder name' ) ; |
break ; |
case 103 : |
alert( 'You have no permissions to create the folder' ) ; |
break ; |
case 110 : |
alert( 'Unknown error creating folder' ) ; |
break ; |
default : |
alert( 'Error creating folder. Error number: ' + iErrorNumber ) ; |
break ; |
} |
*/ |
} |
window.onload = function() |
{ |
window.top.IsLoadedCreateFolder = true ; |
} |
</script> |
</head> |
<body bottomMargin="0" topMargin="0"> |
<table height="100%" cellSpacing="0" cellPadding="0" width="100%" border="0"> |
<tr> |
<td> |
<button type="button" style="WIDTH: 100%" onclick="CreateFolder();"> |
<table cellSpacing="0" cellPadding="0" border="0"> |
<tr> |
<td><img height="16" alt="" src="images/Folder.gif" width="16"></td> |
<td> </td> |
<td nowrap>Create New Folder</td> |
</tr> |
</table> |
</button> |
</td> |
</tr> |
</table> |
</body> |
</html> |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/browser/default/browser.css |
---|
New file |
0,0 → 1,84 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: browser.css |
* CSS styles used by all pages that compose the File Browser. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
body |
{ |
background-color: #f1f1e3; |
} |
form |
{ |
margin: 0px 0px 0px 0px ; |
padding: 0px 0px 0px 0px ; |
} |
.Frame |
{ |
background-color: #f1f1e3; |
border-color: #f1f1e3; |
border-right: thin inset; |
border-top: thin inset; |
border-left: thin inset; |
border-bottom: thin inset; |
} |
body.FileArea |
{ |
background-color: #ffffff; |
} |
body, td, input, select |
{ |
font-size: 11px; |
font-family: 'Microsoft Sans Serif' , Arial, Helvetica, Verdana; |
} |
.ActualFolder |
{ |
font-weight: bold; |
font-size: 14px; |
} |
.PopupButtons |
{ |
border-top: #d5d59d 1px solid; |
background-color: #e3e3c7; |
padding: 7px 10px 7px 10px; |
} |
.Button, button |
{ |
border-right: #737357 1px solid; |
border-top: #737357 1px solid; |
border-left: #737357 1px solid; |
color: #3b3b1f; |
border-bottom: #737357 1px solid; |
background-color: #c7c78f; |
} |
.FolderListCurrentFolder img |
{ |
background-image: url(images/FolderOpened.gif); |
} |
.FolderListFolder img |
{ |
background-image: url(images/Folder.gif); |
} |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/upload/php/upload.php |
---|
New file |
0,0 → 1,120 |
<?php |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: upload.php |
* This is the "File Uploader" for PHP. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
require('config.php') ; |
require('util.php') ; |
// This is the function that sends the results of the uploading process. |
function SendResults( $errorNumber, $fileUrl = '', $fileName = '', $customMsg = '' ) |
{ |
echo '<script type="text/javascript">' ; |
echo 'window.parent.OnUploadCompleted(' . $errorNumber . ',"' . str_replace( '"', '\\"', $fileUrl ) . '","' . str_replace( '"', '\\"', $fileName ) . '", "' . str_replace( '"', '\\"', $customMsg ) . '") ;' ; |
echo '</script>' ; |
exit ; |
} |
// Check if this uploader has been enabled. |
if ( !$Config['Enabled'] ) |
SendResults( '1', '', '', 'This file uploader is disabled. Please check the "editor/filemanager/upload/php/config.php" file' ) ; |
// Check if the file has been correctly uploaded. |
if ( !isset( $_FILES['NewFile'] ) || is_null( $_FILES['NewFile']['tmp_name'] ) || $_FILES['NewFile']['name'] == '' ) |
SendResults( '202' ) ; |
// Get the posted file. |
$oFile = $_FILES['NewFile'] ; |
// Get the uploaded file name extension. |
$sFileName = $oFile['name'] ; |
// Replace dots in the name with underscores (only one dot can be there... security issue). |
if ( $Config['ForceSingleExtension'] ) |
$sFileName = preg_replace( '/\\.(?![^.]*$)/', '_', $sFileName ) ; |
$sOriginalFileName = $sFileName ; |
// Get the extension. |
$sExtension = substr( $sFileName, ( strrpos($sFileName, '.') + 1 ) ) ; |
$sExtension = strtolower( $sExtension ) ; |
// The the file type (from the QueryString, by default 'File'). |
$sType = isset( $_GET['Type'] ) ? $_GET['Type'] : 'File' ; |
// Check if it is an allowed type. |
if ( !in_array( $sType, array('File','Image','Flash','Media') ) ) |
SendResults( 1, '', '', 'Invalid type specified' ) ; |
// Get the allowed and denied extensions arrays. |
$arAllowed = $Config['AllowedExtensions'][$sType] ; |
$arDenied = $Config['DeniedExtensions'][$sType] ; |
// Check if it is an allowed extension. |
if ( ( count($arAllowed) > 0 && !in_array( $sExtension, $arAllowed ) ) || ( count($arDenied) > 0 && in_array( $sExtension, $arDenied ) ) ) |
SendResults( '202' ) ; |
$sErrorNumber = '0' ; |
$sFileUrl = '' ; |
// Initializes the counter used to rename the file, if another one with the same name already exists. |
$iCounter = 0 ; |
// Get the target directory. |
if ( isset( $Config['UserFilesAbsolutePath'] ) && strlen( $Config['UserFilesAbsolutePath'] ) > 0 ) |
$sServerDir = $Config['UserFilesAbsolutePath'] ; |
else |
$sServerDir = GetRootPath() . $Config["UserFilesPath"] ; |
if ( $Config['UseFileType'] ) |
$sServerDir .= $sType . '/' ; |
while ( true ) |
{ |
// Compose the file path. |
$sFilePath = $sServerDir . $sFileName ; |
// If a file with that name already exists. |
if ( is_file( $sFilePath ) ) |
{ |
$iCounter++ ; |
$sFileName = RemoveExtension( $sOriginalFileName ) . '(' . $iCounter . ').' . $sExtension ; |
$sErrorNumber = '201' ; |
} |
else |
{ |
move_uploaded_file( $oFile['tmp_name'], $sFilePath ) ; |
if ( is_file( $sFilePath ) ) |
{ |
$oldumask = umask(0) ; |
chmod( $sFilePath, 0777 ) ; |
umask( $oldumask ) ; |
} |
if ( $Config['UseFileType'] ) |
$sFileUrl = $Config["UserFilesPath"] . $sType . '/' . $sFileName ; |
else |
$sFileUrl = $Config["UserFilesPath"] . $sFileName ; |
break ; |
} |
} |
SendResults( $sErrorNumber, $sFileUrl, $sFileName ) ; |
?> |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/upload/php/config.php |
---|
New file |
0,0 → 1,52 |
<?php |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: config.php |
* Configuration file for the PHP File Uploader. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
global $Config ; |
// SECURITY: You must explicitelly enable this "uploader". |
$Config['Enabled'] = false ; |
// Set if the file type must be considere in the target path. |
// Ex: /UserFiles/Image/ or /UserFiles/File/ |
$Config['UseFileType'] = false ; |
// Path to uploaded files relative to the document root. |
$Config['UserFilesPath'] = '/UserFiles/' ; |
// Fill the following value it you prefer to specify the absolute path for the |
// user files directory. Usefull if you are using a virtual directory, symbolic |
// link or alias. Examples: 'C:\\MySite\\UserFiles\\' or '/root/mysite/UserFiles/'. |
// Attention: The above 'UserFilesPath' must point to the same directory. |
$Config['UserFilesAbsolutePath'] = '' ; |
// Due to security issues with Apache modules, it is reccomended to leave the |
// following setting enabled. |
$Config['ForceSingleExtension'] = true ; |
$Config['AllowedExtensions']['File'] = array() ; |
$Config['DeniedExtensions']['File'] = array('php','php2','php3','php4','php5','phtml','pwml','inc','asp','aspx','ascx','jsp','cfm','cfc','pl','bat','exe','com','dll','vbs','js','reg','cgi') ; |
$Config['AllowedExtensions']['Image'] = array('jpg','gif','jpeg','png') ; |
$Config['DeniedExtensions']['Image'] = array() ; |
$Config['AllowedExtensions']['Flash'] = array('swf','fla') ; |
$Config['DeniedExtensions']['Flash'] = array() ; |
?> |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/upload/php/util.php |
---|
New file |
0,0 → 1,36 |
<?php |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: util.php |
* This is the File Manager Connector for ASP. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
function RemoveExtension( $fileName ) |
{ |
return substr( $fileName, 0, strrpos( $fileName, '.' ) ) ; |
} |
function GetRootPath() |
{ |
$sRealPath = realpath( './' ) ; |
$sSelfPath = $_SERVER['PHP_SELF'] ; |
$sSelfPath = substr( $sSelfPath, 0, strrpos( $sSelfPath, '/' ) ) ; |
return substr( $sRealPath, 0, strlen( $sRealPath ) - strlen( $sSelfPath ) ) ; |
} |
?> |
/branches/v1.0-menes/api/fckeditor/editor/filemanager/upload/test.html |
---|
New file |
0,0 → 1,129 |
<!-- |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: test.html |
* Test page for the "File Uploaders". |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
--> |
<html> |
<head> |
<title>FCKeditor - Uploaders Tests</title> |
<script language="javascript"> |
function SendFile() |
{ |
var sUploaderUrl = cmbUploaderUrl.value ; |
if ( sUploaderUrl.length == 0 ) |
sUploaderUrl = txtCustomUrl.value ; |
if ( sUploaderUrl.length == 0 ) |
{ |
alert( 'Please provide your custom URL or select a default one' ) ; |
return ; |
} |
eURL.innerHTML = sUploaderUrl ; |
txtUrl.value = '' ; |
frmUpload.action = sUploaderUrl ; |
frmUpload.submit() ; |
} |
function OnUploadCompleted( errorNumber, fileUrl, fileName, customMsg ) |
{ |
switch ( errorNumber ) |
{ |
case 0 : // No errors |
txtUrl.value = fileUrl ; |
alert( 'File uploaded with no errors' ) ; |
break ; |
case 1 : // Custom error |
alert( customMsg ) ; |
break ; |
case 10 : // Custom warning |
txtUrl.value = fileUrl ; |
alert( customMsg ) ; |
break ; |
case 201 : |
txtUrl.value = fileUrl ; |
alert( 'A file with the same name is already available. The uploaded file has been renamed to "' + fileName + '"' ) ; |
break ; |
case 202 : |
alert( 'Invalid file' ) ; |
break ; |
case 203 : |
alert( "Security error. You probably don't have enough permissions to upload. Please check your server." ) ; |
break ; |
default : |
alert( 'Error on file upload. Error number: ' + errorNumber ) ; |
break ; |
} |
} |
</script> |
</head> |
<body> |
<table cellSpacing="0" cellPadding="0" width="100%" border="0" height="100%"> |
<tr> |
<td> |
<table cellSpacing="0" cellPadding="0" width="100%" border="0"> |
<tr> |
<td nowrap> |
Select the "File Uploader" to use:<br> |
<select id="cmbUploaderUrl"> |
<option selected value="asp/upload.asp">ASP</option> |
<option value="aspx/upload.aspx">ASP.Net</option> |
<option value="cfm/upload.cfm">ColdFusion</option> |
<option value="lasso/upload.lasso">Lasso</option> |
<option value="php/upload.php">PHP</option> |
<option value="">(Custom)</option> |
</select> |
</td> |
<td nowrap> </td> |
<td width="100%"> |
Custom Uploader URL:<BR> |
<input id="txtCustomUrl" style="WIDTH: 100%; BACKGROUND-COLOR: #dcdcdc" disabled type="text"> |
</td> |
</tr> |
</table> |
<br> |
<table cellSpacing="0" cellPadding="0" width="100%" border="0"> |
<tr> |
<td noWrap> |
<form id="frmUpload" target="UploadWindow" enctype="multipart/form-data" action="" method="post"> |
Upload a new file:<br> |
<input type="file" name="NewFile"><br> |
<input type="button" value="Send it to the Server" onclick="SendFile();"> |
</form> |
</td> |
<td style="WIDTH: 16px"> </td> |
<td vAlign="top" width="100%"> |
Uploaded File URL:<br> |
<INPUT id="txtUrl" style="WIDTH: 100%" readonly type="text"> |
</td> |
</tr> |
</table> |
<br> |
Post URL: <span id="eURL"> </span> |
</td> |
</tr> |
<tr> |
<td height="100%"> |
<iframe name="UploadWindow" width="100%" height="100%" src="../../fckblank.html"></iframe> |
</td> |
</tr> |
</table> |
</body> |
</html> |
/branches/v1.0-menes/api/fckeditor/editor/js/fckeditorcode_ie.js |
---|
New file |
0,0 → 1,81 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* This file has been compacted for best loading performance. |
*/ |
var FCK_STATUS_NOTLOADED=window.parent.FCK_STATUS_NOTLOADED=0;var FCK_STATUS_ACTIVE=window.parent.FCK_STATUS_ACTIVE=1;var FCK_STATUS_COMPLETE=window.parent.FCK_STATUS_COMPLETE=2;var FCK_TRISTATE_OFF=window.parent.FCK_TRISTATE_OFF=0;var FCK_TRISTATE_ON=window.parent.FCK_TRISTATE_ON=1;var FCK_TRISTATE_DISABLED=window.parent.FCK_TRISTATE_DISABLED=-1;var FCK_UNKNOWN=window.parent.FCK_UNKNOWN=-9;var FCK_TOOLBARITEM_ONLYICON=window.parent.FCK_TOOLBARITEM_ONLYICON=0;var FCK_TOOLBARITEM_ONLYTEXT=window.parent.FCK_TOOLBARITEM_ONLYTEXT=1;var FCK_TOOLBARITEM_ICONTEXT=window.parent.FCK_TOOLBARITEM_ICONTEXT=2;var FCK_EDITMODE_WYSIWYG=window.parent.FCK_EDITMODE_WYSIWYG=0;var FCK_EDITMODE_SOURCE=window.parent.FCK_EDITMODE_SOURCE=1;var FCK_IMAGES_PATH='images/';var FCK_SPACER_PATH='images/spacer.gif'; |
String.prototype.Contains=function(A){return (this.indexOf(A)>-1);};String.prototype.Equals=function(){for (var i=0;i<arguments.length;i++) if (this==arguments[i]) return true;return false;};String.prototype.ReplaceAll=function(A,B){var C=this;for (var i=0;i<A.length;i++){C=C.replace(A[i],B[i]);};return C;};Array.prototype.AddItem=function(A){var i=this.length;this[i]=A;return i;};Array.prototype.indexOf=function(A){for (var i=0;i<this.length;i++){if (this[i]==A) return i;};return-1;};String.prototype.startsWith=function(A){return (this.substr(0,A.length)==A);};String.prototype.endsWith=function(A,B){var C=this.length;var D=A.length;if (D>C) return false;if (B){var E=new RegExp(A+'$','i');return E.test(this);}else return (D==0||this.substr(C-D,D)==A);};String.prototype.remove=function(A,B){var s='';if (A>0) s=this.substring(0,A);if (A+B<this.length) s+=this.substring(A+B,this.length);return s;};String.prototype.trim=function(){return this.replace(/(^\s*)|(\s*$)/g,'');};String.prototype.ltrim=function(){return this.replace(/^\s*/g,'');};String.prototype.rtrim=function(){return this.replace(/\s*$/g,'');};String.prototype.replaceNewLineChars=function(A){return this.replace(/\n/g,A);} |
var FCKIECleanup=function(A){this.Items=new Array();A._FCKCleanupObj=this;A.attachEvent('onunload',FCKIECleanup_Cleanup);};FCKIECleanup.prototype.AddItem=function(A,B){this.Items.push([A,B]);};function FCKIECleanup_Cleanup(){var aItems=this._FCKCleanupObj.Items;var iLenght=aItems.length;for (var i=0;i<iLenght;i++){var oItem=aItems[i];oItem[1].call(oItem[0]);aItems[i]=null;};this._FCKCleanupObj=null;if (CollectGarbage) CollectGarbage();} |
var s=navigator.userAgent.toLowerCase();var FCKBrowserInfo={IsIE:s.Contains('msie'),IsIE7:s.Contains('msie 7'),IsGecko:s.Contains('gecko/'),IsSafari:s.Contains('safari'),IsOpera:s.Contains('opera')};FCKBrowserInfo.IsGeckoLike=FCKBrowserInfo.IsGecko||FCKBrowserInfo.IsSafari||FCKBrowserInfo.IsOpera;if (FCKBrowserInfo.IsGecko){var sGeckoVersion=s.match(/gecko\/(\d+)/)[1];FCKBrowserInfo.IsGecko10=sGeckoVersion<20051111;} |
var FCKURLParams=new Object();var aParams=document.location.search.substr(1).split('&');for (var i=0;i<aParams.length;i++){var aParam=aParams[i].split('=');var sParamName=aParam[0];var sParamValue=aParam[1];FCKURLParams[sParamName]=sParamValue;} |
var FCK=new Object();FCK.Name=FCKURLParams['InstanceName'];FCK.Status=FCK_STATUS_NOTLOADED;FCK.EditMode=FCK_EDITMODE_WYSIWYG;FCK.LoadLinkedFile=function(){var A=window.parent.document;var B=A.getElementById(FCK.Name);var C=A.getElementsByName(FCK.Name);var i=0;while (B||i==0){if (B&&(B.tagName.toLowerCase()=='input'||B.tagName.toLowerCase()=='textarea')){FCK.LinkedField=B;break;};B=C[i++];}};FCK.LoadLinkedFile();var FCKTempBin=new Object();FCKTempBin.Elements=new Array();FCKTempBin.AddElement=function(A){var B=this.Elements.length;this.Elements[B]=A;return B;};FCKTempBin.RemoveElement=function(A){var e=this.Elements[A];this.Elements[A]=null;return e;};FCKTempBin.Reset=function(){var i=0;while (i<this.Elements.length) this.Elements[i++]==null;this.Elements.length=0;} |
var FCKConfig=FCK.Config=new Object();if (document.location.protocol=='file:'){FCKConfig.BasePath=unescape(document.location.pathname.substr(1));FCKConfig.BasePath=FCKConfig.BasePath.replace(/\\/gi, '/');FCKConfig.BasePath='file://'+FCKConfig.BasePath.substring(0,FCKConfig.BasePath.lastIndexOf('/')+1);FCKConfig.FullBasePath=FCKConfig.BasePath;}else{FCKConfig.BasePath=document.location.pathname.substring(0,document.location.pathname.lastIndexOf('/')+1);FCKConfig.FullBasePath=document.location.protocol+'//'+document.location.host+FCKConfig.BasePath;};FCKConfig.EditorPath=FCKConfig.BasePath.replace(/editor\/$/,'');try{FCKConfig.ScreenWidth=screen.width;FCKConfig.ScreenHeight=screen.height;}catch (e){FCKConfig.ScreenWidth=800;FCKConfig.ScreenHeight=600;};FCKConfig.ProcessHiddenField=function(){this.PageConfig=new Object();var A=window.parent.document.getElementById(FCK.Name+'___Config');if (!A) return;var B=A.value.split('&');for (var i=0;i<B.length;i++){if (B[i].length==0) continue;var C=B[i].split('=');var D=unescape(C[0]);var E=unescape(C[1]);if (D=='CustomConfigurationsPath') FCKConfig[D]=E;else if (E.toLowerCase()=="true") this.PageConfig[D]=true;else if (E.toLowerCase()=="false") this.PageConfig[D]=false;else if (E.length>0&&!isNaN(E)) this.PageConfig[D]=parseInt(E);else this.PageConfig[D]=E;}};function FCKConfig_LoadPageConfig(){var oPageConfig=FCKConfig.PageConfig;for (var sKey in oPageConfig) FCKConfig[sKey]=oPageConfig[sKey];};function FCKConfig_PreProcess(){var oConfig=FCKConfig;if (oConfig.AllowQueryStringDebug){try{if ((/fckdebug=true/i).test(window.top.location.search)) oConfig.Debug=true;}catch (e) { /* Ignore it. Much probably we are inside a FRAME where the "top" is in another domain (security error). */ }};if (!oConfig.PluginsPath.endsWith('/')) oConfig.PluginsPath+='/';if (typeof(oConfig.EditorAreaCSS)=='string') oConfig.EditorAreaCSS=[oConfig.EditorAreaCSS];var sComboPreviewCSS=oConfig.ToolbarComboPreviewCSS;if (!sComboPreviewCSS||sComboPreviewCSS.length==0) oConfig.ToolbarComboPreviewCSS=oConfig.EditorAreaCSS;else if (typeof(sComboPreviewCSS)=='string') oConfig.ToolbarComboPreviewCSS=[sComboPreviewCSS];};FCKConfig.ToolbarSets=new Object();FCKConfig.Plugins=new Object();FCKConfig.Plugins.Items=new Array();FCKConfig.Plugins.Add=function(A,B,C){FCKConfig.Plugins.Items.AddItem([A,B,C]);};FCKConfig.ProtectedSource=new Object();FCKConfig.ProtectedSource.RegexEntries=[/<!--[\s\S]*?-->/g,/<script[\s\S]*?<\/script>/gi,/<noscript[\s\S]*?<\/noscript>/gi];FCKConfig.ProtectedSource.Add=function(A){this.RegexEntries.AddItem(A);};FCKConfig.ProtectedSource.Protect=function(A){function _Replace(protectedSource){var B=FCKTempBin.AddElement(protectedSource);return '<!--{PS..'+B+'}-->';};for (var i=0;i<this.RegexEntries.length;i++){A=A.replace(this.RegexEntries[i],_Replace);};return A;};FCKConfig.ProtectedSource.Revert=function(A,B){function _Replace(m,opener,index){var C=B?FCKTempBin.RemoveElement(index):FCKTempBin.Elements[index];return FCKConfig.ProtectedSource.Revert(C,B);};return A.replace(/(<|<)!--\{PS..(\d+)\}--(>|>)/g,_Replace);} |
var FCKDebug=new Object();FCKDebug.Output=function(A,B,C){if (!FCKConfig.Debug) return;if (!C&&A!=null&&isNaN(A)) A=A.replace(/</g,"<");if (!this.DebugWindow||this.DebugWindow.closed) this.DebugWindow=window.open(FCKConfig.BasePath+'fckdebug.html','FCKeditorDebug','menubar=no,scrollbars=no,resizable=yes,location=no,toolbar=no,width=600,height=500',true);if (this.DebugWindow&&this.DebugWindow.Output){try{this.DebugWindow.Output(A,B);}catch (e) {}}};FCKDebug.OutputObject=function(A,B){if (!FCKConfig.Debug) return;var C;if (A!=null){C='Properties of: '+A+'</b><blockquote>';for (var D in A){try{var E=A[D]?A[D]+'':'[null]';C+='<b>'+D+'</b> : '+E.replace(/</g,'<')+'<br>';}catch (e){try{C+='<b>'+D+'</b> : ['+typeof(A[D])+']<br>';}catch (e){C+='<b>'+D+'</b> : [-error-]<br>';}}};C+='</blockquote><b>';} else C='OutputObject : Object is "null".';FCKDebug.Output(C,B,true);} |
var FCKTools=new Object();FCKTools.AppendStyleSheet=function(A,B){if (typeof(B)=='string') return this._AppendStyleSheet(A,B);else{for (var i=0;i<B.length;i++) this._AppendStyleSheet(A,B[i]);}};FCKTools.GetLinkedFieldValue=function(){return FCK.LinkedField.value;};FCKTools.AttachToLinkedFieldFormSubmit=function(A){var B=FCK.LinkedField.form;if (!B) return;if (FCKBrowserInfo.IsIE) B.attachEvent("onsubmit",A);else B.addEventListener('submit',A,false);if (!B.updateFCKeditor) B.updateFCKeditor=new Array();B.updateFCKeditor[B.updateFCKeditor.length]=A;if (!B.originalSubmit&&(typeof(B.submit)=='function'||(!B.submit.tagName&&!B.submit.length))){B.originalSubmit=B.submit;B.submit=FCKTools_SubmitReplacer;}};function FCKTools_SubmitReplacer(){if (this.updateFCKeditor){for (var i=0;i<this.updateFCKeditor.length;i++) this.updateFCKeditor[i]();};this.originalSubmit();};FCKTools.GetElementWindow=function(A){return this.GetDocumentWindow(this.GetElementDocument(A));};FCKTools.GetDocumentWindow=function(A){if (FCKBrowserInfo.IsSafari&&!A.parentWindow) this.FixDocumentParentWindow(window.top);return A.parentWindow||A.defaultView;};FCKTools.FixDocumentParentWindow=function(A){A.document.parentWindow=A;for (var i=0;i<A.frames.length;i++) FCKTools.FixDocumentParentWindow(A.frames[i]);};FCKTools.GetParentWindow=function(A){return A.contentWindow?A.contentWindow:A.parentWindow;};FCKTools.HTMLEncode=function(A){if (!A) return '';A=A.replace(/&/g,'&');A=A.replace(/</g,'<');A=A.replace(/>/g,'>');return A;};FCKTools.AddSelectOption=function(A,B,C){var D=FCKTools.GetElementDocument(A).createElement("OPTION");D.text=B;D.value=C;A.options.add(D);return D;};FCKTools.RunFunction=function(A,B,C,D){if (A) this.SetTimeout(A,0,B,C,D);};FCKTools.SetTimeout=function(A,B,C,D,E){return (E||window).setTimeout(function(){if (D) A.apply(C,[].concat(D));else A.apply(C);},B);};FCKTools.SetInterval=function(A,B,C,D,E){return (E||window).setInterval(function(){A.apply(C,D||[]);},B);};FCKTools.ConvertStyleSizeToHtml=function(A){return A.endsWith('%')?A:parseInt(A);};FCKTools.ConvertHtmlSizeToStyle=function(A){return A.endsWith('%')?A:(A+'px');};FCKTools.GetElementAscensor=function(A,B){var e=A;var C=","+B.toUpperCase()+",";while (e){if (C.indexOf(","+e.nodeName.toUpperCase()+",")!=-1) return e;e=e.parentNode;};return null;};FCKTools.CreateEventListener=function(A,B){var f=function(){var C=[];for (var i=0;i<arguments.length;i++) C.push(arguments[i]);A.apply(this,C.concat(B));};return f;};FCKTools.GetElementDocument=function (A){return A.ownerDocument||A.document;} |
FCKTools.CancelEvent=function(e){return false;};FCKTools._AppendStyleSheet=function(A,B){return A.createStyleSheet(B).owningElement;};FCKTools.ClearElementAttributes=function(A){A.clearAttributes();};FCKTools.GetAllChildrenIds=function(A){var B=new Array();for (var i=0;i<A.all.length;i++){var C=A.all[i].id;if (C&&C.length>0) B[B.length]=C;};return B;};FCKTools.RemoveOuterTags=function(e){e.insertAdjacentHTML('beforeBegin',e.innerHTML);e.parentNode.removeChild(e);};FCKTools.CreateXmlObject=function(A){var B;switch (A){case 'XmlHttp':B=['MSXML2.XmlHttp','Microsoft.XmlHttp'];break;case 'DOMDocument':B=['MSXML2.DOMDocument','Microsoft.XmlDom'];break;};for (var i=0;i<2;i++){try { return new ActiveXObject(B[i]);}catch (e){}};if (FCKLang.NoActiveX){alert(FCKLang.NoActiveX);FCKLang.NoActiveX=null;}};FCKTools.DisableSelection=function(A){A.unselectable='on';var e,i=0;while (e=A.all[i++]){switch (e.tagName){case 'IFRAME':case 'TEXTAREA':case 'INPUT':case 'SELECT':/* Ignore the above tags */ break;default:e.unselectable='on';}}};FCKTools.GetScrollPosition=function(A){var B=A.document;var C={ X:B.documentElement.scrollLeft,Y:B.documentElement.scrollTop };if (C.X>0||C.Y>0) return C;return { X:B.body.scrollLeft,Y:B.body.scrollTop };};FCKTools.AddEventListener=function(A,B,C){A.attachEvent('on'+B,C);};FCKTools.RemoveEventListener=function(A,B,C){A.detachEvent('on'+B,C);};FCKTools.AddEventListenerEx=function(A,B,C,D){var o=new Object();o.Source=A;o.Params=D||[];o.Listener=function(ev){return C.apply(o.Source,[ev].concat(o.Params));};if (FCK.IECleanup) FCK.IECleanup.AddItem(null,function() { o.Source=null;o.Params=null;});A.attachEvent('on'+B,o.Listener);A=null;D=null;};FCKTools.GetViewPaneSize=function(A){var B;var C=A.document.documentElement;if (C&&C.clientWidth) B=C;else B=top.document.body;if (B) return { Width:B.clientWidth,Height:B.clientHeight };else return { Width:0,Height:0 };};FCKTools.SaveStyles=function(A){var B=new Object();if (A.className.length>0){B.Class=A.className;A.className='';};var C=A.style.cssText;if (C.length>0){B.Inline=C;A.style.cssText='';};return B;};FCKTools.RestoreStyles=function(A,B){A.className=B.Class||'';A.style.cssText=B.Inline||'';};FCKTools.RegisterDollarFunction=function(A){A.$=A.document.getElementById;};FCKTools.AppendElement=function(A,B){return A.appendChild(this.GetElementDocument(A).createElement(B));} |
var FCKeditorAPI;function InitializeAPI(){if (!(FCKeditorAPI=window.parent.FCKeditorAPI)){var sScript='\ var FCKeditorAPI={\ Version:\'2.3.2\',\ VersionBuild:\'1082\',\ __Instances:new Object(),\ GetInstance:function(instanceName)\{\ return this.__Instances[instanceName];\},\ _FunctionQueue:{\ Functions:new Array(),\ IsRunning:false,\ Add:function(functionToAdd)\{\ this.Functions.push(functionToAdd);\ if (!this.IsRunning)\ this.StartNext();\},\ StartNext:function()\{\ var aQueue=this.Functions;\ if (aQueue.length>0)\{\ this.IsRunning=true;\ aQueue[0].call();\}\ else\ this.IsRunning=false;\},\ Remove:function(func)\{\ var aQueue=this.Functions;\ var i=0,fFunc;\ while(fFunc=aQueue[i])\{\ if (fFunc==func)\ aQueue.splice(i,1);\ i++;\}\ this.StartNext();\}\}\}';if (window.parent.execScript) window.parent.execScript(sScript,'JavaScript');else{if (FCKBrowserInfo.IsGecko10){eval.call(window.parent,sScript);}else window.parent.eval(sScript);};FCKeditorAPI=window.parent.FCKeditorAPI;};FCKeditorAPI.__Instances[FCK.Name]=FCK;};function FCKeditorAPI_Cleanup(){FCKeditorAPI.__Instances[FCK.Name]=null;};FCKTools.AddEventListener(window,'unload',FCKeditorAPI_Cleanup); |
var FCKRegexLib={AposEntity:/'/gi,ObjectElements:/^(?:IMG|TABLE|TR|TD|TH|INPUT|SELECT|TEXTAREA|HR|OBJECT|A|UL|OL|LI)$/i,BlockElements:/^(?:P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|TD|TH)$/i,EmptyElements:/^(?:BASE|META|LINK|HR|BR|PARAM|IMG|AREA|INPUT)$/i,NamedCommands:/^(?:Cut|Copy|Paste|Print|SelectAll|RemoveFormat|Unlink|Undo|Redo|Bold|Italic|Underline|StrikeThrough|Subscript|Superscript|JustifyLeft|JustifyCenter|JustifyRight|JustifyFull|Outdent|Indent|InsertOrderedList|InsertUnorderedList|InsertHorizontalRule)$/i,BodyContents:/([\s\S]*\<body[^\>]*\>)([\s\S]*)(\<\/body\>[\s\S]*)/i,ToReplace:/___fcktoreplace:([\w]+)/ig,MetaHttpEquiv:/http-equiv\s*=\s*["']?([^"' ]+)/i,HasBaseTag:/<base /i,HtmlOpener:/<html\s?[^>]*>/i,HeadOpener:/<head\s?[^>]*>/i,HeadCloser:/<\/head\s*>/i,TableBorderClass:/\s*FCK__ShowTableBorders\s*/,ElementName:/(^[A-Za-z_:][\w.\-:]*\w$)|(^[A-Za-z_]$)/,ForceSimpleAmpersand:/___FCKAmp___/g,SpaceNoClose:/\/>/g,EmptyParagraph:/^<(p|div)>\s*<\/\1>$/i,TagBody:/></,StrongOpener:/<STRONG([ \>])/gi,StrongCloser:/<\/STRONG>/gi,EmOpener:/<EM([ \>])/gi,EmCloser:/<\/EM>/gi,AbbrOpener:/<ABBR([ \>])/gi,AbbrCloser:/<\/ABBR>/gi,GeckoEntitiesMarker:/#\?-\:/g,ProtectUrlsImg:/(?:(<img(?=\s).*?\ssrc=)("|')(.*?)\2)|(?:(<img\s.*?src=)([^"'][^ >]+))/gi,ProtectUrlsA:/(?:(<a(?=\s).*?\shref=)("|')(.*?)\2)|(?:(<a\s.*?href=)([^"'][^ >]+))/gi,Html4DocType:/HTML 4\.0 Transitional/i,DocTypeTag:/<!DOCTYPE[^>]*>/i,TagsWithEvent:/<[^\>]+ on\w+[\s\r\n]*=[\s\r\n]*?('|")[\s\S]+?\>/g,EventAttributes:/\s(on\w+)[\s\r\n]*=[\s\r\n]*?('|")([\s\S]*?)\2/g,ProtectedEvents:/\s\w+_fckprotectedatt="([^"]+)"/g} |
var FCKLanguageManager=FCK.Language=new Object();FCKLanguageManager.AvailableLanguages={'ar':'Arabic','bg':'Bulgarian','bn':'Bengali/Bangla','bs':'Bosnian','ca':'Catalan','cs':'Czech','da':'Danish','de':'German','el':'Greek','en':'English','en-au':'English (Australia)','en-ca':'English (Canadian)','en-uk':'English (United Kingdom)','eo':'Esperanto','es':'Spanish','et':'Estonian','eu':'Basque','fa':'Persian','fi':'Finnish','fo':'Faroese','fr':'French','gl':'Galician','he':'Hebrew','hi':'Hindi','hr':'Croatian','hu':'Hungarian','it':'Italian','ja':'Japanese','km':'Khmer','ko':'Korean','lt':'Lithuanian','lv':'Latvian','mn':'Mongolian','ms':'Malay','nb':'Norwegian Bokmal','nl':'Dutch','no':'Norwegian','pl':'Polish','pt':'Portuguese (Portugal)','pt-br':'Portuguese (Brazil)','ro':'Romanian','ru':'Russian','sk':'Slovak','sl':'Slovenian','sr':'Serbian (Cyrillic)','sr-latn':'Serbian (Latin)','sv':'Swedish','th':'Thai','tr':'Turkish','uk':'Ukrainian','vi':'Vietnamese','zh':'Chinese Traditional','zh-cn':'Chinese Simplified'};FCKLanguageManager.GetActiveLanguage=function(){if (FCKConfig.AutoDetectLanguage){var A;if (navigator.userLanguage) A=navigator.userLanguage.toLowerCase();else if (navigator.language) A=navigator.language.toLowerCase();else{return FCKConfig.DefaultLanguage;};if (A.length>=5){A=A.substr(0,5);if (this.AvailableLanguages[A]) return A;};if (A.length>=2){A=A.substr(0,2);if (this.AvailableLanguages[A]) return A;}};return this.DefaultLanguage;};FCKLanguageManager.TranslateElements=function(A,B,C,D){var e=A.getElementsByTagName(B);var E,s;for (var i=0;i<e.length;i++){if (E=e[i].getAttribute('fckLang')){if (s=FCKLang[E]){if (D) s=FCKTools.HTMLEncode(s);eval('e[i].'+C+' = s');}}}};FCKLanguageManager.TranslatePage=function(A){this.TranslateElements(A,'INPUT','value');this.TranslateElements(A,'SPAN','innerHTML');this.TranslateElements(A,'LABEL','innerHTML');this.TranslateElements(A,'OPTION','innerHTML',true);};FCKLanguageManager.Initialize=function(){if (this.AvailableLanguages[FCKConfig.DefaultLanguage]) this.DefaultLanguage=FCKConfig.DefaultLanguage;else this.DefaultLanguage='en';this.ActiveLanguage=new Object();this.ActiveLanguage.Code=this.GetActiveLanguage();this.ActiveLanguage.Name=this.AvailableLanguages[this.ActiveLanguage.Code];} |
var FCKEvents;FCKEvents=function(A){this.Owner=A;this.RegisteredEvents=new Object();};FCKEvents.prototype.AttachEvent=function(A,B){var C;if (!(C=this.RegisteredEvents[A])) this.RegisteredEvents[A]=[B];else C.push(B);};FCKEvents.prototype.FireEvent=function(A,B){var C=true;var D=this.RegisteredEvents[A];if (D){for (var i=0;i<D.length;i++) C=(D[i](this.Owner,B)&&C);};return C;} |
var FCKXHtmlEntities=new Object();FCKXHtmlEntities.Initialize=function(){if (FCKXHtmlEntities.Entities) return;var A='';if (FCKConfig.ProcessHTMLEntities){FCKXHtmlEntities.Entities={' ':'nbsp','¡':'iexcl','¢':'cent','£':'pound','¤':'curren','¥':'yen','¦':'brvbar','§':'sect','¨':'uml','©':'copy','ª':'ordf','«':'laquo','¬':'not','Â':'shy','®':'reg','¯':'macr','°':'deg','±':'plusmn','²':'sup2','³':'sup3','´':'acute','µ':'micro','¶':'para','·':'middot','¸':'cedil','¹':'sup1','º':'ordm','»':'raquo','¼':'frac14','½':'frac12','¾':'frac34','¿':'iquest','×':'times','÷':'divide','Æ':'fnof','â¢':'bull','â¦':'hellip','â²':'prime','â³':'Prime','â¾':'oline','â':'frasl','â':'weierp','â':'image','â':'real','â¢':'trade','âµ':'alefsym','â':'larr','â':'uarr','â':'rarr','â':'darr','â':'harr','âµ':'crarr','â':'lArr','â':'uArr','â':'rArr','â':'dArr','â':'hArr','â':'forall','â':'part','â':'exist','â ':'empty','â':'nabla','â':'isin','â':'notin','â':'ni','â':'prod','â':'sum','â':'minus','â':'lowast','â':'radic','â':'prop','â':'infin','â ':'ang','â§':'and','â¨':'or','â©':'cap','âª':'cup','â«':'int','â´':'there4','â¼':'sim','â ':'cong','â':'asymp','â ':'ne','â¡':'equiv','â¤':'le','â¥':'ge','â':'sub','â':'sup','â':'nsub','â':'sube','â':'supe','â':'oplus','â':'otimes','â¥':'perp','â ':'sdot','â':'loz','â ':'spades','â£':'clubs','â¥':'hearts','â¦':'diams','"':'quot','Ë':'circ','Ë':'tilde','â':'ensp','â':'emsp','â':'thinsp','â':'zwnj','â':'zwj','â':'lrm','â':'rlm','â':'ndash','â':'mdash','â':'lsquo','â':'rsquo','â':'sbquo','â':'ldquo','â':'rdquo','â':'bdquo','â ':'dagger','â¡':'Dagger','â°':'permil','â¹':'lsaquo','âº':'rsaquo','¤':'euro'};for (var e in FCKXHtmlEntities.Entities) A+=e;if (FCKConfig.IncludeLatinEntities){var B={'À':'Agrave','Á':'Aacute','Â':'Acirc','Ã':'Atilde','Ä':'Auml','Å':'Aring','Æ':'AElig','Ç':'Ccedil','È':'Egrave','É':'Eacute','Ê':'Ecirc','Ë':'Euml','Ì':'Igrave','Í':'Iacute','Î':'Icirc','Ï':'Iuml','Ð':'ETH','Ñ':'Ntilde','Ò':'Ograve','Ó':'Oacute','Ô':'Ocirc','Õ':'Otilde','Ö':'Ouml','Ø':'Oslash','Ù':'Ugrave','Ú':'Uacute','Û':'Ucirc','Ü':'Uuml','Ý':'Yacute','Þ':'THORN','ß':'szlig','à':'agrave','á':'aacute','â':'acirc','ã':'atilde','ä':'auml','å':'aring','æ':'aelig','ç':'ccedil','è':'egrave','é':'eacute','ê':'ecirc','ë':'euml','ì':'igrave','í':'iacute','î':'icirc','ï':'iuml','ð':'eth','ñ':'ntilde','ò':'ograve','ó':'oacute','ô':'ocirc','õ':'otilde','ö':'ouml','ø':'oslash','ù':'ugrave','ú':'uacute','û':'ucirc','ü':'uuml','ý':'yacute','þ':'thorn','ÿ':'yuml','Å':'OElig','Å':'oelig','Å ':'Scaron','Å¡':'scaron','¾':'Yuml'};for (var e in B){FCKXHtmlEntities.Entities[e]=B[e];A+=e;};B=null;};if (FCKConfig.IncludeGreekEntities){var B={'Î':'Alpha','Î':'Beta','Î':'Gamma','Î':'Delta','Î':'Epsilon','Î':'Zeta','Î':'Eta','Î':'Theta','Î':'Iota','Î':'Kappa','Î':'Lambda','Î':'Mu','Î':'Nu','Î':'Xi','Î':'Omicron','Î ':'Pi','Ρ':'Rho','Σ':'Sigma','Τ':'Tau','Î¥':'Upsilon','Φ':'Phi','Χ':'Chi','Ψ':'Psi','Ω':'Omega','α':'alpha','β':'beta','γ':'gamma','δ':'delta','ε':'epsilon','ζ':'zeta','η':'eta','θ':'theta','ι':'iota','κ':'kappa','λ':'lambda','μ':'mu','ν':'nu','ξ':'xi','ο':'omicron','Ï':'pi','Ï':'rho','Ï':'sigmaf','Ï':'sigma','Ï':'tau','Ï ':'upsilon','Ï':'phi','Ï':'chi','Ï':'psi','Ï':'omega'};for (var e in B){FCKXHtmlEntities.Entities[e]=B[e];A+=e;};B=null;}}else{FCKXHtmlEntities.Entities={};A=' ';};var D='['+A+']';if (FCKConfig.ProcessNumericEntities) D='[^ -~]|'+D;var E=FCKConfig.AdditionalNumericEntities;if (E||E.length>0) D+='|'+FCKConfig.AdditionalNumericEntities;FCKXHtmlEntities.EntitiesRegex=new RegExp(D,'g');} |
var FCKXHtml=new Object();FCKXHtml.CurrentJobNum=0;FCKXHtml.GetXHTML=function(A,B,C){FCKXHtmlEntities.Initialize();var D=FCK.IsDirty();this._CreateNode=FCKConfig.ForceStrongEm?FCKXHtml_CreateNode_StrongEm:FCKXHtml_CreateNode_Normal;FCKXHtml.SpecialBlocks=new Array();this.XML=FCKTools.CreateXmlObject('DOMDocument');this.MainNode=this.XML.appendChild(this.XML.createElement('xhtml'));FCKXHtml.CurrentJobNum++;if (B) this._AppendNode(this.MainNode,A);else this._AppendChildNodes(this.MainNode,A,false);var E=this._GetMainXmlString();this.XML=null;E=E.substr(7,E.length-15).trim();if (FCKBrowserInfo.IsGecko) E=E.replace(/<br\/>$/,'');E=E.replace(FCKRegexLib.SpaceNoClose,' />');if (FCKConfig.ForceSimpleAmpersand) E=E.replace(FCKRegexLib.ForceSimpleAmpersand,'&');if (C) E=FCKCodeFormatter.Format(E);for (var i=0;i<FCKXHtml.SpecialBlocks.length;i++){var F=new RegExp('___FCKsi___'+i);E=E.replace(F,FCKXHtml.SpecialBlocks[i]);};E=E.replace(FCKRegexLib.GeckoEntitiesMarker,'&');if (!D) FCK.ResetIsDirty();return E};FCKXHtml._AppendAttribute=function(A,B,C){if (FCKConfig.ForceSimpleAmpersand&&C.replace) C=C.replace(/&/g,'___FCKAmp___');try{var D=this.XML.createAttribute(B);D.value=C?C:'';A.attributes.setNamedItem(D);}catch (e){}};FCKXHtml._AppendChildNodes=function(A,B,C){var D=0;var E=B.firstChild;while (E){if (this._AppendNode(A,E)) D++;E=E.nextSibling;};if (D==0){if (C&&FCKConfig.FillEmptyBlocks){this._AppendEntity(A,'nbsp');return;};if (!FCKRegexLib.EmptyElements.test(B.nodeName)) A.appendChild(this.XML.createTextNode(''));}};FCKXHtml._AppendNode=function(A,B){if (!B) return;switch (B.nodeType){case 1:if (B.getAttribute('_fckfakelement')) return FCKXHtml._AppendNode(A,FCK.GetRealElement(B));if (FCKBrowserInfo.IsGecko&&B.hasAttribute('_moz_editor_bogus_node')) return false;if (B.getAttribute('_fcktemp')) return false;var C=B.nodeName;if (FCKBrowserInfo.IsIE&&B.scopeName&&B.scopeName!='HTML'&&B.scopeName!='FCK') C=B.scopeName+':'+C;if (!FCKRegexLib.ElementName.test(C)) return false;C=C.toLowerCase();if (FCKBrowserInfo.IsGecko&&C=='br'&&B.hasAttribute('type')&&B.getAttribute('type',2)=='_moz') return false;if (B._fckxhtmljob&&B._fckxhtmljob==FCKXHtml.CurrentJobNum) return false;var D=this._CreateNode(C);FCKXHtml._AppendAttributes(A,B,D,C);B._fckxhtmljob=FCKXHtml.CurrentJobNum;var E=FCKXHtml.TagProcessors[C];if (E){D=E(D,B,A);if (!D) break;}else this._AppendChildNodes(D,B,FCKRegexLib.BlockElements.test(C));A.appendChild(D);break;case 3:this._AppendTextNode(A,B.nodeValue.replaceNewLineChars(' '));break;case 8:if (FCKBrowserInfo.IsIE&&!B.innerHTML) break;try { A.appendChild(this.XML.createComment(B.nodeValue));}catch (e) { /* Do nothing... probably this is a wrong format comment. */};break;default:A.appendChild(this.XML.createComment("Element not supported - Type: "+B.nodeType+" Name: "+B.nodeName));break;};return true;};function FCKXHtml_CreateNode_StrongEm(nodeName){switch (nodeName){case 'b':nodeName='strong';break;case 'i':nodeName='em';break;};return this.XML.createElement(nodeName);};function FCKXHtml_CreateNode_Normal(nodeName){return this.XML.createElement(nodeName);};FCKXHtml._AppendSpecialItem=function(A){return '___FCKsi___'+FCKXHtml.SpecialBlocks.AddItem(A);};FCKXHtml._AppendEntity=function(A,B){A.appendChild(this.XML.createTextNode('#?-:'+B+';'));};FCKXHtml._AppendTextNode=function(A,B){A.appendChild(this.XML.createTextNode(B.replace(FCKXHtmlEntities.EntitiesRegex,FCKXHtml_GetEntity)));return;};function FCKXHtml_GetEntity(character){var sEntity=FCKXHtmlEntities.Entities[character]||('#'+character.charCodeAt(0));return '#?-:'+sEntity+';';};FCKXHtml.TagProcessors=new Object();FCKXHtml.TagProcessors['img']=function(A,B){if (!A.attributes.getNamedItem('alt')) FCKXHtml._AppendAttribute(A,'alt','');var C=B.getAttribute('_fcksavedurl');if (C!=null) FCKXHtml._AppendAttribute(A,'src',C);return A;};FCKXHtml.TagProcessors['a']=function(A,B){var C=B.getAttribute('_fcksavedurl');if (C!=null) FCKXHtml._AppendAttribute(A,'href',C);FCKXHtml._AppendChildNodes(A,B,false);if (A.childNodes.length==0&&!A.getAttribute('name')) return false;return A;};FCKXHtml.TagProcessors['script']=function(A,B){if (!A.attributes.getNamedItem('type')) FCKXHtml._AppendAttribute(A,'type','text/javascript');A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem(B.text)));return A;};FCKXHtml.TagProcessors['style']=function(A,B){if (!A.attributes.getNamedItem('type')) FCKXHtml._AppendAttribute(A,'type','text/css');A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem(B.innerHTML)));return A;};FCKXHtml.TagProcessors['title']=function(A,B){A.appendChild(FCKXHtml.XML.createTextNode(FCK.EditorDocument.title));return A;};FCKXHtml.TagProcessors['table']=function(A,B){var C=A.attributes.getNamedItem('class');if (C&&FCKRegexLib.TableBorderClass.test(C.nodeValue)){var D=C.nodeValue.replace(FCKRegexLib.TableBorderClass,'');if (D.length==0) A.attributes.removeNamedItem('class');else FCKXHtml._AppendAttribute(A,'class',D);};FCKXHtml._AppendChildNodes(A,B,false);return A;};FCKXHtml.TagProcessors['ol']=FCKXHtml.TagProcessors['ul']=function(A,B,C){if (B.innerHTML.trim().length==0) return;var D=C.lastChild;if (D&&D.nodeType==3) D=D.previousSibling;if (D&&D.nodeName.toUpperCase()=='LI'){B._fckxhtmljob=null;FCKXHtml._AppendNode(D,B);return;};FCKXHtml._AppendChildNodes(A,B);return A;};FCKXHtml.TagProcessors['span']=function(A,B){if (B.innerHTML.length==0) return false;FCKXHtml._AppendChildNodes(A,B,false);return A;} |
FCKXHtml._GetMainXmlString=function(){return this.MainNode.xml;};FCKXHtml._AppendAttributes=function(A,B,C,D){var E=B.attributes;for (var n=0;n<E.length;n++){var F=E[n];if (F.specified){var G=F.nodeName.toLowerCase();var H;if (G.startsWith('_fck')) continue;else if (G=='style') H=B.style.cssText;else if (G=='class'||G.indexOf('on')==0) H=F.nodeValue;else if (D=='body'&&G=='contenteditable') continue;else if (F.nodeValue===true) H=G;else if (!(H=B.getAttribute(G,2))) H=F.nodeValue;this._AppendAttribute(C,G,H);}}};FCKXHtml.TagProcessors['meta']=function(A,B){var C=A.attributes.getNamedItem('http-equiv');if (C==null||C.value.length==0){var D=B.outerHTML.match(FCKRegexLib.MetaHttpEquiv);if (D){D=D[1];FCKXHtml._AppendAttribute(A,'http-equiv',D);}};return A;};FCKXHtml.TagProcessors['font']=function(A,B){if (A.attributes.length==0) A=FCKXHtml.XML.createDocumentFragment();FCKXHtml._AppendChildNodes(A,B);return A;};FCKXHtml.TagProcessors['input']=function(A,B){if (B.name) FCKXHtml._AppendAttribute(A,'name',B.name);if (B.value&&!A.attributes.getNamedItem('value')) FCKXHtml._AppendAttribute(A,'value',B.value);if (!A.attributes.getNamedItem('type')) FCKXHtml._AppendAttribute(A,'type','text');return A;};FCKXHtml.TagProcessors['option']=function(A,B){if (B.selected&&!A.attributes.getNamedItem('selected')) FCKXHtml._AppendAttribute(A,'selected','selected');FCKXHtml._AppendChildNodes(A,B);return A;};FCKXHtml.TagProcessors['area']=function(A,B){if (!A.attributes.getNamedItem('coords')){var C=B.getAttribute('coords',2);if (C&&C!='0,0,0') FCKXHtml._AppendAttribute(A,'coords',C);};if (!A.attributes.getNamedItem('shape')){var C=B.getAttribute('shape',2);if (C&&C.length>0) FCKXHtml._AppendAttribute(A,'shape',C);};return A;};FCKXHtml.TagProcessors['label']=function(A,B){if (B.htmlFor.length>0) FCKXHtml._AppendAttribute(A,'for',B.htmlFor);FCKXHtml._AppendChildNodes(A,B);return A;};FCKXHtml.TagProcessors['form']=function(A,B){if (B.acceptCharset&&B.acceptCharset.length>0&&B.acceptCharset!='UNKNOWN') FCKXHtml._AppendAttribute(A,'accept-charset',B.acceptCharset);if (B.name) FCKXHtml._AppendAttribute(A,'name',B.name);FCKXHtml._AppendChildNodes(A,B);return A;};FCKXHtml.TagProcessors['textarea']=FCKXHtml.TagProcessors['select']=function(A,B){if (B.name) FCKXHtml._AppendAttribute(A,'name',B.name);FCKXHtml._AppendChildNodes(A,B);return A;};FCKXHtml.TagProcessors['div']=function(A,B){if (B.align.length>0) FCKXHtml._AppendAttribute(A,'align',B.align);FCKXHtml._AppendChildNodes(A,B);return A;} |
var FCKCodeFormatter=new Object();FCKCodeFormatter.Init=function(){var A=this.Regex=new Object();A.BlocksOpener=/\<(P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|TITLE|META|LINK|BASE|SCRIPT|LINK|TD|TH|AREA|OPTION)[^\>]*\>/gi;A.BlocksCloser=/\<\/(P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|TITLE|META|LINK|BASE|SCRIPT|LINK|TD|TH|AREA|OPTION)[^\>]*\>/gi;A.NewLineTags=/\<(BR|HR)[^\>]*\>/gi;A.MainTags=/\<\/?(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR)[^\>]*\>/gi;A.LineSplitter=/\s*\n+\s*/g;A.IncreaseIndent=/^\<(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR|UL|OL)[ \/\>]/i;A.DecreaseIndent=/^\<\/(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR|UL|OL)[ \>]/i;A.FormatIndentatorRemove=new RegExp('^'+FCKConfig.FormatIndentator);A.ProtectedTags=/(<PRE[^>]*>)([\s\S]*?)(<\/PRE>)/gi;};FCKCodeFormatter._ProtectData=function(A,B,C,D){return B+'___FCKpd___'+FCKCodeFormatter.ProtectedData.AddItem(C)+D;};FCKCodeFormatter.Format=function(A){if (!this.Regex) this.Init();FCKCodeFormatter.ProtectedData=new Array();var B=A.replace(this.Regex.ProtectedTags,FCKCodeFormatter._ProtectData);B=B.replace(this.Regex.BlocksOpener,'\n$&');;B=B.replace(this.Regex.BlocksCloser,'$&\n');B=B.replace(this.Regex.NewLineTags,'$&\n');B=B.replace(this.Regex.MainTags,'\n$&\n');var C='';var D=B.split(this.Regex.LineSplitter);B='';for (var i=0;i<D.length;i++){var E=D[i];if (E.length==0) continue;if (this.Regex.DecreaseIndent.test(E)) C=C.replace(this.Regex.FormatIndentatorRemove,'');B+=C+E+'\n';if (this.Regex.IncreaseIndent.test(E)) C+=FCKConfig.FormatIndentator;};for (var i=0;i<FCKCodeFormatter.ProtectedData.length;i++){var F=new RegExp('___FCKpd___'+i);B=B.replace(F,FCKCodeFormatter.ProtectedData[i].replace(/\$/g,'$$$$'));};return B.trim();} |
var FCKUndo=new Object();FCKUndo.SavedData=new Array();FCKUndo.CurrentIndex=-1;FCKUndo.TypesCount=FCKUndo.MaxTypes=25;FCKUndo.Typing=false;FCKUndo.SaveUndoStep=function(){if (FCK.EditMode!=FCK_EDITMODE_WYSIWYG) return;FCKUndo.SavedData=FCKUndo.SavedData.slice(0,FCKUndo.CurrentIndex+1);var A=FCK.EditorDocument.body.innerHTML;if (FCKUndo.CurrentIndex>=0&&A==FCKUndo.SavedData[FCKUndo.CurrentIndex][0]) return;if (FCKUndo.CurrentIndex+1>=FCKConfig.MaxUndoLevels) FCKUndo.SavedData.shift();else FCKUndo.CurrentIndex++;var B;if (FCK.EditorDocument.selection.type=='Text') B=FCK.EditorDocument.selection.createRange().getBookmark();FCKUndo.SavedData[FCKUndo.CurrentIndex]=[A,B];FCK.Events.FireEvent("OnSelectionChange");};FCKUndo.CheckUndoState=function(){return (FCKUndo.Typing||FCKUndo.CurrentIndex>0);};FCKUndo.CheckRedoState=function(){return (!FCKUndo.Typing&&FCKUndo.CurrentIndex<(FCKUndo.SavedData.length-1));};FCKUndo.Undo=function(){if (FCKUndo.CheckUndoState()){if (FCKUndo.CurrentIndex==(FCKUndo.SavedData.length-1)){FCKUndo.SaveUndoStep();};FCKUndo._ApplyUndoLevel(--FCKUndo.CurrentIndex);FCK.Events.FireEvent("OnSelectionChange");}};FCKUndo.Redo=function(){if (FCKUndo.CheckRedoState()){FCKUndo._ApplyUndoLevel(++FCKUndo.CurrentIndex);FCK.Events.FireEvent("OnSelectionChange");}};FCKUndo._ApplyUndoLevel=function(A){var B=FCKUndo.SavedData[A];if (!B) return;FCK.SetInnerHtml(B[0]);if (B[1]){var C=FCK.EditorDocument.selection.createRange();C.moveToBookmark(B[1]);C.select();};FCKUndo.TypesCount=0;FCKUndo.Typing=false;} |
var FCKEditingArea=function(A){this.TargetElement=A;this.Mode=FCK_EDITMODE_WYSIWYG;if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKEditingArea_Cleanup);};FCKEditingArea.prototype.Start=function(A,B){var C=this.TargetElement;var D=FCKTools.GetElementDocument(C);while(C.childNodes.length>0) C.removeChild(C.childNodes[0]);if (this.Mode==FCK_EDITMODE_WYSIWYG){if (FCKBrowserInfo.IsGecko) A=A.replace(/(<body[^>]*>)\s*(<\/body>)/i,'$1'+GECKO_BOGUS+'$2');var E=this.IFrame=D.createElement('iframe');E.src='javascript:void(0)';E.frameBorder=0;E.width=E.height='100%';C.appendChild(E);if (FCKBrowserInfo.IsIE) A=A.replace(/(<base[^>]*?)\s*\/?>(?!\s*<\/base>)/gi,'$1></base>');this.Window=E.contentWindow;var F=this.Document=this.Window.document;F.open();F.write(A);F.close();if (FCKBrowserInfo.IsGecko10&&!B){this.Start(A,true);return;};this.Window._FCKEditingArea=this;if (FCKBrowserInfo.IsGecko10) this.Window.setTimeout(FCKEditingArea_CompleteStart,500);else FCKEditingArea_CompleteStart.call(this.Window);}else{var G=this.Textarea=D.createElement('textarea');G.className='SourceField';G.dir='ltr';G.style.width=G.style.height='100%';G.style.border='none';C.appendChild(G);G.value=A;FCKTools.RunFunction(this.OnLoad);}};function FCKEditingArea_CompleteStart(){if (!this.document.body){this.setTimeout(FCKEditingArea_CompleteStart,50);return;};var oEditorArea=this._FCKEditingArea;oEditorArea.MakeEditable();FCKTools.RunFunction(oEditorArea.OnLoad);};FCKEditingArea.prototype.MakeEditable=function(){var A=this.Document;if (FCKBrowserInfo.IsIE) A.body.contentEditable=true;else{try{A.designMode='on';A.execCommand('useCSS',false,!FCKConfig.GeckoUseSPAN);A.execCommand('enableObjectResizing',false,!FCKConfig.DisableObjectResizing);A.execCommand('enableInlineTableEditing',false,!FCKConfig.DisableFFTableHandles);}catch (e) {}}};FCKEditingArea.prototype.Focus=function(){try{if (this.Mode==FCK_EDITMODE_WYSIWYG){if (FCKBrowserInfo.IsSafari) this.IFrame.focus();else this.Window.focus();}else this.Textarea.focus();}catch(e) {}};function FCKEditingArea_Cleanup(){this.TargetElement=null;this.IFrame=null;this.Document=null;this.Textarea=null;if (this.Window){this.Window._FCKEditingArea=null;this.Window=null;}} |
var FCKDocumentProcessor=new Object();FCKDocumentProcessor._Items=new Array();FCKDocumentProcessor.AppendNew=function(){var A=new Object();this._Items.AddItem(A);return A;};FCKDocumentProcessor.Process=function(A){var B,i=0;while((B=this._Items[i++])) B.ProcessDocument(A);};var FCKDocumentProcessor_CreateFakeImage=function(A,B){var C=FCK.EditorDocument.createElement('IMG');C.className=A;C.src=FCKConfig.FullBasePath+'images/spacer.gif';C.setAttribute('_fckfakelement','true',0);C.setAttribute('_fckrealelement',FCKTempBin.AddElement(B),0);return C;};var FCKAnchorsProcessor=FCKDocumentProcessor.AppendNew();FCKAnchorsProcessor.ProcessDocument=function(A){var B=A.getElementsByTagName('A');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){if (C.name.length>0&&(!C.getAttribute('href')||C.getAttribute('href').length==0)){var D=FCKDocumentProcessor_CreateFakeImage('FCK__Anchor',C.cloneNode(true));D.setAttribute('_fckanchor','true',0);C.parentNode.insertBefore(D,C);C.parentNode.removeChild(C);}}};var FCKPageBreaksProcessor=FCKDocumentProcessor.AppendNew();FCKPageBreaksProcessor.ProcessDocument=function(A){var B=A.getElementsByTagName('DIV');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){if (C.style.pageBreakAfter=='always'&&C.childNodes.length==1&&C.childNodes[0].style&&C.childNodes[0].style.display=='none'){var D=FCKDocumentProcessor_CreateFakeImage('FCK__PageBreak',C.cloneNode(true));C.parentNode.insertBefore(D,C);C.parentNode.removeChild(C);}}};var FCKFlashProcessor=FCKDocumentProcessor.AppendNew();FCKFlashProcessor.ProcessDocument=function(A){var B=A.getElementsByTagName('EMBED');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){if (C.src.endsWith('.swf',true)){var D=C.cloneNode(true);if (FCKBrowserInfo.IsIE){var E;if (E=C.getAttribute('scale')) D.setAttribute('scale',E);if (E=C.getAttribute('play')) D.setAttribute('play',E);if (E=C.getAttribute('loop')) D.setAttribute('loop',E);if (E=C.getAttribute('menu')) D.setAttribute('menu',E);if (E=C.getAttribute('wmode')) D.setAttribute('wmode',E);if (E=C.getAttribute('quality')) D.setAttribute('quality',E);};var F=FCKDocumentProcessor_CreateFakeImage('FCK__Flash',D);F.setAttribute('_fckflash','true',0);FCKFlashProcessor.RefreshView(F,C);C.parentNode.insertBefore(F,C);C.parentNode.removeChild(C);}}};FCKFlashProcessor.RefreshView=function(A,B){if (B.width>0) A.style.width=FCKTools.ConvertHtmlSizeToStyle(B.width);if (B.height>0) A.style.height=FCKTools.ConvertHtmlSizeToStyle(B.height);};FCK.GetRealElement=function(A){var e=FCKTempBin.Elements[A.getAttribute('_fckrealelement')];if (A.getAttribute('_fckflash')){if (A.style.width.length>0) e.width=FCKTools.ConvertStyleSizeToHtml(A.style.width);if (A.style.height.length>0) e.height=FCKTools.ConvertStyleSizeToHtml(A.style.height);};return e;}; |
var FCK_StartupValue;FCK.Events=new FCKEvents(FCK);FCK.Toolbar=null;FCK.HasFocus=false;FCK.StartEditor=function(){FCK.TempBaseTag=FCKConfig.BaseHref.length>0?'<base href="'+FCKConfig.BaseHref+'" _fcktemp="true"></base>':'';FCK.EditingArea=new FCKEditingArea(document.getElementById('xEditingArea'));this.SetHTML(FCKTools.GetLinkedFieldValue());};FCK.Focus=function(){FCK.EditingArea.Focus();};FCK.SetStatus=function(A){this.Status=A;if (A==FCK_STATUS_ACTIVE){FCKFocusManager.AddWindow(window,true);if (FCKBrowserInfo.IsIE) FCKFocusManager.AddWindow(window.frameElement,true);if (FCKConfig.StartupFocus) FCK.Focus();};this.Events.FireEvent('OnStatusChange',A);};FCK.GetHTML=FCK.GetXHTML=function(A){if (FCK.EditMode==FCK_EDITMODE_SOURCE) return FCK.EditingArea.Textarea.value;var B;var C=FCK.EditorDocument;if (FCKConfig.FullPage) B=FCKXHtml.GetXHTML(C.getElementsByTagName('html')[0],true,A);else{if (FCKConfig.IgnoreEmptyParagraphValue&&C.body.innerHTML=='<P> </P>') B='';else B=FCKXHtml.GetXHTML(C.body,false,A);};B=FCK.ProtectEventsRestore(B);if (FCKBrowserInfo.IsIE) B=B.replace(FCKRegexLib.ToReplace,'$1');if (FCK.DocTypeDeclaration&&FCK.DocTypeDeclaration.length>0) B=FCK.DocTypeDeclaration+'\n'+B;if (FCK.XmlDeclaration&&FCK.XmlDeclaration.length>0) B=FCK.XmlDeclaration+'\n'+B;return FCKConfig.ProtectedSource.Revert(B);};FCK.UpdateLinkedField=function(){FCK.LinkedField.value=FCK.GetXHTML(FCKConfig.FormatOutput);FCK.Events.FireEvent('OnAfterLinkedFieldUpdate');};FCK.RegisteredDoubleClickHandlers=new Object();FCK.OnDoubleClick=function(A){var B=FCK.RegisteredDoubleClickHandlers[A.tagName];if (B) B(A);};FCK.RegisterDoubleClickHandler=function(A,B){FCK.RegisteredDoubleClickHandlers[B.toUpperCase()]=A;};FCK.OnAfterSetHTML=function(){FCKDocumentProcessor.Process(FCK.EditorDocument);FCKUndo.SaveUndoStep();FCK.Events.FireEvent('OnSelectionChange');FCK.Events.FireEvent('OnAfterSetHTML');};FCK.ProtectUrls=function(A){A=A.replace(FCKRegexLib.ProtectUrlsA,'$1$4$2$3$5$2 _fcksavedurl=$2$3$5$2');A=A.replace(FCKRegexLib.ProtectUrlsImg,'$1$4$2$3$5$2 _fcksavedurl=$2$3$5$2');return A;};FCK.ProtectEvents=function(A){return A.replace(FCKRegexLib.TagsWithEvent,_FCK_ProtectEvents_ReplaceTags);};function _FCK_ProtectEvents_ReplaceTags(tagMatch){return tagMatch.replace(FCKRegexLib.EventAttributes,_FCK_ProtectEvents_ReplaceEvents);};function _FCK_ProtectEvents_ReplaceEvents(eventMatch,attName){return ' '+attName+'_fckprotectedatt="'+eventMatch.ReplaceAll([/&/g,/'/g,/"/g,/=/g,/</g,/>/g,/\r/g,/\n/g],[''',''','"','=','<','>',' ',' '])+'"';};FCK.ProtectEventsRestore=function(A){return A.replace(FCKRegexLib.ProtectedEvents,_FCK_ProtectEvents_RestoreEvents);};function _FCK_ProtectEvents_RestoreEvents(match,encodedOriginal){return encodedOriginal.ReplaceAll([/'/g,/"/g,/=/g,/</g,/>/g,/ /g,/ /g,/'/g],["'",'"','=','<','>','\r','\n','&']);};FCK.IsDirty=function(){return (FCK_StartupValue!=FCK.EditorDocument.body.innerHTML);};FCK.ResetIsDirty=function(){if (FCK.EditorDocument.body) FCK_StartupValue=FCK.EditorDocument.body.innerHTML;};FCK.SetHTML=function(A){this.EditingArea.Mode=FCK.EditMode;if (FCK.EditMode==FCK_EDITMODE_WYSIWYG){A=FCKConfig.ProtectedSource.Protect(A);A=FCK.ProtectEvents(A);A=FCK.ProtectUrls(A);if (FCKBrowserInfo.IsGecko){A=A.replace(FCKRegexLib.StrongOpener,'<b$1');A=A.replace(FCKRegexLib.StrongCloser,'<\/b>');A=A.replace(FCKRegexLib.EmOpener,'<i$1');A=A.replace(FCKRegexLib.EmCloser,'<\/i>');}else if (FCKBrowserInfo.IsIE){A=A.replace(FCKRegexLib.AbbrOpener,'<FCK:abbr$1');A=A.replace(FCKRegexLib.AbbrCloser,'<\/FCK:abbr>');};var B='';if (FCKConfig.FullPage){if (!FCKRegexLib.HeadOpener.test(A)){if (!FCKRegexLib.HtmlOpener.test(A)) A='<html dir="'+FCKConfig.ContentLangDirection+'">'+A+'</html>';A=A.replace(FCKRegexLib.HtmlOpener,'$&<head></head>');};FCK.DocTypeDeclaration=A.match(FCKRegexLib.DocTypeTag);if (FCKBrowserInfo.IsIE) B=FCK._GetBehaviorsStyle();else if (FCKConfig.ShowBorders) B='<link href="'+FCKConfig.FullBasePath+'css/fck_showtableborders_gecko.css" rel="stylesheet" type="text/css" _fcktemp="true" />';B+='<link href="'+FCKConfig.FullBasePath+'css/fck_internal.css'+'" rel="stylesheet" type="text/css" _fcktemp="true" />';B=A.replace(FCKRegexLib.HeadCloser,B+'$&');if (FCK.TempBaseTag.length>0&&!FCKRegexLib.HasBaseTag.test(A)) B=B.replace(FCKRegexLib.HeadOpener,'$&'+FCK.TempBaseTag);}else{B=FCKConfig.DocType+'<html dir="'+FCKConfig.ContentLangDirection+'"';if (FCKBrowserInfo.IsIE&&!FCKRegexLib.Html4DocType.test(FCKConfig.DocType)) B+=' style="overflow-y: scroll"';B+='><head><title></title>'+this._GetEditorAreaStyleTags()+'<link href="'+FCKConfig.FullBasePath+'css/fck_internal.css'+'" rel="stylesheet" type="text/css" _fcktemp="true" />';if (FCKBrowserInfo.IsIE) B+=FCK._GetBehaviorsStyle();else if (FCKConfig.ShowBorders) B+='<link href="'+FCKConfig.FullBasePath+'css/fck_showtableborders_gecko.css" rel="stylesheet" type="text/css" _fcktemp="true" />';B+=FCK.TempBaseTag;B+='</head><body>';if (FCKBrowserInfo.IsGecko&&(A.length==0||FCKRegexLib.EmptyParagraph.test(A))) B+=GECKO_BOGUS;else B+=A;B+='</body></html>';};this.EditingArea.OnLoad=FCK_EditingArea_OnLoad;this.EditingArea.Start(B);}else{this.EditingArea.OnLoad=null;this.EditingArea.Start(A);this.EditingArea.Textarea._FCKShowContextMenu=true;};if (FCKBrowserInfo.IsGecko) window.onresize();};function FCK_EditingArea_OnLoad(){FCK.EditorWindow=FCK.EditingArea.Window;FCK.EditorDocument=FCK.EditingArea.Document;FCK.InitializeBehaviors();FCK.OnAfterSetHTML();if (FCK.Status!=FCK_STATUS_NOTLOADED) return;FCK.ResetIsDirty();FCKTools.AttachToLinkedFieldFormSubmit(FCK.UpdateLinkedField);FCK.SetStatus(FCK_STATUS_ACTIVE);};FCK._GetEditorAreaStyleTags=function(){var A='';var B=FCKConfig.EditorAreaCSS;for (var i=0;i<B.length;i++) A+='<link href="'+B[i]+'" rel="stylesheet" type="text/css" />';return A;};var FCKFocusManager=FCK.FocusManager=new Object();FCKFocusManager.IsLocked=false;FCK.HasFocus=false;FCKFocusManager.AddWindow=function(A,B){var C;if (FCKBrowserInfo.IsIE) C=A.nodeType==1?A:A.frameElement?A.frameElement:A.document;else C=A.document;FCKTools.AddEventListener(C,'blur',FCKFocusManager_Win_OnBlur);FCKTools.AddEventListener(C,'focus',B?FCKFocusManager_Win_OnFocus_Area:FCKFocusManager_Win_OnFocus);};FCKFocusManager.RemoveWindow=function(A){if (FCKBrowserInfo.IsIE) oTarget=A.nodeType==1?A:A.frameElement?A.frameElement:A.document;else oTarget=A.document;FCKTools.RemoveEventListener(oTarget,'blur',FCKFocusManager_Win_OnBlur);FCKTools.RemoveEventListener(oTarget,'focus',FCKFocusManager_Win_OnFocus_Area);FCKTools.RemoveEventListener(oTarget,'focus',FCKFocusManager_Win_OnFocus);};FCKFocusManager.Lock=function(){this.IsLocked=true;};FCKFocusManager.Unlock=function(){if (this._HasPendingBlur) FCKFocusManager._Timer=window.setTimeout(FCKFocusManager_FireOnBlur,100);this.IsLocked=false;};FCKFocusManager._ResetTimer=function(){this._HasPendingBlur=false;if (this._Timer){window.clearTimeout(this._Timer);delete this._Timer;}};function FCKFocusManager_Win_OnBlur(){if (typeof(FCK)!='undefined'&&FCK.HasFocus){FCKFocusManager._ResetTimer();FCKFocusManager._Timer=window.setTimeout(FCKFocusManager_FireOnBlur,100);}};function FCKFocusManager_FireOnBlur(){if (FCKFocusManager.IsLocked) FCKFocusManager._HasPendingBlur=true;else{FCK.HasFocus=false;FCK.Events.FireEvent("OnBlur");}};function FCKFocusManager_Win_OnFocus_Area(){FCKFocusManager_Win_OnFocus();FCK.Focus();};function FCKFocusManager_Win_OnFocus(){FCKFocusManager._ResetTimer();if (!FCK.HasFocus&&!FCKFocusManager.IsLocked){FCK.HasFocus=true;FCK.Events.FireEvent("OnFocus");}} |
FCK.Description="FCKeditor for Internet Explorer 5.5+";FCK._GetBehaviorsStyle=function(){if (!FCK._BehaviorsStyle){var A=FCKConfig.FullBasePath;var B='';var C;C='<style type="text/css" _fcktemp="true">'+'INPUT { behavior: url('+A+'css/behaviors/hiddenfield.htc) ; }';if (FCKConfig.ShowBorders) B='url('+A+'css/behaviors/showtableborders.htc)';C+='INPUT,TEXTAREA,SELECT,.FCK__Anchor,.FCK__PageBreak';if (FCKConfig.DisableObjectResizing){C+=',IMG';B+=' url('+A+'css/behaviors/disablehandles.htc)';};C+=' { behavior: url('+A+'css/behaviors/disablehandles.htc) ; }';if (B.length>0) C+='TABLE { behavior: '+B+' ; }';C+='</style>';FCK._BehaviorsStyle=C;};return FCK._BehaviorsStyle;};function Doc_OnMouseUp(){if (FCK.EditorWindow.event.srcElement.tagName=='HTML'){FCK.Focus();FCK.EditorWindow.event.cancelBubble=true;FCK.EditorWindow.event.returnValue=false;}};function Doc_OnPaste(){if (FCK.Status==FCK_STATUS_COMPLETE) FCK.Events.FireEvent("OnPaste");return false;};function Doc_OnKeyDown(){var e=FCK.EditorWindow.event;switch (e.keyCode){case 13:if (FCKConfig.UseBROnCarriageReturn&&!(e.ctrlKey||e.altKey||e.shiftKey)){Doc_OnKeyDownUndo();if (FCK.EditorDocument.queryCommandState('InsertOrderedList')||FCK.EditorDocument.queryCommandState('InsertUnorderedList')) return true;FCK.InsertHtml('<br> ');var oRange=FCK.EditorDocument.selection.createRange();oRange.moveStart('character',-1);oRange.select();FCK.EditorDocument.selection.clear();return false;};break;case 8:if (FCKSelection.GetType()=='Control'){FCKSelection.Delete();return false;};break;case 9:if (FCKConfig.TabSpaces>0&&!(e.ctrlKey||e.altKey||e.shiftKey)){Doc_OnKeyDownUndo();FCK.InsertHtml(window.FCKTabHTML);return false;};break;case 90:if (e.ctrlKey&&!(e.altKey||e.shiftKey)){FCKUndo.Undo();return false;};break;case 89:if (e.ctrlKey&&!(e.altKey||e.shiftKey)){FCKUndo.Redo();return false;};break;};if (!(e.keyCode>=16&&e.keyCode<=18)) Doc_OnKeyDownUndo();return true;};function Doc_OnKeyDownUndo(){if (!FCKUndo.Typing){FCKUndo.SaveUndoStep();FCKUndo.Typing=true;FCK.Events.FireEvent("OnSelectionChange");};FCKUndo.TypesCount++;if (FCKUndo.TypesCount>FCKUndo.MaxTypes){FCKUndo.TypesCount=0;FCKUndo.SaveUndoStep();}};function Doc_OnDblClick(){FCK.OnDoubleClick(FCK.EditorWindow.event.srcElement);FCK.EditorWindow.event.cancelBubble=true;};function Doc_OnSelectionChange(){FCK.Events.FireEvent("OnSelectionChange");};FCK.InitializeBehaviors=function(A){this.EditorDocument.attachEvent('onmouseup',Doc_OnMouseUp);this.EditorDocument.body.attachEvent('onpaste',Doc_OnPaste);FCK.ContextMenu._InnerContextMenu.AttachToElement(FCK.EditorDocument.body);if (FCKConfig.TabSpaces>0){window.FCKTabHTML='';for (i=0;i<FCKConfig.TabSpaces;i++) window.FCKTabHTML+=" ";};this.EditorDocument.attachEvent("onkeydown",Doc_OnKeyDown);this.EditorDocument.attachEvent("ondblclick",Doc_OnDblClick);this.EditorDocument.attachEvent("onselectionchange",Doc_OnSelectionChange);};FCK.InsertHtml=function(A){A=FCKConfig.ProtectedSource.Protect(A);A=FCK.ProtectUrls(A);FCK.Focus();FCKUndo.SaveUndoStep();var B=FCK.EditorDocument.selection;if (B.type.toLowerCase()=='control') B.clear();B.createRange().pasteHTML(A);FCKDocumentProcessor.Process(FCK.EditorDocument);};FCK.SetInnerHtml=function(A){var B=FCK.EditorDocument;B.body.innerHTML='<div id="__fakeFCKRemove__"> </div>'+A;B.getElementById('__fakeFCKRemove__').removeNode(true);};var FCK_PreloadImages_Count=0;var FCK_PreloadImages_Images=new Array();function FCK_PreloadImages(){var aImages=FCKConfig.PreloadImages||[];if (typeof(aImages)=='string') aImages=aImages.split(';');aImages.push(FCKConfig.SkinPath+'fck_strip.gif');FCK_PreloadImages_Count=aImages.length;var aImageElements=new Array();for (var i=0;i<aImages.length;i++){var eImg=document.createElement('img');eImg.onload=eImg.onerror=FCK_PreloadImages_OnImage;eImg.src=aImages[i];FCK_PreloadImages_Images[i]=eImg;}};function FCK_PreloadImages_OnImage(){if ((--FCK_PreloadImages_Count)==0) FCKTools.RunFunction(LoadToolbarSetup);};function Document_OnContextMenu(){return (event.srcElement._FCKShowContextMenu==true);};document.oncontextmenu=Document_OnContextMenu;function FCK_Cleanup(){this.EditorWindow=null;this.EditorDocument=null;} |
FCK.RedirectNamedCommands=new Object();FCK.ExecuteNamedCommand=function(A,B,C){FCKUndo.SaveUndoStep();if (!C&&FCK.RedirectNamedCommands[A]!=null) FCK.ExecuteRedirectedNamedCommand(A,B);else{FCK.Focus();FCK.EditorDocument.execCommand(A,false,B);FCK.Events.FireEvent('OnSelectionChange');};FCKUndo.SaveUndoStep();};FCK.GetNamedCommandState=function(A){try{if (!FCK.EditorDocument.queryCommandEnabled(A)) return FCK_TRISTATE_DISABLED;else return FCK.EditorDocument.queryCommandState(A)?FCK_TRISTATE_ON:FCK_TRISTATE_OFF;}catch (e){return FCK_TRISTATE_OFF;}};FCK.GetNamedCommandValue=function(A){var B='';var C=FCK.GetNamedCommandState(A);if (C==FCK_TRISTATE_DISABLED) return null;try{B=this.EditorDocument.queryCommandValue(A);}catch(e) {};return B?B:'';};FCK.PasteFromWord=function(){FCKDialog.OpenDialog('FCKDialog_Paste',FCKLang.PasteFromWord,'dialog/fck_paste.html',400,330,'Word');};FCK.Preview=function(){var A=FCKConfig.ScreenWidth*0.8;var B=FCKConfig.ScreenHeight*0.7;var C=(FCKConfig.ScreenWidth-A)/2;var D=window.open('',null,'toolbar=yes,location=no,status=yes,menubar=yes,scrollbars=yes,resizable=yes,width='+A+',height='+B+',left='+C);var E;if (FCKConfig.FullPage){if (FCK.TempBaseTag.length>0) E=FCK.TempBaseTag+FCK.GetXHTML();else E=FCK.GetXHTML();}else{E=FCKConfig.DocType+'<html dir="'+FCKConfig.ContentLangDirection+'">'+'<head>'+FCK.TempBaseTag+'<title>'+FCKLang.Preview+'</title>'+FCK._GetEditorAreaStyleTags()+'</head><body>'+FCK.GetXHTML()+'</body></html>';};D.document.write(E);D.document.close();};FCK.SwitchEditMode=function(A){var B=(FCK.EditMode==FCK_EDITMODE_WYSIWYG);var C;if (B){if (!A&&FCKBrowserInfo.IsIE) FCKUndo.SaveUndoStep();C=FCK.GetXHTML(FCKConfig.FormatSource);}else C=this.EditingArea.Textarea.value;FCK.EditMode=B?FCK_EDITMODE_SOURCE:FCK_EDITMODE_WYSIWYG;FCK.SetHTML(C);FCK.Focus();FCKTools.RunFunction(FCK.ToolbarSet.RefreshModeState,FCK.ToolbarSet);};FCK.CreateElement=function(A){var e=FCK.EditorDocument.createElement(A);return FCK.InsertElementAndGetIt(e);};FCK.InsertElementAndGetIt=function(e){e.setAttribute('FCKTempLabel','true');this.InsertElement(e);var A=FCK.EditorDocument.getElementsByTagName(e.tagName);for (var i=0;i<A.length;i++){if (A[i].getAttribute('FCKTempLabel')){A[i].removeAttribute('FCKTempLabel');return A[i];}};return null;}; |
FCK.Paste=function(){if (FCKConfig.ForcePasteAsPlainText){FCK.PasteAsPlainText();return;};var A=FCK.GetClipboardHTML();if (FCKConfig.AutoDetectPasteFromWord){var B=/<\w[^>]*(( class="?MsoNormal"?)|(="mso-))/gi;if (B.test(A)){if (confirm(FCKLang["PasteWordConfirm"])){FCK.PasteFromWord();return;}}};FCK.InsertHtml(A);};FCK.PasteAsPlainText=function(){var A=FCKTools.HTMLEncode(clipboardData.getData("Text"));A=A.replace(/\n/g,'<BR>');this.InsertHtml(A);};FCK.InsertElement=function(A){FCK.InsertHtml(A.outerHTML);};FCK.GetClipboardHTML=function(){var A=document.getElementById('___FCKHiddenDiv');if (!A){var A=document.createElement('DIV');A.id='___FCKHiddenDiv';A.style.visibility='hidden';A.style.overflow='hidden';A.style.position='absolute';A.style.width=1;A.style.height=1;document.body.appendChild(A);};A.innerHTML='';var C=document.body.createTextRange();C.moveToElementText(A);C.execCommand('Paste');var D=A.innerHTML;A.innerHTML='';return D;};FCK.AttachToOnSelectionChange=function(A){this.Events.AttachEvent('OnSelectionChange',A);};FCK.CreateLink=function(A){FCK.ExecuteNamedCommand('Unlink');if (A.length>0){var B='javascript:void(0);/*'+(new Date().getTime())+'*/';FCK.ExecuteNamedCommand('CreateLink',B);var C=this.EditorDocument.links;for (i=0;i<C.length;i++){var D=C[i];if (D.href==B){var E=D.innerHTML;D.href=A;D.innerHTML=E;return D;}}}}; |
var FCKSelection=FCK.Selection=new Object(); |
FCKSelection.GetType=function(){return FCK.EditorDocument.selection.type;};FCKSelection.GetSelectedElement=function(){if (this.GetType()=='Control'){var A=FCK.EditorDocument.selection.createRange();if (A&&A.item) return FCK.EditorDocument.selection.createRange().item(0);}};FCKSelection.GetParentElement=function(){switch (this.GetType()){case 'Control':return FCKSelection.GetSelectedElement().parentElement;case 'None':return;default:return FCK.EditorDocument.selection.createRange().parentElement();}};FCKSelection.SelectNode=function(A){FCK.Focus();FCK.EditorDocument.selection.empty();try{var B=FCK.EditorDocument.body.createControlRange();B.addElement(A);}catch(e){var B=FCK.EditorDocument.selection.createRange();B.moveToElementText(A);};B.select();};FCKSelection.Collapse=function(A){FCK.Focus();if (this.GetType()=='Text'){var B=FCK.EditorDocument.selection.createRange();B.collapse(A==null||A===true);B.select();}};FCKSelection.HasAncestorNode=function(A){var B;if (FCK.EditorDocument.selection.type=="Control"){B=this.GetSelectedElement();}else{var C=FCK.EditorDocument.selection.createRange();B=C.parentElement();};while (B){if (B.tagName==A) return true;B=B.parentNode;};return false;};FCKSelection.MoveToAncestorNode=function(A){var B;if (FCK.EditorDocument.selection.type=="Control"){var C=FCK.EditorDocument.selection.createRange();for (i=0;i<C.length;i++){if (C(i).parentNode){B=C(i).parentNode;break;}}}else{var C=FCK.EditorDocument.selection.createRange();B=C.parentElement();};while (B&&B.nodeName!=A) B=B.parentNode;return B;};FCKSelection.Delete=function(){var A=FCK.EditorDocument.selection;if (A.type.toLowerCase()!="none"){A.clear();};return A;}; |
var FCKTableHandler=new Object();FCKTableHandler.InsertRow=function(){var A=FCKSelection.MoveToAncestorNode("TR");if (!A) return;var B=A.cloneNode(true);A.parentNode.insertBefore(B,A);FCKTableHandler.ClearRow(A);};FCKTableHandler.DeleteRows=function(A){if (!A) A=FCKSelection.MoveToAncestorNode("TR");if (!A) return;var B=FCKTools.GetElementAscensor(A,'TABLE');if (B.rows.length==1){FCKTableHandler.DeleteTable(B);return;};A.parentNode.removeChild(A);};FCKTableHandler.DeleteTable=function(A){if (!A){var A=FCKSelection.GetSelectedElement();if (!A||A.tagName!='TABLE') A=FCKSelection.MoveToAncestorNode("TABLE");};if (!A) return;FCKSelection.SelectNode(A);FCKSelection.Collapse();A.parentNode.removeChild(A);};FCKTableHandler.InsertColumn=function(){var A=FCKSelection.MoveToAncestorNode("TD");if (!A) A=FCKSelection.MoveToAncestorNode("TH");if (!A) return;var B=FCKTools.GetElementAscensor(A,'TABLE');var C=A.cellIndex+1;for (var i=0;i<B.rows.length;i++){var D=B.rows[i];if (D.cells.length<C) continue;A=D.cells[C-1].cloneNode(false);if (FCKBrowserInfo.IsGecko) A.innerHTML=GECKO_BOGUS;var E=D.cells[C];if (E) D.insertBefore(A,E);else D.appendChild(A);}};FCKTableHandler.DeleteColumns=function(){var A=FCKSelection.MoveToAncestorNode('TD')||FCKSelection.MoveToAncestorNode('TH');if (!A) return;var B=FCKTools.GetElementAscensor(A,'TABLE');var C=A.cellIndex;for (var i=B.rows.length-1;i>=0;i--){var D=B.rows[i];if (C==0&&D.cells.length==1){FCKTableHandler.DeleteRows(D);continue;};if (D.cells[C]) D.removeChild(D.cells[C]);}};FCKTableHandler.InsertCell=function(A){var B=A?A:FCKSelection.MoveToAncestorNode("TD");if (!B) return;var C=FCK.EditorDocument.createElement("TD");if (FCKBrowserInfo.IsGecko) C.innerHTML=GECKO_BOGUS;if (B.cellIndex==B.parentNode.cells.length-1){B.parentNode.appendChild(C);}else{B.parentNode.insertBefore(C,B.nextSibling);};return C;};FCKTableHandler.DeleteCell=function(A){if (A.parentNode.cells.length==1){FCKTableHandler.DeleteRows(FCKTools.GetElementAscensor(A,'TR'));return;};A.parentNode.removeChild(A);};FCKTableHandler.DeleteCells=function(){var A=FCKTableHandler.GetSelectedCells();for (var i=A.length-1;i>=0;i--){FCKTableHandler.DeleteCell(A[i]);}};FCKTableHandler.MergeCells=function(){var A=FCKTableHandler.GetSelectedCells();if (A.length<2) return;if (A[0].parentNode!=A[A.length-1].parentNode) return;var B=isNaN(A[0].colSpan)?1:A[0].colSpan;var C='';var D=FCK.EditorDocument.createDocumentFragment();for (var i=A.length-1;i>=0;i--){var E=A[i];for (var c=E.childNodes.length-1;c>=0;c--){var F=E.removeChild(E.childNodes[c]);if ((F.hasAttribute&&F.hasAttribute('_moz_editor_bogus_node'))||(F.getAttribute&&F.getAttribute('type',2)=='_moz')) continue;D.insertBefore(F,D.firstChild);};if (i>0){B+=isNaN(E.colSpan)?1:E.colSpan;FCKTableHandler.DeleteCell(E);}};A[0].colSpan=B;if (FCKBrowserInfo.IsGecko&&D.childNodes.length==0) A[0].innerHTML=GECKO_BOGUS;else A[0].appendChild(D);};FCKTableHandler.SplitCell=function(){var A=FCKTableHandler.GetSelectedCells();if (A.length!=1) return;var B=this._CreateTableMap(A[0].parentNode.parentNode);var C=FCKTableHandler._GetCellIndexSpan(B,A[0].parentNode.rowIndex,A[0]);var D=this._GetCollumnCells(B,C);for (var i=0;i<D.length;i++){if (D[i]==A[0]){var E=this.InsertCell(A[0]);if (!isNaN(A[0].rowSpan)&&A[0].rowSpan>1) E.rowSpan=A[0].rowSpan;}else{if (isNaN(D[i].colSpan)) D[i].colSpan=2;else D[i].colSpan+=1;}}};FCKTableHandler._GetCellIndexSpan=function(A,B,C){if (A.length<B+1) return null;var D=A[B];for (var c=0;c<D.length;c++){if (D[c]==C) return c;};return null;};FCKTableHandler._GetCollumnCells=function(A,B){var C=new Array();for (var r=0;r<A.length;r++){var D=A[r][B];if (D&&(C.length==0||C[C.length-1]!=D)) C[C.length]=D;};return C;};FCKTableHandler._CreateTableMap=function(A){var B=A.rows;var r=-1;var C=new Array();for (var i=0;i<B.length;i++){r++;if (!C[r]) C[r]=new Array();var c=-1;for (var j=0;j<B[i].cells.length;j++){var D=B[i].cells[j];c++;while (C[r][c]) c++;var E=isNaN(D.colSpan)?1:D.colSpan;var F=isNaN(D.rowSpan)?1:D.rowSpan;for (var G=0;G<F;G++){if (!C[r+G]) C[r+G]=new Array();for (var H=0;H<E;H++){C[r+G][c+H]=B[i].cells[j];}};c+=E-1;}};return C;};FCKTableHandler.ClearRow=function(A){var B=A.cells;for (var i=0;i<B.length;i++){if (FCKBrowserInfo.IsGecko) B[i].innerHTML=GECKO_BOGUS;else B[i].innerHTML='';}}; |
FCKTableHandler.GetSelectedCells=function(){var A=new Array();var B=FCK.EditorDocument.selection.createRange();var C=FCKSelection.GetParentElement();if (C&&C.tagName.Equals('TD','TH')) A[0]=C;else{var C=FCKSelection.MoveToAncestorNode("TABLE");if (C){for (var i=0;i<C.cells.length;i++){var E=FCK.EditorDocument.selection.createRange();E.moveToElementText(C.cells[i]);if (B.inRange(E)||(B.compareEndPoints('StartToStart',E)>=0&&B.compareEndPoints('StartToEnd',E)<=0)||(B.compareEndPoints('EndToStart',E)>=0&&B.compareEndPoints('EndToEnd',E)<=0)){A[A.length]=C.cells[i];}}}};return A;}; |
var FCKXml=function(){this.Error=false;};FCKXml.prototype.LoadUrl=function(A){this.Error=false;var B=FCKTools.CreateXmlObject('XmlHttp');if (!B){this.Error=true;return;};B.open("GET",A,false);B.send(null);if (B.status==200||B.status==304) this.DOMDocument=B.responseXML;else if (B.status==0&&B.readyState==4){this.DOMDocument=FCKTools.CreateXmlObject('DOMDocument');this.DOMDocument.async=false;this.DOMDocument.resolveExternals=false;this.DOMDocument.loadXML(B.responseText);}else{this.Error=true;alert('Error loading "'+A+'"');}};FCKXml.prototype.SelectNodes=function(A,B){if (this.Error) return new Array();if (B) return B.selectNodes(A);else return this.DOMDocument.selectNodes(A);};FCKXml.prototype.SelectSingleNode=function(A,B){if (this.Error) return;if (B) return B.selectSingleNode(A);else return this.DOMDocument.selectSingleNode(A);} |
var FCKStyleDef=function(A,B){this.Name=A;this.Element=B.toUpperCase();this.IsObjectElement=FCKRegexLib.ObjectElements.test(this.Element);this.Attributes=new Object();};FCKStyleDef.prototype.AddAttribute=function(A,B){this.Attributes[A]=B;};FCKStyleDef.prototype.GetOpenerTag=function(){var s='<'+this.Element;for (var a in this.Attributes) s+=' '+a+'="'+this.Attributes[a]+'"';return s+'>';};FCKStyleDef.prototype.GetCloserTag=function(){return '</'+this.Element+'>';};FCKStyleDef.prototype.RemoveFromSelection=function(){if (FCKSelection.GetType()=='Control') this._RemoveMe(FCK.ToolbarSet.CurrentInstance.Selection.GetSelectedElement());else this._RemoveMe(FCK.ToolbarSet.CurrentInstance.Selection.GetParentElement());} |
FCKStyleDef.prototype.ApplyToSelection=function(){var A=FCK.ToolbarSet.CurrentInstance.EditorDocument.selection;if (A.type=='Text'){var B=A.createRange();var e=document.createElement(this.Element);e.innerHTML=B.htmlText;this._AddAttributes(e);this._RemoveDuplicates(e);B.pasteHTML(e.outerHTML);}else if (A.type=='Control'){var C=FCK.ToolbarSet.CurrentInstance.Selection.GetSelectedElement();if (C.tagName==this.Element) this._AddAttributes(C);}};FCKStyleDef.prototype._AddAttributes=function(A){for (var a in this.Attributes){switch (a.toLowerCase()){case 'style':A.style.cssText=this.Attributes[a];break;case 'class':A.setAttribute('className',this.Attributes[a],0);break;case 'src':A.setAttribute('_fcksavedurl',this.Attributes[a],0);default:A.setAttribute(a,this.Attributes[a],0);}}};FCKStyleDef.prototype._RemoveDuplicates=function(A){for (var i=0;i<A.children.length;i++){var B=A.children[i];this._RemoveDuplicates(B);if (this.IsEqual(B)) FCKTools.RemoveOuterTags(B);}};FCKStyleDef.prototype.IsEqual=function(e){if (e.tagName!=this.Element) return false;for (var a in this.Attributes){switch (a.toLowerCase()){case 'style':if (e.style.cssText.toLowerCase()!=this.Attributes[a].toLowerCase()) return false;break;case 'class':if (e.getAttribute('className',0)!=this.Attributes[a]) return false;break;default:if (e.getAttribute(a,0)!=this.Attributes[a]) return false;}};return true;};FCKStyleDef.prototype._RemoveMe=function(A){if (!A) return;var B=A.parentElement;if (this.IsEqual(A)){if (this.IsObjectElement){for (var a in this.Attributes){switch (a.toLowerCase()){case 'class':A.removeAttribute('className',0);break;default:A.removeAttribute(a,0);}};return;}else FCKTools.RemoveOuterTags(A);};this._RemoveMe(B);} |
var FCKStylesLoader=function(){this.Styles=new Object();this.StyleGroups=new Object();this.Loaded=false;this.HasObjectElements=false;};FCKStylesLoader.prototype.Load=function(A){var B=new FCKXml();B.LoadUrl(A);var C=B.SelectNodes('Styles/Style');for (var i=0;i<C.length;i++){var D=C[i].attributes.getNamedItem('element').value.toUpperCase();var E=new FCKStyleDef(C[i].attributes.getNamedItem('name').value,D);if (E.IsObjectElement) this.HasObjectElements=true;var F=B.SelectNodes('Attribute',C[i]);for (var j=0;j<F.length;j++){var G=F[j].attributes.getNamedItem('name').value;var H=F[j].attributes.getNamedItem('value').value;if (G.toLowerCase()=='style'){var I=document.createElement('SPAN');I.style.cssText=H;H=I.style.cssText;};E.AddAttribute(G,H);};this.Styles[E.Name]=E;var J=this.StyleGroups[D];if (J==null){this.StyleGroups[D]=new Array();J=this.StyleGroups[D];};J[J.length]=E;};this.Loaded=true;} |
var FCKNamedCommand=function(A){this.Name=A;};FCKNamedCommand.prototype.Execute=function(){FCK.ExecuteNamedCommand(this.Name);};FCKNamedCommand.prototype.GetState=function(){return FCK.GetNamedCommandState(this.Name);}; |
var FCKDialogCommand=function(A,B,C,D,E,F,G){this.Name=A;this.Title=B;this.Url=C;this.Width=D;this.Height=E;this.GetStateFunction=F;this.GetStateParam=G;};FCKDialogCommand.prototype.Execute=function(){FCKDialog.OpenDialog('FCKDialog_'+this.Name,this.Title,this.Url,this.Width,this.Height);};FCKDialogCommand.prototype.GetState=function(){if (this.GetStateFunction) return this.GetStateFunction(this.GetStateParam);else return FCK_TRISTATE_OFF;};var FCKUndefinedCommand=function(){this.Name='Undefined';};FCKUndefinedCommand.prototype.Execute=function(){alert(FCKLang.NotImplemented);};FCKUndefinedCommand.prototype.GetState=function(){return FCK_TRISTATE_OFF;};var FCKFontNameCommand=function(){this.Name='FontName';};FCKFontNameCommand.prototype.Execute=function(A){if (A==null||A==""){}else FCK.ExecuteNamedCommand('FontName',A);};FCKFontNameCommand.prototype.GetState=function(){return FCK.GetNamedCommandValue('FontName');};var FCKFontSizeCommand=function(){this.Name='FontSize';};FCKFontSizeCommand.prototype.Execute=function(A){if (typeof(A)=='string') A=parseInt(A);if (A==null||A==''){FCK.ExecuteNamedCommand('FontSize',3);}else FCK.ExecuteNamedCommand('FontSize',A);};FCKFontSizeCommand.prototype.GetState=function(){return FCK.GetNamedCommandValue('FontSize');};var FCKFormatBlockCommand=function(){this.Name='FormatBlock';};FCKFormatBlockCommand.prototype.Execute=function(A){if (A==null||A=='') FCK.ExecuteNamedCommand('FormatBlock','<P>');else if (A=='div'&&FCKBrowserInfo.IsGecko) FCK.ExecuteNamedCommand('FormatBlock','div');else FCK.ExecuteNamedCommand('FormatBlock','<'+A+'>');};FCKFormatBlockCommand.prototype.GetState=function(){return FCK.GetNamedCommandValue('FormatBlock');};var FCKPreviewCommand=function(){this.Name='Preview';};FCKPreviewCommand.prototype.Execute=function(){FCK.Preview();};FCKPreviewCommand.prototype.GetState=function(){return FCK_TRISTATE_OFF;};var FCKSaveCommand=function(){this.Name='Save';};FCKSaveCommand.prototype.Execute=function(){var A=FCK.LinkedField.form;if (typeof(A.onsubmit)=='function'){var B=A.onsubmit();if (B!=null&&B===false) return;};A.submit();};FCKSaveCommand.prototype.GetState=function(){return FCK_TRISTATE_OFF;};var FCKNewPageCommand=function(){this.Name='NewPage';};FCKNewPageCommand.prototype.Execute=function(){FCKUndo.SaveUndoStep();FCK.SetHTML('');FCKUndo.Typing=true;};FCKNewPageCommand.prototype.GetState=function(){return FCK_TRISTATE_OFF;};var FCKSourceCommand=function(){this.Name='Source';};FCKSourceCommand.prototype.Execute=function(){if (FCKConfig.SourcePopup){var A=FCKConfig.ScreenWidth*0.65;var B=FCKConfig.ScreenHeight*0.65;FCKDialog.OpenDialog('FCKDialog_Source',FCKLang.Source,'dialog/fck_source.html',A,B,null,null,true);}else FCK.SwitchEditMode();};FCKSourceCommand.prototype.GetState=function(){return (FCK.EditMode==FCK_EDITMODE_WYSIWYG?FCK_TRISTATE_OFF:FCK_TRISTATE_ON);};var FCKUndoCommand=function(){this.Name='Undo';};FCKUndoCommand.prototype.Execute=function(){if (FCKBrowserInfo.IsIE) FCKUndo.Undo();else FCK.ExecuteNamedCommand('Undo');};FCKUndoCommand.prototype.GetState=function(){if (FCKBrowserInfo.IsIE) return (FCKUndo.CheckUndoState()?FCK_TRISTATE_OFF:FCK_TRISTATE_DISABLED);else return FCK.GetNamedCommandState('Undo');};var FCKRedoCommand=function(){this.Name='Redo';};FCKRedoCommand.prototype.Execute=function(){if (FCKBrowserInfo.IsIE) FCKUndo.Redo();else FCK.ExecuteNamedCommand('Redo');};FCKRedoCommand.prototype.GetState=function(){if (FCKBrowserInfo.IsIE) return (FCKUndo.CheckRedoState()?FCK_TRISTATE_OFF:FCK_TRISTATE_DISABLED);else return FCK.GetNamedCommandState('Redo');};var FCKPageBreakCommand=function(){this.Name='PageBreak';};FCKPageBreakCommand.prototype.Execute=function(){var e=FCK.EditorDocument.createElement('DIV');e.style.pageBreakAfter='always';e.innerHTML='<span style="DISPLAY:none"> </span>';var A=FCKDocumentProcessor_CreateFakeImage('FCK__PageBreak',e);A=FCK.InsertElement(A);};FCKPageBreakCommand.prototype.GetState=function(){return 0;};var FCKUnlinkCommand=function(){this.Name='Unlink';};FCKUnlinkCommand.prototype.Execute=function(){if (FCKBrowserInfo.IsGecko){var A=FCK.Selection.MoveToAncestorNode('A');if (A) FCK.Selection.SelectNode(A);};FCK.ExecuteNamedCommand(this.Name);if (FCKBrowserInfo.IsGecko) FCK.Selection.Collapse(true);};FCKUnlinkCommand.prototype.GetState=function(){return FCK.GetNamedCommandState(this.Name);} |
var FCKSpellCheckCommand=function(){this.Name='SpellCheck';this.IsEnabled=(FCKConfig.SpellChecker=='ieSpell'||FCKConfig.SpellChecker=='SpellerPages');};FCKSpellCheckCommand.prototype.Execute=function(){switch (FCKConfig.SpellChecker){case 'ieSpell':this._RunIeSpell();break;case 'SpellerPages':FCKDialog.OpenDialog('FCKDialog_SpellCheck','Spell Check','dialog/fck_spellerpages.html',440,480);break;}};FCKSpellCheckCommand.prototype._RunIeSpell=function(){try{var A=new ActiveXObject("ieSpell.ieSpellExtension");A.CheckAllLinkedDocuments(FCK.EditorDocument);}catch(e){if(e.number==-2146827859){if (confirm(FCKLang.IeSpellDownload)) window.open(FCKConfig.IeSpellDownloadUrl,'IeSpellDownload');}else alert('Error Loading ieSpell: '+e.message+' ('+e.number+')');}};FCKSpellCheckCommand.prototype.GetState=function(){return this.IsEnabled?FCK_TRISTATE_OFF:FCK_TRISTATE_DISABLED;} |
var FCKTextColorCommand=function(A){this.Name=A=='ForeColor'?'TextColor':'BGColor';this.Type=A;var B;if (FCKBrowserInfo.IsIE) B=window;else if (FCK.ToolbarSet._IFrame) B=FCKTools.GetElementWindow(FCK.ToolbarSet._IFrame);else B=window.parent;this._Panel=new FCKPanel(B,true);this._Panel.AppendStyleSheet(FCKConfig.SkinPath+'fck_editor.css');this._Panel.MainNode.className='FCK_Panel';this._CreatePanelBody(this._Panel.Document,this._Panel.MainNode);FCKTools.DisableSelection(this._Panel.Document.body);};FCKTextColorCommand.prototype.Execute=function(A,B,C){FCK._ActiveColorPanelType=this.Type;this._Panel.Show(A,B,C);};FCKTextColorCommand.prototype.SetColor=function(A){if (FCK._ActiveColorPanelType=='ForeColor') FCK.ExecuteNamedCommand('ForeColor',A);else if (FCKBrowserInfo.IsGeckoLike){if (FCKBrowserInfo.IsGecko&&!FCKConfig.GeckoUseSPAN) FCK.EditorDocument.execCommand('useCSS',false,false);FCK.ExecuteNamedCommand('hilitecolor',A);if (FCKBrowserInfo.IsGecko&&!FCKConfig.GeckoUseSPAN) FCK.EditorDocument.execCommand('useCSS',false,true);}else FCK.ExecuteNamedCommand('BackColor',A);delete FCK._ActiveColorPanelType;};FCKTextColorCommand.prototype.GetState=function(){return FCK_TRISTATE_OFF;};function FCKTextColorCommand_OnMouseOver() { this.className='ColorSelected';};function FCKTextColorCommand_OnMouseOut() { this.className='ColorDeselected';};function FCKTextColorCommand_OnClick(){this.className='ColorDeselected';this.Command.SetColor('#'+this.Color);this.Command._Panel.Hide();};function FCKTextColorCommand_AutoOnClick(){this.className='ColorDeselected';this.Command.SetColor('');this.Command._Panel.Hide();};function FCKTextColorCommand_MoreOnClick(){this.className='ColorDeselected';this.Command._Panel.Hide();FCKDialog.OpenDialog('FCKDialog_Color',FCKLang.DlgColorTitle,'dialog/fck_colorselector.html',400,330,this.Command.SetColor);};FCKTextColorCommand.prototype._CreatePanelBody=function(A,B){function CreateSelectionDiv(){var C=A.createElement("DIV");C.className='ColorDeselected';C.onmouseover=FCKTextColorCommand_OnMouseOver;C.onmouseout=FCKTextColorCommand_OnMouseOut;return C;};var D=B.appendChild(A.createElement("TABLE"));D.className='ForceBaseFont';D.style.tableLayout='fixed';D.cellPadding=0;D.cellSpacing=0;D.border=0;D.width=150;var E=D.insertRow(-1).insertCell(-1);E.colSpan=8;var C=E.appendChild(CreateSelectionDiv());C.innerHTML='<table cellspacing="0" cellpadding="0" width="100%" border="0">\<tr>\<td><div class="ColorBoxBorder"><div class="ColorBox" style="background-color: #000000"></div></div></td>\<td nowrap width="100%" align="center">' + FCKLang.ColorAutomatic + '</td>\</tr>\</table>';C.Command=this;C.onclick=FCKTextColorCommand_AutoOnClick;var G=FCKConfig.FontColors.toString().split(',');var H=0;while (H<G.length){var I=D.insertRow(-1);for (var i=0;i<8&&H<G.length;i++,H++){C=I.insertCell(-1).appendChild(CreateSelectionDiv());C.Color=G[H];C.innerHTML='<div class="ColorBoxBorder"><div class="ColorBox" style="background-color: #'+G[H]+'"></div></div>';C.Command=this;C.onclick=FCKTextColorCommand_OnClick;}};E=D.insertRow(-1).insertCell(-1);E.colSpan=8;C=E.appendChild(CreateSelectionDiv());C.innerHTML='<table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td nowrap align="center">'+FCKLang.ColorMoreColors+'</td></tr></table>';C.Command=this;C.onclick=FCKTextColorCommand_MoreOnClick;} |
var FCKPastePlainTextCommand=function(){this.Name='PasteText';};FCKPastePlainTextCommand.prototype.Execute=function(){FCK.PasteAsPlainText();};FCKPastePlainTextCommand.prototype.GetState=function(){return FCK.GetNamedCommandState('Paste');}; |
var FCKPasteWordCommand=function(){this.Name='PasteWord';};FCKPasteWordCommand.prototype.Execute=function(){FCK.PasteFromWord();};FCKPasteWordCommand.prototype.GetState=function(){if (FCKConfig.ForcePasteAsPlainText) return FCK_TRISTATE_DISABLED;else return FCK.GetNamedCommandState('Paste');}; |
var FCKTableCommand=function(A){this.Name=A;};FCKTableCommand.prototype.Execute=function(){FCKUndo.SaveUndoStep();switch (this.Name){case 'TableInsertRow':FCKTableHandler.InsertRow();break;case 'TableDeleteRows':FCKTableHandler.DeleteRows();break;case 'TableInsertColumn':FCKTableHandler.InsertColumn();break;case 'TableDeleteColumns':FCKTableHandler.DeleteColumns();break;case 'TableInsertCell':FCKTableHandler.InsertCell();break;case 'TableDeleteCells':FCKTableHandler.DeleteCells();break;case 'TableMergeCells':FCKTableHandler.MergeCells();break;case 'TableSplitCell':FCKTableHandler.SplitCell();break;case 'TableDelete':FCKTableHandler.DeleteTable();break;default:alert(FCKLang.UnknownCommand.replace(/%1/g,this.Name));}};FCKTableCommand.prototype.GetState=function(){return FCK_TRISTATE_OFF;} |
var FCKStyleCommand=function(){this.Name='Style';this.StylesLoader=new FCKStylesLoader();this.StylesLoader.Load(FCKConfig.StylesXmlPath);this.Styles=this.StylesLoader.Styles;};FCKStyleCommand.prototype.Execute=function(A,B){FCKUndo.SaveUndoStep();if (B.Selected) B.Style.RemoveFromSelection();else B.Style.ApplyToSelection();FCKUndo.SaveUndoStep();FCK.Focus();FCK.Events.FireEvent("OnSelectionChange");};FCKStyleCommand.prototype.GetState=function(){if (!FCK.EditorDocument) return FCK_TRISTATE_DISABLED;var A=FCK.EditorDocument.selection;if (FCKSelection.GetType()=='Control'){var e=FCKSelection.GetSelectedElement();if (e) return this.StylesLoader.StyleGroups[e.tagName]?FCK_TRISTATE_OFF:FCK_TRISTATE_DISABLED;};return FCK_TRISTATE_OFF;};FCKStyleCommand.prototype.GetActiveStyles=function(){var A=new Array();if (FCKSelection.GetType()=='Control') this._CheckStyle(FCKSelection.GetSelectedElement(),A,false);else this._CheckStyle(FCKSelection.GetParentElement(),A,true);return A;};FCKStyleCommand.prototype._CheckStyle=function(A,B,C){if (!A) return;if (A.nodeType==1){var D=this.StylesLoader.StyleGroups[A.tagName];if (D){for (var i=0;i<D.length;i++){if (D[i].IsEqual(A)) B[B.length]=D[i];}}};if (C) this._CheckStyle(A.parentNode,B,C);} |
var FCKFitWindow=function(){this.Name='FitWindow';};FCKFitWindow.prototype.Execute=function(){var A=window.frameElement;var B=A.style;var C=parent;var D=C.document.documentElement;var E=C.document.body;var F=E.style;if (!this.IsMaximized){if(FCKBrowserInfo.IsIE) C.attachEvent('onresize',FCKFitWindow_Resize);else C.addEventListener('resize',FCKFitWindow_Resize,true);this._ScrollPos=FCKTools.GetScrollPosition(C);var G=A;while(G=G.parentNode){if (G.nodeType==1) G._fckSavedStyles=FCKTools.SaveStyles(G);};if (FCKBrowserInfo.IsIE){this.documentElementOverflow=D.style.overflow;D.style.overflow='hidden';F.overflow='hidden';}else{F.overflow='hidden';F.width='0px';F.height='0px';};this._EditorFrameStyles=FCKTools.SaveStyles(A);var H=FCKTools.GetViewPaneSize(C);B.position="absolute";B.zIndex=FCKConfig.FloatingPanelsZIndex-1;B.left="0px";B.top="0px";B.width=H.Width+"px";B.height=H.Height+"px";if (!FCKBrowserInfo.IsIE){B.borderRight=B.borderBottom="9999px solid white";B.backgroundColor="white";};C.scrollTo(0,0);this.IsMaximized=true;}else{if(FCKBrowserInfo.IsIE) C.detachEvent("onresize",FCKFitWindow_Resize);else C.removeEventListener("resize",FCKFitWindow_Resize,true);var G=A;while(G=G.parentNode){if (G._fckSavedStyles){FCKTools.RestoreStyles(G,G._fckSavedStyles);G._fckSavedStyles=null;}};if (FCKBrowserInfo.IsIE) D.style.overflow=this.documentElementOverflow;FCKTools.RestoreStyles(A,this._EditorFrameStyles);C.scrollTo(this._ScrollPos.X,this._ScrollPos.Y);this.IsMaximized=false;};FCKToolbarItems.GetItem('FitWindow').RefreshState();FCK.EditingArea.MakeEditable();FCK.Focus();};FCKFitWindow.prototype.GetState=function(){if (FCKConfig.ToolbarLocation!='In') return FCK_TRISTATE_DISABLED;else return (this.IsMaximized?FCK_TRISTATE_ON:FCK_TRISTATE_OFF);};function FCKFitWindow_Resize(){var oViewPaneSize=FCKTools.GetViewPaneSize(parent);var eEditorFrameStyle=window.frameElement.style;eEditorFrameStyle.width=oViewPaneSize.Width+'px';eEditorFrameStyle.height=oViewPaneSize.Height+'px';}; |
var FCKCommands=FCK.Commands=new Object();FCKCommands.LoadedCommands=new Object();FCKCommands.RegisterCommand=function(A,B){this.LoadedCommands[A]=B;};FCKCommands.GetCommand=function(A){var B=FCKCommands.LoadedCommands[A];if (B) return B;switch (A){case 'DocProps':B=new FCKDialogCommand('DocProps',FCKLang.DocProps,'dialog/fck_docprops.html',400,390,FCKCommands.GetFullPageState);break;case 'Templates':B=new FCKDialogCommand('Templates',FCKLang.DlgTemplatesTitle,'dialog/fck_template.html',380,450);break;case 'Link':B=new FCKDialogCommand('Link',FCKLang.DlgLnkWindowTitle,'dialog/fck_link.html',400,330,FCK.GetNamedCommandState,'CreateLink');break;case 'Unlink':B=new FCKUnlinkCommand();break;case 'Anchor':B=new FCKDialogCommand('Anchor',FCKLang.DlgAnchorTitle,'dialog/fck_anchor.html',370,170);break;case 'BulletedList':B=new FCKDialogCommand('BulletedList',FCKLang.BulletedListProp,'dialog/fck_listprop.html',370,170);break;case 'NumberedList':B=new FCKDialogCommand('NumberedList',FCKLang.NumberedListProp,'dialog/fck_listprop.html',370,170);break;case 'About':B=new FCKDialogCommand('About',FCKLang.About,'dialog/fck_about.html',400,330);break;case 'Find':B=new FCKDialogCommand('Find',FCKLang.DlgFindTitle,'dialog/fck_find.html',340,170);break;case 'Replace':B=new FCKDialogCommand('Replace',FCKLang.DlgReplaceTitle,'dialog/fck_replace.html',340,200);break;case 'Image':B=new FCKDialogCommand('Image',FCKLang.DlgImgTitle,'dialog/fck_image.html',450,400);break;case 'Flash':B=new FCKDialogCommand('Flash',FCKLang.DlgFlashTitle,'dialog/fck_flash.html',450,400);break;case 'SpecialChar':B=new FCKDialogCommand('SpecialChar',FCKLang.DlgSpecialCharTitle,'dialog/fck_specialchar.html',400,320);break;case 'Smiley':B=new FCKDialogCommand('Smiley',FCKLang.DlgSmileyTitle,'dialog/fck_smiley.html',FCKConfig.SmileyWindowWidth,FCKConfig.SmileyWindowHeight);break;case 'Table':B=new FCKDialogCommand('Table',FCKLang.DlgTableTitle,'dialog/fck_table.html',450,250);break;case 'TableProp':B=new FCKDialogCommand('Table',FCKLang.DlgTableTitle,'dialog/fck_table.html?Parent',400,250);break;case 'TableCellProp':B=new FCKDialogCommand('TableCell',FCKLang.DlgCellTitle,'dialog/fck_tablecell.html',550,250);break;case 'UniversalKey':B=new FCKDialogCommand('UniversalKey',FCKLang.UniversalKeyboard,'dialog/fck_universalkey.html',415,300);break;case 'Style':B=new FCKStyleCommand();break;case 'FontName':B=new FCKFontNameCommand();break;case 'FontSize':B=new FCKFontSizeCommand();break;case 'FontFormat':B=new FCKFormatBlockCommand();break;case 'Source':B=new FCKSourceCommand();break;case 'Preview':B=new FCKPreviewCommand();break;case 'Save':B=new FCKSaveCommand();break;case 'NewPage':B=new FCKNewPageCommand();break;case 'PageBreak':B=new FCKPageBreakCommand();break;case 'TextColor':B=new FCKTextColorCommand('ForeColor');break;case 'BGColor':B=new FCKTextColorCommand('BackColor');break;case 'PasteText':B=new FCKPastePlainTextCommand();break;case 'PasteWord':B=new FCKPasteWordCommand();break;case 'TableInsertRow':B=new FCKTableCommand('TableInsertRow');break;case 'TableDeleteRows':B=new FCKTableCommand('TableDeleteRows');break;case 'TableInsertColumn':B=new FCKTableCommand('TableInsertColumn');break;case 'TableDeleteColumns':B=new FCKTableCommand('TableDeleteColumns');break;case 'TableInsertCell':B=new FCKTableCommand('TableInsertCell');break;case 'TableDeleteCells':B=new FCKTableCommand('TableDeleteCells');break;case 'TableMergeCells':B=new FCKTableCommand('TableMergeCells');break;case 'TableSplitCell':B=new FCKTableCommand('TableSplitCell');break;case 'TableDelete':B=new FCKTableCommand('TableDelete');break;case 'Form':B=new FCKDialogCommand('Form',FCKLang.Form,'dialog/fck_form.html',380,230);break;case 'Checkbox':B=new FCKDialogCommand('Checkbox',FCKLang.Checkbox,'dialog/fck_checkbox.html',380,230);break;case 'Radio':B=new FCKDialogCommand('Radio',FCKLang.RadioButton,'dialog/fck_radiobutton.html',380,230);break;case 'TextField':B=new FCKDialogCommand('TextField',FCKLang.TextField,'dialog/fck_textfield.html',380,230);break;case 'Textarea':B=new FCKDialogCommand('Textarea',FCKLang.Textarea,'dialog/fck_textarea.html',380,230);break;case 'HiddenField':B=new FCKDialogCommand('HiddenField',FCKLang.HiddenField,'dialog/fck_hiddenfield.html',380,230);break;case 'Button':B=new FCKDialogCommand('Button',FCKLang.Button,'dialog/fck_button.html',380,230);break;case 'Select':B=new FCKDialogCommand('Select',FCKLang.SelectionField,'dialog/fck_select.html',400,380);break;case 'ImageButton':B=new FCKDialogCommand('ImageButton',FCKLang.ImageButton,'dialog/fck_image.html?ImageButton',450,400);break;case 'SpellCheck':B=new FCKSpellCheckCommand();break;case 'FitWindow':B=new FCKFitWindow();break;case 'Undo':B=new FCKUndoCommand();break;case 'Redo':B=new FCKRedoCommand();break;case 'Undefined':B=new FCKUndefinedCommand();break;default:if (FCKRegexLib.NamedCommands.test(A)) B=new FCKNamedCommand(A);else{alert(FCKLang.UnknownCommand.replace(/%1/g,A));return null;}};FCKCommands.LoadedCommands[A]=B;return B;};FCKCommands.GetFullPageState=function(){return FCKConfig.FullPage?FCK_TRISTATE_OFF:FCK_TRISTATE_DISABLED;}; |
var FCKPanel=function(A){this.IsRTL=(FCKLang.Dir=='rtl');this.IsContextMenu=false;this._LockCounter=0;this._Window=A||window;var B;if (FCKBrowserInfo.IsIE){this._Popup=this._Window.createPopup();B=this.Document=this._Popup.document;}else{var C=this._IFrame=this._Window.document.createElement('iframe');C.src='javascript:void(0)';C.allowTransparency=true;C.frameBorder='0';C.scrolling='no';C.style.position='absolute';C.style.zIndex=FCKConfig.FloatingPanelsZIndex;C.width=C.height=0;if (this._Window==window.parent&&window.frameElement) window.frameElement.parentNode.insertBefore(C,window.frameElement);else this._Window.document.body.appendChild(C);var D=C.contentWindow;B=this.Document=D.document;B.open();B.write('<html><head></head><body style="margin:0px;padding:0px;"><\/body><\/html>');B.close();FCKTools.AddEventListenerEx(D,'focus',FCKPanel_Window_OnFocus,this);FCKTools.AddEventListenerEx(D,'blur',FCKPanel_Window_OnBlur,this);};B.dir=FCKLang.Dir;B.oncontextmenu=FCKTools.CancelEvent;this.MainNode=B.body.appendChild(B.createElement('DIV'));this.MainNode.style.cssFloat=this.IsRTL?'right':'left';if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKPanel_Cleanup);};FCKPanel.prototype.AppendStyleSheet=function(A){FCKTools.AppendStyleSheet(this.Document,A);};FCKPanel.prototype.Preload=function(x,y,A){if (this._Popup) this._Popup.show(x,y,0,0,A);};FCKPanel.prototype.Show=function(x,y,A,B,C){if (this._Popup){this._Popup.show(x,y,0,0,A);this.MainNode.style.width=B?B+'px':'';this.MainNode.style.height=C?C+'px':'';var D=this.MainNode.offsetWidth;if (this.IsRTL){if (this.IsContextMenu) x=x-D+1;else if (A) x=(x*-1)+A.offsetWidth-D;};this._Popup.show(x,y,D,this.MainNode.offsetHeight,A);if (this.OnHide){if (this._Timer) CheckPopupOnHide.call(this,true);this._Timer=FCKTools.SetInterval(CheckPopupOnHide,100,this);}}else{if (typeof(FCKFocusManager)!='undefined') FCKFocusManager.Lock();if (this.ParentPanel) this.ParentPanel.Lock();this.MainNode.style.width=B?B+'px':'';this.MainNode.style.height=C?C+'px':'';var D=this.MainNode.offsetWidth;if (!B) this._IFrame.width=1;if (!C) this._IFrame.height=1;D=this.MainNode.offsetWidth;var F=FCKTools.GetElementPosition((A.nodeType==9?A.body:A),this._Window);if (this.IsRTL&&!this.IsContextMenu) x=(x*-1);x+=F.X;y+=F.Y;if (this.IsRTL){if (this.IsContextMenu) x=x-D+1;else if (A) x=x+A.offsetWidth-D;}else{var G=FCKTools.GetViewPaneSize(this._Window);var H=FCKTools.GetScrollPosition(this._Window);var I=G.Height+H.Y;var J=G.Width+H.X;if ((x+D)>J) x-=x+D-J;if ((y+this.MainNode.offsetHeight)>I) y-=y+this.MainNode.offsetHeight-I;};if (x<0) x=0;this._IFrame.style.left=x+'px';this._IFrame.style.top=y+'px';var K=D;var L=this.MainNode.offsetHeight;this._IFrame.width=K;this._IFrame.height=L;this._IFrame.contentWindow.focus();};this._IsOpened=true;FCKTools.RunFunction(this.OnShow,this);};FCKPanel.prototype.Hide=function(A){if (this._Popup) this._Popup.hide();else{if (!this._IsOpened) return;if (typeof(FCKFocusManager)!='undefined') FCKFocusManager.Unlock();this._IFrame.width=this._IFrame.height=0;this._IsOpened=false;if (this.ParentPanel) this.ParentPanel.Unlock();if (!A) FCKTools.RunFunction(this.OnHide,this);}};FCKPanel.prototype.CheckIsOpened=function(){if (this._Popup) return this._Popup.isOpen;else return this._IsOpened;};FCKPanel.prototype.CreateChildPanel=function(){var A=this._Popup?FCKTools.GetParentWindow(this.Document):this._Window;var B=new FCKPanel(A,true);B.ParentPanel=this;return B;};FCKPanel.prototype.Lock=function(){this._LockCounter++;};FCKPanel.prototype.Unlock=function(){if (--this._LockCounter==0&&!this.HasFocus) this.Hide();};/* Events */ function FCKPanel_Window_OnFocus(e,panel){panel.HasFocus=true;};function FCKPanel_Window_OnBlur(e,panel){panel.HasFocus=false;if (panel._LockCounter==0) FCKTools.RunFunction(panel.Hide,panel);};function CheckPopupOnHide(forceHide){if (forceHide||!this._Popup.isOpen){window.clearInterval(this._Timer);this._Timer=null;FCKTools.RunFunction(this.OnHide,this);}};function FCKPanel_Cleanup(){this._Popup=null;this._Window=null;this.Document=null;this.MainNode=null;} |
var FCKIcon=function(A){var B=A?typeof(A):'undefined';switch (B){case 'number':this.Path=FCKConfig.SkinPath+'fck_strip.gif';this.Size=16;this.Position=A;break;case 'undefined':this.Path=FCK_SPACER_PATH;break;case 'string':this.Path=A;break;default:this.Path=A[0];this.Size=A[1];this.Position=A[2];}};FCKIcon.prototype.CreateIconElement=function(A){var B;if (this.Position){var C='-'+((this.Position-1)*this.Size)+'px';if (FCKBrowserInfo.IsIE){B=A.createElement('DIV');var D=B.appendChild(A.createElement('IMG'));D.src=this.Path;D.style.top=C;}else{B=A.createElement('IMG');B.src=FCK_SPACER_PATH;B.style.backgroundPosition='0px '+C;B.style.backgroundImage='url('+this.Path+')';}}else{B=A.createElement('DIV');var D=B.appendChild(A.createElement('IMG'));D.src=this.Path?this.Path:FCK_SPACER_PATH;};B.className='TB_Button_Image';return B;} |
var FCKToolbarButtonUI=function(A,B,C,D,E,F){this.Name=A;this.Label=B||A;this.Tooltip=C||this.Label;this.Style=E||FCK_TOOLBARITEM_ONLYICON;this.State=F||FCK_TRISTATE_OFF;this.Icon=new FCKIcon(D);if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKToolbarButtonUI_Cleanup);};FCKToolbarButtonUI.prototype._CreatePaddingElement=function(A){var B=A.createElement('IMG');B.className='TB_Button_Padding';B.src=FCK_SPACER_PATH;return B;};FCKToolbarButtonUI.prototype.Create=function(A){var B=this.MainElement;if (B){FCKToolbarButtonUI_Cleanup.call(this);if (B.parentNode) B.parentNode.removeChild(B);B=this.MainElement=null;};var C=FCKTools.GetElementDocument(A);B=this.MainElement=C.createElement('DIV');B._FCKButton=this;B.title=this.Tooltip;if (FCKBrowserInfo.IsGecko) B.onmousedown=FCKTools.CancelEvent;this.ChangeState(this.State,true);if (this.Style==FCK_TOOLBARITEM_ONLYICON&&!this.ShowArrow){B.appendChild(this.Icon.CreateIconElement(C));}else{var D=B.appendChild(C.createElement('TABLE'));D.cellPadding=0;D.cellSpacing=0;var E=D.insertRow(-1);var F=E.insertCell(-1);if (this.Style==FCK_TOOLBARITEM_ONLYICON||this.Style==FCK_TOOLBARITEM_ICONTEXT) F.appendChild(this.Icon.CreateIconElement(C));else F.appendChild(this._CreatePaddingElement(C));if (this.Style==FCK_TOOLBARITEM_ONLYTEXT||this.Style==FCK_TOOLBARITEM_ICONTEXT){F=E.insertCell(-1);F.className='TB_Button_Text';F.noWrap=true;F.appendChild(C.createTextNode(this.Label));};if (this.ShowArrow){if (this.Style!=FCK_TOOLBARITEM_ONLYICON){E.insertCell(-1).appendChild(this._CreatePaddingElement(C));};F=E.insertCell(-1);var G=F.appendChild(C.createElement('IMG'));G.src=FCKConfig.SkinPath+'images/toolbar.buttonarrow.gif';G.width=5;G.height=3;};F=E.insertCell(-1);F.appendChild(this._CreatePaddingElement(C));};A.appendChild(B);};FCKToolbarButtonUI.prototype.ChangeState=function(A,B){if (!B&&this.State==A) return;var e=this.MainElement;switch (parseInt(A)){case FCK_TRISTATE_OFF:e.className='TB_Button_Off';e.onmouseover=FCKToolbarButton_OnMouseOverOff;e.onmouseout=FCKToolbarButton_OnMouseOutOff;e.onclick=FCKToolbarButton_OnClick;break;case FCK_TRISTATE_ON:e.className='TB_Button_On';e.onmouseover=FCKToolbarButton_OnMouseOverOn;e.onmouseout=FCKToolbarButton_OnMouseOutOn;e.onclick=FCKToolbarButton_OnClick;break;case FCK_TRISTATE_DISABLED:e.className='TB_Button_Disabled';e.onmouseover=null;e.onmouseout=null;e.onclick=null;bEnableEvents=false;break;};this.State=A;};function FCKToolbarButtonUI_Cleanup(){if (this.MainElement){this.MainElement._FCKButton=null;this.MainElement=null;}};function FCKToolbarButton_OnMouseOverOn(){this.className='TB_Button_On_Over';};function FCKToolbarButton_OnMouseOutOn(){this.className='TB_Button_On';};function FCKToolbarButton_OnMouseOverOff(){this.className='TB_Button_Off_Over';};function FCKToolbarButton_OnMouseOutOff(){this.className='TB_Button_Off';};function FCKToolbarButton_OnClick(e){if (this._FCKButton.OnClick) this._FCKButton.OnClick(this._FCKButton);}; |
var FCKToolbarButton=function(A,B,C,D,E,F,G){this.CommandName=A;this.Label=B;this.Tooltip=C;this.Style=D;this.SourceView=E?true:false;this.ContextSensitive=F?true:false;if (G==null) this.IconPath=FCKConfig.SkinPath+'toolbar/'+A.toLowerCase()+'.gif';else if (typeof(G)=='number') this.IconPath=[FCKConfig.SkinPath+'fck_strip.gif',16,G];};FCKToolbarButton.prototype.Create=function(A){this._UIButton=new FCKToolbarButtonUI(this.CommandName,this.Label,this.Tooltip,this.IconPath,this.Style);this._UIButton.OnClick=this.Click;this._UIButton._ToolbarButton=this;this._UIButton.Create(A);};FCKToolbarButton.prototype.RefreshState=function(){var A=FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName).GetState();if (A==this._UIButton.State) return;this._UIButton.ChangeState(A);};FCKToolbarButton.prototype.Click=function(){var A=this._ToolbarButton||this;FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(A.CommandName).Execute();};FCKToolbarButton.prototype.Enable=function(){this.RefreshState();};FCKToolbarButton.prototype.Disable=function(){this._UIButton.ChangeState(FCK_TRISTATE_DISABLED);} |
var FCKSpecialCombo=function(A,B,C,D,E){this.FieldWidth=B||100;this.PanelWidth=C||150;this.PanelMaxHeight=D||150;this.Label=' ';this.Caption=A;this.Tooltip=A;this.Style=FCK_TOOLBARITEM_ICONTEXT;this.Enabled=true;this.Items=new Object();this._Panel=new FCKPanel(E||window,true);this._Panel.AppendStyleSheet(FCKConfig.SkinPath+'fck_editor.css');this._PanelBox=this._Panel.MainNode.appendChild(this._Panel.Document.createElement('DIV'));this._PanelBox.className='SC_Panel';this._PanelBox.style.width=this.PanelWidth+'px';this._PanelBox.innerHTML='<table cellpadding="0" cellspacing="0" width="100%" style="TABLE-LAYOUT: fixed"><tr><td nowrap></td></tr></table>';this._ItemsHolderEl=this._PanelBox.getElementsByTagName('TD')[0];if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKSpecialCombo_Cleanup);};function FCKSpecialCombo_ItemOnMouseOver(){this.className+=' SC_ItemOver';};function FCKSpecialCombo_ItemOnMouseOut(){this.className=this.originalClass;};function FCKSpecialCombo_ItemOnClick(){this.className=this.originalClass;this.FCKSpecialCombo._Panel.Hide();this.FCKSpecialCombo.SetLabel(this.FCKItemLabel);if (typeof(this.FCKSpecialCombo.OnSelect)=='function') this.FCKSpecialCombo.OnSelect(this.FCKItemID,this);};FCKSpecialCombo.prototype.AddItem=function(A,B,C,D){var E=this._ItemsHolderEl.appendChild(this._Panel.Document.createElement('DIV'));E.className=E.originalClass='SC_Item';E.innerHTML=B;E.FCKItemID=A;E.FCKItemLabel=C||A;E.FCKSpecialCombo=this;E.Selected=false;if (FCKBrowserInfo.IsIE) E.style.width='100%';if (D) E.style.backgroundColor=D;E.onmouseover=FCKSpecialCombo_ItemOnMouseOver;E.onmouseout=FCKSpecialCombo_ItemOnMouseOut;E.onclick=FCKSpecialCombo_ItemOnClick;this.Items[A.toString().toLowerCase()]=E;return E;};FCKSpecialCombo.prototype.SelectItem=function(A){A=A?A.toString().toLowerCase():'';var B=this.Items[A];if (B){B.className=B.originalClass='SC_ItemSelected';B.Selected=true;}};FCKSpecialCombo.prototype.SelectItemByLabel=function(A,B){for (var C in this.Items){var D=this.Items[C];if (D.FCKItemLabel==A){D.className=D.originalClass='SC_ItemSelected';D.Selected=true;if (B) this.SetLabel(A);}}};FCKSpecialCombo.prototype.DeselectAll=function(A){for (var i in this.Items){this.Items[i].className=this.Items[i].originalClass='SC_Item';this.Items[i].Selected=false;};if (A) this.SetLabel('');};FCKSpecialCombo.prototype.SetLabelById=function(A){A=A?A.toString().toLowerCase():'';var B=this.Items[A];this.SetLabel(B?B.FCKItemLabel:'');};FCKSpecialCombo.prototype.SetLabel=function(A){this.Label=A.length==0?' ':A;if (this._LabelEl) this._LabelEl.innerHTML=this.Label;};FCKSpecialCombo.prototype.SetEnabled=function(A){this.Enabled=A;this._OuterTable.className=A?'':'SC_FieldDisabled';};FCKSpecialCombo.prototype.Create=function(A){var B=FCKTools.GetElementDocument(A);var C=this._OuterTable=A.appendChild(B.createElement('TABLE'));C.cellPadding=0;C.cellSpacing=0;C.insertRow(-1);var D;var E;switch (this.Style){case FCK_TOOLBARITEM_ONLYICON:D='TB_ButtonType_Icon';E=false;break;case FCK_TOOLBARITEM_ONLYTEXT:D='TB_ButtonType_Text';E=false;break;case FCK_TOOLBARITEM_ICONTEXT:E=true;break;};if (this.Caption&&this.Caption.length>0&&E){var F=C.rows[0].insertCell(-1);F.innerHTML=this.Caption;F.className='SC_FieldCaption';};var G=FCKTools.AppendElement(C.rows[0].insertCell(-1),'div');if (E){G.className='SC_Field';G.style.width=this.FieldWidth+'px';G.innerHTML='<table width="100%" cellpadding="0" cellspacing="0" style="TABLE-LAYOUT: fixed;"><tbody><tr><td class="SC_FieldLabel"><label> </label></td><td class="SC_FieldButton"> </td></tr></tbody></table>';this._LabelEl=G.getElementsByTagName('label')[0];this._LabelEl.innerHTML=this.Label;}else{G.className='TB_Button_Off';G.innerHTML='<table title="'+this.Tooltip+'" class="'+D+'" cellspacing="0" cellpadding="0" border="0">'+'<tr>'+'<td><img class="TB_Button_Padding" src="'+FCK_SPACER_PATH+'" /></td>'+'<td class="TB_Text">'+this.Caption+'</td>'+'<td><img class="TB_Button_Padding" src="'+FCK_SPACER_PATH+'" /></td>'+'<td class="TB_ButtonArrow"><img src="'+FCKConfig.SkinPath+'images/toolbar.buttonarrow.gif" width="5" height="3"></td>'+'<td><img class="TB_Button_Padding" src="'+FCK_SPACER_PATH+'" /></td>'+'</tr>'+'</table>';};G.SpecialCombo=this;G.onmouseover=FCKSpecialCombo_OnMouseOver;G.onmouseout=FCKSpecialCombo_OnMouseOut;G.onclick=FCKSpecialCombo_OnClick;FCKTools.DisableSelection(this._Panel.Document.body);};function FCKSpecialCombo_Cleanup(){this._LabelEl=null;this._OuterTable=null;this._ItemsHolderEl=null;this._PanelBox=null;if (this.Items){for (var key in this.Items) this.Items[key]=null;}};function FCKSpecialCombo_OnMouseOver(){if (this.SpecialCombo.Enabled){switch (this.SpecialCombo.Style){case FCK_TOOLBARITEM_ONLYICON:this.className='TB_Button_On_Over';break;case FCK_TOOLBARITEM_ONLYTEXT:this.className='TB_Button_On_Over';break;case FCK_TOOLBARITEM_ICONTEXT:this.className='SC_Field SC_FieldOver';break;}}};function FCKSpecialCombo_OnMouseOut(){switch (this.SpecialCombo.Style){case FCK_TOOLBARITEM_ONLYICON:this.className='TB_Button_Off';break;case FCK_TOOLBARITEM_ONLYTEXT:this.className='TB_Button_Off';break;case FCK_TOOLBARITEM_ICONTEXT:this.className='SC_Field';break;}};function FCKSpecialCombo_OnClick(e){var oSpecialCombo=this.SpecialCombo;if (oSpecialCombo.Enabled){var oPanel=oSpecialCombo._Panel;var oPanelBox=oSpecialCombo._PanelBox;var oItemsHolder=oSpecialCombo._ItemsHolderEl;var iMaxHeight=oSpecialCombo.PanelMaxHeight;if (oSpecialCombo.OnBeforeClick) oSpecialCombo.OnBeforeClick(oSpecialCombo);if (FCKBrowserInfo.IsIE) oPanel.Preload(0,this.offsetHeight,this);if (oItemsHolder.offsetHeight>iMaxHeight) oPanelBox.style.height=iMaxHeight+'px';else oPanelBox.style.height='';oPanel.Show(0,this.offsetHeight,this);}}; |
var FCKToolbarSpecialCombo=function(){this.SourceView=false;this.ContextSensitive=true;};function FCKToolbarSpecialCombo_OnSelect(itemId,item){FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName).Execute(itemId,item);};FCKToolbarSpecialCombo.prototype.Create=function(A){this._Combo=new FCKSpecialCombo(this.GetLabel(),this.FieldWidth,this.PanelWidth,this.PanelMaxHeight,FCKBrowserInfo.IsIE?window:FCKTools.GetElementWindow(A).parent);this._Combo.Tooltip=this.Tooltip;this._Combo.Style=this.Style;this.CreateItems(this._Combo);this._Combo.Create(A);this._Combo.CommandName=this.CommandName;this._Combo.OnSelect=FCKToolbarSpecialCombo_OnSelect;};function FCKToolbarSpecialCombo_RefreshActiveItems(combo,value){combo.DeselectAll();combo.SelectItem(value);combo.SetLabelById(value);};FCKToolbarSpecialCombo.prototype.RefreshState=function(){var A;var B=FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName).GetState();if (B!=FCK_TRISTATE_DISABLED){A=FCK_TRISTATE_ON;if (this.RefreshActiveItems) this.RefreshActiveItems(this._Combo,B);else{if (this._LastValue!=B){this._LastValue=B;FCKToolbarSpecialCombo_RefreshActiveItems(this._Combo,B);}}}else A=FCK_TRISTATE_DISABLED;if (A==this.State) return;if (A==FCK_TRISTATE_DISABLED){this._Combo.DeselectAll();this._Combo.SetLabel('');};this.State=A;this._Combo.SetEnabled(A!=FCK_TRISTATE_DISABLED);};FCKToolbarSpecialCombo.prototype.Enable=function(){this.RefreshState();};FCKToolbarSpecialCombo.prototype.Disable=function(){this.State=FCK_TRISTATE_DISABLED;this._Combo.DeselectAll();this._Combo.SetLabel('');this._Combo.SetEnabled(false);} |
var FCKToolbarFontsCombo=function(A,B){this.CommandName='FontName';this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:FCK_TOOLBARITEM_ICONTEXT;};FCKToolbarFontsCombo.prototype=new FCKToolbarSpecialCombo;FCKToolbarFontsCombo.prototype.GetLabel=function(){return FCKLang.Font;};FCKToolbarFontsCombo.prototype.CreateItems=function(A){var B=FCKConfig.FontNames.split(';');for (var i=0;i<B.length;i++) this._Combo.AddItem(B[i],'<font face="'+B[i]+'" style="font-size: 12px">'+B[i]+'</font>');} |
var FCKToolbarFontSizeCombo=function(A,B){this.CommandName='FontSize';this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:FCK_TOOLBARITEM_ICONTEXT;};FCKToolbarFontSizeCombo.prototype=new FCKToolbarSpecialCombo;FCKToolbarFontSizeCombo.prototype.GetLabel=function(){return FCKLang.FontSize;};FCKToolbarFontSizeCombo.prototype.CreateItems=function(A){A.FieldWidth=70;var B=FCKConfig.FontSizes.split(';');for (var i=0;i<B.length;i++){var C=B[i].split('/');this._Combo.AddItem(C[0],'<font size="'+C[0]+'">'+C[1]+'</font>',C[1]);}} |
var FCKToolbarFontFormatCombo=function(A,B){this.CommandName='FontFormat';this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:FCK_TOOLBARITEM_ICONTEXT;this.NormalLabel='Normal';this.PanelWidth=190;};FCKToolbarFontFormatCombo.prototype=new FCKToolbarSpecialCombo;FCKToolbarFontFormatCombo.prototype.GetLabel=function(){return FCKLang.FontFormat;};FCKToolbarFontFormatCombo.prototype.CreateItems=function(A){FCKTools.AppendStyleSheet(A._Panel.Document,FCKConfig.ToolbarComboPreviewCSS);var B=FCKLang['FontFormats'].split(';');var C={p:B[0],pre:B[1],address:B[2],h1:B[3],h2:B[4],h3:B[5],h4:B[6],h5:B[7],h6:B[8],div:B[9]};var D=FCKConfig.FontFormats.split(';');for (var i=0;i<D.length;i++){var E=D[i];var F=C[E];if (E=='p') this.NormalLabel=F;this._Combo.AddItem(E,'<div class="BaseFont"><'+E+'>'+F+'</'+E+'></div>',F);}};if (FCKBrowserInfo.IsIE){FCKToolbarFontFormatCombo.prototype.RefreshActiveItems=function(A,B){if (B==this.NormalLabel){if (A.Label!=' ') A.DeselectAll(true);}else{if (this._LastValue==B) return;A.SelectItemByLabel(B,true);};this._LastValue=B;}} |
var FCKToolbarStyleCombo=function(A,B){this.CommandName='Style';this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:FCK_TOOLBARITEM_ICONTEXT;};FCKToolbarStyleCombo.prototype=new FCKToolbarSpecialCombo;FCKToolbarStyleCombo.prototype.GetLabel=function(){return FCKLang.Style;};FCKToolbarStyleCombo.prototype.CreateItems=function(A){var B=A._Panel.Document;FCKTools.AppendStyleSheet(B,FCKConfig.ToolbarComboPreviewCSS);B.body.className+=' ForceBaseFont';if (!FCKBrowserInfo.IsGecko) A.OnBeforeClick=this.RefreshVisibleItems;var C=FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName).Styles;for (var s in C){var D=C[s];var E;if (D.IsObjectElement) E=A.AddItem(s,s);else E=A.AddItem(s,D.GetOpenerTag()+s+D.GetCloserTag());E.Style=D;}};FCKToolbarStyleCombo.prototype.RefreshActiveItems=function(A){A.DeselectAll();var B=FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName).GetActiveStyles();if (B.length>0){for (var i=0;i<B.length;i++) A.SelectItem(B[i].Name);A.SetLabelById(B[0].Name);}else A.SetLabel('');};FCKToolbarStyleCombo.prototype.RefreshVisibleItems=function(A){if (FCKSelection.GetType()=='Control') var B=FCKSelection.GetSelectedElement().tagName;for (var i in A.Items){var C=A.Items[i];if ((B&&C.Style.Element==B)||(!B&&!C.Style.IsObjectElement)) C.style.display='';else C.style.display='none';}} |
var FCKToolbarPanelButton=function(A,B,C,D,E){this.CommandName=A;var F;if (E==null) F=FCKConfig.SkinPath+'toolbar/'+A.toLowerCase()+'.gif';else if (typeof(E)=='number') F=[FCKConfig.SkinPath+'fck_strip.gif',16,E];var G=this._UIButton=new FCKToolbarButtonUI(A,B,C,F,D);G._FCKToolbarPanelButton=this;G.ShowArrow=true;G.OnClick=FCKToolbarPanelButton_OnButtonClick;};FCKToolbarPanelButton.prototype.TypeName='FCKToolbarPanelButton';FCKToolbarPanelButton.prototype.Create=function(A){A.className+='Menu';this._UIButton.Create(A);var B=FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName)._Panel;B._FCKToolbarPanelButton=this;var C=B.Document.body.appendChild(B.Document.createElement('div'));C.style.position='absolute';C.style.top='0px';var D=this.LineImg=C.appendChild(B.Document.createElement('IMG'));D.className='TB_ConnectionLine';D.src=FCK_SPACER_PATH;B.OnHide=FCKToolbarPanelButton_OnPanelHide;};function FCKToolbarPanelButton_OnButtonClick(toolbarButton){var oButton=this._FCKToolbarPanelButton;var e=oButton._UIButton.MainElement;oButton._UIButton.ChangeState(FCK_TRISTATE_ON);oButton.LineImg.style.width=(e.offsetWidth-2)+'px';FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(oButton.CommandName).Execute(0,e.offsetHeight-1,e);};function FCKToolbarPanelButton_OnPanelHide(){var oMenuButton=this._FCKToolbarPanelButton;oMenuButton._UIButton.ChangeState(FCK_TRISTATE_OFF);};FCKToolbarPanelButton.prototype.RefreshState=FCKToolbarButton.prototype.RefreshState;FCKToolbarPanelButton.prototype.Enable=FCKToolbarButton.prototype.Enable;FCKToolbarPanelButton.prototype.Disable=FCKToolbarButton.prototype.Disable; |
var FCKToolbarItems=new Object();FCKToolbarItems.LoadedItems=new Object();FCKToolbarItems.RegisterItem=function(A,B){this.LoadedItems[A]=B;};FCKToolbarItems.GetItem=function(A){var B=FCKToolbarItems.LoadedItems[A];if (B) return B;switch (A){case 'Source':B=new FCKToolbarButton('Source',FCKLang.Source,null,FCK_TOOLBARITEM_ICONTEXT,true,true,1);break;case 'DocProps':B=new FCKToolbarButton('DocProps',FCKLang.DocProps,null,null,null,null,2);break;case 'Save':B=new FCKToolbarButton('Save',FCKLang.Save,null,null,true,null,3);break;case 'NewPage':B=new FCKToolbarButton('NewPage',FCKLang.NewPage,null,null,true,null,4);break;case 'Preview':B=new FCKToolbarButton('Preview',FCKLang.Preview,null,null,true,null,5);break;case 'Templates':B=new FCKToolbarButton('Templates',FCKLang.Templates,null,null,null,null,6);break;case 'About':B=new FCKToolbarButton('About',FCKLang.About,null,null,true,null,47);break;case 'Cut':B=new FCKToolbarButton('Cut',FCKLang.Cut,null,null,false,true,7);break;case 'Copy':B=new FCKToolbarButton('Copy',FCKLang.Copy,null,null,false,true,8);break;case 'Paste':B=new FCKToolbarButton('Paste',FCKLang.Paste,null,null,false,true,9);break;case 'PasteText':B=new FCKToolbarButton('PasteText',FCKLang.PasteText,null,null,false,true,10);break;case 'PasteWord':B=new FCKToolbarButton('PasteWord',FCKLang.PasteWord,null,null,false,true,11);break;case 'Print':B=new FCKToolbarButton('Print',FCKLang.Print,null,null,false,true,12);break;case 'SpellCheck':B=new FCKToolbarButton('SpellCheck',FCKLang.SpellCheck,null,null,null,null,13);break;case 'Undo':B=new FCKToolbarButton('Undo',FCKLang.Undo,null,null,false,true,14);break;case 'Redo':B=new FCKToolbarButton('Redo',FCKLang.Redo,null,null,false,true,15);break;case 'SelectAll':B=new FCKToolbarButton('SelectAll',FCKLang.SelectAll,null,null,null,null,18);break;case 'RemoveFormat':B=new FCKToolbarButton('RemoveFormat',FCKLang.RemoveFormat,null,null,false,true,19);break;case 'FitWindow':B=new FCKToolbarButton('FitWindow',FCKLang.FitWindow,null,null,true,true,66);break;case 'Bold':B=new FCKToolbarButton('Bold',FCKLang.Bold,null,null,false,true,20);break;case 'Italic':B=new FCKToolbarButton('Italic',FCKLang.Italic,null,null,false,true,21);break;case 'Underline':B=new FCKToolbarButton('Underline',FCKLang.Underline,null,null,false,true,22);break;case 'StrikeThrough':B=new FCKToolbarButton('StrikeThrough',FCKLang.StrikeThrough,null,null,false,true,23);break;case 'Subscript':B=new FCKToolbarButton('Subscript',FCKLang.Subscript,null,null,false,true,24);break;case 'Superscript':B=new FCKToolbarButton('Superscript',FCKLang.Superscript,null,null,false,true,25);break;case 'OrderedList':B=new FCKToolbarButton('InsertOrderedList',FCKLang.NumberedListLbl,FCKLang.NumberedList,null,false,true,26);break;case 'UnorderedList':B=new FCKToolbarButton('InsertUnorderedList',FCKLang.BulletedListLbl,FCKLang.BulletedList,null,false,true,27);break;case 'Outdent':B=new FCKToolbarButton('Outdent',FCKLang.DecreaseIndent,null,null,false,true,28);break;case 'Indent':B=new FCKToolbarButton('Indent',FCKLang.IncreaseIndent,null,null,false,true,29);break;case 'Link':B=new FCKToolbarButton('Link',FCKLang.InsertLinkLbl,FCKLang.InsertLink,null,false,true,34);break;case 'Unlink':B=new FCKToolbarButton('Unlink',FCKLang.RemoveLink,null,null,false,true,35);break;case 'Anchor':B=new FCKToolbarButton('Anchor',FCKLang.Anchor,null,null,null,null,36);break;case 'Image':B=new FCKToolbarButton('Image',FCKLang.InsertImageLbl,FCKLang.InsertImage,null,false,true,37);break;case 'Flash':B=new FCKToolbarButton('Flash',FCKLang.InsertFlashLbl,FCKLang.InsertFlash,null,false,true,38);break;case 'Table':B=new FCKToolbarButton('Table',FCKLang.InsertTableLbl,FCKLang.InsertTable,null,false,true,39);break;case 'SpecialChar':B=new FCKToolbarButton('SpecialChar',FCKLang.InsertSpecialCharLbl,FCKLang.InsertSpecialChar,null,false,true,42);break;case 'Smiley':B=new FCKToolbarButton('Smiley',FCKLang.InsertSmileyLbl,FCKLang.InsertSmiley,null,false,true,41);break;case 'PageBreak':B=new FCKToolbarButton('PageBreak',FCKLang.PageBreakLbl,FCKLang.PageBreak,null,false,true,43);break;case 'UniversalKey':B=new FCKToolbarButton('UniversalKey',FCKLang.UniversalKeyboard,null,null,false,true,44);break;case 'Rule':B=new FCKToolbarButton('InsertHorizontalRule',FCKLang.InsertLineLbl,FCKLang.InsertLine,null,false,true,40);break;case 'JustifyLeft':B=new FCKToolbarButton('JustifyLeft',FCKLang.LeftJustify,null,null,false,true,30);break;case 'JustifyCenter':B=new FCKToolbarButton('JustifyCenter',FCKLang.CenterJustify,null,null,false,true,31);break;case 'JustifyRight':B=new FCKToolbarButton('JustifyRight',FCKLang.RightJustify,null,null,false,true,32);break;case 'JustifyFull':B=new FCKToolbarButton('JustifyFull',FCKLang.BlockJustify,null,null,false,true,33);break;case 'Style':B=new FCKToolbarStyleCombo();break;case 'FontName':B=new FCKToolbarFontsCombo();break;case 'FontSize':B=new FCKToolbarFontSizeCombo();break;case 'FontFormat':B=new FCKToolbarFontFormatCombo();break;case 'TextColor':B=new FCKToolbarPanelButton('TextColor',FCKLang.TextColor,null,null,45);break;case 'BGColor':B=new FCKToolbarPanelButton('BGColor',FCKLang.BGColor,null,null,46);break;case 'Find':B=new FCKToolbarButton('Find',FCKLang.Find,null,null,null,null,16);break;case 'Replace':B=new FCKToolbarButton('Replace',FCKLang.Replace,null,null,null,null,17);break;case 'Form':B=new FCKToolbarButton('Form',FCKLang.Form,null,null,null,null,48);break;case 'Checkbox':B=new FCKToolbarButton('Checkbox',FCKLang.Checkbox,null,null,null,null,49);break;case 'Radio':B=new FCKToolbarButton('Radio',FCKLang.RadioButton,null,null,null,null,50);break;case 'TextField':B=new FCKToolbarButton('TextField',FCKLang.TextField,null,null,null,null,51);break;case 'Textarea':B=new FCKToolbarButton('Textarea',FCKLang.Textarea,null,null,null,null,52);break;case 'HiddenField':B=new FCKToolbarButton('HiddenField',FCKLang.HiddenField,null,null,null,null,56);break;case 'Button':B=new FCKToolbarButton('Button',FCKLang.Button,null,null,null,null,54);break;case 'Select':B=new FCKToolbarButton('Select',FCKLang.SelectionField,null,null,null,null,53);break;case 'ImageButton':B=new FCKToolbarButton('ImageButton',FCKLang.ImageButton,null,null,null,null,55);break;default:alert(FCKLang.UnknownToolbarItem.replace(/%1/g,A));return null;};FCKToolbarItems.LoadedItems[A]=B;return B;} |
var FCKToolbar=function(){this.Items=new Array();if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKToolbar_Cleanup);};FCKToolbar.prototype.AddItem=function(A){return this.Items[this.Items.length]=A;};FCKToolbar.prototype.AddButton=function(A,B,C,D,E,F){if (typeof(D)=='number') D=[this.DefaultIconsStrip,this.DefaultIconSize,D];var G=new FCKToolbarButtonUI(A,B,C,D,E,F);G._FCKToolbar=this;G.OnClick=FCKToolbar_OnItemClick;return this.AddItem(G);};function FCKToolbar_OnItemClick(item){var oToolbar=item._FCKToolbar;if (oToolbar.OnItemClick) oToolbar.OnItemClick(oToolbar,item);};FCKToolbar.prototype.AddSeparator=function(){this.AddItem(new FCKToolbarSeparator());};FCKToolbar.prototype.Create=function(A){if (this.MainElement){if (this.MainElement.parentNode) this.MainElement.parentNode.removeChild(this.MainElement);this.MainElement=null;};var B=FCKTools.GetElementDocument(A);var e=this.MainElement=B.createElement('table');e.className='TB_Toolbar';e.style.styleFloat=e.style.cssFloat=(FCKLang.Dir=='ltr'?'left':'right');e.dir=FCKLang.Dir;e.cellPadding=0;e.cellSpacing=0;this.RowElement=e.insertRow(-1);var C;if (!this.HideStart){C=this.RowElement.insertCell(-1);C.appendChild(B.createElement('div')).className='TB_Start';};for (var i=0;i<this.Items.length;i++){this.Items[i].Create(this.RowElement.insertCell(-1));};if (!this.HideEnd){C=this.RowElement.insertCell(-1);C.appendChild(B.createElement('div')).className='TB_End';};A.appendChild(e);};function FCKToolbar_Cleanup(){this.MainElement=null;this.RowElement=null;};var FCKToolbarSeparator=function(){};FCKToolbarSeparator.prototype.Create=function(A){FCKTools.AppendElement(A,'div').className='TB_Separator';} |
var FCKToolbarBreak=function(){};FCKToolbarBreak.prototype.Create=function(A){var B=FCKTools.GetElementDocument(A).createElement('div');B.className='TB_Break';B.style.clear=FCKLang.Dir=='rtl'?'left':'right';A.appendChild(B);} |
function FCKToolbarSet_Create(overhideLocation){var oToolbarSet;var sLocation=overhideLocation||FCKConfig.ToolbarLocation;switch (sLocation){case 'In':document.getElementById('xToolbarRow').style.display='';oToolbarSet=new FCKToolbarSet(document);break;default:FCK.Events.AttachEvent('OnBlur',FCK_OnBlur);FCK.Events.AttachEvent('OnFocus',FCK_OnFocus);var eToolbarTarget;var oOutMatch=sLocation.match(/^Out:(.+)\((\w+)\)$/);if (oOutMatch){eToolbarTarget=eval('parent.'+oOutMatch[1]).document.getElementById(oOutMatch[2]);}else{oOutMatch=sLocation.match(/^Out:(\w+)$/);if (oOutMatch) eToolbarTarget=parent.document.getElementById(oOutMatch[1]);};if (!eToolbarTarget){alert('Invalid value for "ToolbarLocation"');return this._Init('In');};if (oToolbarSet=eToolbarTarget.__FCKToolbarSet) break;var eToolbarIFrame=FCKTools.GetElementDocument(eToolbarTarget).createElement('iframe');eToolbarIFrame.frameBorder=0;eToolbarIFrame.width='100%';eToolbarIFrame.height='10';eToolbarTarget.appendChild(eToolbarIFrame);eToolbarIFrame.unselectable='on';var eTargetDocument=eToolbarIFrame.contentWindow.document;eTargetDocument.open();eTargetDocument.write('<html><head><script type="text/javascript"> window.onload = window.onresize = function() { window.frameElement.height = document.body.scrollHeight ; } </script></head><body style="overflow: hidden">'+document.getElementById('xToolbarSpace').innerHTML+'</body></html>');eTargetDocument.close();eTargetDocument.oncontextmenu=FCKTools.CancelEvent;FCKTools.AppendStyleSheet(eTargetDocument,FCKConfig.SkinPath+'fck_editor.css');oToolbarSet=eToolbarTarget.__FCKToolbarSet=new FCKToolbarSet(eTargetDocument);oToolbarSet._IFrame=eToolbarIFrame;if (FCK.IECleanup) FCK.IECleanup.AddItem(eToolbarTarget,FCKToolbarSet_Target_Cleanup);};oToolbarSet.CurrentInstance=FCK;FCK.AttachToOnSelectionChange(oToolbarSet.RefreshItemsState);return oToolbarSet;};function FCK_OnBlur(editorInstance){var eToolbarSet=editorInstance.ToolbarSet;if (eToolbarSet.CurrentInstance==editorInstance) eToolbarSet.Disable();};function FCK_OnFocus(editorInstance){var oToolbarset=editorInstance.ToolbarSet;var oInstance=editorInstance||FCK;oToolbarset.CurrentInstance.FocusManager.RemoveWindow(oToolbarset._IFrame.contentWindow);oToolbarset.CurrentInstance=oInstance;oInstance.FocusManager.AddWindow(oToolbarset._IFrame.contentWindow,true);oToolbarset.Enable();};function FCKToolbarSet_Cleanup(){this._TargetElement=null;this._IFrame=null;};function FCKToolbarSet_Target_Cleanup(){this.__FCKToolbarSet=null;};var FCKToolbarSet=function(A){this._Document=A;this._TargetElement=A.getElementById('xToolbar');var B=A.getElementById('xExpandHandle');var C=A.getElementById('xCollapseHandle');B.title=FCKLang.ToolbarExpand;B.onclick=FCKToolbarSet_Expand_OnClick;C.title=FCKLang.ToolbarCollapse;C.onclick=FCKToolbarSet_Collapse_OnClick;if (!FCKConfig.ToolbarCanCollapse||FCKConfig.ToolbarStartExpanded) this.Expand();else this.Collapse();C.style.display=FCKConfig.ToolbarCanCollapse?'':'none';if (FCKConfig.ToolbarCanCollapse) C.style.display='';else A.getElementById('xTBLeftBorder').style.display='';this.Toolbars=new Array();this.IsLoaded=false;if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKToolbarSet_Cleanup);};function FCKToolbarSet_Expand_OnClick(){FCK.ToolbarSet.Expand();};function FCKToolbarSet_Collapse_OnClick(){FCK.ToolbarSet.Collapse();};FCKToolbarSet.prototype.Expand=function(){this._ChangeVisibility(false);};FCKToolbarSet.prototype.Collapse=function(){this._ChangeVisibility(true);};FCKToolbarSet.prototype._ChangeVisibility=function(A){this._Document.getElementById('xCollapsed').style.display=A?'':'none';this._Document.getElementById('xExpanded').style.display=A?'none':'';if (FCKBrowserInfo.IsGecko){FCKTools.RunFunction(window.onresize);}};FCKToolbarSet.prototype.Load=function(A){this.Name=A;this.Items=new Array();this.ItemsWysiwygOnly=new Array();this.ItemsContextSensitive=new Array();this._TargetElement.innerHTML='';var B=FCKConfig.ToolbarSets[A];if (!B){alert(FCKLang.UnknownToolbarSet.replace(/%1/g,A));return;};this.Toolbars=new Array();for (var x=0;x<B.length;x++){var C=B[x];var D;if (typeof(C)=='string'){if (C=='/') D=new FCKToolbarBreak();}else{D=new FCKToolbar();for (var j=0;j<C.length;j++){var E=C[j];if (E=='-') D.AddSeparator();else{var F=FCKToolbarItems.GetItem(E);if (F){D.AddItem(F);this.Items.push(F);if (!F.SourceView) this.ItemsWysiwygOnly.push(F);if (F.ContextSensitive) this.ItemsContextSensitive.push(F);}}}};D.Create(this._TargetElement);this.Toolbars[this.Toolbars.length]=D;};FCKTools.DisableSelection(this._Document.getElementById('xCollapseHandle').parentNode);if (FCK.Status!=FCK_STATUS_COMPLETE) FCK.Events.AttachEvent('OnStatusChange',this.RefreshModeState);else this.RefreshModeState();this.IsLoaded=true;this.IsEnabled=true;FCKTools.RunFunction(this.OnLoad);};FCKToolbarSet.prototype.Enable=function(){if (this.IsEnabled) return;this.IsEnabled=true;var A=this.Items;for (var i=0;i<A.length;i++) A[i].RefreshState();};FCKToolbarSet.prototype.Disable=function(){if (!this.IsEnabled) return;this.IsEnabled=false;var A=this.Items;for (var i=0;i<A.length;i++) A[i].Disable();};FCKToolbarSet.prototype.RefreshModeState=function(A){if (FCK.Status!=FCK_STATUS_COMPLETE) return;var B=A?A.ToolbarSet:this;var C=B.ItemsWysiwygOnly;if (FCK.EditMode==FCK_EDITMODE_WYSIWYG){for (var i=0;i<C.length;i++) C[i].Enable();B.RefreshItemsState(A);}else{B.RefreshItemsState(A);for (var i=0;i<C.length;i++) C[i].Disable();}};FCKToolbarSet.prototype.RefreshItemsState=function(A){var B=(A?A.ToolbarSet:this).ItemsContextSensitive;for (var i=0;i<B.length;i++) B[i].RefreshState();}; |
var FCKDialog=new Object();FCKDialog.OpenDialog=function(A,B,C,D,E,F,G,H){var I=new Object();I.Title=B;I.Page=C;I.Editor=window;I.CustomValue=F;var J=FCKConfig.BasePath+'fckdialog.html';this.Show(I,A,J,D,E,G,H);}; |
FCKDialog.Show=function(A,B,C,D,E,F){if (!F) F=window;FCKFocusManager.Lock();var G;try{G=F.showModalDialog(C,A,"dialogWidth:"+D+"px;dialogHeight:"+E+"px;help:no;scroll:no;status:no");}catch(e){};if (!G) alert(FCKLang.DialogBlocked);FCKFocusManager.Unlock();}; |
var FCKMenuItem=function(A,B,C,D,E){this.Name=B;this.Label=C||B;this.IsDisabled=E;this.Icon=new FCKIcon(D);this.SubMenu=new FCKMenuBlockPanel();this.SubMenu.Parent=A;this.SubMenu.OnClick=FCKTools.CreateEventListener(FCKMenuItem_SubMenu_OnClick,this);if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKMenuItem_Cleanup);};FCKMenuItem.prototype.AddItem=function(A,B,C,D){this.HasSubMenu=true;return this.SubMenu.AddItem(A,B,C,D);};FCKMenuItem.prototype.AddSeparator=function(){this.SubMenu.AddSeparator();};FCKMenuItem.prototype.Create=function(A){var B=this.HasSubMenu;var C=FCKTools.GetElementDocument(A);var r=this.MainElement=A.insertRow(-1);r.className=this.IsDisabled?'MN_Item_Disabled':'MN_Item';if (!this.IsDisabled){FCKTools.AddEventListenerEx(r,'mouseover',FCKMenuItem_OnMouseOver,[this]);FCKTools.AddEventListenerEx(r,'click',FCKMenuItem_OnClick,[this]);if (!B) FCKTools.AddEventListenerEx(r,'mouseout',FCKMenuItem_OnMouseOut,[this]);};var D=r.insertCell(-1);D.className='MN_Icon';D.appendChild(this.Icon.CreateIconElement(C));D=r.insertCell(-1);D.className='MN_Label';D.noWrap=true;D.appendChild(C.createTextNode(this.Label));D=r.insertCell(-1);if (B){D.className='MN_Arrow';var E=D.appendChild(C.createElement('IMG'));E.src=FCK_IMAGES_PATH+'arrow_'+FCKLang.Dir+'.gif';E.width=4;E.height=7;this.SubMenu.Create();this.SubMenu.Panel.OnHide=FCKTools.CreateEventListener(FCKMenuItem_SubMenu_OnHide,this);}};FCKMenuItem.prototype.Activate=function(){this.MainElement.className='MN_Item_Over';if (this.HasSubMenu){this.SubMenu.Show(this.MainElement.offsetWidth+2,-2,this.MainElement);};FCKTools.RunFunction(this.OnActivate,this);};FCKMenuItem.prototype.Deactivate=function(){this.MainElement.className='MN_Item';if (this.HasSubMenu) this.SubMenu.Hide();};/* Events */ function FCKMenuItem_SubMenu_OnClick(clickedItem,listeningItem){FCKTools.RunFunction(listeningItem.OnClick,listeningItem,[clickedItem]);};function FCKMenuItem_SubMenu_OnHide(menuItem){menuItem.Deactivate();};function FCKMenuItem_OnClick(ev,menuItem){if (menuItem.HasSubMenu) menuItem.Activate();else{menuItem.Deactivate();FCKTools.RunFunction(menuItem.OnClick,menuItem,[menuItem]);}};function FCKMenuItem_OnMouseOver(ev,menuItem){menuItem.Activate();};function FCKMenuItem_OnMouseOut(ev,menuItem){menuItem.Deactivate();};function FCKMenuItem_Cleanup(){this.MainElement=null;} |
var FCKMenuBlock=function(){this._Items=new Array();};FCKMenuBlock.prototype.Count=function(){return this._Items.length;};FCKMenuBlock.prototype.AddItem=function(A,B,C,D){var E=new FCKMenuItem(this,A,B,C,D);E.OnClick=FCKTools.CreateEventListener(FCKMenuBlock_Item_OnClick,this);E.OnActivate=FCKTools.CreateEventListener(FCKMenuBlock_Item_OnActivate,this);this._Items.push(E);return E;};FCKMenuBlock.prototype.AddSeparator=function(){this._Items.push(new FCKMenuSeparator());};FCKMenuBlock.prototype.RemoveAllItems=function(){this._Items=new Array();var A=this._ItemsTable;if (A){while (A.rows.length>0) A.deleteRow(0);}};FCKMenuBlock.prototype.Create=function(A){if (!this._ItemsTable){if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKMenuBlock_Cleanup);this._Window=FCKTools.GetElementWindow(A);var B=FCKTools.GetElementDocument(A);var C=A.appendChild(B.createElement('table'));C.cellPadding=0;C.cellSpacing=0;FCKTools.DisableSelection(C);var D=C.insertRow(-1).insertCell(-1);D.className='MN_Menu';var E=this._ItemsTable=D.appendChild(B.createElement('table'));E.cellPadding=0;E.cellSpacing=0;};for (var i=0;i<this._Items.length;i++) this._Items[i].Create(this._ItemsTable);};/* Events */ function FCKMenuBlock_Item_OnClick(clickedItem,menuBlock){FCKTools.RunFunction(menuBlock.OnClick,menuBlock,[clickedItem]);};function FCKMenuBlock_Item_OnActivate(menuBlock){var oActiveItem=menuBlock._ActiveItem;if (oActiveItem&&oActiveItem!=this){if (!FCKBrowserInfo.IsIE&&oActiveItem.HasSubMenu&&!this.HasSubMenu) menuBlock._Window.focus();oActiveItem.Deactivate();};menuBlock._ActiveItem=this;};function FCKMenuBlock_Cleanup(){this._Window=null;this._ItemsTable=null;};var FCKMenuSeparator=function(){};FCKMenuSeparator.prototype.Create=function(A){var B=FCKTools.GetElementDocument(A);var r=A.insertRow(-1);var C=r.insertCell(-1);C.className='MN_Separator MN_Icon';C=r.insertCell(-1);C.className='MN_Separator';C.appendChild(B.createElement('DIV')).className='MN_Separator_Line';C=r.insertCell(-1);C.className='MN_Separator';C.appendChild(B.createElement('DIV')).className='MN_Separator_Line';} |
var FCKMenuBlockPanel=function(){FCKMenuBlock.call(this);};FCKMenuBlockPanel.prototype=new FCKMenuBlock();FCKMenuBlockPanel.prototype.Create=function(){var A=this.Panel=(this.Parent&&this.Parent.Panel?this.Parent.Panel.CreateChildPanel():new FCKPanel());A.AppendStyleSheet(FCKConfig.SkinPath+'fck_editor.css');FCKMenuBlock.prototype.Create.call(this,A.MainNode);};FCKMenuBlockPanel.prototype.Show=function(x,y,A){if (!this.Panel.CheckIsOpened()) this.Panel.Show(x,y,A);};FCKMenuBlockPanel.prototype.Hide=function(){if (this.Panel.CheckIsOpened()) this.Panel.Hide();} |
var FCKContextMenu=function(A,B,C){var D=this._Panel=new FCKPanel(A,true);D.AppendStyleSheet(FCKConfig.SkinPath+'fck_editor.css');D.IsContextMenu=true;var E=this._MenuBlock=new FCKMenuBlock();E.Panel=D;E.OnClick=FCKTools.CreateEventListener(FCKContextMenu_MenuBlock_OnClick,this);this._Redraw=true;this.SetMouseClickWindow(B||A);};FCKContextMenu.prototype.SetMouseClickWindow=function(A){if (!FCKBrowserInfo.IsIE){this._Document=A.document;this._Document.addEventListener('contextmenu',FCKContextMenu_Document_OnContextMenu,false);}};FCKContextMenu.prototype.AddItem=function(A,B,C,D){var E=this._MenuBlock.AddItem(A,B,C,D);this._Redraw=true;return E;};FCKContextMenu.prototype.AddSeparator=function(){this._MenuBlock.AddSeparator();this._Redraw=true;};FCKContextMenu.prototype.RemoveAllItems=function(){this._MenuBlock.RemoveAllItems();this._Redraw=true;};FCKContextMenu.prototype.AttachToElement=function(A){if (FCKBrowserInfo.IsIE) FCKTools.AddEventListenerEx(A,'contextmenu',FCKContextMenu_AttachedElement_OnContextMenu,this);else A._FCKContextMenu=this;};function FCKContextMenu_Document_OnContextMenu(e){var el=e.target;while (el){if (el._FCKContextMenu){FCKTools.CancelEvent(e);FCKContextMenu_AttachedElement_OnContextMenu(e,el._FCKContextMenu,el);};el=el.parentNode;}};function FCKContextMenu_AttachedElement_OnContextMenu(ev,fckContextMenu,el){var eTarget=el||this;if (fckContextMenu.OnBeforeOpen) fckContextMenu.OnBeforeOpen.call(fckContextMenu,eTarget);if (fckContextMenu._MenuBlock.Count()==0) return false;if (fckContextMenu._Redraw){fckContextMenu._MenuBlock.Create(fckContextMenu._Panel.MainNode);fckContextMenu._Redraw=false;};fckContextMenu._Panel.Show(ev.pageX||ev.screenX,ev.pageY||ev.screenY,ev.currentTarget||null);return false;};function FCKContextMenu_MenuBlock_OnClick(menuItem,contextMenu){contextMenu._Panel.Hide();FCKTools.RunFunction(contextMenu.OnItemClick,contextMenu,menuItem);} |
FCK.ContextMenu=new Object();FCK.ContextMenu.Listeners=new Array();FCK.ContextMenu.RegisterListener=function(A){if (A) this.Listeners.push(A);};function FCK_ContextMenu_Init(){var oInnerContextMenu=FCK.ContextMenu._InnerContextMenu=new FCKContextMenu(FCKBrowserInfo.IsIE?window:window.parent,FCK.EditorWindow,FCKLang.Dir);oInnerContextMenu.OnBeforeOpen=FCK_ContextMenu_OnBeforeOpen;oInnerContextMenu.OnItemClick=FCK_ContextMenu_OnItemClick;var oMenu=FCK.ContextMenu;for (var i=0;i<FCKConfig.ContextMenu.length;i++) oMenu.RegisterListener(FCK_ContextMenu_GetListener(FCKConfig.ContextMenu[i]));};function FCK_ContextMenu_GetListener(listenerName){switch (listenerName){case 'Generic':return {AddItems:function(A,B,C){A.AddItem('Cut',FCKLang.Cut,7,FCKCommands.GetCommand('Cut').GetState()==FCK_TRISTATE_DISABLED);A.AddItem('Copy',FCKLang.Copy,8,FCKCommands.GetCommand('Copy').GetState()==FCK_TRISTATE_DISABLED);A.AddItem('Paste',FCKLang.Paste,9,FCKCommands.GetCommand('Paste').GetState()==FCK_TRISTATE_DISABLED);}};case 'Table':return {AddItems:function(A,B,C){var D=(C=='TABLE');var E=(!D&&FCKSelection.HasAncestorNode('TABLE'));if (E){A.AddSeparator();var F=A.AddItem('Cell',FCKLang.CellCM);F.AddItem('TableInsertCell',FCKLang.InsertCell,58);F.AddItem('TableDeleteCells',FCKLang.DeleteCells,59);F.AddItem('TableMergeCells',FCKLang.MergeCells,60);F.AddItem('TableSplitCell',FCKLang.SplitCell,61);F.AddSeparator();F.AddItem('TableCellProp',FCKLang.CellProperties,57);A.AddSeparator();F=A.AddItem('Row',FCKLang.RowCM);F.AddItem('TableInsertRow',FCKLang.InsertRow,62);F.AddItem('TableDeleteRows',FCKLang.DeleteRows,63);A.AddSeparator();F=A.AddItem('Column',FCKLang.ColumnCM);F.AddItem('TableInsertColumn',FCKLang.InsertColumn,64);F.AddItem('TableDeleteColumns',FCKLang.DeleteColumns,65);};if (D||E){A.AddSeparator();A.AddItem('TableDelete',FCKLang.TableDelete);A.AddItem('TableProp',FCKLang.TableProperties,39);}}};case 'Link':return {AddItems:function(A,B,C){var D=(C=='A'||FCKSelection.HasAncestorNode('A'));if (D||FCK.GetNamedCommandState('Unlink')!=FCK_TRISTATE_DISABLED){A.AddSeparator();if (D) A.AddItem('Link',FCKLang.EditLink,34);A.AddItem('Unlink',FCKLang.RemoveLink,35);}}};case 'Image':return {AddItems:function(A,B,C){if (C=='IMG'&&!B.getAttribute('_fckfakelement')){A.AddSeparator();A.AddItem('Image',FCKLang.ImageProperties,37);}}};case 'Anchor':return {AddItems:function(A,B,C){if (C=='IMG'&&B.getAttribute('_fckanchor')){A.AddSeparator();A.AddItem('Anchor',FCKLang.AnchorProp,36);}}};case 'Flash':return {AddItems:function(A,B,C){if (C=='IMG'&&B.getAttribute('_fckflash')){A.AddSeparator();A.AddItem('Flash',FCKLang.FlashProperties,38);}}};case 'Form':return {AddItems:function(A,B,C){if (FCKSelection.HasAncestorNode('FORM')){A.AddSeparator();A.AddItem('Form',FCKLang.FormProp,48);}}};case 'Checkbox':return {AddItems:function(A,B,C){if (C=='INPUT'&&B.type=='checkbox'){A.AddSeparator();A.AddItem('Checkbox',FCKLang.CheckboxProp,49);}}};case 'Radio':return {AddItems:function(A,B,C){if (C=='INPUT'&&B.type=='radio'){A.AddSeparator();A.AddItem('Radio',FCKLang.RadioButtonProp,50);}}};case 'TextField':return {AddItems:function(A,B,C){if (C=='INPUT'&&(B.type=='text'||B.type=='password')){A.AddSeparator();A.AddItem('TextField',FCKLang.TextFieldProp,51);}}};case 'HiddenField':return {AddItems:function(A,B,C){if (C=='INPUT'&&B.type=='hidden'){A.AddSeparator();A.AddItem('HiddenField',FCKLang.HiddenFieldProp,56);}}};case 'ImageButton':return {AddItems:function(A,B,C){if (C=='INPUT'&&B.type=='image'){A.AddSeparator();A.AddItem('ImageButton',FCKLang.ImageButtonProp,55);}}};case 'Button':return {AddItems:function(A,B,C){if (C=='INPUT'&&(B.type=='button'||B.type=='submit'||B.type=='reset')){A.AddSeparator();A.AddItem('Button',FCKLang.ButtonProp,54);}}};case 'Select':return {AddItems:function(A,B,C){if (C=='SELECT'){A.AddSeparator();A.AddItem('Select',FCKLang.SelectionFieldProp,53);}}};case 'Textarea':return {AddItems:function(A,B,C){if (C=='TEXTAREA'){A.AddSeparator();A.AddItem('Textarea',FCKLang.TextareaProp,52);}}};case 'BulletedList':return {AddItems:function(A,B,C){if (FCKSelection.HasAncestorNode('UL')){A.AddSeparator();A.AddItem('BulletedList',FCKLang.BulletedListProp,27);}}};case 'NumberedList':return {AddItems:function(A,B,C){if (FCKSelection.HasAncestorNode('OL')){A.AddSeparator();A.AddItem('NumberedList',FCKLang.NumberedListProp,26);}}};}};function FCK_ContextMenu_OnBeforeOpen(){FCK.Events.FireEvent("OnSelectionChange");var oTag,sTagName;if (oTag=FCKSelection.GetSelectedElement()) sTagName=oTag.tagName;var oMenu=FCK.ContextMenu._InnerContextMenu;oMenu.RemoveAllItems();var aListeners=FCK.ContextMenu.Listeners;for (var i=0;i<aListeners.length;i++) aListeners[i].AddItems(oMenu,oTag,sTagName);};function FCK_ContextMenu_OnItemClick(item){FCK.Focus();FCKCommands.GetCommand(item.Name).Execute();} |
var FCKPlugin=function(A,B,C){this.Name=A;this.BasePath=C?C:FCKConfig.PluginsPath;this.Path=this.BasePath+A+'/';if (!B||B.length==0) this.AvailableLangs=new Array();else this.AvailableLangs=B.split(',');};FCKPlugin.prototype.Load=function(){if (this.AvailableLangs.length>0){var A;if (this.AvailableLangs.indexOf(FCKLanguageManager.ActiveLanguage.Code)>=0) A=FCKLanguageManager.ActiveLanguage.Code;else A=this.AvailableLangs[0];LoadScript(this.Path+'lang/'+A+'.js');};LoadScript(this.Path+'fckplugin.js');} |
var FCKPlugins=FCK.Plugins=new Object();FCKPlugins.ItemsCount=0;FCKPlugins.Items=new Object();FCKPlugins.Load=function(){var A=FCKPlugins.Items;for (var i=0;i<FCKConfig.Plugins.Items.length;i++){var B=FCKConfig.Plugins.Items[i];var C=A[B[0]]=new FCKPlugin(B[0],B[1],B[2]);FCKPlugins.ItemsCount++;};for (var s in A) A[s].Load();FCKPlugins.Load=null;} |
/branches/v1.0-menes/api/fckeditor/editor/js/fckeditorcode_gecko.js |
---|
New file |
0,0 → 1,80 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* This file has been compacted for best loading performance. |
*/ |
var FCK_STATUS_NOTLOADED=window.parent.FCK_STATUS_NOTLOADED=0;var FCK_STATUS_ACTIVE=window.parent.FCK_STATUS_ACTIVE=1;var FCK_STATUS_COMPLETE=window.parent.FCK_STATUS_COMPLETE=2;var FCK_TRISTATE_OFF=window.parent.FCK_TRISTATE_OFF=0;var FCK_TRISTATE_ON=window.parent.FCK_TRISTATE_ON=1;var FCK_TRISTATE_DISABLED=window.parent.FCK_TRISTATE_DISABLED=-1;var FCK_UNKNOWN=window.parent.FCK_UNKNOWN=-9;var FCK_TOOLBARITEM_ONLYICON=window.parent.FCK_TOOLBARITEM_ONLYICON=0;var FCK_TOOLBARITEM_ONLYTEXT=window.parent.FCK_TOOLBARITEM_ONLYTEXT=1;var FCK_TOOLBARITEM_ICONTEXT=window.parent.FCK_TOOLBARITEM_ICONTEXT=2;var FCK_EDITMODE_WYSIWYG=window.parent.FCK_EDITMODE_WYSIWYG=0;var FCK_EDITMODE_SOURCE=window.parent.FCK_EDITMODE_SOURCE=1;var FCK_IMAGES_PATH='images/';var FCK_SPACER_PATH='images/spacer.gif'; |
String.prototype.Contains=function(A){return (this.indexOf(A)>-1);};String.prototype.Equals=function(){for (var i=0;i<arguments.length;i++) if (this==arguments[i]) return true;return false;};String.prototype.ReplaceAll=function(A,B){var C=this;for (var i=0;i<A.length;i++){C=C.replace(A[i],B[i]);};return C;};Array.prototype.AddItem=function(A){var i=this.length;this[i]=A;return i;};Array.prototype.indexOf=function(A){for (var i=0;i<this.length;i++){if (this[i]==A) return i;};return-1;};String.prototype.startsWith=function(A){return (this.substr(0,A.length)==A);};String.prototype.endsWith=function(A,B){var C=this.length;var D=A.length;if (D>C) return false;if (B){var E=new RegExp(A+'$','i');return E.test(this);}else return (D==0||this.substr(C-D,D)==A);};String.prototype.remove=function(A,B){var s='';if (A>0) s=this.substring(0,A);if (A+B<this.length) s+=this.substring(A+B,this.length);return s;};String.prototype.trim=function(){return this.replace(/(^\s*)|(\s*$)/g,'');};String.prototype.ltrim=function(){return this.replace(/^\s*/g,'');};String.prototype.rtrim=function(){return this.replace(/\s*$/g,'');};String.prototype.replaceNewLineChars=function(A){return this.replace(/\n/g,A);} |
var s=navigator.userAgent.toLowerCase();var FCKBrowserInfo={IsIE:s.Contains('msie'),IsIE7:s.Contains('msie 7'),IsGecko:s.Contains('gecko/'),IsSafari:s.Contains('safari'),IsOpera:s.Contains('opera')};FCKBrowserInfo.IsGeckoLike=FCKBrowserInfo.IsGecko||FCKBrowserInfo.IsSafari||FCKBrowserInfo.IsOpera;if (FCKBrowserInfo.IsGecko){var sGeckoVersion=s.match(/gecko\/(\d+)/)[1];FCKBrowserInfo.IsGecko10=sGeckoVersion<20051111;} |
var FCKURLParams=new Object();var aParams=document.location.search.substr(1).split('&');for (var i=0;i<aParams.length;i++){var aParam=aParams[i].split('=');var sParamName=aParam[0];var sParamValue=aParam[1];FCKURLParams[sParamName]=sParamValue;} |
var FCK=new Object();FCK.Name=FCKURLParams['InstanceName'];FCK.Status=FCK_STATUS_NOTLOADED;FCK.EditMode=FCK_EDITMODE_WYSIWYG;FCK.LoadLinkedFile=function(){var A=window.parent.document;var B=A.getElementById(FCK.Name);var C=A.getElementsByName(FCK.Name);var i=0;while (B||i==0){if (B&&(B.tagName.toLowerCase()=='input'||B.tagName.toLowerCase()=='textarea')){FCK.LinkedField=B;break;};B=C[i++];}};FCK.LoadLinkedFile();var FCKTempBin=new Object();FCKTempBin.Elements=new Array();FCKTempBin.AddElement=function(A){var B=this.Elements.length;this.Elements[B]=A;return B;};FCKTempBin.RemoveElement=function(A){var e=this.Elements[A];this.Elements[A]=null;return e;};FCKTempBin.Reset=function(){var i=0;while (i<this.Elements.length) this.Elements[i++]==null;this.Elements.length=0;} |
var FCKConfig=FCK.Config=new Object();if (document.location.protocol=='file:'){FCKConfig.BasePath=unescape(document.location.pathname.substr(1));FCKConfig.BasePath=FCKConfig.BasePath.replace(/\\/gi, '/');FCKConfig.BasePath='file://'+FCKConfig.BasePath.substring(0,FCKConfig.BasePath.lastIndexOf('/')+1);FCKConfig.FullBasePath=FCKConfig.BasePath;}else{FCKConfig.BasePath=document.location.pathname.substring(0,document.location.pathname.lastIndexOf('/')+1);FCKConfig.FullBasePath=document.location.protocol+'//'+document.location.host+FCKConfig.BasePath;};FCKConfig.EditorPath=FCKConfig.BasePath.replace(/editor\/$/,'');try{FCKConfig.ScreenWidth=screen.width;FCKConfig.ScreenHeight=screen.height;}catch (e){FCKConfig.ScreenWidth=800;FCKConfig.ScreenHeight=600;};FCKConfig.ProcessHiddenField=function(){this.PageConfig=new Object();var A=window.parent.document.getElementById(FCK.Name+'___Config');if (!A) return;var B=A.value.split('&');for (var i=0;i<B.length;i++){if (B[i].length==0) continue;var C=B[i].split('=');var D=unescape(C[0]);var E=unescape(C[1]);if (D=='CustomConfigurationsPath') FCKConfig[D]=E;else if (E.toLowerCase()=="true") this.PageConfig[D]=true;else if (E.toLowerCase()=="false") this.PageConfig[D]=false;else if (E.length>0&&!isNaN(E)) this.PageConfig[D]=parseInt(E);else this.PageConfig[D]=E;}};function FCKConfig_LoadPageConfig(){var oPageConfig=FCKConfig.PageConfig;for (var sKey in oPageConfig) FCKConfig[sKey]=oPageConfig[sKey];};function FCKConfig_PreProcess(){var oConfig=FCKConfig;if (oConfig.AllowQueryStringDebug){try{if ((/fckdebug=true/i).test(window.top.location.search)) oConfig.Debug=true;}catch (e) { /* Ignore it. Much probably we are inside a FRAME where the "top" is in another domain (security error). */ }};if (!oConfig.PluginsPath.endsWith('/')) oConfig.PluginsPath+='/';if (typeof(oConfig.EditorAreaCSS)=='string') oConfig.EditorAreaCSS=[oConfig.EditorAreaCSS];var sComboPreviewCSS=oConfig.ToolbarComboPreviewCSS;if (!sComboPreviewCSS||sComboPreviewCSS.length==0) oConfig.ToolbarComboPreviewCSS=oConfig.EditorAreaCSS;else if (typeof(sComboPreviewCSS)=='string') oConfig.ToolbarComboPreviewCSS=[sComboPreviewCSS];};FCKConfig.ToolbarSets=new Object();FCKConfig.Plugins=new Object();FCKConfig.Plugins.Items=new Array();FCKConfig.Plugins.Add=function(A,B,C){FCKConfig.Plugins.Items.AddItem([A,B,C]);};FCKConfig.ProtectedSource=new Object();FCKConfig.ProtectedSource.RegexEntries=[/<!--[\s\S]*?-->/g,/<script[\s\S]*?<\/script>/gi,/<noscript[\s\S]*?<\/noscript>/gi];FCKConfig.ProtectedSource.Add=function(A){this.RegexEntries.AddItem(A);};FCKConfig.ProtectedSource.Protect=function(A){function _Replace(protectedSource){var B=FCKTempBin.AddElement(protectedSource);return '<!--{PS..'+B+'}-->';};for (var i=0;i<this.RegexEntries.length;i++){A=A.replace(this.RegexEntries[i],_Replace);};return A;};FCKConfig.ProtectedSource.Revert=function(A,B){function _Replace(m,opener,index){var C=B?FCKTempBin.RemoveElement(index):FCKTempBin.Elements[index];return FCKConfig.ProtectedSource.Revert(C,B);};return A.replace(/(<|<)!--\{PS..(\d+)\}--(>|>)/g,_Replace);} |
var FCKDebug=new Object();FCKDebug.Output=function(A,B,C){if (!FCKConfig.Debug) return;if (!C&&A!=null&&isNaN(A)) A=A.replace(/</g,"<");if (!this.DebugWindow||this.DebugWindow.closed) this.DebugWindow=window.open(FCKConfig.BasePath+'fckdebug.html','FCKeditorDebug','menubar=no,scrollbars=no,resizable=yes,location=no,toolbar=no,width=600,height=500',true);if (this.DebugWindow&&this.DebugWindow.Output){try{this.DebugWindow.Output(A,B);}catch (e) {}}};FCKDebug.OutputObject=function(A,B){if (!FCKConfig.Debug) return;var C;if (A!=null){C='Properties of: '+A+'</b><blockquote>';for (var D in A){try{var E=A[D]?A[D]+'':'[null]';C+='<b>'+D+'</b> : '+E.replace(/</g,'<')+'<br>';}catch (e){try{C+='<b>'+D+'</b> : ['+typeof(A[D])+']<br>';}catch (e){C+='<b>'+D+'</b> : [-error-]<br>';}}};C+='</blockquote><b>';} else C='OutputObject : Object is "null".';FCKDebug.Output(C,B,true);} |
var FCKTools=new Object();FCKTools.AppendStyleSheet=function(A,B){if (typeof(B)=='string') return this._AppendStyleSheet(A,B);else{for (var i=0;i<B.length;i++) this._AppendStyleSheet(A,B[i]);}};FCKTools.GetLinkedFieldValue=function(){return FCK.LinkedField.value;};FCKTools.AttachToLinkedFieldFormSubmit=function(A){var B=FCK.LinkedField.form;if (!B) return;if (FCKBrowserInfo.IsIE) B.attachEvent("onsubmit",A);else B.addEventListener('submit',A,false);if (!B.updateFCKeditor) B.updateFCKeditor=new Array();B.updateFCKeditor[B.updateFCKeditor.length]=A;if (!B.originalSubmit&&(typeof(B.submit)=='function'||(!B.submit.tagName&&!B.submit.length))){B.originalSubmit=B.submit;B.submit=FCKTools_SubmitReplacer;}};function FCKTools_SubmitReplacer(){if (this.updateFCKeditor){for (var i=0;i<this.updateFCKeditor.length;i++) this.updateFCKeditor[i]();};this.originalSubmit();};FCKTools.GetElementWindow=function(A){return this.GetDocumentWindow(this.GetElementDocument(A));};FCKTools.GetDocumentWindow=function(A){if (FCKBrowserInfo.IsSafari&&!A.parentWindow) this.FixDocumentParentWindow(window.top);return A.parentWindow||A.defaultView;};FCKTools.FixDocumentParentWindow=function(A){A.document.parentWindow=A;for (var i=0;i<A.frames.length;i++) FCKTools.FixDocumentParentWindow(A.frames[i]);};FCKTools.GetParentWindow=function(A){return A.contentWindow?A.contentWindow:A.parentWindow;};FCKTools.HTMLEncode=function(A){if (!A) return '';A=A.replace(/&/g,'&');A=A.replace(/</g,'<');A=A.replace(/>/g,'>');return A;};FCKTools.AddSelectOption=function(A,B,C){var D=FCKTools.GetElementDocument(A).createElement("OPTION");D.text=B;D.value=C;A.options.add(D);return D;};FCKTools.RunFunction=function(A,B,C,D){if (A) this.SetTimeout(A,0,B,C,D);};FCKTools.SetTimeout=function(A,B,C,D,E){return (E||window).setTimeout(function(){if (D) A.apply(C,[].concat(D));else A.apply(C);},B);};FCKTools.SetInterval=function(A,B,C,D,E){return (E||window).setInterval(function(){A.apply(C,D||[]);},B);};FCKTools.ConvertStyleSizeToHtml=function(A){return A.endsWith('%')?A:parseInt(A);};FCKTools.ConvertHtmlSizeToStyle=function(A){return A.endsWith('%')?A:(A+'px');};FCKTools.GetElementAscensor=function(A,B){var e=A;var C=","+B.toUpperCase()+",";while (e){if (C.indexOf(","+e.nodeName.toUpperCase()+",")!=-1) return e;e=e.parentNode;};return null;};FCKTools.CreateEventListener=function(A,B){var f=function(){var C=[];for (var i=0;i<arguments.length;i++) C.push(arguments[i]);A.apply(this,C.concat(B));};return f;};FCKTools.GetElementDocument=function (A){return A.ownerDocument||A.document;} |
var GECKO_BOGUS=FCKBrowserInfo.IsGecko?'<br _moz_editor_bogus_node="TRUE">':'';FCKTools.CancelEvent=function(e){if (e) e.preventDefault();};FCKTools.DisableSelection=function(A){if (FCKBrowserInfo.IsGecko) A.style.MozUserSelect='none';else A.style.userSelect='none';};FCKTools._AppendStyleSheet=function(A,B){var e=A.createElement('LINK');e.rel='stylesheet';e.type='text/css';e.href=B;A.getElementsByTagName("HEAD")[0].appendChild(e);return e;};FCKTools.ClearElementAttributes=function(A){for (var i=0;i<A.attributes.length;i++){A.removeAttribute(A.attributes[i].name,0);}};FCKTools.GetAllChildrenIds=function(A){var B=new Array();var C=function(parent){for (var i=0;i<parent.childNodes.length;i++){var D=parent.childNodes[i].id;if (D&&D.length>0) B[B.length]=D;C(parent.childNodes[i]);}};C(A);return B;};FCKTools.RemoveOuterTags=function(e){var A=e.ownerDocument.createDocumentFragment();for (var i=0;i<e.childNodes.length;i++) A.appendChild(e.childNodes[i]);e.parentNode.replaceChild(A,e);};FCKTools.CreateXmlObject=function(A){switch (A){case 'XmlHttp':return new XMLHttpRequest();case 'DOMDocument':return document.implementation.createDocument('','',null);};return null;};FCKTools.GetScrollPosition=function(A){return { X:A.pageXOffset,Y:A.pageYOffset };};FCKTools.AddEventListener=function(A,B,C){A.addEventListener(B,C,false);};FCKTools.RemoveEventListener=function(A,B,C){A.removeEventListener(B,C,false);};FCKTools.AddEventListenerEx=function(A,B,C,D){A.addEventListener(B,function(e){C.apply(A,[e].concat(D||[]));},false);};FCKTools.GetViewPaneSize=function(A){return { Width:A.innerWidth,Height:A.innerHeight };};FCKTools.SaveStyles=function(A){var B=new Object();if (A.className.length>0){B.Class=A.className;A.className='';};var C=A.getAttribute('style');if (C&&C.length>0){B.Inline=C;A.setAttribute('style','',0);};return B;};FCKTools.RestoreStyles=function(A,B){A.className=B.Class||'';if (B.Inline) A.setAttribute('style',B.Inline,0);else A.removeAttribute('style',0);};FCKTools.RegisterDollarFunction=function(A){A.$=function(id){return this.document.getElementById(id);};};FCKTools.AppendElement=function(A,B){return A.appendChild(A.ownerDocument.createElement(B));};FCKTools.GetElementPosition=function(A,B){var c={ X:0,Y:0 };var C=B||window;var D=FCKTools.GetElementWindow(A);while (A){var E=D.getComputedStyle(A,'').position;if (E&&E!='static'&&A.style.zIndex!=FCKConfig.FloatingPanelsZIndex) break;c.X+=A.offsetLeft-A.scrollLeft;c.Y+=A.offsetTop-A.scrollTop;if (A.offsetParent) A=A.offsetParent;else{if (D!=C){if (A=D.frameElement) D=FCKTools.GetElementWindow(A);}else{c.X+=A.scrollLeft;c.Y+=A.scrollTop;break;}}};return c;} |
var FCKeditorAPI;function InitializeAPI(){if (!(FCKeditorAPI=window.parent.FCKeditorAPI)){var sScript='\ var FCKeditorAPI={\ Version:\'2.3.2\',\ VersionBuild:\'1082\',\ __Instances:new Object(),\ GetInstance:function(instanceName)\{\ return this.__Instances[instanceName];\},\ _FunctionQueue:{\ Functions:new Array(),\ IsRunning:false,\ Add:function(functionToAdd)\{\ this.Functions.push(functionToAdd);\ if (!this.IsRunning)\ this.StartNext();\},\ StartNext:function()\{\ var aQueue=this.Functions;\ if (aQueue.length>0)\{\ this.IsRunning=true;\ aQueue[0].call();\}\ else\ this.IsRunning=false;\},\ Remove:function(func)\{\ var aQueue=this.Functions;\ var i=0,fFunc;\ while(fFunc=aQueue[i])\{\ if (fFunc==func)\ aQueue.splice(i,1);\ i++;\}\ this.StartNext();\}\}\}';if (window.parent.execScript) window.parent.execScript(sScript,'JavaScript');else{if (FCKBrowserInfo.IsGecko10){eval.call(window.parent,sScript);}else window.parent.eval(sScript);};FCKeditorAPI=window.parent.FCKeditorAPI;};FCKeditorAPI.__Instances[FCK.Name]=FCK;};function FCKeditorAPI_Cleanup(){FCKeditorAPI.__Instances[FCK.Name]=null;};FCKTools.AddEventListener(window,'unload',FCKeditorAPI_Cleanup); |
var FCKRegexLib={AposEntity:/'/gi,ObjectElements:/^(?:IMG|TABLE|TR|TD|TH|INPUT|SELECT|TEXTAREA|HR|OBJECT|A|UL|OL|LI)$/i,BlockElements:/^(?:P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|TD|TH)$/i,EmptyElements:/^(?:BASE|META|LINK|HR|BR|PARAM|IMG|AREA|INPUT)$/i,NamedCommands:/^(?:Cut|Copy|Paste|Print|SelectAll|RemoveFormat|Unlink|Undo|Redo|Bold|Italic|Underline|StrikeThrough|Subscript|Superscript|JustifyLeft|JustifyCenter|JustifyRight|JustifyFull|Outdent|Indent|InsertOrderedList|InsertUnorderedList|InsertHorizontalRule)$/i,BodyContents:/([\s\S]*\<body[^\>]*\>)([\s\S]*)(\<\/body\>[\s\S]*)/i,ToReplace:/___fcktoreplace:([\w]+)/ig,MetaHttpEquiv:/http-equiv\s*=\s*["']?([^"' ]+)/i,HasBaseTag:/<base /i,HtmlOpener:/<html\s?[^>]*>/i,HeadOpener:/<head\s?[^>]*>/i,HeadCloser:/<\/head\s*>/i,TableBorderClass:/\s*FCK__ShowTableBorders\s*/,ElementName:/(^[A-Za-z_:][\w.\-:]*\w$)|(^[A-Za-z_]$)/,ForceSimpleAmpersand:/___FCKAmp___/g,SpaceNoClose:/\/>/g,EmptyParagraph:/^<(p|div)>\s*<\/\1>$/i,TagBody:/></,StrongOpener:/<STRONG([ \>])/gi,StrongCloser:/<\/STRONG>/gi,EmOpener:/<EM([ \>])/gi,EmCloser:/<\/EM>/gi,AbbrOpener:/<ABBR([ \>])/gi,AbbrCloser:/<\/ABBR>/gi,GeckoEntitiesMarker:/#\?-\:/g,ProtectUrlsImg:/(?:(<img(?=\s).*?\ssrc=)("|')(.*?)\2)|(?:(<img\s.*?src=)([^"'][^ >]+))/gi,ProtectUrlsA:/(?:(<a(?=\s).*?\shref=)("|')(.*?)\2)|(?:(<a\s.*?href=)([^"'][^ >]+))/gi,Html4DocType:/HTML 4\.0 Transitional/i,DocTypeTag:/<!DOCTYPE[^>]*>/i,TagsWithEvent:/<[^\>]+ on\w+[\s\r\n]*=[\s\r\n]*?('|")[\s\S]+?\>/g,EventAttributes:/\s(on\w+)[\s\r\n]*=[\s\r\n]*?('|")([\s\S]*?)\2/g,ProtectedEvents:/\s\w+_fckprotectedatt="([^"]+)"/g} |
var FCKLanguageManager=FCK.Language=new Object();FCKLanguageManager.AvailableLanguages={'ar':'Arabic','bg':'Bulgarian','bn':'Bengali/Bangla','bs':'Bosnian','ca':'Catalan','cs':'Czech','da':'Danish','de':'German','el':'Greek','en':'English','en-au':'English (Australia)','en-ca':'English (Canadian)','en-uk':'English (United Kingdom)','eo':'Esperanto','es':'Spanish','et':'Estonian','eu':'Basque','fa':'Persian','fi':'Finnish','fo':'Faroese','fr':'French','gl':'Galician','he':'Hebrew','hi':'Hindi','hr':'Croatian','hu':'Hungarian','it':'Italian','ja':'Japanese','km':'Khmer','ko':'Korean','lt':'Lithuanian','lv':'Latvian','mn':'Mongolian','ms':'Malay','nb':'Norwegian Bokmal','nl':'Dutch','no':'Norwegian','pl':'Polish','pt':'Portuguese (Portugal)','pt-br':'Portuguese (Brazil)','ro':'Romanian','ru':'Russian','sk':'Slovak','sl':'Slovenian','sr':'Serbian (Cyrillic)','sr-latn':'Serbian (Latin)','sv':'Swedish','th':'Thai','tr':'Turkish','uk':'Ukrainian','vi':'Vietnamese','zh':'Chinese Traditional','zh-cn':'Chinese Simplified'};FCKLanguageManager.GetActiveLanguage=function(){if (FCKConfig.AutoDetectLanguage){var A;if (navigator.userLanguage) A=navigator.userLanguage.toLowerCase();else if (navigator.language) A=navigator.language.toLowerCase();else{return FCKConfig.DefaultLanguage;};if (A.length>=5){A=A.substr(0,5);if (this.AvailableLanguages[A]) return A;};if (A.length>=2){A=A.substr(0,2);if (this.AvailableLanguages[A]) return A;}};return this.DefaultLanguage;};FCKLanguageManager.TranslateElements=function(A,B,C,D){var e=A.getElementsByTagName(B);var E,s;for (var i=0;i<e.length;i++){if (E=e[i].getAttribute('fckLang')){if (s=FCKLang[E]){if (D) s=FCKTools.HTMLEncode(s);eval('e[i].'+C+' = s');}}}};FCKLanguageManager.TranslatePage=function(A){this.TranslateElements(A,'INPUT','value');this.TranslateElements(A,'SPAN','innerHTML');this.TranslateElements(A,'LABEL','innerHTML');this.TranslateElements(A,'OPTION','innerHTML',true);};FCKLanguageManager.Initialize=function(){if (this.AvailableLanguages[FCKConfig.DefaultLanguage]) this.DefaultLanguage=FCKConfig.DefaultLanguage;else this.DefaultLanguage='en';this.ActiveLanguage=new Object();this.ActiveLanguage.Code=this.GetActiveLanguage();this.ActiveLanguage.Name=this.AvailableLanguages[this.ActiveLanguage.Code];} |
var FCKEvents;FCKEvents=function(A){this.Owner=A;this.RegisteredEvents=new Object();};FCKEvents.prototype.AttachEvent=function(A,B){var C;if (!(C=this.RegisteredEvents[A])) this.RegisteredEvents[A]=[B];else C.push(B);};FCKEvents.prototype.FireEvent=function(A,B){var C=true;var D=this.RegisteredEvents[A];if (D){for (var i=0;i<D.length;i++) C=(D[i](this.Owner,B)&&C);};return C;} |
var FCKXHtmlEntities=new Object();FCKXHtmlEntities.Initialize=function(){if (FCKXHtmlEntities.Entities) return;var A='';if (FCKConfig.ProcessHTMLEntities){FCKXHtmlEntities.Entities={' ':'nbsp','¡':'iexcl','¢':'cent','£':'pound','¤':'curren','¥':'yen','¦':'brvbar','§':'sect','¨':'uml','©':'copy','ª':'ordf','«':'laquo','¬':'not','Â':'shy','®':'reg','¯':'macr','°':'deg','±':'plusmn','²':'sup2','³':'sup3','´':'acute','µ':'micro','¶':'para','·':'middot','¸':'cedil','¹':'sup1','º':'ordm','»':'raquo','¼':'frac14','½':'frac12','¾':'frac34','¿':'iquest','×':'times','÷':'divide','Æ':'fnof','â¢':'bull','â¦':'hellip','â²':'prime','â³':'Prime','â¾':'oline','â':'frasl','â':'weierp','â':'image','â':'real','â¢':'trade','âµ':'alefsym','â':'larr','â':'uarr','â':'rarr','â':'darr','â':'harr','âµ':'crarr','â':'lArr','â':'uArr','â':'rArr','â':'dArr','â':'hArr','â':'forall','â':'part','â':'exist','â ':'empty','â':'nabla','â':'isin','â':'notin','â':'ni','â':'prod','â':'sum','â':'minus','â':'lowast','â':'radic','â':'prop','â':'infin','â ':'ang','â§':'and','â¨':'or','â©':'cap','âª':'cup','â«':'int','â´':'there4','â¼':'sim','â ':'cong','â':'asymp','â ':'ne','â¡':'equiv','â¤':'le','â¥':'ge','â':'sub','â':'sup','â':'nsub','â':'sube','â':'supe','â':'oplus','â':'otimes','â¥':'perp','â ':'sdot','â':'loz','â ':'spades','â£':'clubs','â¥':'hearts','â¦':'diams','"':'quot','Ë':'circ','Ë':'tilde','â':'ensp','â':'emsp','â':'thinsp','â':'zwnj','â':'zwj','â':'lrm','â':'rlm','â':'ndash','â':'mdash','â':'lsquo','â':'rsquo','â':'sbquo','â':'ldquo','â':'rdquo','â':'bdquo','â ':'dagger','â¡':'Dagger','â°':'permil','â¹':'lsaquo','âº':'rsaquo','¤':'euro'};for (var e in FCKXHtmlEntities.Entities) A+=e;if (FCKConfig.IncludeLatinEntities){var B={'À':'Agrave','Á':'Aacute','Â':'Acirc','Ã':'Atilde','Ä':'Auml','Å':'Aring','Æ':'AElig','Ç':'Ccedil','È':'Egrave','É':'Eacute','Ê':'Ecirc','Ë':'Euml','Ì':'Igrave','Í':'Iacute','Î':'Icirc','Ï':'Iuml','Ð':'ETH','Ñ':'Ntilde','Ò':'Ograve','Ó':'Oacute','Ô':'Ocirc','Õ':'Otilde','Ö':'Ouml','Ø':'Oslash','Ù':'Ugrave','Ú':'Uacute','Û':'Ucirc','Ü':'Uuml','Ý':'Yacute','Þ':'THORN','ß':'szlig','à':'agrave','á':'aacute','â':'acirc','ã':'atilde','ä':'auml','å':'aring','æ':'aelig','ç':'ccedil','è':'egrave','é':'eacute','ê':'ecirc','ë':'euml','ì':'igrave','í':'iacute','î':'icirc','ï':'iuml','ð':'eth','ñ':'ntilde','ò':'ograve','ó':'oacute','ô':'ocirc','õ':'otilde','ö':'ouml','ø':'oslash','ù':'ugrave','ú':'uacute','û':'ucirc','ü':'uuml','ý':'yacute','þ':'thorn','ÿ':'yuml','Å':'OElig','Å':'oelig','Å ':'Scaron','Å¡':'scaron','¾':'Yuml'};for (var e in B){FCKXHtmlEntities.Entities[e]=B[e];A+=e;};B=null;};if (FCKConfig.IncludeGreekEntities){var B={'Î':'Alpha','Î':'Beta','Î':'Gamma','Î':'Delta','Î':'Epsilon','Î':'Zeta','Î':'Eta','Î':'Theta','Î':'Iota','Î':'Kappa','Î':'Lambda','Î':'Mu','Î':'Nu','Î':'Xi','Î':'Omicron','Î ':'Pi','Ρ':'Rho','Σ':'Sigma','Τ':'Tau','Î¥':'Upsilon','Φ':'Phi','Χ':'Chi','Ψ':'Psi','Ω':'Omega','α':'alpha','β':'beta','γ':'gamma','δ':'delta','ε':'epsilon','ζ':'zeta','η':'eta','θ':'theta','ι':'iota','κ':'kappa','λ':'lambda','μ':'mu','ν':'nu','ξ':'xi','ο':'omicron','Ï':'pi','Ï':'rho','Ï':'sigmaf','Ï':'sigma','Ï':'tau','Ï ':'upsilon','Ï':'phi','Ï':'chi','Ï':'psi','Ï':'omega'};for (var e in B){FCKXHtmlEntities.Entities[e]=B[e];A+=e;};B=null;}}else{FCKXHtmlEntities.Entities={};A=' ';};var D='['+A+']';if (FCKConfig.ProcessNumericEntities) D='[^ -~]|'+D;var E=FCKConfig.AdditionalNumericEntities;if (E||E.length>0) D+='|'+FCKConfig.AdditionalNumericEntities;FCKXHtmlEntities.EntitiesRegex=new RegExp(D,'g');} |
var FCKXHtml=new Object();FCKXHtml.CurrentJobNum=0;FCKXHtml.GetXHTML=function(A,B,C){FCKXHtmlEntities.Initialize();var D=FCK.IsDirty();this._CreateNode=FCKConfig.ForceStrongEm?FCKXHtml_CreateNode_StrongEm:FCKXHtml_CreateNode_Normal;FCKXHtml.SpecialBlocks=new Array();this.XML=FCKTools.CreateXmlObject('DOMDocument');this.MainNode=this.XML.appendChild(this.XML.createElement('xhtml'));FCKXHtml.CurrentJobNum++;if (B) this._AppendNode(this.MainNode,A);else this._AppendChildNodes(this.MainNode,A,false);var E=this._GetMainXmlString();this.XML=null;E=E.substr(7,E.length-15).trim();if (FCKBrowserInfo.IsGecko) E=E.replace(/<br\/>$/,'');E=E.replace(FCKRegexLib.SpaceNoClose,' />');if (FCKConfig.ForceSimpleAmpersand) E=E.replace(FCKRegexLib.ForceSimpleAmpersand,'&');if (C) E=FCKCodeFormatter.Format(E);for (var i=0;i<FCKXHtml.SpecialBlocks.length;i++){var F=new RegExp('___FCKsi___'+i);E=E.replace(F,FCKXHtml.SpecialBlocks[i]);};E=E.replace(FCKRegexLib.GeckoEntitiesMarker,'&');if (!D) FCK.ResetIsDirty();return E};FCKXHtml._AppendAttribute=function(A,B,C){if (FCKConfig.ForceSimpleAmpersand&&C.replace) C=C.replace(/&/g,'___FCKAmp___');try{var D=this.XML.createAttribute(B);D.value=C?C:'';A.attributes.setNamedItem(D);}catch (e){}};FCKXHtml._AppendChildNodes=function(A,B,C){var D=0;var E=B.firstChild;while (E){if (this._AppendNode(A,E)) D++;E=E.nextSibling;};if (D==0){if (C&&FCKConfig.FillEmptyBlocks){this._AppendEntity(A,'nbsp');return;};if (!FCKRegexLib.EmptyElements.test(B.nodeName)) A.appendChild(this.XML.createTextNode(''));}};FCKXHtml._AppendNode=function(A,B){if (!B) return;switch (B.nodeType){case 1:if (B.getAttribute('_fckfakelement')) return FCKXHtml._AppendNode(A,FCK.GetRealElement(B));if (FCKBrowserInfo.IsGecko&&B.hasAttribute('_moz_editor_bogus_node')) return false;if (B.getAttribute('_fcktemp')) return false;var C=B.nodeName;if (FCKBrowserInfo.IsIE&&B.scopeName&&B.scopeName!='HTML'&&B.scopeName!='FCK') C=B.scopeName+':'+C;if (!FCKRegexLib.ElementName.test(C)) return false;C=C.toLowerCase();if (FCKBrowserInfo.IsGecko&&C=='br'&&B.hasAttribute('type')&&B.getAttribute('type',2)=='_moz') return false;if (B._fckxhtmljob&&B._fckxhtmljob==FCKXHtml.CurrentJobNum) return false;var D=this._CreateNode(C);FCKXHtml._AppendAttributes(A,B,D,C);B._fckxhtmljob=FCKXHtml.CurrentJobNum;var E=FCKXHtml.TagProcessors[C];if (E){D=E(D,B,A);if (!D) break;}else this._AppendChildNodes(D,B,FCKRegexLib.BlockElements.test(C));A.appendChild(D);break;case 3:this._AppendTextNode(A,B.nodeValue.replaceNewLineChars(' '));break;case 8:if (FCKBrowserInfo.IsIE&&!B.innerHTML) break;try { A.appendChild(this.XML.createComment(B.nodeValue));}catch (e) { /* Do nothing... probably this is a wrong format comment. */};break;default:A.appendChild(this.XML.createComment("Element not supported - Type: "+B.nodeType+" Name: "+B.nodeName));break;};return true;};function FCKXHtml_CreateNode_StrongEm(nodeName){switch (nodeName){case 'b':nodeName='strong';break;case 'i':nodeName='em';break;};return this.XML.createElement(nodeName);};function FCKXHtml_CreateNode_Normal(nodeName){return this.XML.createElement(nodeName);};FCKXHtml._AppendSpecialItem=function(A){return '___FCKsi___'+FCKXHtml.SpecialBlocks.AddItem(A);};FCKXHtml._AppendEntity=function(A,B){A.appendChild(this.XML.createTextNode('#?-:'+B+';'));};FCKXHtml._AppendTextNode=function(A,B){A.appendChild(this.XML.createTextNode(B.replace(FCKXHtmlEntities.EntitiesRegex,FCKXHtml_GetEntity)));return;};function FCKXHtml_GetEntity(character){var sEntity=FCKXHtmlEntities.Entities[character]||('#'+character.charCodeAt(0));return '#?-:'+sEntity+';';};FCKXHtml.TagProcessors=new Object();FCKXHtml.TagProcessors['img']=function(A,B){if (!A.attributes.getNamedItem('alt')) FCKXHtml._AppendAttribute(A,'alt','');var C=B.getAttribute('_fcksavedurl');if (C!=null) FCKXHtml._AppendAttribute(A,'src',C);return A;};FCKXHtml.TagProcessors['a']=function(A,B){var C=B.getAttribute('_fcksavedurl');if (C!=null) FCKXHtml._AppendAttribute(A,'href',C);FCKXHtml._AppendChildNodes(A,B,false);if (A.childNodes.length==0&&!A.getAttribute('name')) return false;return A;};FCKXHtml.TagProcessors['script']=function(A,B){if (!A.attributes.getNamedItem('type')) FCKXHtml._AppendAttribute(A,'type','text/javascript');A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem(B.text)));return A;};FCKXHtml.TagProcessors['style']=function(A,B){if (!A.attributes.getNamedItem('type')) FCKXHtml._AppendAttribute(A,'type','text/css');A.appendChild(FCKXHtml.XML.createTextNode(FCKXHtml._AppendSpecialItem(B.innerHTML)));return A;};FCKXHtml.TagProcessors['title']=function(A,B){A.appendChild(FCKXHtml.XML.createTextNode(FCK.EditorDocument.title));return A;};FCKXHtml.TagProcessors['table']=function(A,B){var C=A.attributes.getNamedItem('class');if (C&&FCKRegexLib.TableBorderClass.test(C.nodeValue)){var D=C.nodeValue.replace(FCKRegexLib.TableBorderClass,'');if (D.length==0) A.attributes.removeNamedItem('class');else FCKXHtml._AppendAttribute(A,'class',D);};FCKXHtml._AppendChildNodes(A,B,false);return A;};FCKXHtml.TagProcessors['ol']=FCKXHtml.TagProcessors['ul']=function(A,B,C){if (B.innerHTML.trim().length==0) return;var D=C.lastChild;if (D&&D.nodeType==3) D=D.previousSibling;if (D&&D.nodeName.toUpperCase()=='LI'){B._fckxhtmljob=null;FCKXHtml._AppendNode(D,B);return;};FCKXHtml._AppendChildNodes(A,B);return A;};FCKXHtml.TagProcessors['span']=function(A,B){if (B.innerHTML.length==0) return false;FCKXHtml._AppendChildNodes(A,B,false);return A;} |
FCKXHtml._GetMainXmlString=function(){var A=new XMLSerializer();return A.serializeToString(this.MainNode);};FCKXHtml._AppendAttributes=function(A,B,C){var D=B.attributes;for (var n=0;n<D.length;n++){var E=D[n];if (E.specified){var F=E.nodeName.toLowerCase();var G;if (F.startsWith('_fck')) continue;else if (F.indexOf('_moz')==0) continue;else if (F=='class') G=E.nodeValue;else if (E.nodeValue===true) G=F;else G=B.getAttribute(F,2);this._AppendAttribute(C,F,G);}}} |
var FCKCodeFormatter=new Object();FCKCodeFormatter.Init=function(){var A=this.Regex=new Object();A.BlocksOpener=/\<(P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|TITLE|META|LINK|BASE|SCRIPT|LINK|TD|TH|AREA|OPTION)[^\>]*\>/gi;A.BlocksCloser=/\<\/(P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|TITLE|META|LINK|BASE|SCRIPT|LINK|TD|TH|AREA|OPTION)[^\>]*\>/gi;A.NewLineTags=/\<(BR|HR)[^\>]*\>/gi;A.MainTags=/\<\/?(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR)[^\>]*\>/gi;A.LineSplitter=/\s*\n+\s*/g;A.IncreaseIndent=/^\<(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR|UL|OL)[ \/\>]/i;A.DecreaseIndent=/^\<\/(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR|UL|OL)[ \>]/i;A.FormatIndentatorRemove=new RegExp('^'+FCKConfig.FormatIndentator);A.ProtectedTags=/(<PRE[^>]*>)([\s\S]*?)(<\/PRE>)/gi;};FCKCodeFormatter._ProtectData=function(A,B,C,D){return B+'___FCKpd___'+FCKCodeFormatter.ProtectedData.AddItem(C)+D;};FCKCodeFormatter.Format=function(A){if (!this.Regex) this.Init();FCKCodeFormatter.ProtectedData=new Array();var B=A.replace(this.Regex.ProtectedTags,FCKCodeFormatter._ProtectData);B=B.replace(this.Regex.BlocksOpener,'\n$&');;B=B.replace(this.Regex.BlocksCloser,'$&\n');B=B.replace(this.Regex.NewLineTags,'$&\n');B=B.replace(this.Regex.MainTags,'\n$&\n');var C='';var D=B.split(this.Regex.LineSplitter);B='';for (var i=0;i<D.length;i++){var E=D[i];if (E.length==0) continue;if (this.Regex.DecreaseIndent.test(E)) C=C.replace(this.Regex.FormatIndentatorRemove,'');B+=C+E+'\n';if (this.Regex.IncreaseIndent.test(E)) C+=FCKConfig.FormatIndentator;};for (var i=0;i<FCKCodeFormatter.ProtectedData.length;i++){var F=new RegExp('___FCKpd___'+i);B=B.replace(F,FCKCodeFormatter.ProtectedData[i].replace(/\$/g,'$$$$'));};return B.trim();} |
var FCKUndo=new Object();FCKUndo.SaveUndoStep=function(){} |
var FCKEditingArea=function(A){this.TargetElement=A;this.Mode=FCK_EDITMODE_WYSIWYG;if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKEditingArea_Cleanup);};FCKEditingArea.prototype.Start=function(A,B){var C=this.TargetElement;var D=FCKTools.GetElementDocument(C);while(C.childNodes.length>0) C.removeChild(C.childNodes[0]);if (this.Mode==FCK_EDITMODE_WYSIWYG){if (FCKBrowserInfo.IsGecko) A=A.replace(/(<body[^>]*>)\s*(<\/body>)/i,'$1'+GECKO_BOGUS+'$2');var E=this.IFrame=D.createElement('iframe');E.src='javascript:void(0)';E.frameBorder=0;E.width=E.height='100%';C.appendChild(E);if (FCKBrowserInfo.IsIE) A=A.replace(/(<base[^>]*?)\s*\/?>(?!\s*<\/base>)/gi,'$1></base>');this.Window=E.contentWindow;var F=this.Document=this.Window.document;F.open();F.write(A);F.close();if (FCKBrowserInfo.IsGecko10&&!B){this.Start(A,true);return;};this.Window._FCKEditingArea=this;if (FCKBrowserInfo.IsGecko10) this.Window.setTimeout(FCKEditingArea_CompleteStart,500);else FCKEditingArea_CompleteStart.call(this.Window);}else{var G=this.Textarea=D.createElement('textarea');G.className='SourceField';G.dir='ltr';G.style.width=G.style.height='100%';G.style.border='none';C.appendChild(G);G.value=A;FCKTools.RunFunction(this.OnLoad);}};function FCKEditingArea_CompleteStart(){if (!this.document.body){this.setTimeout(FCKEditingArea_CompleteStart,50);return;};var oEditorArea=this._FCKEditingArea;oEditorArea.MakeEditable();FCKTools.RunFunction(oEditorArea.OnLoad);};FCKEditingArea.prototype.MakeEditable=function(){var A=this.Document;if (FCKBrowserInfo.IsIE) A.body.contentEditable=true;else{try{A.designMode='on';A.execCommand('useCSS',false,!FCKConfig.GeckoUseSPAN);A.execCommand('enableObjectResizing',false,!FCKConfig.DisableObjectResizing);A.execCommand('enableInlineTableEditing',false,!FCKConfig.DisableFFTableHandles);}catch (e) {}}};FCKEditingArea.prototype.Focus=function(){try{if (this.Mode==FCK_EDITMODE_WYSIWYG){if (FCKBrowserInfo.IsSafari) this.IFrame.focus();else this.Window.focus();}else this.Textarea.focus();}catch(e) {}};function FCKEditingArea_Cleanup(){this.TargetElement=null;this.IFrame=null;this.Document=null;this.Textarea=null;if (this.Window){this.Window._FCKEditingArea=null;this.Window=null;}} |
var FCKDocumentProcessor=new Object();FCKDocumentProcessor._Items=new Array();FCKDocumentProcessor.AppendNew=function(){var A=new Object();this._Items.AddItem(A);return A;};FCKDocumentProcessor.Process=function(A){var B,i=0;while((B=this._Items[i++])) B.ProcessDocument(A);};var FCKDocumentProcessor_CreateFakeImage=function(A,B){var C=FCK.EditorDocument.createElement('IMG');C.className=A;C.src=FCKConfig.FullBasePath+'images/spacer.gif';C.setAttribute('_fckfakelement','true',0);C.setAttribute('_fckrealelement',FCKTempBin.AddElement(B),0);return C;};var FCKAnchorsProcessor=FCKDocumentProcessor.AppendNew();FCKAnchorsProcessor.ProcessDocument=function(A){var B=A.getElementsByTagName('A');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){if (C.name.length>0&&(!C.getAttribute('href')||C.getAttribute('href').length==0)){var D=FCKDocumentProcessor_CreateFakeImage('FCK__Anchor',C.cloneNode(true));D.setAttribute('_fckanchor','true',0);C.parentNode.insertBefore(D,C);C.parentNode.removeChild(C);}}};var FCKPageBreaksProcessor=FCKDocumentProcessor.AppendNew();FCKPageBreaksProcessor.ProcessDocument=function(A){var B=A.getElementsByTagName('DIV');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){if (C.style.pageBreakAfter=='always'&&C.childNodes.length==1&&C.childNodes[0].style&&C.childNodes[0].style.display=='none'){var D=FCKDocumentProcessor_CreateFakeImage('FCK__PageBreak',C.cloneNode(true));C.parentNode.insertBefore(D,C);C.parentNode.removeChild(C);}}};var FCKFlashProcessor=FCKDocumentProcessor.AppendNew();FCKFlashProcessor.ProcessDocument=function(A){var B=A.getElementsByTagName('EMBED');var C;var i=B.length-1;while (i>=0&&(C=B[i--])){if (C.src.endsWith('.swf',true)){var D=C.cloneNode(true);if (FCKBrowserInfo.IsIE){var E;if (E=C.getAttribute('scale')) D.setAttribute('scale',E);if (E=C.getAttribute('play')) D.setAttribute('play',E);if (E=C.getAttribute('loop')) D.setAttribute('loop',E);if (E=C.getAttribute('menu')) D.setAttribute('menu',E);if (E=C.getAttribute('wmode')) D.setAttribute('wmode',E);if (E=C.getAttribute('quality')) D.setAttribute('quality',E);};var F=FCKDocumentProcessor_CreateFakeImage('FCK__Flash',D);F.setAttribute('_fckflash','true',0);FCKFlashProcessor.RefreshView(F,C);C.parentNode.insertBefore(F,C);C.parentNode.removeChild(C);}}};FCKFlashProcessor.RefreshView=function(A,B){if (B.width>0) A.style.width=FCKTools.ConvertHtmlSizeToStyle(B.width);if (B.height>0) A.style.height=FCKTools.ConvertHtmlSizeToStyle(B.height);};FCK.GetRealElement=function(A){var e=FCKTempBin.Elements[A.getAttribute('_fckrealelement')];if (A.getAttribute('_fckflash')){if (A.style.width.length>0) e.width=FCKTools.ConvertStyleSizeToHtml(A.style.width);if (A.style.height.length>0) e.height=FCKTools.ConvertStyleSizeToHtml(A.style.height);};return e;}; |
var FCK_StartupValue;FCK.Events=new FCKEvents(FCK);FCK.Toolbar=null;FCK.HasFocus=false;FCK.StartEditor=function(){FCK.TempBaseTag=FCKConfig.BaseHref.length>0?'<base href="'+FCKConfig.BaseHref+'" _fcktemp="true"></base>':'';FCK.EditingArea=new FCKEditingArea(document.getElementById('xEditingArea'));this.SetHTML(FCKTools.GetLinkedFieldValue());};FCK.Focus=function(){FCK.EditingArea.Focus();};FCK.SetStatus=function(A){this.Status=A;if (A==FCK_STATUS_ACTIVE){FCKFocusManager.AddWindow(window,true);if (FCKBrowserInfo.IsIE) FCKFocusManager.AddWindow(window.frameElement,true);if (FCKConfig.StartupFocus) FCK.Focus();};this.Events.FireEvent('OnStatusChange',A);};FCK.GetHTML=FCK.GetXHTML=function(A){if (FCK.EditMode==FCK_EDITMODE_SOURCE) return FCK.EditingArea.Textarea.value;var B;var C=FCK.EditorDocument;if (FCKConfig.FullPage) B=FCKXHtml.GetXHTML(C.getElementsByTagName('html')[0],true,A);else{if (FCKConfig.IgnoreEmptyParagraphValue&&C.body.innerHTML=='<P> </P>') B='';else B=FCKXHtml.GetXHTML(C.body,false,A);};B=FCK.ProtectEventsRestore(B);if (FCKBrowserInfo.IsIE) B=B.replace(FCKRegexLib.ToReplace,'$1');if (FCK.DocTypeDeclaration&&FCK.DocTypeDeclaration.length>0) B=FCK.DocTypeDeclaration+'\n'+B;if (FCK.XmlDeclaration&&FCK.XmlDeclaration.length>0) B=FCK.XmlDeclaration+'\n'+B;return FCKConfig.ProtectedSource.Revert(B);};FCK.UpdateLinkedField=function(){FCK.LinkedField.value=FCK.GetXHTML(FCKConfig.FormatOutput);FCK.Events.FireEvent('OnAfterLinkedFieldUpdate');};FCK.RegisteredDoubleClickHandlers=new Object();FCK.OnDoubleClick=function(A){var B=FCK.RegisteredDoubleClickHandlers[A.tagName];if (B) B(A);};FCK.RegisterDoubleClickHandler=function(A,B){FCK.RegisteredDoubleClickHandlers[B.toUpperCase()]=A;};FCK.OnAfterSetHTML=function(){FCKDocumentProcessor.Process(FCK.EditorDocument);FCKUndo.SaveUndoStep();FCK.Events.FireEvent('OnSelectionChange');FCK.Events.FireEvent('OnAfterSetHTML');};FCK.ProtectUrls=function(A){A=A.replace(FCKRegexLib.ProtectUrlsA,'$1$4$2$3$5$2 _fcksavedurl=$2$3$5$2');A=A.replace(FCKRegexLib.ProtectUrlsImg,'$1$4$2$3$5$2 _fcksavedurl=$2$3$5$2');return A;};FCK.ProtectEvents=function(A){return A.replace(FCKRegexLib.TagsWithEvent,_FCK_ProtectEvents_ReplaceTags);};function _FCK_ProtectEvents_ReplaceTags(tagMatch){return tagMatch.replace(FCKRegexLib.EventAttributes,_FCK_ProtectEvents_ReplaceEvents);};function _FCK_ProtectEvents_ReplaceEvents(eventMatch,attName){return ' '+attName+'_fckprotectedatt="'+eventMatch.ReplaceAll([/&/g,/'/g,/"/g,/=/g,/</g,/>/g,/\r/g,/\n/g],[''',''','"','=','<','>',' ',' '])+'"';};FCK.ProtectEventsRestore=function(A){return A.replace(FCKRegexLib.ProtectedEvents,_FCK_ProtectEvents_RestoreEvents);};function _FCK_ProtectEvents_RestoreEvents(match,encodedOriginal){return encodedOriginal.ReplaceAll([/'/g,/"/g,/=/g,/</g,/>/g,/ /g,/ /g,/'/g],["'",'"','=','<','>','\r','\n','&']);};FCK.IsDirty=function(){return (FCK_StartupValue!=FCK.EditorDocument.body.innerHTML);};FCK.ResetIsDirty=function(){if (FCK.EditorDocument.body) FCK_StartupValue=FCK.EditorDocument.body.innerHTML;};FCK.SetHTML=function(A){this.EditingArea.Mode=FCK.EditMode;if (FCK.EditMode==FCK_EDITMODE_WYSIWYG){A=FCKConfig.ProtectedSource.Protect(A);A=FCK.ProtectEvents(A);A=FCK.ProtectUrls(A);if (FCKBrowserInfo.IsGecko){A=A.replace(FCKRegexLib.StrongOpener,'<b$1');A=A.replace(FCKRegexLib.StrongCloser,'<\/b>');A=A.replace(FCKRegexLib.EmOpener,'<i$1');A=A.replace(FCKRegexLib.EmCloser,'<\/i>');}else if (FCKBrowserInfo.IsIE){A=A.replace(FCKRegexLib.AbbrOpener,'<FCK:abbr$1');A=A.replace(FCKRegexLib.AbbrCloser,'<\/FCK:abbr>');};var B='';if (FCKConfig.FullPage){if (!FCKRegexLib.HeadOpener.test(A)){if (!FCKRegexLib.HtmlOpener.test(A)) A='<html dir="'+FCKConfig.ContentLangDirection+'">'+A+'</html>';A=A.replace(FCKRegexLib.HtmlOpener,'$&<head></head>');};FCK.DocTypeDeclaration=A.match(FCKRegexLib.DocTypeTag);if (FCKBrowserInfo.IsIE) B=FCK._GetBehaviorsStyle();else if (FCKConfig.ShowBorders) B='<link href="'+FCKConfig.FullBasePath+'css/fck_showtableborders_gecko.css" rel="stylesheet" type="text/css" _fcktemp="true" />';B+='<link href="'+FCKConfig.FullBasePath+'css/fck_internal.css'+'" rel="stylesheet" type="text/css" _fcktemp="true" />';B=A.replace(FCKRegexLib.HeadCloser,B+'$&');if (FCK.TempBaseTag.length>0&&!FCKRegexLib.HasBaseTag.test(A)) B=B.replace(FCKRegexLib.HeadOpener,'$&'+FCK.TempBaseTag);}else{B=FCKConfig.DocType+'<html dir="'+FCKConfig.ContentLangDirection+'"';if (FCKBrowserInfo.IsIE&&!FCKRegexLib.Html4DocType.test(FCKConfig.DocType)) B+=' style="overflow-y: scroll"';B+='><head><title></title>'+this._GetEditorAreaStyleTags()+'<link href="'+FCKConfig.FullBasePath+'css/fck_internal.css'+'" rel="stylesheet" type="text/css" _fcktemp="true" />';if (FCKBrowserInfo.IsIE) B+=FCK._GetBehaviorsStyle();else if (FCKConfig.ShowBorders) B+='<link href="'+FCKConfig.FullBasePath+'css/fck_showtableborders_gecko.css" rel="stylesheet" type="text/css" _fcktemp="true" />';B+=FCK.TempBaseTag;B+='</head><body>';if (FCKBrowserInfo.IsGecko&&(A.length==0||FCKRegexLib.EmptyParagraph.test(A))) B+=GECKO_BOGUS;else B+=A;B+='</body></html>';};this.EditingArea.OnLoad=FCK_EditingArea_OnLoad;this.EditingArea.Start(B);}else{this.EditingArea.OnLoad=null;this.EditingArea.Start(A);this.EditingArea.Textarea._FCKShowContextMenu=true;};if (FCKBrowserInfo.IsGecko) window.onresize();};function FCK_EditingArea_OnLoad(){FCK.EditorWindow=FCK.EditingArea.Window;FCK.EditorDocument=FCK.EditingArea.Document;FCK.InitializeBehaviors();FCK.OnAfterSetHTML();if (FCK.Status!=FCK_STATUS_NOTLOADED) return;FCK.ResetIsDirty();FCKTools.AttachToLinkedFieldFormSubmit(FCK.UpdateLinkedField);FCK.SetStatus(FCK_STATUS_ACTIVE);};FCK._GetEditorAreaStyleTags=function(){var A='';var B=FCKConfig.EditorAreaCSS;for (var i=0;i<B.length;i++) A+='<link href="'+B[i]+'" rel="stylesheet" type="text/css" />';return A;};var FCKFocusManager=FCK.FocusManager=new Object();FCKFocusManager.IsLocked=false;FCK.HasFocus=false;FCKFocusManager.AddWindow=function(A,B){var C;if (FCKBrowserInfo.IsIE) C=A.nodeType==1?A:A.frameElement?A.frameElement:A.document;else C=A.document;FCKTools.AddEventListener(C,'blur',FCKFocusManager_Win_OnBlur);FCKTools.AddEventListener(C,'focus',B?FCKFocusManager_Win_OnFocus_Area:FCKFocusManager_Win_OnFocus);};FCKFocusManager.RemoveWindow=function(A){if (FCKBrowserInfo.IsIE) oTarget=A.nodeType==1?A:A.frameElement?A.frameElement:A.document;else oTarget=A.document;FCKTools.RemoveEventListener(oTarget,'blur',FCKFocusManager_Win_OnBlur);FCKTools.RemoveEventListener(oTarget,'focus',FCKFocusManager_Win_OnFocus_Area);FCKTools.RemoveEventListener(oTarget,'focus',FCKFocusManager_Win_OnFocus);};FCKFocusManager.Lock=function(){this.IsLocked=true;};FCKFocusManager.Unlock=function(){if (this._HasPendingBlur) FCKFocusManager._Timer=window.setTimeout(FCKFocusManager_FireOnBlur,100);this.IsLocked=false;};FCKFocusManager._ResetTimer=function(){this._HasPendingBlur=false;if (this._Timer){window.clearTimeout(this._Timer);delete this._Timer;}};function FCKFocusManager_Win_OnBlur(){if (typeof(FCK)!='undefined'&&FCK.HasFocus){FCKFocusManager._ResetTimer();FCKFocusManager._Timer=window.setTimeout(FCKFocusManager_FireOnBlur,100);}};function FCKFocusManager_FireOnBlur(){if (FCKFocusManager.IsLocked) FCKFocusManager._HasPendingBlur=true;else{FCK.HasFocus=false;FCK.Events.FireEvent("OnBlur");}};function FCKFocusManager_Win_OnFocus_Area(){FCKFocusManager_Win_OnFocus();FCK.Focus();};function FCKFocusManager_Win_OnFocus(){FCKFocusManager._ResetTimer();if (!FCK.HasFocus&&!FCKFocusManager.IsLocked){FCK.HasFocus=true;FCK.Events.FireEvent("OnFocus");}} |
FCK.Description="FCKeditor for Gecko Browsers";FCK.InitializeBehaviors=function(){Window_OnResize();FCKFocusManager.AddWindow(this.EditorWindow);var A=function(e){var B;if (e.ctrlKey&&!e.shiftKey&&!e.altKey){switch (e.which){case 66:case 98:FCK.ExecuteNamedCommand('bold');B=true;break;case 105:case 73:FCK.ExecuteNamedCommand('italic');B=true;break;case 117:case 85:FCK.ExecuteNamedCommand('underline');B=true;break;case 86:case 118:B=(FCK.Status!=FCK_STATUS_COMPLETE||!FCK.Events.FireEvent("OnPaste"));break;}}else if (e.shiftKey&&!e.ctrlKey&&!e.altKey&&e.keyCode==45) B=(FCK.Status!=FCK_STATUS_COMPLETE||!FCK.Events.FireEvent("OnPaste"));if (B){e.preventDefault();e.stopPropagation();}};this.EditorDocument.addEventListener('keypress',A,true);this.ExecOnSelectionChange=function(){FCK.Events.FireEvent("OnSelectionChange");};this.ExecOnSelectionChangeTimer=function(){if (FCK.LastOnChangeTimer) window.clearTimeout(FCK.LastOnChangeTimer);FCK.LastOnChangeTimer=window.setTimeout(FCK.ExecOnSelectionChange,100);};this.EditorDocument.addEventListener('mouseup',this.ExecOnSelectionChange,false);this.EditorDocument.addEventListener('keyup',this.ExecOnSelectionChangeTimer,false);this._DblClickListener=function(e){FCK.OnDoubleClick(e.target);e.stopPropagation();};this.EditorDocument.addEventListener('dblclick',this._DblClickListener,true);FCK.ContextMenu._InnerContextMenu.SetMouseClickWindow(FCK.EditorWindow);FCK.ContextMenu._InnerContextMenu.AttachToElement(FCK.EditorDocument);};FCK.MakeEditable=function(){this.EditingArea.MakeEditable();};function Document_OnContextMenu(e){if (!e.target._FCKShowContextMenu) e.preventDefault();};document.oncontextmenu=Document_OnContextMenu; |
FCK.RedirectNamedCommands=new Object();FCK.ExecuteNamedCommand=function(A,B,C){FCKUndo.SaveUndoStep();if (!C&&FCK.RedirectNamedCommands[A]!=null) FCK.ExecuteRedirectedNamedCommand(A,B);else{FCK.Focus();FCK.EditorDocument.execCommand(A,false,B);FCK.Events.FireEvent('OnSelectionChange');};FCKUndo.SaveUndoStep();};FCK.GetNamedCommandState=function(A){try{if (!FCK.EditorDocument.queryCommandEnabled(A)) return FCK_TRISTATE_DISABLED;else return FCK.EditorDocument.queryCommandState(A)?FCK_TRISTATE_ON:FCK_TRISTATE_OFF;}catch (e){return FCK_TRISTATE_OFF;}};FCK.GetNamedCommandValue=function(A){var B='';var C=FCK.GetNamedCommandState(A);if (C==FCK_TRISTATE_DISABLED) return null;try{B=this.EditorDocument.queryCommandValue(A);}catch(e) {};return B?B:'';};FCK.PasteFromWord=function(){FCKDialog.OpenDialog('FCKDialog_Paste',FCKLang.PasteFromWord,'dialog/fck_paste.html',400,330,'Word');};FCK.Preview=function(){var A=FCKConfig.ScreenWidth*0.8;var B=FCKConfig.ScreenHeight*0.7;var C=(FCKConfig.ScreenWidth-A)/2;var D=window.open('',null,'toolbar=yes,location=no,status=yes,menubar=yes,scrollbars=yes,resizable=yes,width='+A+',height='+B+',left='+C);var E;if (FCKConfig.FullPage){if (FCK.TempBaseTag.length>0) E=FCK.TempBaseTag+FCK.GetXHTML();else E=FCK.GetXHTML();}else{E=FCKConfig.DocType+'<html dir="'+FCKConfig.ContentLangDirection+'">'+'<head>'+FCK.TempBaseTag+'<title>'+FCKLang.Preview+'</title>'+FCK._GetEditorAreaStyleTags()+'</head><body>'+FCK.GetXHTML()+'</body></html>';};D.document.write(E);D.document.close();};FCK.SwitchEditMode=function(A){var B=(FCK.EditMode==FCK_EDITMODE_WYSIWYG);var C;if (B){if (!A&&FCKBrowserInfo.IsIE) FCKUndo.SaveUndoStep();C=FCK.GetXHTML(FCKConfig.FormatSource);}else C=this.EditingArea.Textarea.value;FCK.EditMode=B?FCK_EDITMODE_SOURCE:FCK_EDITMODE_WYSIWYG;FCK.SetHTML(C);FCK.Focus();FCKTools.RunFunction(FCK.ToolbarSet.RefreshModeState,FCK.ToolbarSet);};FCK.CreateElement=function(A){var e=FCK.EditorDocument.createElement(A);return FCK.InsertElementAndGetIt(e);};FCK.InsertElementAndGetIt=function(e){e.setAttribute('FCKTempLabel','true');this.InsertElement(e);var A=FCK.EditorDocument.getElementsByTagName(e.tagName);for (var i=0;i<A.length;i++){if (A[i].getAttribute('FCKTempLabel')){A[i].removeAttribute('FCKTempLabel');return A[i];}};return null;}; |
FCK._BaseGetNamedCommandState=FCK.GetNamedCommandState;FCK.GetNamedCommandState=function(A){switch (A){case 'Unlink':return FCKSelection.HasAncestorNode('A')?FCK_TRISTATE_OFF:FCK_TRISTATE_DISABLED;default:return FCK._BaseGetNamedCommandState(A);}};FCK.RedirectNamedCommands={Print:true,Paste:true,Cut:true,Copy:true};FCK.ExecuteRedirectedNamedCommand=function(A,B){switch (A){case 'Print':FCK.EditorWindow.print();break;case 'Paste':try { if (FCK.Paste()) FCK.ExecuteNamedCommand('Paste',null,true);}catch (e) { alert(FCKLang.PasteErrorPaste);};break;case 'Cut':try { FCK.ExecuteNamedCommand('Cut',null,true);}catch (e) { alert(FCKLang.PasteErrorCut);};break;case 'Copy':try { FCK.ExecuteNamedCommand('Copy',null,true);}catch (e) { alert(FCKLang.PasteErrorCopy);};break;default:FCK.ExecuteNamedCommand(A,B);}};FCK.AttachToOnSelectionChange=function(A){this.Events.AttachEvent('OnSelectionChange',A);};FCK.Paste=function(){if (FCKConfig.ForcePasteAsPlainText){FCK.PasteAsPlainText();return false;}else return true;};FCK.InsertHtml=function(A){A=FCKConfig.ProtectedSource.Protect(A);A=FCK.ProtectUrls(A);var B=FCKSelection.Delete();var C=B.getRangeAt(0);var D=C.createContextualFragment(A);var E=D.lastChild;C.insertNode(D);FCKSelection.SelectNode(E);FCKSelection.Collapse(false);this.Focus();};FCK.InsertElement=function(A){var B=FCKSelection.Delete();var C=B.getRangeAt(0);C.insertNode(A);FCKSelection.SelectNode(A);FCKSelection.Collapse(false);this.Focus();};FCK.PasteAsPlainText=function(){FCKDialog.OpenDialog('FCKDialog_Paste',FCKLang.PasteAsText,'dialog/fck_paste.html',400,330,'PlainText');};FCK.GetClipboardHTML=function(){return '';};FCK.CreateLink=function(A){FCK.ExecuteNamedCommand('Unlink');if (A.length>0){var B='javascript:void(0);/*'+(new Date().getTime())+'*/';FCK.ExecuteNamedCommand('CreateLink',B);var C=document.evaluate("//a[@href='"+B+"']",this.EditorDocument.body,null,9,null).singleNodeValue;if (C){C.href=A;return C;}}}; |
var FCKSelection=FCK.Selection=new Object(); |
FCKSelection.GetType=function(){this._Type='Text';var A;try { A=FCK.EditorWindow.getSelection();}catch (e) {};if (A&&A.rangeCount==1){var B=A.getRangeAt(0);if (B.startContainer==B.endContainer&&(B.endOffset-B.startOffset)==1&&B.startContainer.nodeType!=Node.TEXT_NODE) this._Type='Control';};return this._Type;};FCKSelection.GetSelectedElement=function(){if (this.GetType()=='Control'){var A=FCK.EditorWindow.getSelection();return A.anchorNode.childNodes[A.anchorOffset];}};FCKSelection.GetParentElement=function(){if (this.GetType()=='Control') return FCKSelection.GetSelectedElement().parentNode;else{var A=FCK.EditorWindow.getSelection();if (A){var B=A.anchorNode;while (B&&B.nodeType!=1) B=B.parentNode;return B;}}};FCKSelection.SelectNode=function(A){var B=FCK.EditorDocument.createRange();B.selectNode(A);var C=FCK.EditorWindow.getSelection();C.removeAllRanges();C.addRange(B);};FCKSelection.Collapse=function(A){var B=FCK.EditorWindow.getSelection();if (A==null||A===true) B.collapseToStart();else B.collapseToEnd();};FCKSelection.HasAncestorNode=function(A){var B=this.GetSelectedElement();if (!B&&FCK.EditorWindow){try { B=FCK.EditorWindow.getSelection().getRangeAt(0).startContainer;}catch(e){}};while (B){if (B.nodeType==1&&B.tagName==A) return true;B=B.parentNode;};return false;};FCKSelection.MoveToAncestorNode=function(A){var B;var C=this.GetSelectedElement();if (!C) C=FCK.EditorWindow.getSelection().getRangeAt(0).startContainer;while (C){if (C.tagName==A) return C;C=C.parentNode;};return null;};FCKSelection.Delete=function(){var A=FCK.EditorWindow.getSelection();for (var i=0;i<A.rangeCount;i++){A.getRangeAt(i).deleteContents();};return A;}; |
var FCKTableHandler=new Object();FCKTableHandler.InsertRow=function(){var A=FCKSelection.MoveToAncestorNode("TR");if (!A) return;var B=A.cloneNode(true);A.parentNode.insertBefore(B,A);FCKTableHandler.ClearRow(A);};FCKTableHandler.DeleteRows=function(A){if (!A) A=FCKSelection.MoveToAncestorNode("TR");if (!A) return;var B=FCKTools.GetElementAscensor(A,'TABLE');if (B.rows.length==1){FCKTableHandler.DeleteTable(B);return;};A.parentNode.removeChild(A);};FCKTableHandler.DeleteTable=function(A){if (!A){var A=FCKSelection.GetSelectedElement();if (!A||A.tagName!='TABLE') A=FCKSelection.MoveToAncestorNode("TABLE");};if (!A) return;FCKSelection.SelectNode(A);FCKSelection.Collapse();A.parentNode.removeChild(A);};FCKTableHandler.InsertColumn=function(){var A=FCKSelection.MoveToAncestorNode("TD");if (!A) A=FCKSelection.MoveToAncestorNode("TH");if (!A) return;var B=FCKTools.GetElementAscensor(A,'TABLE');var C=A.cellIndex+1;for (var i=0;i<B.rows.length;i++){var D=B.rows[i];if (D.cells.length<C) continue;A=D.cells[C-1].cloneNode(false);if (FCKBrowserInfo.IsGecko) A.innerHTML=GECKO_BOGUS;var E=D.cells[C];if (E) D.insertBefore(A,E);else D.appendChild(A);}};FCKTableHandler.DeleteColumns=function(){var A=FCKSelection.MoveToAncestorNode('TD')||FCKSelection.MoveToAncestorNode('TH');if (!A) return;var B=FCKTools.GetElementAscensor(A,'TABLE');var C=A.cellIndex;for (var i=B.rows.length-1;i>=0;i--){var D=B.rows[i];if (C==0&&D.cells.length==1){FCKTableHandler.DeleteRows(D);continue;};if (D.cells[C]) D.removeChild(D.cells[C]);}};FCKTableHandler.InsertCell=function(A){var B=A?A:FCKSelection.MoveToAncestorNode("TD");if (!B) return;var C=FCK.EditorDocument.createElement("TD");if (FCKBrowserInfo.IsGecko) C.innerHTML=GECKO_BOGUS;if (B.cellIndex==B.parentNode.cells.length-1){B.parentNode.appendChild(C);}else{B.parentNode.insertBefore(C,B.nextSibling);};return C;};FCKTableHandler.DeleteCell=function(A){if (A.parentNode.cells.length==1){FCKTableHandler.DeleteRows(FCKTools.GetElementAscensor(A,'TR'));return;};A.parentNode.removeChild(A);};FCKTableHandler.DeleteCells=function(){var A=FCKTableHandler.GetSelectedCells();for (var i=A.length-1;i>=0;i--){FCKTableHandler.DeleteCell(A[i]);}};FCKTableHandler.MergeCells=function(){var A=FCKTableHandler.GetSelectedCells();if (A.length<2) return;if (A[0].parentNode!=A[A.length-1].parentNode) return;var B=isNaN(A[0].colSpan)?1:A[0].colSpan;var C='';var D=FCK.EditorDocument.createDocumentFragment();for (var i=A.length-1;i>=0;i--){var E=A[i];for (var c=E.childNodes.length-1;c>=0;c--){var F=E.removeChild(E.childNodes[c]);if ((F.hasAttribute&&F.hasAttribute('_moz_editor_bogus_node'))||(F.getAttribute&&F.getAttribute('type',2)=='_moz')) continue;D.insertBefore(F,D.firstChild);};if (i>0){B+=isNaN(E.colSpan)?1:E.colSpan;FCKTableHandler.DeleteCell(E);}};A[0].colSpan=B;if (FCKBrowserInfo.IsGecko&&D.childNodes.length==0) A[0].innerHTML=GECKO_BOGUS;else A[0].appendChild(D);};FCKTableHandler.SplitCell=function(){var A=FCKTableHandler.GetSelectedCells();if (A.length!=1) return;var B=this._CreateTableMap(A[0].parentNode.parentNode);var C=FCKTableHandler._GetCellIndexSpan(B,A[0].parentNode.rowIndex,A[0]);var D=this._GetCollumnCells(B,C);for (var i=0;i<D.length;i++){if (D[i]==A[0]){var E=this.InsertCell(A[0]);if (!isNaN(A[0].rowSpan)&&A[0].rowSpan>1) E.rowSpan=A[0].rowSpan;}else{if (isNaN(D[i].colSpan)) D[i].colSpan=2;else D[i].colSpan+=1;}}};FCKTableHandler._GetCellIndexSpan=function(A,B,C){if (A.length<B+1) return null;var D=A[B];for (var c=0;c<D.length;c++){if (D[c]==C) return c;};return null;};FCKTableHandler._GetCollumnCells=function(A,B){var C=new Array();for (var r=0;r<A.length;r++){var D=A[r][B];if (D&&(C.length==0||C[C.length-1]!=D)) C[C.length]=D;};return C;};FCKTableHandler._CreateTableMap=function(A){var B=A.rows;var r=-1;var C=new Array();for (var i=0;i<B.length;i++){r++;if (!C[r]) C[r]=new Array();var c=-1;for (var j=0;j<B[i].cells.length;j++){var D=B[i].cells[j];c++;while (C[r][c]) c++;var E=isNaN(D.colSpan)?1:D.colSpan;var F=isNaN(D.rowSpan)?1:D.rowSpan;for (var G=0;G<F;G++){if (!C[r+G]) C[r+G]=new Array();for (var H=0;H<E;H++){C[r+G][c+H]=B[i].cells[j];}};c+=E-1;}};return C;};FCKTableHandler.ClearRow=function(A){var B=A.cells;for (var i=0;i<B.length;i++){if (FCKBrowserInfo.IsGecko) B[i].innerHTML=GECKO_BOGUS;else B[i].innerHTML='';}}; |
FCKTableHandler.GetSelectedCells=function(){var A=new Array();var B=FCK.EditorWindow.getSelection();if (B.rangeCount==1&&B.anchorNode.nodeType==3){var C=FCKTools.GetElementAscensor(B.anchorNode,'TD,TH');if (C){A[0]=C;return A;}};for (var i=0;i<B.rangeCount;i++){var D=B.getRangeAt(i);var E;if (D.startContainer.tagName.Equals('TD','TH')) E=D.startContainer;else E=D.startContainer.childNodes[D.startOffset];if (E.tagName.Equals('TD','TH')) A[A.length]=E;};return A;}; |
var FCKXml=function(){};FCKXml.prototype.LoadUrl=function(A){var B=this;var C=FCKTools.CreateXmlObject('XmlHttp');C.open("GET",A,false);C.send(null);if (C.status==200||C.status==304) this.DOMDocument=C.responseXML;else if (C.status==0&&C.readyState==4) this.DOMDocument=C.responseXML;else alert('Error loading "'+A+'"');};FCKXml.prototype.SelectNodes=function(A,B){var C=new Array();var D=this.DOMDocument.evaluate(A,B?B:this.DOMDocument,this.DOMDocument.createNSResolver(this.DOMDocument.documentElement),XPathResult.ORDERED_NODE_ITERATOR_TYPE,null);if (D){var E=D.iterateNext();while(E){C[C.length]=E;E=D.iterateNext();}};return C;};FCKXml.prototype.SelectSingleNode=function(A,B){var C=this.DOMDocument.evaluate(A,B?B:this.DOMDocument,this.DOMDocument.createNSResolver(this.DOMDocument.documentElement),9,null);if (C&&C.singleNodeValue) return C.singleNodeValue;else return null;} |
var FCKStyleDef=function(A,B){this.Name=A;this.Element=B.toUpperCase();this.IsObjectElement=FCKRegexLib.ObjectElements.test(this.Element);this.Attributes=new Object();};FCKStyleDef.prototype.AddAttribute=function(A,B){this.Attributes[A]=B;};FCKStyleDef.prototype.GetOpenerTag=function(){var s='<'+this.Element;for (var a in this.Attributes) s+=' '+a+'="'+this.Attributes[a]+'"';return s+'>';};FCKStyleDef.prototype.GetCloserTag=function(){return '</'+this.Element+'>';};FCKStyleDef.prototype.RemoveFromSelection=function(){if (FCKSelection.GetType()=='Control') this._RemoveMe(FCK.ToolbarSet.CurrentInstance.Selection.GetSelectedElement());else this._RemoveMe(FCK.ToolbarSet.CurrentInstance.Selection.GetParentElement());} |
FCKStyleDef.prototype.ApplyToSelection=function(){if (FCKSelection.GetType()=='Text'&&!this.IsObjectElement){var A=FCK.ToolbarSet.CurrentInstance.EditorWindow.getSelection();var e=FCK.ToolbarSet.CurrentInstance.EditorDocument.createElement(this.Element);for (var i=0;i<A.rangeCount;i++){e.appendChild(A.getRangeAt(i).extractContents());};this._AddAttributes(e);this._RemoveDuplicates(e);var B=A.getRangeAt(0);B.insertNode(e);}else{var C=FCK.ToolbarSet.CurrentInstance.Selection.GetSelectedElement();if (C.tagName==this.Element) this._AddAttributes(C);}};FCKStyleDef.prototype._AddAttributes=function(A){for (var a in this.Attributes){switch (a.toLowerCase()){case 'src':A.setAttribute('_fcksavedurl',this.Attributes[a],0);default:A.setAttribute(a,this.Attributes[a],0);}}};FCKStyleDef.prototype._RemoveDuplicates=function(A){for (var i=0;i<A.childNodes.length;i++){var B=A.childNodes[i];if (B.nodeType!=1) continue;this._RemoveDuplicates(B);if (this.IsEqual(B)) FCKTools.RemoveOuterTags(B);}};FCKStyleDef.prototype.IsEqual=function(e){if (e.tagName!=this.Element) return false;for (var a in this.Attributes){if (e.getAttribute(a)!=this.Attributes[a]) return false;};return true;};FCKStyleDef.prototype._RemoveMe=function(A){if (!A) return;var B=A.parentNode;if (A.nodeType==1&&this.IsEqual(A)){if (this.IsObjectElement){for (var a in this.Attributes) A.removeAttribute(a,0);return;}else FCKTools.RemoveOuterTags(A);};this._RemoveMe(B);} |
var FCKStylesLoader=function(){this.Styles=new Object();this.StyleGroups=new Object();this.Loaded=false;this.HasObjectElements=false;};FCKStylesLoader.prototype.Load=function(A){var B=new FCKXml();B.LoadUrl(A);var C=B.SelectNodes('Styles/Style');for (var i=0;i<C.length;i++){var D=C[i].attributes.getNamedItem('element').value.toUpperCase();var E=new FCKStyleDef(C[i].attributes.getNamedItem('name').value,D);if (E.IsObjectElement) this.HasObjectElements=true;var F=B.SelectNodes('Attribute',C[i]);for (var j=0;j<F.length;j++){var G=F[j].attributes.getNamedItem('name').value;var H=F[j].attributes.getNamedItem('value').value;if (G.toLowerCase()=='style'){var I=document.createElement('SPAN');I.style.cssText=H;H=I.style.cssText;};E.AddAttribute(G,H);};this.Styles[E.Name]=E;var J=this.StyleGroups[D];if (J==null){this.StyleGroups[D]=new Array();J=this.StyleGroups[D];};J[J.length]=E;};this.Loaded=true;} |
var FCKNamedCommand=function(A){this.Name=A;};FCKNamedCommand.prototype.Execute=function(){FCK.ExecuteNamedCommand(this.Name);};FCKNamedCommand.prototype.GetState=function(){return FCK.GetNamedCommandState(this.Name);}; |
var FCKDialogCommand=function(A,B,C,D,E,F,G){this.Name=A;this.Title=B;this.Url=C;this.Width=D;this.Height=E;this.GetStateFunction=F;this.GetStateParam=G;};FCKDialogCommand.prototype.Execute=function(){FCKDialog.OpenDialog('FCKDialog_'+this.Name,this.Title,this.Url,this.Width,this.Height);};FCKDialogCommand.prototype.GetState=function(){if (this.GetStateFunction) return this.GetStateFunction(this.GetStateParam);else return FCK_TRISTATE_OFF;};var FCKUndefinedCommand=function(){this.Name='Undefined';};FCKUndefinedCommand.prototype.Execute=function(){alert(FCKLang.NotImplemented);};FCKUndefinedCommand.prototype.GetState=function(){return FCK_TRISTATE_OFF;};var FCKFontNameCommand=function(){this.Name='FontName';};FCKFontNameCommand.prototype.Execute=function(A){if (A==null||A==""){}else FCK.ExecuteNamedCommand('FontName',A);};FCKFontNameCommand.prototype.GetState=function(){return FCK.GetNamedCommandValue('FontName');};var FCKFontSizeCommand=function(){this.Name='FontSize';};FCKFontSizeCommand.prototype.Execute=function(A){if (typeof(A)=='string') A=parseInt(A);if (A==null||A==''){FCK.ExecuteNamedCommand('FontSize',3);}else FCK.ExecuteNamedCommand('FontSize',A);};FCKFontSizeCommand.prototype.GetState=function(){return FCK.GetNamedCommandValue('FontSize');};var FCKFormatBlockCommand=function(){this.Name='FormatBlock';};FCKFormatBlockCommand.prototype.Execute=function(A){if (A==null||A=='') FCK.ExecuteNamedCommand('FormatBlock','<P>');else if (A=='div'&&FCKBrowserInfo.IsGecko) FCK.ExecuteNamedCommand('FormatBlock','div');else FCK.ExecuteNamedCommand('FormatBlock','<'+A+'>');};FCKFormatBlockCommand.prototype.GetState=function(){return FCK.GetNamedCommandValue('FormatBlock');};var FCKPreviewCommand=function(){this.Name='Preview';};FCKPreviewCommand.prototype.Execute=function(){FCK.Preview();};FCKPreviewCommand.prototype.GetState=function(){return FCK_TRISTATE_OFF;};var FCKSaveCommand=function(){this.Name='Save';};FCKSaveCommand.prototype.Execute=function(){var A=FCK.LinkedField.form;if (typeof(A.onsubmit)=='function'){var B=A.onsubmit();if (B!=null&&B===false) return;};A.submit();};FCKSaveCommand.prototype.GetState=function(){return FCK_TRISTATE_OFF;};var FCKNewPageCommand=function(){this.Name='NewPage';};FCKNewPageCommand.prototype.Execute=function(){FCKUndo.SaveUndoStep();FCK.SetHTML('');FCKUndo.Typing=true;};FCKNewPageCommand.prototype.GetState=function(){return FCK_TRISTATE_OFF;};var FCKSourceCommand=function(){this.Name='Source';};FCKSourceCommand.prototype.Execute=function(){if (FCKConfig.SourcePopup){var A=FCKConfig.ScreenWidth*0.65;var B=FCKConfig.ScreenHeight*0.65;FCKDialog.OpenDialog('FCKDialog_Source',FCKLang.Source,'dialog/fck_source.html',A,B,null,null,true);}else FCK.SwitchEditMode();};FCKSourceCommand.prototype.GetState=function(){return (FCK.EditMode==FCK_EDITMODE_WYSIWYG?FCK_TRISTATE_OFF:FCK_TRISTATE_ON);};var FCKUndoCommand=function(){this.Name='Undo';};FCKUndoCommand.prototype.Execute=function(){if (FCKBrowserInfo.IsIE) FCKUndo.Undo();else FCK.ExecuteNamedCommand('Undo');};FCKUndoCommand.prototype.GetState=function(){if (FCKBrowserInfo.IsIE) return (FCKUndo.CheckUndoState()?FCK_TRISTATE_OFF:FCK_TRISTATE_DISABLED);else return FCK.GetNamedCommandState('Undo');};var FCKRedoCommand=function(){this.Name='Redo';};FCKRedoCommand.prototype.Execute=function(){if (FCKBrowserInfo.IsIE) FCKUndo.Redo();else FCK.ExecuteNamedCommand('Redo');};FCKRedoCommand.prototype.GetState=function(){if (FCKBrowserInfo.IsIE) return (FCKUndo.CheckRedoState()?FCK_TRISTATE_OFF:FCK_TRISTATE_DISABLED);else return FCK.GetNamedCommandState('Redo');};var FCKPageBreakCommand=function(){this.Name='PageBreak';};FCKPageBreakCommand.prototype.Execute=function(){var e=FCK.EditorDocument.createElement('DIV');e.style.pageBreakAfter='always';e.innerHTML='<span style="DISPLAY:none"> </span>';var A=FCKDocumentProcessor_CreateFakeImage('FCK__PageBreak',e);A=FCK.InsertElement(A);};FCKPageBreakCommand.prototype.GetState=function(){return 0;};var FCKUnlinkCommand=function(){this.Name='Unlink';};FCKUnlinkCommand.prototype.Execute=function(){if (FCKBrowserInfo.IsGecko){var A=FCK.Selection.MoveToAncestorNode('A');if (A) FCK.Selection.SelectNode(A);};FCK.ExecuteNamedCommand(this.Name);if (FCKBrowserInfo.IsGecko) FCK.Selection.Collapse(true);};FCKUnlinkCommand.prototype.GetState=function(){return FCK.GetNamedCommandState(this.Name);} |
var FCKSpellCheckCommand=function(){this.Name='SpellCheck';this.IsEnabled=(FCKConfig.SpellChecker=='SpellerPages');};FCKSpellCheckCommand.prototype.Execute=function(){FCKDialog.OpenDialog('FCKDialog_SpellCheck','Spell Check','dialog/fck_spellerpages.html',440,480);};FCKSpellCheckCommand.prototype.GetState=function(){return this.IsEnabled?FCK_TRISTATE_OFF:FCK_TRISTATE_DISABLED;} |
var FCKTextColorCommand=function(A){this.Name=A=='ForeColor'?'TextColor':'BGColor';this.Type=A;var B;if (FCKBrowserInfo.IsIE) B=window;else if (FCK.ToolbarSet._IFrame) B=FCKTools.GetElementWindow(FCK.ToolbarSet._IFrame);else B=window.parent;this._Panel=new FCKPanel(B,true);this._Panel.AppendStyleSheet(FCKConfig.SkinPath+'fck_editor.css');this._Panel.MainNode.className='FCK_Panel';this._CreatePanelBody(this._Panel.Document,this._Panel.MainNode);FCKTools.DisableSelection(this._Panel.Document.body);};FCKTextColorCommand.prototype.Execute=function(A,B,C){FCK._ActiveColorPanelType=this.Type;this._Panel.Show(A,B,C);};FCKTextColorCommand.prototype.SetColor=function(A){if (FCK._ActiveColorPanelType=='ForeColor') FCK.ExecuteNamedCommand('ForeColor',A);else if (FCKBrowserInfo.IsGeckoLike){if (FCKBrowserInfo.IsGecko&&!FCKConfig.GeckoUseSPAN) FCK.EditorDocument.execCommand('useCSS',false,false);FCK.ExecuteNamedCommand('hilitecolor',A);if (FCKBrowserInfo.IsGecko&&!FCKConfig.GeckoUseSPAN) FCK.EditorDocument.execCommand('useCSS',false,true);}else FCK.ExecuteNamedCommand('BackColor',A);delete FCK._ActiveColorPanelType;};FCKTextColorCommand.prototype.GetState=function(){return FCK_TRISTATE_OFF;};function FCKTextColorCommand_OnMouseOver() { this.className='ColorSelected';};function FCKTextColorCommand_OnMouseOut() { this.className='ColorDeselected';};function FCKTextColorCommand_OnClick(){this.className='ColorDeselected';this.Command.SetColor('#'+this.Color);this.Command._Panel.Hide();};function FCKTextColorCommand_AutoOnClick(){this.className='ColorDeselected';this.Command.SetColor('');this.Command._Panel.Hide();};function FCKTextColorCommand_MoreOnClick(){this.className='ColorDeselected';this.Command._Panel.Hide();FCKDialog.OpenDialog('FCKDialog_Color',FCKLang.DlgColorTitle,'dialog/fck_colorselector.html',400,330,this.Command.SetColor);};FCKTextColorCommand.prototype._CreatePanelBody=function(A,B){function CreateSelectionDiv(){var C=A.createElement("DIV");C.className='ColorDeselected';C.onmouseover=FCKTextColorCommand_OnMouseOver;C.onmouseout=FCKTextColorCommand_OnMouseOut;return C;};var D=B.appendChild(A.createElement("TABLE"));D.className='ForceBaseFont';D.style.tableLayout='fixed';D.cellPadding=0;D.cellSpacing=0;D.border=0;D.width=150;var E=D.insertRow(-1).insertCell(-1);E.colSpan=8;var C=E.appendChild(CreateSelectionDiv());C.innerHTML='<table cellspacing="0" cellpadding="0" width="100%" border="0">\<tr>\<td><div class="ColorBoxBorder"><div class="ColorBox" style="background-color: #000000"></div></div></td>\<td nowrap width="100%" align="center">' + FCKLang.ColorAutomatic + '</td>\</tr>\</table>';C.Command=this;C.onclick=FCKTextColorCommand_AutoOnClick;var G=FCKConfig.FontColors.toString().split(',');var H=0;while (H<G.length){var I=D.insertRow(-1);for (var i=0;i<8&&H<G.length;i++,H++){C=I.insertCell(-1).appendChild(CreateSelectionDiv());C.Color=G[H];C.innerHTML='<div class="ColorBoxBorder"><div class="ColorBox" style="background-color: #'+G[H]+'"></div></div>';C.Command=this;C.onclick=FCKTextColorCommand_OnClick;}};E=D.insertRow(-1).insertCell(-1);E.colSpan=8;C=E.appendChild(CreateSelectionDiv());C.innerHTML='<table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td nowrap align="center">'+FCKLang.ColorMoreColors+'</td></tr></table>';C.Command=this;C.onclick=FCKTextColorCommand_MoreOnClick;} |
var FCKPastePlainTextCommand=function(){this.Name='PasteText';};FCKPastePlainTextCommand.prototype.Execute=function(){FCK.PasteAsPlainText();};FCKPastePlainTextCommand.prototype.GetState=function(){return FCK.GetNamedCommandState('Paste');}; |
var FCKPasteWordCommand=function(){this.Name='PasteWord';};FCKPasteWordCommand.prototype.Execute=function(){FCK.PasteFromWord();};FCKPasteWordCommand.prototype.GetState=function(){if (FCKConfig.ForcePasteAsPlainText) return FCK_TRISTATE_DISABLED;else return FCK.GetNamedCommandState('Paste');}; |
var FCKTableCommand=function(A){this.Name=A;};FCKTableCommand.prototype.Execute=function(){FCKUndo.SaveUndoStep();switch (this.Name){case 'TableInsertRow':FCKTableHandler.InsertRow();break;case 'TableDeleteRows':FCKTableHandler.DeleteRows();break;case 'TableInsertColumn':FCKTableHandler.InsertColumn();break;case 'TableDeleteColumns':FCKTableHandler.DeleteColumns();break;case 'TableInsertCell':FCKTableHandler.InsertCell();break;case 'TableDeleteCells':FCKTableHandler.DeleteCells();break;case 'TableMergeCells':FCKTableHandler.MergeCells();break;case 'TableSplitCell':FCKTableHandler.SplitCell();break;case 'TableDelete':FCKTableHandler.DeleteTable();break;default:alert(FCKLang.UnknownCommand.replace(/%1/g,this.Name));}};FCKTableCommand.prototype.GetState=function(){return FCK_TRISTATE_OFF;} |
var FCKStyleCommand=function(){this.Name='Style';this.StylesLoader=new FCKStylesLoader();this.StylesLoader.Load(FCKConfig.StylesXmlPath);this.Styles=this.StylesLoader.Styles;};FCKStyleCommand.prototype.Execute=function(A,B){FCKUndo.SaveUndoStep();if (B.Selected) B.Style.RemoveFromSelection();else B.Style.ApplyToSelection();FCKUndo.SaveUndoStep();FCK.Focus();FCK.Events.FireEvent("OnSelectionChange");};FCKStyleCommand.prototype.GetState=function(){if (!FCK.EditorDocument) return FCK_TRISTATE_DISABLED;var A=FCK.EditorDocument.selection;if (FCKSelection.GetType()=='Control'){var e=FCKSelection.GetSelectedElement();if (e) return this.StylesLoader.StyleGroups[e.tagName]?FCK_TRISTATE_OFF:FCK_TRISTATE_DISABLED;};return FCK_TRISTATE_OFF;};FCKStyleCommand.prototype.GetActiveStyles=function(){var A=new Array();if (FCKSelection.GetType()=='Control') this._CheckStyle(FCKSelection.GetSelectedElement(),A,false);else this._CheckStyle(FCKSelection.GetParentElement(),A,true);return A;};FCKStyleCommand.prototype._CheckStyle=function(A,B,C){if (!A) return;if (A.nodeType==1){var D=this.StylesLoader.StyleGroups[A.tagName];if (D){for (var i=0;i<D.length;i++){if (D[i].IsEqual(A)) B[B.length]=D[i];}}};if (C) this._CheckStyle(A.parentNode,B,C);} |
var FCKFitWindow=function(){this.Name='FitWindow';};FCKFitWindow.prototype.Execute=function(){var A=window.frameElement;var B=A.style;var C=parent;var D=C.document.documentElement;var E=C.document.body;var F=E.style;if (!this.IsMaximized){if(FCKBrowserInfo.IsIE) C.attachEvent('onresize',FCKFitWindow_Resize);else C.addEventListener('resize',FCKFitWindow_Resize,true);this._ScrollPos=FCKTools.GetScrollPosition(C);var G=A;while(G=G.parentNode){if (G.nodeType==1) G._fckSavedStyles=FCKTools.SaveStyles(G);};if (FCKBrowserInfo.IsIE){this.documentElementOverflow=D.style.overflow;D.style.overflow='hidden';F.overflow='hidden';}else{F.overflow='hidden';F.width='0px';F.height='0px';};this._EditorFrameStyles=FCKTools.SaveStyles(A);var H=FCKTools.GetViewPaneSize(C);B.position="absolute";B.zIndex=FCKConfig.FloatingPanelsZIndex-1;B.left="0px";B.top="0px";B.width=H.Width+"px";B.height=H.Height+"px";if (!FCKBrowserInfo.IsIE){B.borderRight=B.borderBottom="9999px solid white";B.backgroundColor="white";};C.scrollTo(0,0);this.IsMaximized=true;}else{if(FCKBrowserInfo.IsIE) C.detachEvent("onresize",FCKFitWindow_Resize);else C.removeEventListener("resize",FCKFitWindow_Resize,true);var G=A;while(G=G.parentNode){if (G._fckSavedStyles){FCKTools.RestoreStyles(G,G._fckSavedStyles);G._fckSavedStyles=null;}};if (FCKBrowserInfo.IsIE) D.style.overflow=this.documentElementOverflow;FCKTools.RestoreStyles(A,this._EditorFrameStyles);C.scrollTo(this._ScrollPos.X,this._ScrollPos.Y);this.IsMaximized=false;};FCKToolbarItems.GetItem('FitWindow').RefreshState();FCK.EditingArea.MakeEditable();FCK.Focus();};FCKFitWindow.prototype.GetState=function(){if (FCKConfig.ToolbarLocation!='In') return FCK_TRISTATE_DISABLED;else return (this.IsMaximized?FCK_TRISTATE_ON:FCK_TRISTATE_OFF);};function FCKFitWindow_Resize(){var oViewPaneSize=FCKTools.GetViewPaneSize(parent);var eEditorFrameStyle=window.frameElement.style;eEditorFrameStyle.width=oViewPaneSize.Width+'px';eEditorFrameStyle.height=oViewPaneSize.Height+'px';}; |
var FCKCommands=FCK.Commands=new Object();FCKCommands.LoadedCommands=new Object();FCKCommands.RegisterCommand=function(A,B){this.LoadedCommands[A]=B;};FCKCommands.GetCommand=function(A){var B=FCKCommands.LoadedCommands[A];if (B) return B;switch (A){case 'DocProps':B=new FCKDialogCommand('DocProps',FCKLang.DocProps,'dialog/fck_docprops.html',400,390,FCKCommands.GetFullPageState);break;case 'Templates':B=new FCKDialogCommand('Templates',FCKLang.DlgTemplatesTitle,'dialog/fck_template.html',380,450);break;case 'Link':B=new FCKDialogCommand('Link',FCKLang.DlgLnkWindowTitle,'dialog/fck_link.html',400,330,FCK.GetNamedCommandState,'CreateLink');break;case 'Unlink':B=new FCKUnlinkCommand();break;case 'Anchor':B=new FCKDialogCommand('Anchor',FCKLang.DlgAnchorTitle,'dialog/fck_anchor.html',370,170);break;case 'BulletedList':B=new FCKDialogCommand('BulletedList',FCKLang.BulletedListProp,'dialog/fck_listprop.html',370,170);break;case 'NumberedList':B=new FCKDialogCommand('NumberedList',FCKLang.NumberedListProp,'dialog/fck_listprop.html',370,170);break;case 'About':B=new FCKDialogCommand('About',FCKLang.About,'dialog/fck_about.html',400,330);break;case 'Find':B=new FCKDialogCommand('Find',FCKLang.DlgFindTitle,'dialog/fck_find.html',340,170);break;case 'Replace':B=new FCKDialogCommand('Replace',FCKLang.DlgReplaceTitle,'dialog/fck_replace.html',340,200);break;case 'Image':B=new FCKDialogCommand('Image',FCKLang.DlgImgTitle,'dialog/fck_image.html',450,400);break;case 'Flash':B=new FCKDialogCommand('Flash',FCKLang.DlgFlashTitle,'dialog/fck_flash.html',450,400);break;case 'SpecialChar':B=new FCKDialogCommand('SpecialChar',FCKLang.DlgSpecialCharTitle,'dialog/fck_specialchar.html',400,320);break;case 'Smiley':B=new FCKDialogCommand('Smiley',FCKLang.DlgSmileyTitle,'dialog/fck_smiley.html',FCKConfig.SmileyWindowWidth,FCKConfig.SmileyWindowHeight);break;case 'Table':B=new FCKDialogCommand('Table',FCKLang.DlgTableTitle,'dialog/fck_table.html',450,250);break;case 'TableProp':B=new FCKDialogCommand('Table',FCKLang.DlgTableTitle,'dialog/fck_table.html?Parent',400,250);break;case 'TableCellProp':B=new FCKDialogCommand('TableCell',FCKLang.DlgCellTitle,'dialog/fck_tablecell.html',550,250);break;case 'UniversalKey':B=new FCKDialogCommand('UniversalKey',FCKLang.UniversalKeyboard,'dialog/fck_universalkey.html',415,300);break;case 'Style':B=new FCKStyleCommand();break;case 'FontName':B=new FCKFontNameCommand();break;case 'FontSize':B=new FCKFontSizeCommand();break;case 'FontFormat':B=new FCKFormatBlockCommand();break;case 'Source':B=new FCKSourceCommand();break;case 'Preview':B=new FCKPreviewCommand();break;case 'Save':B=new FCKSaveCommand();break;case 'NewPage':B=new FCKNewPageCommand();break;case 'PageBreak':B=new FCKPageBreakCommand();break;case 'TextColor':B=new FCKTextColorCommand('ForeColor');break;case 'BGColor':B=new FCKTextColorCommand('BackColor');break;case 'PasteText':B=new FCKPastePlainTextCommand();break;case 'PasteWord':B=new FCKPasteWordCommand();break;case 'TableInsertRow':B=new FCKTableCommand('TableInsertRow');break;case 'TableDeleteRows':B=new FCKTableCommand('TableDeleteRows');break;case 'TableInsertColumn':B=new FCKTableCommand('TableInsertColumn');break;case 'TableDeleteColumns':B=new FCKTableCommand('TableDeleteColumns');break;case 'TableInsertCell':B=new FCKTableCommand('TableInsertCell');break;case 'TableDeleteCells':B=new FCKTableCommand('TableDeleteCells');break;case 'TableMergeCells':B=new FCKTableCommand('TableMergeCells');break;case 'TableSplitCell':B=new FCKTableCommand('TableSplitCell');break;case 'TableDelete':B=new FCKTableCommand('TableDelete');break;case 'Form':B=new FCKDialogCommand('Form',FCKLang.Form,'dialog/fck_form.html',380,230);break;case 'Checkbox':B=new FCKDialogCommand('Checkbox',FCKLang.Checkbox,'dialog/fck_checkbox.html',380,230);break;case 'Radio':B=new FCKDialogCommand('Radio',FCKLang.RadioButton,'dialog/fck_radiobutton.html',380,230);break;case 'TextField':B=new FCKDialogCommand('TextField',FCKLang.TextField,'dialog/fck_textfield.html',380,230);break;case 'Textarea':B=new FCKDialogCommand('Textarea',FCKLang.Textarea,'dialog/fck_textarea.html',380,230);break;case 'HiddenField':B=new FCKDialogCommand('HiddenField',FCKLang.HiddenField,'dialog/fck_hiddenfield.html',380,230);break;case 'Button':B=new FCKDialogCommand('Button',FCKLang.Button,'dialog/fck_button.html',380,230);break;case 'Select':B=new FCKDialogCommand('Select',FCKLang.SelectionField,'dialog/fck_select.html',400,380);break;case 'ImageButton':B=new FCKDialogCommand('ImageButton',FCKLang.ImageButton,'dialog/fck_image.html?ImageButton',450,400);break;case 'SpellCheck':B=new FCKSpellCheckCommand();break;case 'FitWindow':B=new FCKFitWindow();break;case 'Undo':B=new FCKUndoCommand();break;case 'Redo':B=new FCKRedoCommand();break;case 'Undefined':B=new FCKUndefinedCommand();break;default:if (FCKRegexLib.NamedCommands.test(A)) B=new FCKNamedCommand(A);else{alert(FCKLang.UnknownCommand.replace(/%1/g,A));return null;}};FCKCommands.LoadedCommands[A]=B;return B;};FCKCommands.GetFullPageState=function(){return FCKConfig.FullPage?FCK_TRISTATE_OFF:FCK_TRISTATE_DISABLED;}; |
var FCKPanel=function(A){this.IsRTL=(FCKLang.Dir=='rtl');this.IsContextMenu=false;this._LockCounter=0;this._Window=A||window;var B;if (FCKBrowserInfo.IsIE){this._Popup=this._Window.createPopup();B=this.Document=this._Popup.document;}else{var C=this._IFrame=this._Window.document.createElement('iframe');C.src='javascript:void(0)';C.allowTransparency=true;C.frameBorder='0';C.scrolling='no';C.style.position='absolute';C.style.zIndex=FCKConfig.FloatingPanelsZIndex;C.width=C.height=0;if (this._Window==window.parent&&window.frameElement) window.frameElement.parentNode.insertBefore(C,window.frameElement);else this._Window.document.body.appendChild(C);var D=C.contentWindow;B=this.Document=D.document;B.open();B.write('<html><head></head><body style="margin:0px;padding:0px;"><\/body><\/html>');B.close();FCKTools.AddEventListenerEx(D,'focus',FCKPanel_Window_OnFocus,this);FCKTools.AddEventListenerEx(D,'blur',FCKPanel_Window_OnBlur,this);};B.dir=FCKLang.Dir;B.oncontextmenu=FCKTools.CancelEvent;this.MainNode=B.body.appendChild(B.createElement('DIV'));this.MainNode.style.cssFloat=this.IsRTL?'right':'left';if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKPanel_Cleanup);};FCKPanel.prototype.AppendStyleSheet=function(A){FCKTools.AppendStyleSheet(this.Document,A);};FCKPanel.prototype.Preload=function(x,y,A){if (this._Popup) this._Popup.show(x,y,0,0,A);};FCKPanel.prototype.Show=function(x,y,A,B,C){if (this._Popup){this._Popup.show(x,y,0,0,A);this.MainNode.style.width=B?B+'px':'';this.MainNode.style.height=C?C+'px':'';var D=this.MainNode.offsetWidth;if (this.IsRTL){if (this.IsContextMenu) x=x-D+1;else if (A) x=(x*-1)+A.offsetWidth-D;};this._Popup.show(x,y,D,this.MainNode.offsetHeight,A);if (this.OnHide){if (this._Timer) CheckPopupOnHide.call(this,true);this._Timer=FCKTools.SetInterval(CheckPopupOnHide,100,this);}}else{if (typeof(FCKFocusManager)!='undefined') FCKFocusManager.Lock();if (this.ParentPanel) this.ParentPanel.Lock();this.MainNode.style.width=B?B+'px':'';this.MainNode.style.height=C?C+'px':'';var D=this.MainNode.offsetWidth;if (!B) this._IFrame.width=1;if (!C) this._IFrame.height=1;D=this.MainNode.offsetWidth;var F=FCKTools.GetElementPosition((A.nodeType==9?A.body:A),this._Window);if (this.IsRTL&&!this.IsContextMenu) x=(x*-1);x+=F.X;y+=F.Y;if (this.IsRTL){if (this.IsContextMenu) x=x-D+1;else if (A) x=x+A.offsetWidth-D;}else{var G=FCKTools.GetViewPaneSize(this._Window);var H=FCKTools.GetScrollPosition(this._Window);var I=G.Height+H.Y;var J=G.Width+H.X;if ((x+D)>J) x-=x+D-J;if ((y+this.MainNode.offsetHeight)>I) y-=y+this.MainNode.offsetHeight-I;};if (x<0) x=0;this._IFrame.style.left=x+'px';this._IFrame.style.top=y+'px';var K=D;var L=this.MainNode.offsetHeight;this._IFrame.width=K;this._IFrame.height=L;this._IFrame.contentWindow.focus();};this._IsOpened=true;FCKTools.RunFunction(this.OnShow,this);};FCKPanel.prototype.Hide=function(A){if (this._Popup) this._Popup.hide();else{if (!this._IsOpened) return;if (typeof(FCKFocusManager)!='undefined') FCKFocusManager.Unlock();this._IFrame.width=this._IFrame.height=0;this._IsOpened=false;if (this.ParentPanel) this.ParentPanel.Unlock();if (!A) FCKTools.RunFunction(this.OnHide,this);}};FCKPanel.prototype.CheckIsOpened=function(){if (this._Popup) return this._Popup.isOpen;else return this._IsOpened;};FCKPanel.prototype.CreateChildPanel=function(){var A=this._Popup?FCKTools.GetParentWindow(this.Document):this._Window;var B=new FCKPanel(A,true);B.ParentPanel=this;return B;};FCKPanel.prototype.Lock=function(){this._LockCounter++;};FCKPanel.prototype.Unlock=function(){if (--this._LockCounter==0&&!this.HasFocus) this.Hide();};/* Events */ function FCKPanel_Window_OnFocus(e,panel){panel.HasFocus=true;};function FCKPanel_Window_OnBlur(e,panel){panel.HasFocus=false;if (panel._LockCounter==0) FCKTools.RunFunction(panel.Hide,panel);};function CheckPopupOnHide(forceHide){if (forceHide||!this._Popup.isOpen){window.clearInterval(this._Timer);this._Timer=null;FCKTools.RunFunction(this.OnHide,this);}};function FCKPanel_Cleanup(){this._Popup=null;this._Window=null;this.Document=null;this.MainNode=null;} |
var FCKIcon=function(A){var B=A?typeof(A):'undefined';switch (B){case 'number':this.Path=FCKConfig.SkinPath+'fck_strip.gif';this.Size=16;this.Position=A;break;case 'undefined':this.Path=FCK_SPACER_PATH;break;case 'string':this.Path=A;break;default:this.Path=A[0];this.Size=A[1];this.Position=A[2];}};FCKIcon.prototype.CreateIconElement=function(A){var B;if (this.Position){var C='-'+((this.Position-1)*this.Size)+'px';if (FCKBrowserInfo.IsIE){B=A.createElement('DIV');var D=B.appendChild(A.createElement('IMG'));D.src=this.Path;D.style.top=C;}else{B=A.createElement('IMG');B.src=FCK_SPACER_PATH;B.style.backgroundPosition='0px '+C;B.style.backgroundImage='url('+this.Path+')';}}else{B=A.createElement('DIV');var D=B.appendChild(A.createElement('IMG'));D.src=this.Path?this.Path:FCK_SPACER_PATH;};B.className='TB_Button_Image';return B;} |
var FCKToolbarButtonUI=function(A,B,C,D,E,F){this.Name=A;this.Label=B||A;this.Tooltip=C||this.Label;this.Style=E||FCK_TOOLBARITEM_ONLYICON;this.State=F||FCK_TRISTATE_OFF;this.Icon=new FCKIcon(D);if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKToolbarButtonUI_Cleanup);};FCKToolbarButtonUI.prototype._CreatePaddingElement=function(A){var B=A.createElement('IMG');B.className='TB_Button_Padding';B.src=FCK_SPACER_PATH;return B;};FCKToolbarButtonUI.prototype.Create=function(A){var B=this.MainElement;if (B){FCKToolbarButtonUI_Cleanup.call(this);if (B.parentNode) B.parentNode.removeChild(B);B=this.MainElement=null;};var C=FCKTools.GetElementDocument(A);B=this.MainElement=C.createElement('DIV');B._FCKButton=this;B.title=this.Tooltip;if (FCKBrowserInfo.IsGecko) B.onmousedown=FCKTools.CancelEvent;this.ChangeState(this.State,true);if (this.Style==FCK_TOOLBARITEM_ONLYICON&&!this.ShowArrow){B.appendChild(this.Icon.CreateIconElement(C));}else{var D=B.appendChild(C.createElement('TABLE'));D.cellPadding=0;D.cellSpacing=0;var E=D.insertRow(-1);var F=E.insertCell(-1);if (this.Style==FCK_TOOLBARITEM_ONLYICON||this.Style==FCK_TOOLBARITEM_ICONTEXT) F.appendChild(this.Icon.CreateIconElement(C));else F.appendChild(this._CreatePaddingElement(C));if (this.Style==FCK_TOOLBARITEM_ONLYTEXT||this.Style==FCK_TOOLBARITEM_ICONTEXT){F=E.insertCell(-1);F.className='TB_Button_Text';F.noWrap=true;F.appendChild(C.createTextNode(this.Label));};if (this.ShowArrow){if (this.Style!=FCK_TOOLBARITEM_ONLYICON){E.insertCell(-1).appendChild(this._CreatePaddingElement(C));};F=E.insertCell(-1);var G=F.appendChild(C.createElement('IMG'));G.src=FCKConfig.SkinPath+'images/toolbar.buttonarrow.gif';G.width=5;G.height=3;};F=E.insertCell(-1);F.appendChild(this._CreatePaddingElement(C));};A.appendChild(B);};FCKToolbarButtonUI.prototype.ChangeState=function(A,B){if (!B&&this.State==A) return;var e=this.MainElement;switch (parseInt(A)){case FCK_TRISTATE_OFF:e.className='TB_Button_Off';e.onmouseover=FCKToolbarButton_OnMouseOverOff;e.onmouseout=FCKToolbarButton_OnMouseOutOff;e.onclick=FCKToolbarButton_OnClick;break;case FCK_TRISTATE_ON:e.className='TB_Button_On';e.onmouseover=FCKToolbarButton_OnMouseOverOn;e.onmouseout=FCKToolbarButton_OnMouseOutOn;e.onclick=FCKToolbarButton_OnClick;break;case FCK_TRISTATE_DISABLED:e.className='TB_Button_Disabled';e.onmouseover=null;e.onmouseout=null;e.onclick=null;bEnableEvents=false;break;};this.State=A;};function FCKToolbarButtonUI_Cleanup(){if (this.MainElement){this.MainElement._FCKButton=null;this.MainElement=null;}};function FCKToolbarButton_OnMouseOverOn(){this.className='TB_Button_On_Over';};function FCKToolbarButton_OnMouseOutOn(){this.className='TB_Button_On';};function FCKToolbarButton_OnMouseOverOff(){this.className='TB_Button_Off_Over';};function FCKToolbarButton_OnMouseOutOff(){this.className='TB_Button_Off';};function FCKToolbarButton_OnClick(e){if (this._FCKButton.OnClick) this._FCKButton.OnClick(this._FCKButton);}; |
var FCKToolbarButton=function(A,B,C,D,E,F,G){this.CommandName=A;this.Label=B;this.Tooltip=C;this.Style=D;this.SourceView=E?true:false;this.ContextSensitive=F?true:false;if (G==null) this.IconPath=FCKConfig.SkinPath+'toolbar/'+A.toLowerCase()+'.gif';else if (typeof(G)=='number') this.IconPath=[FCKConfig.SkinPath+'fck_strip.gif',16,G];};FCKToolbarButton.prototype.Create=function(A){this._UIButton=new FCKToolbarButtonUI(this.CommandName,this.Label,this.Tooltip,this.IconPath,this.Style);this._UIButton.OnClick=this.Click;this._UIButton._ToolbarButton=this;this._UIButton.Create(A);};FCKToolbarButton.prototype.RefreshState=function(){var A=FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName).GetState();if (A==this._UIButton.State) return;this._UIButton.ChangeState(A);};FCKToolbarButton.prototype.Click=function(){var A=this._ToolbarButton||this;FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(A.CommandName).Execute();};FCKToolbarButton.prototype.Enable=function(){this.RefreshState();};FCKToolbarButton.prototype.Disable=function(){this._UIButton.ChangeState(FCK_TRISTATE_DISABLED);} |
var FCKSpecialCombo=function(A,B,C,D,E){this.FieldWidth=B||100;this.PanelWidth=C||150;this.PanelMaxHeight=D||150;this.Label=' ';this.Caption=A;this.Tooltip=A;this.Style=FCK_TOOLBARITEM_ICONTEXT;this.Enabled=true;this.Items=new Object();this._Panel=new FCKPanel(E||window,true);this._Panel.AppendStyleSheet(FCKConfig.SkinPath+'fck_editor.css');this._PanelBox=this._Panel.MainNode.appendChild(this._Panel.Document.createElement('DIV'));this._PanelBox.className='SC_Panel';this._PanelBox.style.width=this.PanelWidth+'px';this._PanelBox.innerHTML='<table cellpadding="0" cellspacing="0" width="100%" style="TABLE-LAYOUT: fixed"><tr><td nowrap></td></tr></table>';this._ItemsHolderEl=this._PanelBox.getElementsByTagName('TD')[0];if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKSpecialCombo_Cleanup);};function FCKSpecialCombo_ItemOnMouseOver(){this.className+=' SC_ItemOver';};function FCKSpecialCombo_ItemOnMouseOut(){this.className=this.originalClass;};function FCKSpecialCombo_ItemOnClick(){this.className=this.originalClass;this.FCKSpecialCombo._Panel.Hide();this.FCKSpecialCombo.SetLabel(this.FCKItemLabel);if (typeof(this.FCKSpecialCombo.OnSelect)=='function') this.FCKSpecialCombo.OnSelect(this.FCKItemID,this);};FCKSpecialCombo.prototype.AddItem=function(A,B,C,D){var E=this._ItemsHolderEl.appendChild(this._Panel.Document.createElement('DIV'));E.className=E.originalClass='SC_Item';E.innerHTML=B;E.FCKItemID=A;E.FCKItemLabel=C||A;E.FCKSpecialCombo=this;E.Selected=false;if (FCKBrowserInfo.IsIE) E.style.width='100%';if (D) E.style.backgroundColor=D;E.onmouseover=FCKSpecialCombo_ItemOnMouseOver;E.onmouseout=FCKSpecialCombo_ItemOnMouseOut;E.onclick=FCKSpecialCombo_ItemOnClick;this.Items[A.toString().toLowerCase()]=E;return E;};FCKSpecialCombo.prototype.SelectItem=function(A){A=A?A.toString().toLowerCase():'';var B=this.Items[A];if (B){B.className=B.originalClass='SC_ItemSelected';B.Selected=true;}};FCKSpecialCombo.prototype.SelectItemByLabel=function(A,B){for (var C in this.Items){var D=this.Items[C];if (D.FCKItemLabel==A){D.className=D.originalClass='SC_ItemSelected';D.Selected=true;if (B) this.SetLabel(A);}}};FCKSpecialCombo.prototype.DeselectAll=function(A){for (var i in this.Items){this.Items[i].className=this.Items[i].originalClass='SC_Item';this.Items[i].Selected=false;};if (A) this.SetLabel('');};FCKSpecialCombo.prototype.SetLabelById=function(A){A=A?A.toString().toLowerCase():'';var B=this.Items[A];this.SetLabel(B?B.FCKItemLabel:'');};FCKSpecialCombo.prototype.SetLabel=function(A){this.Label=A.length==0?' ':A;if (this._LabelEl) this._LabelEl.innerHTML=this.Label;};FCKSpecialCombo.prototype.SetEnabled=function(A){this.Enabled=A;this._OuterTable.className=A?'':'SC_FieldDisabled';};FCKSpecialCombo.prototype.Create=function(A){var B=FCKTools.GetElementDocument(A);var C=this._OuterTable=A.appendChild(B.createElement('TABLE'));C.cellPadding=0;C.cellSpacing=0;C.insertRow(-1);var D;var E;switch (this.Style){case FCK_TOOLBARITEM_ONLYICON:D='TB_ButtonType_Icon';E=false;break;case FCK_TOOLBARITEM_ONLYTEXT:D='TB_ButtonType_Text';E=false;break;case FCK_TOOLBARITEM_ICONTEXT:E=true;break;};if (this.Caption&&this.Caption.length>0&&E){var F=C.rows[0].insertCell(-1);F.innerHTML=this.Caption;F.className='SC_FieldCaption';};var G=FCKTools.AppendElement(C.rows[0].insertCell(-1),'div');if (E){G.className='SC_Field';G.style.width=this.FieldWidth+'px';G.innerHTML='<table width="100%" cellpadding="0" cellspacing="0" style="TABLE-LAYOUT: fixed;"><tbody><tr><td class="SC_FieldLabel"><label> </label></td><td class="SC_FieldButton"> </td></tr></tbody></table>';this._LabelEl=G.getElementsByTagName('label')[0];this._LabelEl.innerHTML=this.Label;}else{G.className='TB_Button_Off';G.innerHTML='<table title="'+this.Tooltip+'" class="'+D+'" cellspacing="0" cellpadding="0" border="0">'+'<tr>'+'<td><img class="TB_Button_Padding" src="'+FCK_SPACER_PATH+'" /></td>'+'<td class="TB_Text">'+this.Caption+'</td>'+'<td><img class="TB_Button_Padding" src="'+FCK_SPACER_PATH+'" /></td>'+'<td class="TB_ButtonArrow"><img src="'+FCKConfig.SkinPath+'images/toolbar.buttonarrow.gif" width="5" height="3"></td>'+'<td><img class="TB_Button_Padding" src="'+FCK_SPACER_PATH+'" /></td>'+'</tr>'+'</table>';};G.SpecialCombo=this;G.onmouseover=FCKSpecialCombo_OnMouseOver;G.onmouseout=FCKSpecialCombo_OnMouseOut;G.onclick=FCKSpecialCombo_OnClick;FCKTools.DisableSelection(this._Panel.Document.body);};function FCKSpecialCombo_Cleanup(){this._LabelEl=null;this._OuterTable=null;this._ItemsHolderEl=null;this._PanelBox=null;if (this.Items){for (var key in this.Items) this.Items[key]=null;}};function FCKSpecialCombo_OnMouseOver(){if (this.SpecialCombo.Enabled){switch (this.SpecialCombo.Style){case FCK_TOOLBARITEM_ONLYICON:this.className='TB_Button_On_Over';break;case FCK_TOOLBARITEM_ONLYTEXT:this.className='TB_Button_On_Over';break;case FCK_TOOLBARITEM_ICONTEXT:this.className='SC_Field SC_FieldOver';break;}}};function FCKSpecialCombo_OnMouseOut(){switch (this.SpecialCombo.Style){case FCK_TOOLBARITEM_ONLYICON:this.className='TB_Button_Off';break;case FCK_TOOLBARITEM_ONLYTEXT:this.className='TB_Button_Off';break;case FCK_TOOLBARITEM_ICONTEXT:this.className='SC_Field';break;}};function FCKSpecialCombo_OnClick(e){var oSpecialCombo=this.SpecialCombo;if (oSpecialCombo.Enabled){var oPanel=oSpecialCombo._Panel;var oPanelBox=oSpecialCombo._PanelBox;var oItemsHolder=oSpecialCombo._ItemsHolderEl;var iMaxHeight=oSpecialCombo.PanelMaxHeight;if (oSpecialCombo.OnBeforeClick) oSpecialCombo.OnBeforeClick(oSpecialCombo);if (FCKBrowserInfo.IsIE) oPanel.Preload(0,this.offsetHeight,this);if (oItemsHolder.offsetHeight>iMaxHeight) oPanelBox.style.height=iMaxHeight+'px';else oPanelBox.style.height='';oPanel.Show(0,this.offsetHeight,this);}}; |
var FCKToolbarSpecialCombo=function(){this.SourceView=false;this.ContextSensitive=true;};function FCKToolbarSpecialCombo_OnSelect(itemId,item){FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName).Execute(itemId,item);};FCKToolbarSpecialCombo.prototype.Create=function(A){this._Combo=new FCKSpecialCombo(this.GetLabel(),this.FieldWidth,this.PanelWidth,this.PanelMaxHeight,FCKBrowserInfo.IsIE?window:FCKTools.GetElementWindow(A).parent);this._Combo.Tooltip=this.Tooltip;this._Combo.Style=this.Style;this.CreateItems(this._Combo);this._Combo.Create(A);this._Combo.CommandName=this.CommandName;this._Combo.OnSelect=FCKToolbarSpecialCombo_OnSelect;};function FCKToolbarSpecialCombo_RefreshActiveItems(combo,value){combo.DeselectAll();combo.SelectItem(value);combo.SetLabelById(value);};FCKToolbarSpecialCombo.prototype.RefreshState=function(){var A;var B=FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName).GetState();if (B!=FCK_TRISTATE_DISABLED){A=FCK_TRISTATE_ON;if (this.RefreshActiveItems) this.RefreshActiveItems(this._Combo,B);else{if (this._LastValue!=B){this._LastValue=B;FCKToolbarSpecialCombo_RefreshActiveItems(this._Combo,B);}}}else A=FCK_TRISTATE_DISABLED;if (A==this.State) return;if (A==FCK_TRISTATE_DISABLED){this._Combo.DeselectAll();this._Combo.SetLabel('');};this.State=A;this._Combo.SetEnabled(A!=FCK_TRISTATE_DISABLED);};FCKToolbarSpecialCombo.prototype.Enable=function(){this.RefreshState();};FCKToolbarSpecialCombo.prototype.Disable=function(){this.State=FCK_TRISTATE_DISABLED;this._Combo.DeselectAll();this._Combo.SetLabel('');this._Combo.SetEnabled(false);} |
var FCKToolbarFontsCombo=function(A,B){this.CommandName='FontName';this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:FCK_TOOLBARITEM_ICONTEXT;};FCKToolbarFontsCombo.prototype=new FCKToolbarSpecialCombo;FCKToolbarFontsCombo.prototype.GetLabel=function(){return FCKLang.Font;};FCKToolbarFontsCombo.prototype.CreateItems=function(A){var B=FCKConfig.FontNames.split(';');for (var i=0;i<B.length;i++) this._Combo.AddItem(B[i],'<font face="'+B[i]+'" style="font-size: 12px">'+B[i]+'</font>');} |
var FCKToolbarFontSizeCombo=function(A,B){this.CommandName='FontSize';this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:FCK_TOOLBARITEM_ICONTEXT;};FCKToolbarFontSizeCombo.prototype=new FCKToolbarSpecialCombo;FCKToolbarFontSizeCombo.prototype.GetLabel=function(){return FCKLang.FontSize;};FCKToolbarFontSizeCombo.prototype.CreateItems=function(A){A.FieldWidth=70;var B=FCKConfig.FontSizes.split(';');for (var i=0;i<B.length;i++){var C=B[i].split('/');this._Combo.AddItem(C[0],'<font size="'+C[0]+'">'+C[1]+'</font>',C[1]);}} |
var FCKToolbarFontFormatCombo=function(A,B){this.CommandName='FontFormat';this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:FCK_TOOLBARITEM_ICONTEXT;this.NormalLabel='Normal';this.PanelWidth=190;};FCKToolbarFontFormatCombo.prototype=new FCKToolbarSpecialCombo;FCKToolbarFontFormatCombo.prototype.GetLabel=function(){return FCKLang.FontFormat;};FCKToolbarFontFormatCombo.prototype.CreateItems=function(A){FCKTools.AppendStyleSheet(A._Panel.Document,FCKConfig.ToolbarComboPreviewCSS);var B=FCKLang['FontFormats'].split(';');var C={p:B[0],pre:B[1],address:B[2],h1:B[3],h2:B[4],h3:B[5],h4:B[6],h5:B[7],h6:B[8],div:B[9]};var D=FCKConfig.FontFormats.split(';');for (var i=0;i<D.length;i++){var E=D[i];var F=C[E];if (E=='p') this.NormalLabel=F;this._Combo.AddItem(E,'<div class="BaseFont"><'+E+'>'+F+'</'+E+'></div>',F);}};if (FCKBrowserInfo.IsIE){FCKToolbarFontFormatCombo.prototype.RefreshActiveItems=function(A,B){if (B==this.NormalLabel){if (A.Label!=' ') A.DeselectAll(true);}else{if (this._LastValue==B) return;A.SelectItemByLabel(B,true);};this._LastValue=B;}} |
var FCKToolbarStyleCombo=function(A,B){this.CommandName='Style';this.Label=this.GetLabel();this.Tooltip=A?A:this.Label;this.Style=B?B:FCK_TOOLBARITEM_ICONTEXT;};FCKToolbarStyleCombo.prototype=new FCKToolbarSpecialCombo;FCKToolbarStyleCombo.prototype.GetLabel=function(){return FCKLang.Style;};FCKToolbarStyleCombo.prototype.CreateItems=function(A){var B=A._Panel.Document;FCKTools.AppendStyleSheet(B,FCKConfig.ToolbarComboPreviewCSS);B.body.className+=' ForceBaseFont';if (!FCKBrowserInfo.IsGecko) A.OnBeforeClick=this.RefreshVisibleItems;var C=FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName).Styles;for (var s in C){var D=C[s];var E;if (D.IsObjectElement) E=A.AddItem(s,s);else E=A.AddItem(s,D.GetOpenerTag()+s+D.GetCloserTag());E.Style=D;}};FCKToolbarStyleCombo.prototype.RefreshActiveItems=function(A){A.DeselectAll();var B=FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName).GetActiveStyles();if (B.length>0){for (var i=0;i<B.length;i++) A.SelectItem(B[i].Name);A.SetLabelById(B[0].Name);}else A.SetLabel('');};FCKToolbarStyleCombo.prototype.RefreshVisibleItems=function(A){if (FCKSelection.GetType()=='Control') var B=FCKSelection.GetSelectedElement().tagName;for (var i in A.Items){var C=A.Items[i];if ((B&&C.Style.Element==B)||(!B&&!C.Style.IsObjectElement)) C.style.display='';else C.style.display='none';}} |
var FCKToolbarPanelButton=function(A,B,C,D,E){this.CommandName=A;var F;if (E==null) F=FCKConfig.SkinPath+'toolbar/'+A.toLowerCase()+'.gif';else if (typeof(E)=='number') F=[FCKConfig.SkinPath+'fck_strip.gif',16,E];var G=this._UIButton=new FCKToolbarButtonUI(A,B,C,F,D);G._FCKToolbarPanelButton=this;G.ShowArrow=true;G.OnClick=FCKToolbarPanelButton_OnButtonClick;};FCKToolbarPanelButton.prototype.TypeName='FCKToolbarPanelButton';FCKToolbarPanelButton.prototype.Create=function(A){A.className+='Menu';this._UIButton.Create(A);var B=FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(this.CommandName)._Panel;B._FCKToolbarPanelButton=this;var C=B.Document.body.appendChild(B.Document.createElement('div'));C.style.position='absolute';C.style.top='0px';var D=this.LineImg=C.appendChild(B.Document.createElement('IMG'));D.className='TB_ConnectionLine';D.src=FCK_SPACER_PATH;B.OnHide=FCKToolbarPanelButton_OnPanelHide;};function FCKToolbarPanelButton_OnButtonClick(toolbarButton){var oButton=this._FCKToolbarPanelButton;var e=oButton._UIButton.MainElement;oButton._UIButton.ChangeState(FCK_TRISTATE_ON);oButton.LineImg.style.width=(e.offsetWidth-2)+'px';FCK.ToolbarSet.CurrentInstance.Commands.GetCommand(oButton.CommandName).Execute(0,e.offsetHeight-1,e);};function FCKToolbarPanelButton_OnPanelHide(){var oMenuButton=this._FCKToolbarPanelButton;oMenuButton._UIButton.ChangeState(FCK_TRISTATE_OFF);};FCKToolbarPanelButton.prototype.RefreshState=FCKToolbarButton.prototype.RefreshState;FCKToolbarPanelButton.prototype.Enable=FCKToolbarButton.prototype.Enable;FCKToolbarPanelButton.prototype.Disable=FCKToolbarButton.prototype.Disable; |
var FCKToolbarItems=new Object();FCKToolbarItems.LoadedItems=new Object();FCKToolbarItems.RegisterItem=function(A,B){this.LoadedItems[A]=B;};FCKToolbarItems.GetItem=function(A){var B=FCKToolbarItems.LoadedItems[A];if (B) return B;switch (A){case 'Source':B=new FCKToolbarButton('Source',FCKLang.Source,null,FCK_TOOLBARITEM_ICONTEXT,true,true,1);break;case 'DocProps':B=new FCKToolbarButton('DocProps',FCKLang.DocProps,null,null,null,null,2);break;case 'Save':B=new FCKToolbarButton('Save',FCKLang.Save,null,null,true,null,3);break;case 'NewPage':B=new FCKToolbarButton('NewPage',FCKLang.NewPage,null,null,true,null,4);break;case 'Preview':B=new FCKToolbarButton('Preview',FCKLang.Preview,null,null,true,null,5);break;case 'Templates':B=new FCKToolbarButton('Templates',FCKLang.Templates,null,null,null,null,6);break;case 'About':B=new FCKToolbarButton('About',FCKLang.About,null,null,true,null,47);break;case 'Cut':B=new FCKToolbarButton('Cut',FCKLang.Cut,null,null,false,true,7);break;case 'Copy':B=new FCKToolbarButton('Copy',FCKLang.Copy,null,null,false,true,8);break;case 'Paste':B=new FCKToolbarButton('Paste',FCKLang.Paste,null,null,false,true,9);break;case 'PasteText':B=new FCKToolbarButton('PasteText',FCKLang.PasteText,null,null,false,true,10);break;case 'PasteWord':B=new FCKToolbarButton('PasteWord',FCKLang.PasteWord,null,null,false,true,11);break;case 'Print':B=new FCKToolbarButton('Print',FCKLang.Print,null,null,false,true,12);break;case 'SpellCheck':B=new FCKToolbarButton('SpellCheck',FCKLang.SpellCheck,null,null,null,null,13);break;case 'Undo':B=new FCKToolbarButton('Undo',FCKLang.Undo,null,null,false,true,14);break;case 'Redo':B=new FCKToolbarButton('Redo',FCKLang.Redo,null,null,false,true,15);break;case 'SelectAll':B=new FCKToolbarButton('SelectAll',FCKLang.SelectAll,null,null,null,null,18);break;case 'RemoveFormat':B=new FCKToolbarButton('RemoveFormat',FCKLang.RemoveFormat,null,null,false,true,19);break;case 'FitWindow':B=new FCKToolbarButton('FitWindow',FCKLang.FitWindow,null,null,true,true,66);break;case 'Bold':B=new FCKToolbarButton('Bold',FCKLang.Bold,null,null,false,true,20);break;case 'Italic':B=new FCKToolbarButton('Italic',FCKLang.Italic,null,null,false,true,21);break;case 'Underline':B=new FCKToolbarButton('Underline',FCKLang.Underline,null,null,false,true,22);break;case 'StrikeThrough':B=new FCKToolbarButton('StrikeThrough',FCKLang.StrikeThrough,null,null,false,true,23);break;case 'Subscript':B=new FCKToolbarButton('Subscript',FCKLang.Subscript,null,null,false,true,24);break;case 'Superscript':B=new FCKToolbarButton('Superscript',FCKLang.Superscript,null,null,false,true,25);break;case 'OrderedList':B=new FCKToolbarButton('InsertOrderedList',FCKLang.NumberedListLbl,FCKLang.NumberedList,null,false,true,26);break;case 'UnorderedList':B=new FCKToolbarButton('InsertUnorderedList',FCKLang.BulletedListLbl,FCKLang.BulletedList,null,false,true,27);break;case 'Outdent':B=new FCKToolbarButton('Outdent',FCKLang.DecreaseIndent,null,null,false,true,28);break;case 'Indent':B=new FCKToolbarButton('Indent',FCKLang.IncreaseIndent,null,null,false,true,29);break;case 'Link':B=new FCKToolbarButton('Link',FCKLang.InsertLinkLbl,FCKLang.InsertLink,null,false,true,34);break;case 'Unlink':B=new FCKToolbarButton('Unlink',FCKLang.RemoveLink,null,null,false,true,35);break;case 'Anchor':B=new FCKToolbarButton('Anchor',FCKLang.Anchor,null,null,null,null,36);break;case 'Image':B=new FCKToolbarButton('Image',FCKLang.InsertImageLbl,FCKLang.InsertImage,null,false,true,37);break;case 'Flash':B=new FCKToolbarButton('Flash',FCKLang.InsertFlashLbl,FCKLang.InsertFlash,null,false,true,38);break;case 'Table':B=new FCKToolbarButton('Table',FCKLang.InsertTableLbl,FCKLang.InsertTable,null,false,true,39);break;case 'SpecialChar':B=new FCKToolbarButton('SpecialChar',FCKLang.InsertSpecialCharLbl,FCKLang.InsertSpecialChar,null,false,true,42);break;case 'Smiley':B=new FCKToolbarButton('Smiley',FCKLang.InsertSmileyLbl,FCKLang.InsertSmiley,null,false,true,41);break;case 'PageBreak':B=new FCKToolbarButton('PageBreak',FCKLang.PageBreakLbl,FCKLang.PageBreak,null,false,true,43);break;case 'UniversalKey':B=new FCKToolbarButton('UniversalKey',FCKLang.UniversalKeyboard,null,null,false,true,44);break;case 'Rule':B=new FCKToolbarButton('InsertHorizontalRule',FCKLang.InsertLineLbl,FCKLang.InsertLine,null,false,true,40);break;case 'JustifyLeft':B=new FCKToolbarButton('JustifyLeft',FCKLang.LeftJustify,null,null,false,true,30);break;case 'JustifyCenter':B=new FCKToolbarButton('JustifyCenter',FCKLang.CenterJustify,null,null,false,true,31);break;case 'JustifyRight':B=new FCKToolbarButton('JustifyRight',FCKLang.RightJustify,null,null,false,true,32);break;case 'JustifyFull':B=new FCKToolbarButton('JustifyFull',FCKLang.BlockJustify,null,null,false,true,33);break;case 'Style':B=new FCKToolbarStyleCombo();break;case 'FontName':B=new FCKToolbarFontsCombo();break;case 'FontSize':B=new FCKToolbarFontSizeCombo();break;case 'FontFormat':B=new FCKToolbarFontFormatCombo();break;case 'TextColor':B=new FCKToolbarPanelButton('TextColor',FCKLang.TextColor,null,null,45);break;case 'BGColor':B=new FCKToolbarPanelButton('BGColor',FCKLang.BGColor,null,null,46);break;case 'Find':B=new FCKToolbarButton('Find',FCKLang.Find,null,null,null,null,16);break;case 'Replace':B=new FCKToolbarButton('Replace',FCKLang.Replace,null,null,null,null,17);break;case 'Form':B=new FCKToolbarButton('Form',FCKLang.Form,null,null,null,null,48);break;case 'Checkbox':B=new FCKToolbarButton('Checkbox',FCKLang.Checkbox,null,null,null,null,49);break;case 'Radio':B=new FCKToolbarButton('Radio',FCKLang.RadioButton,null,null,null,null,50);break;case 'TextField':B=new FCKToolbarButton('TextField',FCKLang.TextField,null,null,null,null,51);break;case 'Textarea':B=new FCKToolbarButton('Textarea',FCKLang.Textarea,null,null,null,null,52);break;case 'HiddenField':B=new FCKToolbarButton('HiddenField',FCKLang.HiddenField,null,null,null,null,56);break;case 'Button':B=new FCKToolbarButton('Button',FCKLang.Button,null,null,null,null,54);break;case 'Select':B=new FCKToolbarButton('Select',FCKLang.SelectionField,null,null,null,null,53);break;case 'ImageButton':B=new FCKToolbarButton('ImageButton',FCKLang.ImageButton,null,null,null,null,55);break;default:alert(FCKLang.UnknownToolbarItem.replace(/%1/g,A));return null;};FCKToolbarItems.LoadedItems[A]=B;return B;} |
var FCKToolbar=function(){this.Items=new Array();if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKToolbar_Cleanup);};FCKToolbar.prototype.AddItem=function(A){return this.Items[this.Items.length]=A;};FCKToolbar.prototype.AddButton=function(A,B,C,D,E,F){if (typeof(D)=='number') D=[this.DefaultIconsStrip,this.DefaultIconSize,D];var G=new FCKToolbarButtonUI(A,B,C,D,E,F);G._FCKToolbar=this;G.OnClick=FCKToolbar_OnItemClick;return this.AddItem(G);};function FCKToolbar_OnItemClick(item){var oToolbar=item._FCKToolbar;if (oToolbar.OnItemClick) oToolbar.OnItemClick(oToolbar,item);};FCKToolbar.prototype.AddSeparator=function(){this.AddItem(new FCKToolbarSeparator());};FCKToolbar.prototype.Create=function(A){if (this.MainElement){if (this.MainElement.parentNode) this.MainElement.parentNode.removeChild(this.MainElement);this.MainElement=null;};var B=FCKTools.GetElementDocument(A);var e=this.MainElement=B.createElement('table');e.className='TB_Toolbar';e.style.styleFloat=e.style.cssFloat=(FCKLang.Dir=='ltr'?'left':'right');e.dir=FCKLang.Dir;e.cellPadding=0;e.cellSpacing=0;this.RowElement=e.insertRow(-1);var C;if (!this.HideStart){C=this.RowElement.insertCell(-1);C.appendChild(B.createElement('div')).className='TB_Start';};for (var i=0;i<this.Items.length;i++){this.Items[i].Create(this.RowElement.insertCell(-1));};if (!this.HideEnd){C=this.RowElement.insertCell(-1);C.appendChild(B.createElement('div')).className='TB_End';};A.appendChild(e);};function FCKToolbar_Cleanup(){this.MainElement=null;this.RowElement=null;};var FCKToolbarSeparator=function(){};FCKToolbarSeparator.prototype.Create=function(A){FCKTools.AppendElement(A,'div').className='TB_Separator';} |
var FCKToolbarBreak=function(){};FCKToolbarBreak.prototype.Create=function(A){var B=A.ownerDocument.createElement('div');B.style.clear=B.style.cssFloat=FCKLang.Dir=='rtl'?'right':'left';A.appendChild(B);} |
function FCKToolbarSet_Create(overhideLocation){var oToolbarSet;var sLocation=overhideLocation||FCKConfig.ToolbarLocation;switch (sLocation){case 'In':document.getElementById('xToolbarRow').style.display='';oToolbarSet=new FCKToolbarSet(document);break;default:FCK.Events.AttachEvent('OnBlur',FCK_OnBlur);FCK.Events.AttachEvent('OnFocus',FCK_OnFocus);var eToolbarTarget;var oOutMatch=sLocation.match(/^Out:(.+)\((\w+)\)$/);if (oOutMatch){eToolbarTarget=eval('parent.'+oOutMatch[1]).document.getElementById(oOutMatch[2]);}else{oOutMatch=sLocation.match(/^Out:(\w+)$/);if (oOutMatch) eToolbarTarget=parent.document.getElementById(oOutMatch[1]);};if (!eToolbarTarget){alert('Invalid value for "ToolbarLocation"');return this._Init('In');};if (oToolbarSet=eToolbarTarget.__FCKToolbarSet) break;var eToolbarIFrame=FCKTools.GetElementDocument(eToolbarTarget).createElement('iframe');eToolbarIFrame.frameBorder=0;eToolbarIFrame.width='100%';eToolbarIFrame.height='10';eToolbarTarget.appendChild(eToolbarIFrame);eToolbarIFrame.unselectable='on';var eTargetDocument=eToolbarIFrame.contentWindow.document;eTargetDocument.open();eTargetDocument.write('<html><head><script type="text/javascript"> window.onload = window.onresize = function() { window.frameElement.height = document.body.scrollHeight ; } </script></head><body style="overflow: hidden">'+document.getElementById('xToolbarSpace').innerHTML+'</body></html>');eTargetDocument.close();eTargetDocument.oncontextmenu=FCKTools.CancelEvent;FCKTools.AppendStyleSheet(eTargetDocument,FCKConfig.SkinPath+'fck_editor.css');oToolbarSet=eToolbarTarget.__FCKToolbarSet=new FCKToolbarSet(eTargetDocument);oToolbarSet._IFrame=eToolbarIFrame;if (FCK.IECleanup) FCK.IECleanup.AddItem(eToolbarTarget,FCKToolbarSet_Target_Cleanup);};oToolbarSet.CurrentInstance=FCK;FCK.AttachToOnSelectionChange(oToolbarSet.RefreshItemsState);return oToolbarSet;};function FCK_OnBlur(editorInstance){var eToolbarSet=editorInstance.ToolbarSet;if (eToolbarSet.CurrentInstance==editorInstance) eToolbarSet.Disable();};function FCK_OnFocus(editorInstance){var oToolbarset=editorInstance.ToolbarSet;var oInstance=editorInstance||FCK;oToolbarset.CurrentInstance.FocusManager.RemoveWindow(oToolbarset._IFrame.contentWindow);oToolbarset.CurrentInstance=oInstance;oInstance.FocusManager.AddWindow(oToolbarset._IFrame.contentWindow,true);oToolbarset.Enable();};function FCKToolbarSet_Cleanup(){this._TargetElement=null;this._IFrame=null;};function FCKToolbarSet_Target_Cleanup(){this.__FCKToolbarSet=null;};var FCKToolbarSet=function(A){this._Document=A;this._TargetElement=A.getElementById('xToolbar');var B=A.getElementById('xExpandHandle');var C=A.getElementById('xCollapseHandle');B.title=FCKLang.ToolbarExpand;B.onclick=FCKToolbarSet_Expand_OnClick;C.title=FCKLang.ToolbarCollapse;C.onclick=FCKToolbarSet_Collapse_OnClick;if (!FCKConfig.ToolbarCanCollapse||FCKConfig.ToolbarStartExpanded) this.Expand();else this.Collapse();C.style.display=FCKConfig.ToolbarCanCollapse?'':'none';if (FCKConfig.ToolbarCanCollapse) C.style.display='';else A.getElementById('xTBLeftBorder').style.display='';this.Toolbars=new Array();this.IsLoaded=false;if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKToolbarSet_Cleanup);};function FCKToolbarSet_Expand_OnClick(){FCK.ToolbarSet.Expand();};function FCKToolbarSet_Collapse_OnClick(){FCK.ToolbarSet.Collapse();};FCKToolbarSet.prototype.Expand=function(){this._ChangeVisibility(false);};FCKToolbarSet.prototype.Collapse=function(){this._ChangeVisibility(true);};FCKToolbarSet.prototype._ChangeVisibility=function(A){this._Document.getElementById('xCollapsed').style.display=A?'':'none';this._Document.getElementById('xExpanded').style.display=A?'none':'';if (FCKBrowserInfo.IsGecko){FCKTools.RunFunction(window.onresize);}};FCKToolbarSet.prototype.Load=function(A){this.Name=A;this.Items=new Array();this.ItemsWysiwygOnly=new Array();this.ItemsContextSensitive=new Array();this._TargetElement.innerHTML='';var B=FCKConfig.ToolbarSets[A];if (!B){alert(FCKLang.UnknownToolbarSet.replace(/%1/g,A));return;};this.Toolbars=new Array();for (var x=0;x<B.length;x++){var C=B[x];var D;if (typeof(C)=='string'){if (C=='/') D=new FCKToolbarBreak();}else{D=new FCKToolbar();for (var j=0;j<C.length;j++){var E=C[j];if (E=='-') D.AddSeparator();else{var F=FCKToolbarItems.GetItem(E);if (F){D.AddItem(F);this.Items.push(F);if (!F.SourceView) this.ItemsWysiwygOnly.push(F);if (F.ContextSensitive) this.ItemsContextSensitive.push(F);}}}};D.Create(this._TargetElement);this.Toolbars[this.Toolbars.length]=D;};FCKTools.DisableSelection(this._Document.getElementById('xCollapseHandle').parentNode);if (FCK.Status!=FCK_STATUS_COMPLETE) FCK.Events.AttachEvent('OnStatusChange',this.RefreshModeState);else this.RefreshModeState();this.IsLoaded=true;this.IsEnabled=true;FCKTools.RunFunction(this.OnLoad);};FCKToolbarSet.prototype.Enable=function(){if (this.IsEnabled) return;this.IsEnabled=true;var A=this.Items;for (var i=0;i<A.length;i++) A[i].RefreshState();};FCKToolbarSet.prototype.Disable=function(){if (!this.IsEnabled) return;this.IsEnabled=false;var A=this.Items;for (var i=0;i<A.length;i++) A[i].Disable();};FCKToolbarSet.prototype.RefreshModeState=function(A){if (FCK.Status!=FCK_STATUS_COMPLETE) return;var B=A?A.ToolbarSet:this;var C=B.ItemsWysiwygOnly;if (FCK.EditMode==FCK_EDITMODE_WYSIWYG){for (var i=0;i<C.length;i++) C[i].Enable();B.RefreshItemsState(A);}else{B.RefreshItemsState(A);for (var i=0;i<C.length;i++) C[i].Disable();}};FCKToolbarSet.prototype.RefreshItemsState=function(A){var B=(A?A.ToolbarSet:this).ItemsContextSensitive;for (var i=0;i<B.length;i++) B[i].RefreshState();}; |
var FCKDialog=new Object();FCKDialog.OpenDialog=function(A,B,C,D,E,F,G,H){var I=new Object();I.Title=B;I.Page=C;I.Editor=window;I.CustomValue=F;var J=FCKConfig.BasePath+'fckdialog.html';this.Show(I,A,J,D,E,G,H);}; |
FCKDialog.Show=function(A,B,C,D,E,F,G){var H=(FCKConfig.ScreenHeight-E)/2;var I=(FCKConfig.ScreenWidth-D)/2;var J="location=no,menubar=no,toolbar=no,dependent=yes,dialog=yes,minimizable=no,modal=yes,alwaysRaised=yes"+",resizable="+(G?'yes':'no')+",width="+D+",height="+E+",top="+H+",left="+I;if (!F) F=window;FCKFocusManager.Lock();var K=F.open('','FCKeditorDialog_'+B,J,true);if (!K){alert(FCKLang.DialogBlocked);FCKFocusManager.Unlock();return;};K.moveTo(I,H);K.resizeTo(D,E);K.focus();K.location.href=C;K.dialogArguments=A;F.FCKLastDialogInfo=A;this.Window=K;try{window.top.captureEvents(Event.CLICK|Event.MOUSEDOWN|Event.MOUSEUP|Event.FOCUS);window.top.parent.addEventListener('mousedown',this.CheckFocus,true);window.top.parent.addEventListener('mouseup',this.CheckFocus,true);window.top.parent.addEventListener('click',this.CheckFocus,true);window.top.parent.addEventListener('focus',this.CheckFocus,true);}catch (e){}};FCKDialog.CheckFocus=function(){if (typeof(FCKDialog)!="object") return false;if (FCKDialog.Window&&!FCKDialog.Window.closed) FCKDialog.Window.focus();else{try{window.top.releaseEvents(Event.CLICK|Event.MOUSEDOWN|Event.MOUSEUP|Event.FOCUS);window.top.parent.removeEventListener('onmousedown',FCKDialog.CheckFocus,true);window.top.parent.removeEventListener('mouseup',FCKDialog.CheckFocus,true);window.top.parent.removeEventListener('click',FCKDialog.CheckFocus,true);window.top.parent.removeEventListener('onfocus',FCKDialog.CheckFocus,true);}catch (e){}};return false;}; |
var FCKMenuItem=function(A,B,C,D,E){this.Name=B;this.Label=C||B;this.IsDisabled=E;this.Icon=new FCKIcon(D);this.SubMenu=new FCKMenuBlockPanel();this.SubMenu.Parent=A;this.SubMenu.OnClick=FCKTools.CreateEventListener(FCKMenuItem_SubMenu_OnClick,this);if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKMenuItem_Cleanup);};FCKMenuItem.prototype.AddItem=function(A,B,C,D){this.HasSubMenu=true;return this.SubMenu.AddItem(A,B,C,D);};FCKMenuItem.prototype.AddSeparator=function(){this.SubMenu.AddSeparator();};FCKMenuItem.prototype.Create=function(A){var B=this.HasSubMenu;var C=FCKTools.GetElementDocument(A);var r=this.MainElement=A.insertRow(-1);r.className=this.IsDisabled?'MN_Item_Disabled':'MN_Item';if (!this.IsDisabled){FCKTools.AddEventListenerEx(r,'mouseover',FCKMenuItem_OnMouseOver,[this]);FCKTools.AddEventListenerEx(r,'click',FCKMenuItem_OnClick,[this]);if (!B) FCKTools.AddEventListenerEx(r,'mouseout',FCKMenuItem_OnMouseOut,[this]);};var D=r.insertCell(-1);D.className='MN_Icon';D.appendChild(this.Icon.CreateIconElement(C));D=r.insertCell(-1);D.className='MN_Label';D.noWrap=true;D.appendChild(C.createTextNode(this.Label));D=r.insertCell(-1);if (B){D.className='MN_Arrow';var E=D.appendChild(C.createElement('IMG'));E.src=FCK_IMAGES_PATH+'arrow_'+FCKLang.Dir+'.gif';E.width=4;E.height=7;this.SubMenu.Create();this.SubMenu.Panel.OnHide=FCKTools.CreateEventListener(FCKMenuItem_SubMenu_OnHide,this);}};FCKMenuItem.prototype.Activate=function(){this.MainElement.className='MN_Item_Over';if (this.HasSubMenu){this.SubMenu.Show(this.MainElement.offsetWidth+2,-2,this.MainElement);};FCKTools.RunFunction(this.OnActivate,this);};FCKMenuItem.prototype.Deactivate=function(){this.MainElement.className='MN_Item';if (this.HasSubMenu) this.SubMenu.Hide();};/* Events */ function FCKMenuItem_SubMenu_OnClick(clickedItem,listeningItem){FCKTools.RunFunction(listeningItem.OnClick,listeningItem,[clickedItem]);};function FCKMenuItem_SubMenu_OnHide(menuItem){menuItem.Deactivate();};function FCKMenuItem_OnClick(ev,menuItem){if (menuItem.HasSubMenu) menuItem.Activate();else{menuItem.Deactivate();FCKTools.RunFunction(menuItem.OnClick,menuItem,[menuItem]);}};function FCKMenuItem_OnMouseOver(ev,menuItem){menuItem.Activate();};function FCKMenuItem_OnMouseOut(ev,menuItem){menuItem.Deactivate();};function FCKMenuItem_Cleanup(){this.MainElement=null;} |
var FCKMenuBlock=function(){this._Items=new Array();};FCKMenuBlock.prototype.Count=function(){return this._Items.length;};FCKMenuBlock.prototype.AddItem=function(A,B,C,D){var E=new FCKMenuItem(this,A,B,C,D);E.OnClick=FCKTools.CreateEventListener(FCKMenuBlock_Item_OnClick,this);E.OnActivate=FCKTools.CreateEventListener(FCKMenuBlock_Item_OnActivate,this);this._Items.push(E);return E;};FCKMenuBlock.prototype.AddSeparator=function(){this._Items.push(new FCKMenuSeparator());};FCKMenuBlock.prototype.RemoveAllItems=function(){this._Items=new Array();var A=this._ItemsTable;if (A){while (A.rows.length>0) A.deleteRow(0);}};FCKMenuBlock.prototype.Create=function(A){if (!this._ItemsTable){if (FCK.IECleanup) FCK.IECleanup.AddItem(this,FCKMenuBlock_Cleanup);this._Window=FCKTools.GetElementWindow(A);var B=FCKTools.GetElementDocument(A);var C=A.appendChild(B.createElement('table'));C.cellPadding=0;C.cellSpacing=0;FCKTools.DisableSelection(C);var D=C.insertRow(-1).insertCell(-1);D.className='MN_Menu';var E=this._ItemsTable=D.appendChild(B.createElement('table'));E.cellPadding=0;E.cellSpacing=0;};for (var i=0;i<this._Items.length;i++) this._Items[i].Create(this._ItemsTable);};/* Events */ function FCKMenuBlock_Item_OnClick(clickedItem,menuBlock){FCKTools.RunFunction(menuBlock.OnClick,menuBlock,[clickedItem]);};function FCKMenuBlock_Item_OnActivate(menuBlock){var oActiveItem=menuBlock._ActiveItem;if (oActiveItem&&oActiveItem!=this){if (!FCKBrowserInfo.IsIE&&oActiveItem.HasSubMenu&&!this.HasSubMenu) menuBlock._Window.focus();oActiveItem.Deactivate();};menuBlock._ActiveItem=this;};function FCKMenuBlock_Cleanup(){this._Window=null;this._ItemsTable=null;};var FCKMenuSeparator=function(){};FCKMenuSeparator.prototype.Create=function(A){var B=FCKTools.GetElementDocument(A);var r=A.insertRow(-1);var C=r.insertCell(-1);C.className='MN_Separator MN_Icon';C=r.insertCell(-1);C.className='MN_Separator';C.appendChild(B.createElement('DIV')).className='MN_Separator_Line';C=r.insertCell(-1);C.className='MN_Separator';C.appendChild(B.createElement('DIV')).className='MN_Separator_Line';} |
var FCKMenuBlockPanel=function(){FCKMenuBlock.call(this);};FCKMenuBlockPanel.prototype=new FCKMenuBlock();FCKMenuBlockPanel.prototype.Create=function(){var A=this.Panel=(this.Parent&&this.Parent.Panel?this.Parent.Panel.CreateChildPanel():new FCKPanel());A.AppendStyleSheet(FCKConfig.SkinPath+'fck_editor.css');FCKMenuBlock.prototype.Create.call(this,A.MainNode);};FCKMenuBlockPanel.prototype.Show=function(x,y,A){if (!this.Panel.CheckIsOpened()) this.Panel.Show(x,y,A);};FCKMenuBlockPanel.prototype.Hide=function(){if (this.Panel.CheckIsOpened()) this.Panel.Hide();} |
var FCKContextMenu=function(A,B,C){var D=this._Panel=new FCKPanel(A,true);D.AppendStyleSheet(FCKConfig.SkinPath+'fck_editor.css');D.IsContextMenu=true;var E=this._MenuBlock=new FCKMenuBlock();E.Panel=D;E.OnClick=FCKTools.CreateEventListener(FCKContextMenu_MenuBlock_OnClick,this);this._Redraw=true;this.SetMouseClickWindow(B||A);};FCKContextMenu.prototype.SetMouseClickWindow=function(A){if (!FCKBrowserInfo.IsIE){this._Document=A.document;this._Document.addEventListener('contextmenu',FCKContextMenu_Document_OnContextMenu,false);}};FCKContextMenu.prototype.AddItem=function(A,B,C,D){var E=this._MenuBlock.AddItem(A,B,C,D);this._Redraw=true;return E;};FCKContextMenu.prototype.AddSeparator=function(){this._MenuBlock.AddSeparator();this._Redraw=true;};FCKContextMenu.prototype.RemoveAllItems=function(){this._MenuBlock.RemoveAllItems();this._Redraw=true;};FCKContextMenu.prototype.AttachToElement=function(A){if (FCKBrowserInfo.IsIE) FCKTools.AddEventListenerEx(A,'contextmenu',FCKContextMenu_AttachedElement_OnContextMenu,this);else A._FCKContextMenu=this;};function FCKContextMenu_Document_OnContextMenu(e){var el=e.target;while (el){if (el._FCKContextMenu){FCKTools.CancelEvent(e);FCKContextMenu_AttachedElement_OnContextMenu(e,el._FCKContextMenu,el);};el=el.parentNode;}};function FCKContextMenu_AttachedElement_OnContextMenu(ev,fckContextMenu,el){var eTarget=el||this;if (fckContextMenu.OnBeforeOpen) fckContextMenu.OnBeforeOpen.call(fckContextMenu,eTarget);if (fckContextMenu._MenuBlock.Count()==0) return false;if (fckContextMenu._Redraw){fckContextMenu._MenuBlock.Create(fckContextMenu._Panel.MainNode);fckContextMenu._Redraw=false;};fckContextMenu._Panel.Show(ev.pageX||ev.screenX,ev.pageY||ev.screenY,ev.currentTarget||null);return false;};function FCKContextMenu_MenuBlock_OnClick(menuItem,contextMenu){contextMenu._Panel.Hide();FCKTools.RunFunction(contextMenu.OnItemClick,contextMenu,menuItem);} |
FCK.ContextMenu=new Object();FCK.ContextMenu.Listeners=new Array();FCK.ContextMenu.RegisterListener=function(A){if (A) this.Listeners.push(A);};function FCK_ContextMenu_Init(){var oInnerContextMenu=FCK.ContextMenu._InnerContextMenu=new FCKContextMenu(FCKBrowserInfo.IsIE?window:window.parent,FCK.EditorWindow,FCKLang.Dir);oInnerContextMenu.OnBeforeOpen=FCK_ContextMenu_OnBeforeOpen;oInnerContextMenu.OnItemClick=FCK_ContextMenu_OnItemClick;var oMenu=FCK.ContextMenu;for (var i=0;i<FCKConfig.ContextMenu.length;i++) oMenu.RegisterListener(FCK_ContextMenu_GetListener(FCKConfig.ContextMenu[i]));};function FCK_ContextMenu_GetListener(listenerName){switch (listenerName){case 'Generic':return {AddItems:function(A,B,C){A.AddItem('Cut',FCKLang.Cut,7,FCKCommands.GetCommand('Cut').GetState()==FCK_TRISTATE_DISABLED);A.AddItem('Copy',FCKLang.Copy,8,FCKCommands.GetCommand('Copy').GetState()==FCK_TRISTATE_DISABLED);A.AddItem('Paste',FCKLang.Paste,9,FCKCommands.GetCommand('Paste').GetState()==FCK_TRISTATE_DISABLED);}};case 'Table':return {AddItems:function(A,B,C){var D=(C=='TABLE');var E=(!D&&FCKSelection.HasAncestorNode('TABLE'));if (E){A.AddSeparator();var F=A.AddItem('Cell',FCKLang.CellCM);F.AddItem('TableInsertCell',FCKLang.InsertCell,58);F.AddItem('TableDeleteCells',FCKLang.DeleteCells,59);F.AddItem('TableMergeCells',FCKLang.MergeCells,60);F.AddItem('TableSplitCell',FCKLang.SplitCell,61);F.AddSeparator();F.AddItem('TableCellProp',FCKLang.CellProperties,57);A.AddSeparator();F=A.AddItem('Row',FCKLang.RowCM);F.AddItem('TableInsertRow',FCKLang.InsertRow,62);F.AddItem('TableDeleteRows',FCKLang.DeleteRows,63);A.AddSeparator();F=A.AddItem('Column',FCKLang.ColumnCM);F.AddItem('TableInsertColumn',FCKLang.InsertColumn,64);F.AddItem('TableDeleteColumns',FCKLang.DeleteColumns,65);};if (D||E){A.AddSeparator();A.AddItem('TableDelete',FCKLang.TableDelete);A.AddItem('TableProp',FCKLang.TableProperties,39);}}};case 'Link':return {AddItems:function(A,B,C){var D=(C=='A'||FCKSelection.HasAncestorNode('A'));if (D||FCK.GetNamedCommandState('Unlink')!=FCK_TRISTATE_DISABLED){A.AddSeparator();if (D) A.AddItem('Link',FCKLang.EditLink,34);A.AddItem('Unlink',FCKLang.RemoveLink,35);}}};case 'Image':return {AddItems:function(A,B,C){if (C=='IMG'&&!B.getAttribute('_fckfakelement')){A.AddSeparator();A.AddItem('Image',FCKLang.ImageProperties,37);}}};case 'Anchor':return {AddItems:function(A,B,C){if (C=='IMG'&&B.getAttribute('_fckanchor')){A.AddSeparator();A.AddItem('Anchor',FCKLang.AnchorProp,36);}}};case 'Flash':return {AddItems:function(A,B,C){if (C=='IMG'&&B.getAttribute('_fckflash')){A.AddSeparator();A.AddItem('Flash',FCKLang.FlashProperties,38);}}};case 'Form':return {AddItems:function(A,B,C){if (FCKSelection.HasAncestorNode('FORM')){A.AddSeparator();A.AddItem('Form',FCKLang.FormProp,48);}}};case 'Checkbox':return {AddItems:function(A,B,C){if (C=='INPUT'&&B.type=='checkbox'){A.AddSeparator();A.AddItem('Checkbox',FCKLang.CheckboxProp,49);}}};case 'Radio':return {AddItems:function(A,B,C){if (C=='INPUT'&&B.type=='radio'){A.AddSeparator();A.AddItem('Radio',FCKLang.RadioButtonProp,50);}}};case 'TextField':return {AddItems:function(A,B,C){if (C=='INPUT'&&(B.type=='text'||B.type=='password')){A.AddSeparator();A.AddItem('TextField',FCKLang.TextFieldProp,51);}}};case 'HiddenField':return {AddItems:function(A,B,C){if (C=='INPUT'&&B.type=='hidden'){A.AddSeparator();A.AddItem('HiddenField',FCKLang.HiddenFieldProp,56);}}};case 'ImageButton':return {AddItems:function(A,B,C){if (C=='INPUT'&&B.type=='image'){A.AddSeparator();A.AddItem('ImageButton',FCKLang.ImageButtonProp,55);}}};case 'Button':return {AddItems:function(A,B,C){if (C=='INPUT'&&(B.type=='button'||B.type=='submit'||B.type=='reset')){A.AddSeparator();A.AddItem('Button',FCKLang.ButtonProp,54);}}};case 'Select':return {AddItems:function(A,B,C){if (C=='SELECT'){A.AddSeparator();A.AddItem('Select',FCKLang.SelectionFieldProp,53);}}};case 'Textarea':return {AddItems:function(A,B,C){if (C=='TEXTAREA'){A.AddSeparator();A.AddItem('Textarea',FCKLang.TextareaProp,52);}}};case 'BulletedList':return {AddItems:function(A,B,C){if (FCKSelection.HasAncestorNode('UL')){A.AddSeparator();A.AddItem('BulletedList',FCKLang.BulletedListProp,27);}}};case 'NumberedList':return {AddItems:function(A,B,C){if (FCKSelection.HasAncestorNode('OL')){A.AddSeparator();A.AddItem('NumberedList',FCKLang.NumberedListProp,26);}}};}};function FCK_ContextMenu_OnBeforeOpen(){FCK.Events.FireEvent("OnSelectionChange");var oTag,sTagName;if (oTag=FCKSelection.GetSelectedElement()) sTagName=oTag.tagName;var oMenu=FCK.ContextMenu._InnerContextMenu;oMenu.RemoveAllItems();var aListeners=FCK.ContextMenu.Listeners;for (var i=0;i<aListeners.length;i++) aListeners[i].AddItems(oMenu,oTag,sTagName);};function FCK_ContextMenu_OnItemClick(item){FCK.Focus();FCKCommands.GetCommand(item.Name).Execute();} |
var FCKPlugin=function(A,B,C){this.Name=A;this.BasePath=C?C:FCKConfig.PluginsPath;this.Path=this.BasePath+A+'/';if (!B||B.length==0) this.AvailableLangs=new Array();else this.AvailableLangs=B.split(',');};FCKPlugin.prototype.Load=function(){if (this.AvailableLangs.length>0){var A;if (this.AvailableLangs.indexOf(FCKLanguageManager.ActiveLanguage.Code)>=0) A=FCKLanguageManager.ActiveLanguage.Code;else A=this.AvailableLangs[0];LoadScript(this.Path+'lang/'+A+'.js');};LoadScript(this.Path+'fckplugin.js');} |
var FCKPlugins=FCK.Plugins=new Object();FCKPlugins.ItemsCount=0;FCKPlugins.Items=new Object();FCKPlugins.Load=function(){var A=FCKPlugins.Items;for (var i=0;i<FCKConfig.Plugins.Items.length;i++){var B=FCKConfig.Plugins.Items[i];var C=A[B[0]]=new FCKPlugin(B[0],B[1],B[2]);FCKPlugins.ItemsCount++;};for (var s in A) A[s].Load();FCKPlugins.Load=null;} |
/branches/v1.0-menes/api/fckeditor/editor/fckdebug.html |
---|
New file |
0,0 → 1,111 |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> |
<!-- |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckdebug.html |
* This is the Debug window. |
* It automatically popups if the Debug = true in the configuration file. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
--> |
<html xmlns="http://www.w3.org/1999/xhtml"> |
<head> |
<title>FCKeditor Debug Window</title> |
<meta name="robots" content="noindex, nofollow" /> |
<script type="text/javascript"> |
var oWindow ; |
var oDiv ; |
if ( !window.FCKMessages ) |
window.FCKMessages = new Array() ; |
window.onload = function() |
{ |
oWindow = document.getElementById('xOutput').contentWindow ; |
oWindow.document.open() ; |
oWindow.document.write( '<div id="divMsg"><\/div>' ) ; |
oWindow.document.close() ; |
oDiv = oWindow.document.getElementById('divMsg') ; |
} |
function Output( message, color ) |
{ |
if ( color ) |
message = '<font color="' + color + '">' + message + '<\/font>' ; |
window.FCKMessages[ window.FCKMessages.length ] = message ; |
StartTimer() ; |
} |
function StartTimer() |
{ |
window.setTimeout( 'CheckMessages()', 100 ) ; |
} |
function CheckMessages() |
{ |
if ( window.FCKMessages.length > 0 ) |
{ |
// Get the first item in the queue |
var sMessage = window.FCKMessages[0] ; |
// Removes the first item from the queue |
var oTempArray = new Array() ; |
for ( i = 1 ; i < window.FCKMessages.length ; i++ ) |
oTempArray[ i - 1 ] = window.FCKMessages[ i ] ; |
window.FCKMessages = oTempArray ; |
var d = new Date() ; |
var sTime = |
( d.getHours() + 100 + '' ).substr( 1,2 ) + ':' + |
( d.getMinutes() + 100 + '' ).substr( 1,2 ) + ':' + |
( d.getSeconds() + 100 + '' ).substr( 1,2 ) + ':' + |
( d.getMilliseconds() + 1000 + '' ).substr( 1,3 ) ; |
var oMsgDiv = oWindow.document.createElement( 'div' ) ; |
oMsgDiv.innerHTML = sTime + ': <b>' + sMessage + '<\/b>' ; |
oDiv.appendChild( oMsgDiv ) ; |
oMsgDiv.scrollIntoView() ; |
} |
} |
function Clear() |
{ |
oDiv.innerHTML = '' ; |
} |
</script> |
</head> |
<body style="margin: 10px"> |
<table style="height: 100%" cellspacing="5" cellpadding="0" width="100%" border="0"> |
<tr> |
<td> |
<table cellspacing="0" cellpadding="0" width="100%" border="0"> |
<tr> |
<td style="font-weight: bold; font-size: 1.2em;"> |
FCKeditor Debug Window</td> |
<td align="right"> |
<input type="button" value="Clear" onclick="Clear();" /></td> |
</tr> |
</table> |
</td> |
</tr> |
<tr style="height: 100%"> |
<td style="border: #696969 1px solid"> |
<iframe id="xOutput" width="100%" height="100%" scrolling="auto" src="fckblank.html" |
frameborder="0"></iframe> |
</td> |
</tr> |
</table> |
</body> |
</html> |
/branches/v1.0-menes/api/fckeditor/editor/fckeditor.html |
---|
New file |
0,0 → 1,210 |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> |
<!-- |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckeditor.html |
* Main page that holds the editor. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
--> |
<html xmlns="http://www.w3.org/1999/xhtml"> |
<head> |
<title>FCKeditor</title> |
<meta name="robots" content="noindex, nofollow" /> |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
<meta http-equiv="Cache-Control" content="public" /> |
<script type="text/javascript"> |
// Instead of loading scripts and CSSs using inline tags, all scripts are |
// loaded by code. In this way we can guarantee the correct processing order, |
// otherwise external scripts and inline scripts could be executed in an |
// unwanted order (IE). |
function LoadScript( url ) |
{ |
document.write( '<script type="text/javascript" src="' + url + '" onerror="alert(\'Error loading \' + this.src);"><\/script>' ) ; |
} |
function LoadCss( url ) |
{ |
document.write( '<link href="' + url + '" type="text/css" rel="stylesheet" onerror="alert(\'Error loading \' + this.src);" />' ) ; |
} |
// Main editor scripts. |
var sSuffix = /msie/.test( navigator.userAgent.toLowerCase() ) ? 'ie' : 'gecko' ; |
LoadScript( 'js/fckeditorcode_' + sSuffix + '.js' ) ; |
// Base configuration file. |
LoadScript( '../fckconfig.js' ) ; |
</script> |
<script type="text/javascript"> |
// Create the default cleanup object used by the editor. |
if ( FCKBrowserInfo.IsIE ) |
{ |
FCK.IECleanup = new FCKIECleanup( window ) ; |
FCK.IECleanup.AddItem( FCKTempBin, FCKTempBin.Reset ) ; |
FCK.IECleanup.AddItem( FCK, FCK_Cleanup ) ; |
} |
// The config hidden field is processed immediately, because |
// CustomConfigurationsPath may be set in the page. |
FCKConfig.ProcessHiddenField() ; |
// Load the custom configurations file (if defined). |
if ( FCKConfig.CustomConfigurationsPath.length > 0 ) |
LoadScript( FCKConfig.CustomConfigurationsPath ) ; |
</script> |
<script type="text/javascript"> |
// Load configurations defined at page level. |
FCKConfig_LoadPageConfig() ; |
FCKConfig_PreProcess() ; |
// Load the active skin CSS. |
LoadCss( FCKConfig.SkinPath + 'fck_editor.css' ) ; |
// Load the language file. |
FCKLanguageManager.Initialize() ; |
LoadScript( 'lang/' + FCKLanguageManager.ActiveLanguage.Code + '.js' ) ; |
</script> |
<script type="text/javascript"> |
// Initialize the editing area context menu. |
FCK_ContextMenu_Init() ; |
FCKPlugins.Load() ; |
</script> |
<script type="text/javascript"> |
// Set the editor interface direction. |
window.document.dir = FCKLang.Dir ; |
// Activate pasting operations. |
if ( FCKConfig.ForcePasteAsPlainText || FCKConfig.AutoDetectPasteFromWord ) |
FCK.Events.AttachEvent( "OnPaste", FCK.Paste ) ; |
</script> |
<script type="text/javascript"> |
window.onload = function() |
{ |
InitializeAPI() ; |
if ( FCKBrowserInfo.IsIE ) |
FCK_PreloadImages() ; |
else |
LoadToolbarSetup() ; |
} |
function LoadToolbarSetup() |
{ |
FCKeditorAPI._FunctionQueue.Add( LoadToolbar ) ; |
} |
function LoadToolbar() |
{ |
var oToolbarSet = FCK.ToolbarSet = FCKToolbarSet_Create() ; |
if ( oToolbarSet.IsLoaded ) |
StartEditor() ; |
else |
{ |
oToolbarSet.OnLoad = StartEditor ; |
oToolbarSet.Load( FCKURLParams['Toolbar'] || 'Default' ) ; |
} |
} |
function StartEditor() |
{ |
// Remove the onload listener. |
FCK.ToolbarSet.OnLoad = null ; |
FCKeditorAPI._FunctionQueue.Remove( LoadToolbar ) ; |
FCK.Events.AttachEvent( 'OnStatusChange', WaitForActive ) ; |
// Start the editor. |
FCK.StartEditor() ; |
} |
function WaitForActive( editorInstance, newStatus ) |
{ |
if ( newStatus == FCK_STATUS_ACTIVE ) |
{ |
if ( FCKBrowserInfo.IsGecko ) |
FCKTools.RunFunction( window.onresize ) ; |
FCK.SetStatus( FCK_STATUS_COMPLETE ) ; |
// Call the special "FCKeditor_OnComplete" function that should be present in |
// the HTML page where the editor is located. |
if ( typeof( window.parent.FCKeditor_OnComplete ) == 'function' ) |
window.parent.FCKeditor_OnComplete( FCK ) ; |
} |
} |
// Gecko browsers doens't calculate well that IFRAME size so we must |
// recalculate it every time the window size changes. |
if ( FCKBrowserInfo.IsGecko ) |
{ |
function Window_OnResize() |
{ |
if ( FCKBrowserInfo.IsOpera ) |
return ; |
var oCell = document.getElementById( 'xEditingArea' ) ; |
var eInnerElement ; |
if ( eInnerElement = oCell.firstChild ) |
{ |
eInnerElement.style.height = 0 ; |
eInnerElement.style.height = oCell.scrollHeight - 2 ; |
} |
} |
window.onresize = Window_OnResize ; |
} |
</script> |
</head> |
<body> |
<table width="100%" cellpadding="0" cellspacing="0" style="height: 100%; table-layout: fixed"> |
<tr id="xToolbarRow" style="display: none"> |
<td id="xToolbarSpace" style="overflow: hidden"> |
<table width="100%" cellpadding="0" cellspacing="0"> |
<tr id="xCollapsed" style="display: none"> |
<td id="xExpandHandle" class="TB_Expand" colspan="3"> |
<img class="TB_ExpandImg" alt="" src="images/spacer.gif" width="8" height="4" /></td> |
</tr> |
<tr id="xExpanded" style="display: none"> |
<td id="xTBLeftBorder" class="TB_SideBorder" style="width: 1px; display: none;"></td> |
<td id="xCollapseHandle" style="display: none" class="TB_Collapse" valign="bottom"> |
<img class="TB_CollapseImg" alt="" src="images/spacer.gif" width="8" height="4" /></td> |
<td id="xToolbar" class="TB_ToolbarSet"></td> |
<td class="TB_SideBorder" style="width: 1px"></td> |
</tr> |
</table> |
</td> |
</tr> |
<tr style="height: 100%"> |
<td id="xEditingArea" valign="top"></td> |
</tr> |
</table> |
</body> |
</html> |
/branches/v1.0-menes/api/fckeditor/editor/fckblank.html |
---|
New file |
0,0 → 1,5 |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> |
<html> |
<head><title></title></head> |
<body></body> |
</html> |
/branches/v1.0-menes/api/fckeditor/editor/_source/fckconstants.js |
---|
New file |
0,0 → 1,44 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckconstants.js |
* Defines some constants used by the editor. These constants are also |
* globally available in the page where the editor is placed. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
// Editor Instance Status. |
var FCK_STATUS_NOTLOADED = window.parent.FCK_STATUS_NOTLOADED = 0 ; |
var FCK_STATUS_ACTIVE = window.parent.FCK_STATUS_ACTIVE = 1 ; |
var FCK_STATUS_COMPLETE = window.parent.FCK_STATUS_COMPLETE = 2 ; |
// Tristate Operations. |
var FCK_TRISTATE_OFF = window.parent.FCK_TRISTATE_OFF = 0 ; |
var FCK_TRISTATE_ON = window.parent.FCK_TRISTATE_ON = 1 ; |
var FCK_TRISTATE_DISABLED = window.parent.FCK_TRISTATE_DISABLED = -1 ; |
// For unknown values. |
var FCK_UNKNOWN = window.parent.FCK_UNKNOWN = -9 ; |
// Toolbar Items Style. |
var FCK_TOOLBARITEM_ONLYICON = window.parent.FCK_TOOLBARITEM_ONLYICON = 0 ; |
var FCK_TOOLBARITEM_ONLYTEXT = window.parent.FCK_TOOLBARITEM_ONLYTEXT = 1 ; |
var FCK_TOOLBARITEM_ICONTEXT = window.parent.FCK_TOOLBARITEM_ICONTEXT = 2 ; |
// Edit Mode |
var FCK_EDITMODE_WYSIWYG = window.parent.FCK_EDITMODE_WYSIWYG = 0 ; |
var FCK_EDITMODE_SOURCE = window.parent.FCK_EDITMODE_SOURCE = 1 ; |
var FCK_IMAGES_PATH = 'images/' ; // Check usage. |
var FCK_SPACER_PATH = 'images/spacer.gif' ; |
/branches/v1.0-menes/api/fckeditor/editor/_source/commandclasses/fcktablecommand.js |
---|
New file |
0,0 → 1,67 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fcktablecommand.js |
* FCKPastePlainTextCommand Class: represents the |
* "Paste as Plain Text" command. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
var FCKTableCommand = function( command ) |
{ |
this.Name = command ; |
} |
FCKTableCommand.prototype.Execute = function() |
{ |
FCKUndo.SaveUndoStep() ; |
switch ( this.Name ) |
{ |
case 'TableInsertRow' : |
FCKTableHandler.InsertRow() ; |
break ; |
case 'TableDeleteRows' : |
FCKTableHandler.DeleteRows() ; |
break ; |
case 'TableInsertColumn' : |
FCKTableHandler.InsertColumn() ; |
break ; |
case 'TableDeleteColumns' : |
FCKTableHandler.DeleteColumns() ; |
break ; |
case 'TableInsertCell' : |
FCKTableHandler.InsertCell() ; |
break ; |
case 'TableDeleteCells' : |
FCKTableHandler.DeleteCells() ; |
break ; |
case 'TableMergeCells' : |
FCKTableHandler.MergeCells() ; |
break ; |
case 'TableSplitCell' : |
FCKTableHandler.SplitCell() ; |
break ; |
case 'TableDelete' : |
FCKTableHandler.DeleteTable() ; |
break ; |
default : |
alert( FCKLang.UnknownCommand.replace( /%1/g, this.Name ) ) ; |
} |
} |
FCKTableCommand.prototype.GetState = function() |
{ |
return FCK_TRISTATE_OFF ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/commandclasses/fckpastewordcommand.js |
---|
New file |
0,0 → 1,36 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckpastewordcommand.js |
* FCKPasteWordCommand Class: represents the "Paste from Word" command. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
var FCKPasteWordCommand = function() |
{ |
this.Name = 'PasteWord' ; |
} |
FCKPasteWordCommand.prototype.Execute = function() |
{ |
FCK.PasteFromWord() ; |
} |
FCKPasteWordCommand.prototype.GetState = function() |
{ |
if ( FCKConfig.ForcePasteAsPlainText ) |
return FCK_TRISTATE_DISABLED ; |
else |
return FCK.GetNamedCommandState( 'Paste' ) ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/commandclasses/fckspellcheckcommand_ie.js |
---|
New file |
0,0 → 1,63 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckspellcheckcommand_ie.js |
* FCKStyleCommand Class: represents the "Spell Check" command. |
* (IE specific implementation) |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
var FCKSpellCheckCommand = function() |
{ |
this.Name = 'SpellCheck' ; |
this.IsEnabled = ( FCKConfig.SpellChecker == 'ieSpell' || FCKConfig.SpellChecker == 'SpellerPages' ) ; |
} |
FCKSpellCheckCommand.prototype.Execute = function() |
{ |
switch ( FCKConfig.SpellChecker ) |
{ |
case 'ieSpell' : |
this._RunIeSpell() ; |
break ; |
case 'SpellerPages' : |
FCKDialog.OpenDialog( 'FCKDialog_SpellCheck', 'Spell Check', 'dialog/fck_spellerpages.html', 440, 480 ) ; |
break ; |
} |
} |
FCKSpellCheckCommand.prototype._RunIeSpell = function() |
{ |
try |
{ |
var oIeSpell = new ActiveXObject( "ieSpell.ieSpellExtension" ) ; |
oIeSpell.CheckAllLinkedDocuments( FCK.EditorDocument ) ; |
} |
catch( e ) |
{ |
if( e.number == -2146827859 ) |
{ |
if ( confirm( FCKLang.IeSpellDownload ) ) |
window.open( FCKConfig.IeSpellDownloadUrl , 'IeSpellDownload' ) ; |
} |
else |
alert( 'Error Loading ieSpell: ' + e.message + ' (' + e.number + ')' ) ; |
} |
} |
FCKSpellCheckCommand.prototype.GetState = function() |
{ |
return this.IsEnabled ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/commandclasses/fckfitwindow.js |
---|
New file |
0,0 → 1,164 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckfitwindow.js |
* Stretch the editor to full window size and back. |
* |
* File Authors: |
* Paul Moers (mail@saulmade.nl) |
* Thanks to Christian Fecteau (webmaster@christianfecteau.com) |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
var FCKFitWindow = function() |
{ |
this.Name = 'FitWindow' ; |
} |
FCKFitWindow.prototype.Execute = function() |
{ |
var eEditorFrame = window.frameElement ; |
var eEditorFrameStyle = eEditorFrame.style ; |
var eMainWindow = parent ; |
var eDocEl = eMainWindow.document.documentElement ; |
var eBody = eMainWindow.document.body ; |
var eBodyStyle = eBody.style ; |
// No original style properties known? Go fullscreen. |
if ( !this.IsMaximized ) |
{ |
// Registering an event handler when the window gets resized. |
if( FCKBrowserInfo.IsIE ) |
eMainWindow.attachEvent( 'onresize', FCKFitWindow_Resize ) ; |
else |
eMainWindow.addEventListener( 'resize', FCKFitWindow_Resize, true ) ; |
// Save the scrollbars position. |
this._ScrollPos = FCKTools.GetScrollPosition( eMainWindow ) ; |
// Save and reset the styles for the entire node tree. They could interfere in the result. |
var eParent = eEditorFrame ; |
while( eParent = eParent.parentNode ) |
{ |
if ( eParent.nodeType == 1 ) |
eParent._fckSavedStyles = FCKTools.SaveStyles( eParent ) ; |
} |
// Hide IE scrollbars (in strict mode). |
if ( FCKBrowserInfo.IsIE ) |
{ |
this.documentElementOverflow = eDocEl.style.overflow ; |
eDocEl.style.overflow = 'hidden' ; |
eBodyStyle.overflow = 'hidden' ; |
} |
else |
{ |
// Hide the scroolbars in Firefox. |
eBodyStyle.overflow = 'hidden' ; |
eBodyStyle.width = '0px' ; |
eBodyStyle.height = '0px' ; |
} |
// Save the IFRAME styles. |
this._EditorFrameStyles = FCKTools.SaveStyles( eEditorFrame ) ; |
// Resize. |
var oViewPaneSize = FCKTools.GetViewPaneSize( eMainWindow ) ; |
eEditorFrameStyle.position = "absolute"; |
eEditorFrameStyle.zIndex = FCKConfig.FloatingPanelsZIndex - 1; |
eEditorFrameStyle.left = "0px"; |
eEditorFrameStyle.top = "0px"; |
eEditorFrameStyle.width = oViewPaneSize.Width + "px"; |
eEditorFrameStyle.height = oViewPaneSize.Height + "px"; |
// Giving the frame some (huge) borders on his right and bottom |
// side to hide the background that would otherwise show when the |
// editor is in fullsize mode and the window is increased in size |
// not for IE, because IE immediately adapts the editor on resize, |
// without showing any of the background oddly in firefox, the |
// editor seems not to fill the whole frame, so just setting the |
// background of it to white to cover the page laying behind it anyway. |
if ( !FCKBrowserInfo.IsIE ) |
{ |
eEditorFrameStyle.borderRight = eEditorFrameStyle.borderBottom = "9999px solid white" ; |
eEditorFrameStyle.backgroundColor = "white"; |
} |
// Scroll to top left. |
eMainWindow.scrollTo(0, 0); |
this.IsMaximized = true ; |
} |
else // Resize to original size. |
{ |
// Remove the event handler of window resizing. |
if( FCKBrowserInfo.IsIE ) |
eMainWindow.detachEvent( "onresize", FCKFitWindow_Resize ) ; |
else |
eMainWindow.removeEventListener( "resize", FCKFitWindow_Resize, true ) ; |
// Restore the CSS position for the entire node tree. |
var eParent = eEditorFrame ; |
while( eParent = eParent.parentNode ) |
{ |
if ( eParent._fckSavedStyles ) |
{ |
FCKTools.RestoreStyles( eParent, eParent._fckSavedStyles ) ; |
eParent._fckSavedStyles = null ; |
} |
} |
// Restore IE scrollbars |
if ( FCKBrowserInfo.IsIE ) |
eDocEl.style.overflow = this.documentElementOverflow ; |
// Restore original size |
FCKTools.RestoreStyles( eEditorFrame, this._EditorFrameStyles ) ; |
// Restore the window scroll position. |
eMainWindow.scrollTo( this._ScrollPos.X, this._ScrollPos.Y ) ; |
this.IsMaximized = false ; |
} |
FCKToolbarItems.GetItem('FitWindow').RefreshState() ; |
// It seams that Firefox restarts the editing area when making this changes. |
// On FF 1.0.x, the area is not anymore editable. On FF 1.5+, the special |
//configuration, like DisableFFTableHandles and DisableObjectResizing get |
//lost, so we must reset it. Also, the cursor position and selection are |
//also lost, even if you comment the following line (MakeEditable). |
// if ( FCKBrowserInfo.IsGecko10 ) // Initially I thought it was a FF 1.0 only problem. |
FCK.EditingArea.MakeEditable() ; |
FCK.Focus() ; |
} |
FCKFitWindow.prototype.GetState = function() |
{ |
if ( FCKConfig.ToolbarLocation != 'In' ) |
return FCK_TRISTATE_DISABLED ; |
else |
return ( this.IsMaximized ? FCK_TRISTATE_ON : FCK_TRISTATE_OFF ); |
} |
function FCKFitWindow_Resize() |
{ |
var oViewPaneSize = FCKTools.GetViewPaneSize( parent ) ; |
var eEditorFrameStyle = window.frameElement.style ; |
eEditorFrameStyle.width = oViewPaneSize.Width + 'px' ; |
eEditorFrameStyle.height = oViewPaneSize.Height + 'px' ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/commandclasses/fckstylecommand.js |
---|
New file |
0,0 → 1,95 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckstylecommand.js |
* FCKStyleCommand Class: represents the "Style" command. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
var FCKStyleCommand = function() |
{ |
this.Name = 'Style' ; |
// Load the Styles defined in the XML file. |
this.StylesLoader = new FCKStylesLoader() ; |
this.StylesLoader.Load( FCKConfig.StylesXmlPath ) ; |
this.Styles = this.StylesLoader.Styles ; |
} |
FCKStyleCommand.prototype.Execute = function( styleName, styleComboItem ) |
{ |
FCKUndo.SaveUndoStep() ; |
if ( styleComboItem.Selected ) |
styleComboItem.Style.RemoveFromSelection() ; |
else |
styleComboItem.Style.ApplyToSelection() ; |
FCKUndo.SaveUndoStep() ; |
FCK.Focus() ; |
FCK.Events.FireEvent( "OnSelectionChange" ) ; |
} |
FCKStyleCommand.prototype.GetState = function() |
{ |
if ( !FCK.EditorDocument ) |
return FCK_TRISTATE_DISABLED ; |
var oSelection = FCK.EditorDocument.selection ; |
if ( FCKSelection.GetType() == 'Control' ) |
{ |
var e = FCKSelection.GetSelectedElement() ; |
if ( e ) |
return this.StylesLoader.StyleGroups[ e.tagName ] ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ; |
} |
return FCK_TRISTATE_OFF ; |
} |
FCKStyleCommand.prototype.GetActiveStyles = function() |
{ |
var aActiveStyles = new Array() ; |
if ( FCKSelection.GetType() == 'Control' ) |
this._CheckStyle( FCKSelection.GetSelectedElement(), aActiveStyles, false ) ; |
else |
this._CheckStyle( FCKSelection.GetParentElement(), aActiveStyles, true ) ; |
return aActiveStyles ; |
} |
FCKStyleCommand.prototype._CheckStyle = function( element, targetArray, checkParent ) |
{ |
if ( ! element ) |
return ; |
if ( element.nodeType == 1 ) |
{ |
var aStyleGroup = this.StylesLoader.StyleGroups[ element.tagName ] ; |
if ( aStyleGroup ) |
{ |
for ( var i = 0 ; i < aStyleGroup.length ; i++ ) |
{ |
if ( aStyleGroup[i].IsEqual( element ) ) |
targetArray[ targetArray.length ] = aStyleGroup[i] ; |
} |
} |
} |
if ( checkParent ) |
this._CheckStyle( element.parentNode, targetArray, checkParent ) ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/commandclasses/fck_othercommands.js |
---|
New file |
0,0 → 1,309 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fck_othercommands.js |
* Definition of other commands that are not available internaly in the |
* browser (see FCKNamedCommand). |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
// ### General Dialog Box Commands. |
var FCKDialogCommand = function( name, title, url, width, height, getStateFunction, getStateParam ) |
{ |
this.Name = name ; |
this.Title = title ; |
this.Url = url ; |
this.Width = width ; |
this.Height = height ; |
this.GetStateFunction = getStateFunction ; |
this.GetStateParam = getStateParam ; |
} |
FCKDialogCommand.prototype.Execute = function() |
{ |
FCKDialog.OpenDialog( 'FCKDialog_' + this.Name , this.Title, this.Url, this.Width, this.Height ) ; |
} |
FCKDialogCommand.prototype.GetState = function() |
{ |
if ( this.GetStateFunction ) |
return this.GetStateFunction( this.GetStateParam ) ; |
else |
return FCK_TRISTATE_OFF ; |
} |
// Generic Undefined command (usually used when a command is under development). |
var FCKUndefinedCommand = function() |
{ |
this.Name = 'Undefined' ; |
} |
FCKUndefinedCommand.prototype.Execute = function() |
{ |
alert( FCKLang.NotImplemented ) ; |
} |
FCKUndefinedCommand.prototype.GetState = function() |
{ |
return FCK_TRISTATE_OFF ; |
} |
// ### FontName |
var FCKFontNameCommand = function() |
{ |
this.Name = 'FontName' ; |
} |
FCKFontNameCommand.prototype.Execute = function( fontName ) |
{ |
if (fontName == null || fontName == "") |
{ |
// TODO: Remove font name attribute. |
} |
else |
FCK.ExecuteNamedCommand( 'FontName', fontName ) ; |
} |
FCKFontNameCommand.prototype.GetState = function() |
{ |
return FCK.GetNamedCommandValue( 'FontName' ) ; |
} |
// ### FontSize |
var FCKFontSizeCommand = function() |
{ |
this.Name = 'FontSize' ; |
} |
FCKFontSizeCommand.prototype.Execute = function( fontSize ) |
{ |
if ( typeof( fontSize ) == 'string' ) fontSize = parseInt(fontSize) ; |
if ( fontSize == null || fontSize == '' ) |
{ |
// TODO: Remove font size attribute (Now it works with size 3. Will it work forever?) |
FCK.ExecuteNamedCommand( 'FontSize', 3 ) ; |
} |
else |
FCK.ExecuteNamedCommand( 'FontSize', fontSize ) ; |
} |
FCKFontSizeCommand.prototype.GetState = function() |
{ |
return FCK.GetNamedCommandValue( 'FontSize' ) ; |
} |
// ### FormatBlock |
var FCKFormatBlockCommand = function() |
{ |
this.Name = 'FormatBlock' ; |
} |
FCKFormatBlockCommand.prototype.Execute = function( formatName ) |
{ |
if ( formatName == null || formatName == '' ) |
FCK.ExecuteNamedCommand( 'FormatBlock', '<P>' ) ; |
else if ( formatName == 'div' && FCKBrowserInfo.IsGecko ) |
FCK.ExecuteNamedCommand( 'FormatBlock', 'div' ) ; |
else |
FCK.ExecuteNamedCommand( 'FormatBlock', '<' + formatName + '>' ) ; |
} |
FCKFormatBlockCommand.prototype.GetState = function() |
{ |
return FCK.GetNamedCommandValue( 'FormatBlock' ) ; |
} |
// ### Preview |
var FCKPreviewCommand = function() |
{ |
this.Name = 'Preview' ; |
} |
FCKPreviewCommand.prototype.Execute = function() |
{ |
FCK.Preview() ; |
} |
FCKPreviewCommand.prototype.GetState = function() |
{ |
return FCK_TRISTATE_OFF ; |
} |
// ### Save |
var FCKSaveCommand = function() |
{ |
this.Name = 'Save' ; |
} |
FCKSaveCommand.prototype.Execute = function() |
{ |
// Get the linked field form. |
var oForm = FCK.LinkedField.form ; |
if ( typeof( oForm.onsubmit ) == 'function' ) |
{ |
var bRet = oForm.onsubmit() ; |
if ( bRet != null && bRet === false ) |
return ; |
} |
// Submit the form. |
oForm.submit() ; |
} |
FCKSaveCommand.prototype.GetState = function() |
{ |
return FCK_TRISTATE_OFF ; |
} |
// ### NewPage |
var FCKNewPageCommand = function() |
{ |
this.Name = 'NewPage' ; |
} |
FCKNewPageCommand.prototype.Execute = function() |
{ |
FCKUndo.SaveUndoStep() ; |
FCK.SetHTML( '' ) ; |
FCKUndo.Typing = true ; |
// FCK.SetHTML( FCKBrowserInfo.IsGecko ? ' ' : '' ) ; |
// FCK.SetHTML( FCKBrowserInfo.IsGecko ? GECKO_BOGUS : '' ) ; |
} |
FCKNewPageCommand.prototype.GetState = function() |
{ |
return FCK_TRISTATE_OFF ; |
} |
// ### Source button |
var FCKSourceCommand = function() |
{ |
this.Name = 'Source' ; |
} |
FCKSourceCommand.prototype.Execute = function() |
{ |
if ( FCKConfig.SourcePopup ) // Until v2.2, it was mandatory for FCKBrowserInfo.IsGecko. |
{ |
var iWidth = FCKConfig.ScreenWidth * 0.65 ; |
var iHeight = FCKConfig.ScreenHeight * 0.65 ; |
FCKDialog.OpenDialog( 'FCKDialog_Source', FCKLang.Source, 'dialog/fck_source.html', iWidth, iHeight, null, null, true ) ; |
} |
else |
FCK.SwitchEditMode() ; |
} |
FCKSourceCommand.prototype.GetState = function() |
{ |
return ( FCK.EditMode == FCK_EDITMODE_WYSIWYG ? FCK_TRISTATE_OFF : FCK_TRISTATE_ON ) ; |
} |
// ### Undo |
var FCKUndoCommand = function() |
{ |
this.Name = 'Undo' ; |
} |
FCKUndoCommand.prototype.Execute = function() |
{ |
if ( FCKBrowserInfo.IsIE ) |
FCKUndo.Undo() ; |
else |
FCK.ExecuteNamedCommand( 'Undo' ) ; |
} |
FCKUndoCommand.prototype.GetState = function() |
{ |
if ( FCKBrowserInfo.IsIE ) |
return ( FCKUndo.CheckUndoState() ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ) ; |
else |
return FCK.GetNamedCommandState( 'Undo' ) ; |
} |
// ### Redo |
var FCKRedoCommand = function() |
{ |
this.Name = 'Redo' ; |
} |
FCKRedoCommand.prototype.Execute = function() |
{ |
if ( FCKBrowserInfo.IsIE ) |
FCKUndo.Redo() ; |
else |
FCK.ExecuteNamedCommand( 'Redo' ) ; |
} |
FCKRedoCommand.prototype.GetState = function() |
{ |
if ( FCKBrowserInfo.IsIE ) |
return ( FCKUndo.CheckRedoState() ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ) ; |
else |
return FCK.GetNamedCommandState( 'Redo' ) ; |
} |
// ### Page Break |
var FCKPageBreakCommand = function() |
{ |
this.Name = 'PageBreak' ; |
} |
FCKPageBreakCommand.prototype.Execute = function() |
{ |
// var e = FCK.EditorDocument.createElement( 'CENTER' ) ; |
// e.style.pageBreakAfter = 'always' ; |
// Tidy was removing the empty CENTER tags, so the following solution has |
// been found. It also validates correctly as XHTML 1.0 Strict. |
var e = FCK.EditorDocument.createElement( 'DIV' ) ; |
e.style.pageBreakAfter = 'always' ; |
e.innerHTML = '<span style="DISPLAY:none"> </span>' ; |
var oFakeImage = FCKDocumentProcessor_CreateFakeImage( 'FCK__PageBreak', e ) ; |
oFakeImage = FCK.InsertElement( oFakeImage ) ; |
} |
FCKPageBreakCommand.prototype.GetState = function() |
{ |
return 0 ; // FCK_TRISTATE_OFF |
} |
// FCKUnlinkCommand - by Johnny Egeland (johnny@coretrek.com) |
var FCKUnlinkCommand = function() |
{ |
this.Name = 'Unlink' ; |
} |
FCKUnlinkCommand.prototype.Execute = function() |
{ |
if ( FCKBrowserInfo.IsGecko ) |
{ |
var oLink = FCK.Selection.MoveToAncestorNode( 'A' ) ; |
if ( oLink ) |
FCK.Selection.SelectNode( oLink ) ; |
} |
FCK.ExecuteNamedCommand( this.Name ) ; |
if ( FCKBrowserInfo.IsGecko ) |
FCK.Selection.Collapse( true ) ; |
} |
FCKUnlinkCommand.prototype.GetState = function() |
{ |
return FCK.GetNamedCommandState( this.Name ) ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/commandclasses/fcktextcolorcommand.js |
---|
New file |
0,0 → 1,171 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fcktextcolorcommand.js |
* FCKTextColorCommand Class: represents the text color comand. It shows the |
* color selection panel. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
// FCKTextColorCommand Contructor |
// type: can be 'ForeColor' or 'BackColor'. |
var FCKTextColorCommand = function( type ) |
{ |
this.Name = type == 'ForeColor' ? 'TextColor' : 'BGColor' ; |
this.Type = type ; |
var oWindow ; |
if ( FCKBrowserInfo.IsIE ) |
oWindow = window ; |
else if ( FCK.ToolbarSet._IFrame ) |
oWindow = FCKTools.GetElementWindow( FCK.ToolbarSet._IFrame ) ; |
else |
oWindow = window.parent ; |
this._Panel = new FCKPanel( oWindow, true ) ; |
this._Panel.AppendStyleSheet( FCKConfig.SkinPath + 'fck_editor.css' ) ; |
this._Panel.MainNode.className = 'FCK_Panel' ; |
this._CreatePanelBody( this._Panel.Document, this._Panel.MainNode ) ; |
FCKTools.DisableSelection( this._Panel.Document.body ) ; |
} |
FCKTextColorCommand.prototype.Execute = function( panelX, panelY, relElement ) |
{ |
// We must "cache" the actual panel type to be used in the SetColor method. |
FCK._ActiveColorPanelType = this.Type ; |
// Show the Color Panel at the desired position. |
this._Panel.Show( panelX, panelY, relElement ) ; |
} |
FCKTextColorCommand.prototype.SetColor = function( color ) |
{ |
if ( FCK._ActiveColorPanelType == 'ForeColor' ) |
FCK.ExecuteNamedCommand( 'ForeColor', color ) ; |
else if ( FCKBrowserInfo.IsGeckoLike ) |
{ |
if ( FCKBrowserInfo.IsGecko && !FCKConfig.GeckoUseSPAN ) |
FCK.EditorDocument.execCommand( 'useCSS', false, false ) ; |
FCK.ExecuteNamedCommand( 'hilitecolor', color ) ; |
if ( FCKBrowserInfo.IsGecko && !FCKConfig.GeckoUseSPAN ) |
FCK.EditorDocument.execCommand( 'useCSS', false, true ) ; |
} |
else |
FCK.ExecuteNamedCommand( 'BackColor', color ) ; |
// Delete the "cached" active panel type. |
delete FCK._ActiveColorPanelType ; |
} |
FCKTextColorCommand.prototype.GetState = function() |
{ |
return FCK_TRISTATE_OFF ; |
} |
function FCKTextColorCommand_OnMouseOver() { this.className='ColorSelected' ; } |
function FCKTextColorCommand_OnMouseOut() { this.className='ColorDeselected' ; } |
function FCKTextColorCommand_OnClick() |
{ |
this.className = 'ColorDeselected' ; |
this.Command.SetColor( '#' + this.Color ) ; |
this.Command._Panel.Hide() ; |
} |
function FCKTextColorCommand_AutoOnClick() |
{ |
this.className = 'ColorDeselected' ; |
this.Command.SetColor( '' ) ; |
this.Command._Panel.Hide() ; |
} |
function FCKTextColorCommand_MoreOnClick() |
{ |
this.className = 'ColorDeselected' ; |
this.Command._Panel.Hide() ; |
FCKDialog.OpenDialog( 'FCKDialog_Color', FCKLang.DlgColorTitle, 'dialog/fck_colorselector.html', 400, 330, this.Command.SetColor ) ; |
} |
FCKTextColorCommand.prototype._CreatePanelBody = function( targetDocument, targetDiv ) |
{ |
function CreateSelectionDiv() |
{ |
var oDiv = targetDocument.createElement( "DIV" ) ; |
oDiv.className = 'ColorDeselected' ; |
oDiv.onmouseover = FCKTextColorCommand_OnMouseOver ; |
oDiv.onmouseout = FCKTextColorCommand_OnMouseOut ; |
return oDiv ; |
} |
// Create the Table that will hold all colors. |
var oTable = targetDiv.appendChild( targetDocument.createElement( "TABLE" ) ) ; |
oTable.className = 'ForceBaseFont' ; // Firefox 1.5 Bug. |
oTable.style.tableLayout = 'fixed' ; |
oTable.cellPadding = 0 ; |
oTable.cellSpacing = 0 ; |
oTable.border = 0 ; |
oTable.width = 150 ; |
var oCell = oTable.insertRow(-1).insertCell(-1) ; |
oCell.colSpan = 8 ; |
// Create the Button for the "Automatic" color selection. |
var oDiv = oCell.appendChild( CreateSelectionDiv() ) ; |
oDiv.innerHTML = |
'<table cellspacing="0" cellpadding="0" width="100%" border="0">\ |
<tr>\ |
<td><div class="ColorBoxBorder"><div class="ColorBox" style="background-color: #000000"></div></div></td>\ |
<td nowrap width="100%" align="center">' + FCKLang.ColorAutomatic + '</td>\ |
</tr>\ |
</table>' ; |
oDiv.Command = this ; |
oDiv.onclick = FCKTextColorCommand_AutoOnClick ; |
// Create an array of colors based on the configuration file. |
var aColors = FCKConfig.FontColors.toString().split(',') ; |
// Create the colors table based on the array. |
var iCounter = 0 ; |
while ( iCounter < aColors.length ) |
{ |
var oRow = oTable.insertRow(-1) ; |
for ( var i = 0 ; i < 8 && iCounter < aColors.length ; i++, iCounter++ ) |
{ |
oDiv = oRow.insertCell(-1).appendChild( CreateSelectionDiv() ) ; |
oDiv.Color = aColors[iCounter] ; |
oDiv.innerHTML = '<div class="ColorBoxBorder"><div class="ColorBox" style="background-color: #' + aColors[iCounter] + '"></div></div>' ; |
oDiv.Command = this ; |
oDiv.onclick = FCKTextColorCommand_OnClick ; |
} |
} |
// Create the Row and the Cell for the "More Colors..." button. |
oCell = oTable.insertRow(-1).insertCell(-1) ; |
oCell.colSpan = 8 ; |
oDiv = oCell.appendChild( CreateSelectionDiv() ) ; |
oDiv.innerHTML = '<table width="100%" cellpadding="0" cellspacing="0" border="0"><tr><td nowrap align="center">' + FCKLang.ColorMoreColors + '</td></tr></table>' ; |
oDiv.Command = this ; |
oDiv.onclick = FCKTextColorCommand_MoreOnClick ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/commandclasses/fcknamedcommand.js |
---|
New file |
0,0 → 1,33 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fcknamedcommand.js |
* FCKNamedCommand Class: represents an internal browser command. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
var FCKNamedCommand = function( commandName ) |
{ |
this.Name = commandName ; |
} |
FCKNamedCommand.prototype.Execute = function() |
{ |
FCK.ExecuteNamedCommand( this.Name ) ; |
} |
FCKNamedCommand.prototype.GetState = function() |
{ |
return FCK.GetNamedCommandState( this.Name ) ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/commandclasses/fckpasteplaintextcommand.js |
---|
New file |
0,0 → 1,34 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckpasteplaintextcommand.js |
* FCKPastePlainTextCommand Class: represents the |
* "Paste as Plain Text" command. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
var FCKPastePlainTextCommand = function() |
{ |
this.Name = 'PasteText' ; |
} |
FCKPastePlainTextCommand.prototype.Execute = function() |
{ |
FCK.PasteAsPlainText() ; |
} |
FCKPastePlainTextCommand.prototype.GetState = function() |
{ |
return FCK.GetNamedCommandState( 'Paste' ) ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/commandclasses/fckspellcheckcommand_gecko.js |
---|
New file |
0,0 → 1,35 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckspellcheckcommand_gecko.js |
* FCKStyleCommand Class: represents the "Spell Check" command. |
* (Gecko specific implementation) |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
var FCKSpellCheckCommand = function() |
{ |
this.Name = 'SpellCheck' ; |
this.IsEnabled = ( FCKConfig.SpellChecker == 'SpellerPages' ) ; |
} |
FCKSpellCheckCommand.prototype.Execute = function() |
{ |
FCKDialog.OpenDialog( 'FCKDialog_SpellCheck', 'Spell Check', 'dialog/fck_spellerpages.html', 440, 480 ) ; |
} |
FCKSpellCheckCommand.prototype.GetState = function() |
{ |
return this.IsEnabled ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/classes/fckxml_gecko.js |
---|
New file |
0,0 → 1,66 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckxml_gecko.js |
* FCKXml Class: class to load and manipulate XML files. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
var FCKXml = function() |
{} |
FCKXml.prototype.LoadUrl = function( urlToCall ) |
{ |
var oFCKXml = this ; |
var oXmlHttp = FCKTools.CreateXmlObject( 'XmlHttp' ) ; |
oXmlHttp.open( "GET", urlToCall, false ) ; |
oXmlHttp.send( null ) ; |
if ( oXmlHttp.status == 200 || oXmlHttp.status == 304 ) |
this.DOMDocument = oXmlHttp.responseXML ; |
else if ( oXmlHttp.status == 0 && oXmlHttp.readyState == 4 ) |
this.DOMDocument = oXmlHttp.responseXML ; |
else |
alert( 'Error loading "' + urlToCall + '"' ) ; |
} |
FCKXml.prototype.SelectNodes = function( xpath, contextNode ) |
{ |
var aNodeArray = new Array(); |
var xPathResult = this.DOMDocument.evaluate( xpath, contextNode ? contextNode : this.DOMDocument, |
this.DOMDocument.createNSResolver(this.DOMDocument.documentElement), XPathResult.ORDERED_NODE_ITERATOR_TYPE, null) ; |
if ( xPathResult ) |
{ |
var oNode = xPathResult.iterateNext() ; |
while( oNode ) |
{ |
aNodeArray[aNodeArray.length] = oNode ; |
oNode = xPathResult.iterateNext(); |
} |
} |
return aNodeArray ; |
} |
FCKXml.prototype.SelectSingleNode = function( xpath, contextNode ) |
{ |
var xPathResult = this.DOMDocument.evaluate( xpath, contextNode ? contextNode : this.DOMDocument, |
this.DOMDocument.createNSResolver(this.DOMDocument.documentElement), 9, null); |
if ( xPathResult && xPathResult.singleNodeValue ) |
return xPathResult.singleNodeValue ; |
else |
return null ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/classes/fckcontextmenu.js |
---|
New file |
0,0 → 1,123 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckcontextmenu.js |
* FCKContextMenu Class: renders an control a context menu. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
var FCKContextMenu = function( parentWindow, mouseClickWindow, langDir ) |
{ |
var oPanel = this._Panel = new FCKPanel( parentWindow, true ) ; |
oPanel.AppendStyleSheet( FCKConfig.SkinPath + 'fck_editor.css' ) ; |
oPanel.IsContextMenu = true ; |
var oMenuBlock = this._MenuBlock = new FCKMenuBlock() ; |
oMenuBlock.Panel = oPanel ; |
oMenuBlock.OnClick = FCKTools.CreateEventListener( FCKContextMenu_MenuBlock_OnClick, this ) ; |
this._Redraw = true ; |
this.SetMouseClickWindow( mouseClickWindow || parentWindow ) ; |
} |
FCKContextMenu.prototype.SetMouseClickWindow = function( mouseClickWindow ) |
{ |
if ( !FCKBrowserInfo.IsIE ) |
{ |
this._Document = mouseClickWindow.document ; |
this._Document.addEventListener( 'contextmenu', FCKContextMenu_Document_OnContextMenu, false ) ; |
} |
} |
FCKContextMenu.prototype.AddItem = function( name, label, iconPathOrStripInfoArrayOrIndex, isDisabled ) |
{ |
var oItem = this._MenuBlock.AddItem( name, label, iconPathOrStripInfoArrayOrIndex, isDisabled) ; |
this._Redraw = true ; |
return oItem ; |
} |
FCKContextMenu.prototype.AddSeparator = function() |
{ |
this._MenuBlock.AddSeparator() ; |
this._Redraw = true ; |
} |
FCKContextMenu.prototype.RemoveAllItems = function() |
{ |
this._MenuBlock.RemoveAllItems() ; |
this._Redraw = true ; |
} |
FCKContextMenu.prototype.AttachToElement = function( element ) |
{ |
if ( FCKBrowserInfo.IsIE ) |
FCKTools.AddEventListenerEx( element, 'contextmenu', FCKContextMenu_AttachedElement_OnContextMenu, this ) ; |
else |
element._FCKContextMenu = this ; |
// element.onmouseup = FCKContextMenu_AttachedElement_OnMouseUp ; |
} |
function FCKContextMenu_Document_OnContextMenu( e ) |
{ |
var el = e.target ; |
while ( el ) |
{ |
if ( el._FCKContextMenu ) |
{ |
FCKTools.CancelEvent( e ) ; |
FCKContextMenu_AttachedElement_OnContextMenu( e, el._FCKContextMenu, el ) ; |
} |
el = el.parentNode ; |
} |
} |
function FCKContextMenu_AttachedElement_OnContextMenu( ev, fckContextMenu, el ) |
{ |
// var iButton = e ? e.which - 1 : event.button ; |
// if ( iButton != 2 ) |
// return ; |
var eTarget = el || this ; |
if ( fckContextMenu.OnBeforeOpen ) |
fckContextMenu.OnBeforeOpen.call( fckContextMenu, eTarget ) ; |
if ( fckContextMenu._MenuBlock.Count() == 0 ) |
return false ; |
if ( fckContextMenu._Redraw ) |
{ |
fckContextMenu._MenuBlock.Create( fckContextMenu._Panel.MainNode ) ; |
fckContextMenu._Redraw = false ; |
} |
fckContextMenu._Panel.Show( |
ev.pageX || ev.screenX, |
ev.pageY || ev.screenY, |
ev.currentTarget || null |
) ; |
return false ; |
} |
function FCKContextMenu_MenuBlock_OnClick( menuItem, contextMenu ) |
{ |
contextMenu._Panel.Hide() ; |
FCKTools.RunFunction( contextMenu.OnItemClick, contextMenu, menuItem ) ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/classes/fckstylesloader.js |
---|
New file |
0,0 → 1,84 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckstylesloader.js |
* FCKStylesLoader Class: this class define objects that are responsible |
* for loading the styles defined in the XML file. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
var FCKStylesLoader = function() |
{ |
this.Styles = new Object() ; |
this.StyleGroups = new Object() ; |
this.Loaded = false ; |
this.HasObjectElements = false ; |
} |
FCKStylesLoader.prototype.Load = function( stylesXmlUrl ) |
{ |
// Load the XML file into a FCKXml object. |
var oXml = new FCKXml() ; |
oXml.LoadUrl( stylesXmlUrl ) ; |
// Get the "Style" nodes defined in the XML file. |
var aStyleNodes = oXml.SelectNodes( 'Styles/Style' ) ; |
// Add each style to our "Styles" collection. |
for ( var i = 0 ; i < aStyleNodes.length ; i++ ) |
{ |
var sElement = aStyleNodes[i].attributes.getNamedItem('element').value.toUpperCase() ; |
// Create the style definition object. |
var oStyleDef = new FCKStyleDef( aStyleNodes[i].attributes.getNamedItem('name').value, sElement ) ; |
if ( oStyleDef.IsObjectElement ) |
this.HasObjectElements = true ; |
// Get the attributes defined for the style (if any). |
var aAttNodes = oXml.SelectNodes( 'Attribute', aStyleNodes[i] ) ; |
// Add the attributes to the style definition object. |
for ( var j = 0 ; j < aAttNodes.length ; j++ ) |
{ |
var sAttName = aAttNodes[j].attributes.getNamedItem('name').value ; |
var sAttValue = aAttNodes[j].attributes.getNamedItem('value').value ; |
// IE changes the "style" attribute value when applied to an element |
// so we must get the final resulting value (for comparision issues). |
if ( sAttName.toLowerCase() == 'style' ) |
{ |
var oTempE = document.createElement( 'SPAN' ) ; |
oTempE.style.cssText = sAttValue ; |
sAttValue = oTempE.style.cssText ; |
} |
oStyleDef.AddAttribute( sAttName, sAttValue ) ; |
} |
// Add the style to the "Styles" collection using it's name as the key. |
this.Styles[ oStyleDef.Name ] = oStyleDef ; |
// Add the style to the "StyleGroups" collection. |
var aGroup = this.StyleGroups[sElement] ; |
if ( aGroup == null ) |
{ |
this.StyleGroups[sElement] = new Array() ; |
aGroup = this.StyleGroups[sElement] ; |
} |
aGroup[aGroup.length] = oStyleDef ; |
} |
this.Loaded = true ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/classes/fckeditingarea.js |
---|
New file |
0,0 → 1,190 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckeditingarea.js |
* FCKEditingArea Class: renders an editable area. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
/** |
* @constructor |
* @param {String} targetElement The element that will hold the editing area. Any child element present in the target will be deleted. |
*/ |
var FCKEditingArea = function( targetElement ) |
{ |
this.TargetElement = targetElement ; |
this.Mode = FCK_EDITMODE_WYSIWYG ; |
if ( FCK.IECleanup ) |
FCK.IECleanup.AddItem( this, FCKEditingArea_Cleanup ) ; |
} |
/** |
* @param {String} html The complete HTML for the page, including DOCTYPE and the <html> tag. |
*/ |
FCKEditingArea.prototype.Start = function( html, secondCall ) |
{ |
var eTargetElement = this.TargetElement ; |
var oTargetDocument = FCKTools.GetElementDocument( eTargetElement ) ; |
// Remove all child nodes from the target. |
while( eTargetElement.childNodes.length > 0 ) |
eTargetElement.removeChild( eTargetElement.childNodes[0] ) ; |
if ( this.Mode == FCK_EDITMODE_WYSIWYG ) |
{ |
if ( FCKBrowserInfo.IsGecko ) |
html = html.replace( /(<body[^>]*>)\s*(<\/body>)/i, '$1' + GECKO_BOGUS + '$2' ) ; |
// Create the editing area IFRAME. |
var oIFrame = this.IFrame = oTargetDocument.createElement( 'iframe' ) ; |
oIFrame.src = 'javascript:void(0)' ; |
oIFrame.frameBorder = 0 ; |
oIFrame.width = oIFrame.height = '100%' ; |
// Append the new IFRAME to the target. |
eTargetElement.appendChild( oIFrame ) ; |
// IE has a bug with the <base> tag... it must have a </base> closer, |
// otherwise the all sucessive tags will be set as children nodes of the <base>. |
if ( FCKBrowserInfo.IsIE ) |
html = html.replace( /(<base[^>]*?)\s*\/?>(?!\s*<\/base>)/gi, '$1></base>' ) ; |
// Get the window and document objects used to interact with the newly created IFRAME. |
this.Window = oIFrame.contentWindow ; |
// IE: Avoid JavaScript errors thrown by the editing are source (like tags events). |
// TODO: This error handler is not being fired. |
// this.Window.onerror = function() { alert( 'Error!' ) ; return true ; } |
var oDoc = this.Document = this.Window.document ; |
oDoc.open() ; |
oDoc.write( html ) ; |
oDoc.close() ; |
// Firefox 1.0.x is buggy... ohh yes... so let's do it two times and it |
// will magicaly work. |
if ( FCKBrowserInfo.IsGecko10 && !secondCall ) |
{ |
this.Start( html, true ) ; |
return ; |
} |
this.Window._FCKEditingArea = this ; |
// FF 1.0.x is buggy... we must wait a lot to enable editing because |
// sometimes the content simply disappears, for example when pasting |
// "bla1!<img src='some_url'>!bla2" in the source and then switching |
// back to design. |
if ( FCKBrowserInfo.IsGecko10 ) |
this.Window.setTimeout( FCKEditingArea_CompleteStart, 500 ) ; |
else |
FCKEditingArea_CompleteStart.call( this.Window ) ; |
} |
else |
{ |
var eTextarea = this.Textarea = oTargetDocument.createElement( 'textarea' ) ; |
eTextarea.className = 'SourceField' ; |
eTextarea.dir = 'ltr' ; |
eTextarea.style.width = eTextarea.style.height = '100%' ; |
eTextarea.style.border = 'none' ; |
eTargetElement.appendChild( eTextarea ) ; |
eTextarea.value = html ; |
// Fire the "OnLoad" event. |
FCKTools.RunFunction( this.OnLoad ) ; |
} |
} |
// "this" here is FCKEditingArea.Window |
function FCKEditingArea_CompleteStart() |
{ |
// Of Firefox, the DOM takes a little to become available. So we must wait for it in a loop. |
if ( !this.document.body ) |
{ |
this.setTimeout( FCKEditingArea_CompleteStart, 50 ) ; |
return ; |
} |
var oEditorArea = this._FCKEditingArea ; |
oEditorArea.MakeEditable() ; |
// Fire the "OnLoad" event. |
FCKTools.RunFunction( oEditorArea.OnLoad ) ; |
} |
FCKEditingArea.prototype.MakeEditable = function() |
{ |
var oDoc = this.Document ; |
if ( FCKBrowserInfo.IsIE ) |
oDoc.body.contentEditable = true ; |
else |
{ |
try |
{ |
oDoc.designMode = 'on' ; |
// Tell Gecko to use or not the <SPAN> tag for the bold, italic and underline. |
oDoc.execCommand( 'useCSS', false, !FCKConfig.GeckoUseSPAN ) ; |
// Analysing Firefox 1.5 source code, it seams that there is support for a |
// "insertBrOnReturn" command. Applying it gives no error, but it doesn't |
// gives the same behavior that you have with IE. It works only if you are |
// already inside a paragraph and it doesn't render correctly in the first enter. |
// oDoc.execCommand( 'insertBrOnReturn', false, false ) ; |
// Tell Gecko (Firefox 1.5+) to enable or not live resizing of objects (by Alfonso Martinez) |
oDoc.execCommand( 'enableObjectResizing', false, !FCKConfig.DisableObjectResizing ) ; |
// Disable the standard table editing features of Firefox. |
oDoc.execCommand( 'enableInlineTableEditing', false, !FCKConfig.DisableFFTableHandles ) ; |
} |
catch (e) {} |
} |
} |
FCKEditingArea.prototype.Focus = function() |
{ |
try |
{ |
if ( this.Mode == FCK_EDITMODE_WYSIWYG ) |
{ |
if ( FCKBrowserInfo.IsSafari ) |
this.IFrame.focus() ; |
else |
this.Window.focus() ; |
} |
else |
this.Textarea.focus() ; |
} |
catch(e) {} |
} |
function FCKEditingArea_Cleanup() |
{ |
this.TargetElement = null ; |
this.IFrame = null ; |
this.Document = null ; |
this.Textarea = null ; |
if ( this.Window ) |
{ |
this.Window._FCKEditingArea = null ; |
this.Window = null ; |
} |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/classes/fckxml_ie.js |
---|
New file |
0,0 → 1,78 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckxml_ie.js |
* FCKXml Class: class to load and manipulate XML files. |
* (IE specific implementation) |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
var FCKXml = function() |
{ |
this.Error = false ; |
} |
FCKXml.prototype.LoadUrl = function( urlToCall ) |
{ |
this.Error = false ; |
var oXmlHttp = FCKTools.CreateXmlObject( 'XmlHttp' ) ; |
if ( !oXmlHttp ) |
{ |
this.Error = true ; |
return ; |
} |
oXmlHttp.open( "GET", urlToCall, false ) ; |
oXmlHttp.send( null ) ; |
if ( oXmlHttp.status == 200 || oXmlHttp.status == 304 ) |
this.DOMDocument = oXmlHttp.responseXML ; |
else if ( oXmlHttp.status == 0 && oXmlHttp.readyState == 4 ) |
{ |
this.DOMDocument = FCKTools.CreateXmlObject( 'DOMDocument' ) ; |
this.DOMDocument.async = false ; |
this.DOMDocument.resolveExternals = false ; |
this.DOMDocument.loadXML( oXmlHttp.responseText ) ; |
} |
else |
{ |
this.Error = true ; |
alert( 'Error loading "' + urlToCall + '"' ) ; |
} |
} |
FCKXml.prototype.SelectNodes = function( xpath, contextNode ) |
{ |
if ( this.Error ) |
return new Array() ; |
if ( contextNode ) |
return contextNode.selectNodes( xpath ) ; |
else |
return this.DOMDocument.selectNodes( xpath ) ; |
} |
FCKXml.prototype.SelectSingleNode = function( xpath, contextNode ) |
{ |
if ( this.Error ) |
return ; |
if ( contextNode ) |
return contextNode.selectSingleNode( xpath ) ; |
else |
return this.DOMDocument.selectSingleNode( xpath ) ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/classes/fcktoolbarpanelbutton.js |
---|
New file |
0,0 → 1,87 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fcktoolbarpanelbutton.js |
* FCKToolbarPanelButton Class: represents a special button in the toolbar |
* that shows a panel when pressed. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
var FCKToolbarPanelButton = function( commandName, label, tooltip, style, icon ) |
{ |
this.CommandName = commandName ; |
var oIcon ; |
if ( icon == null ) |
oIcon = FCKConfig.SkinPath + 'toolbar/' + commandName.toLowerCase() + '.gif' ; |
else if ( typeof( icon ) == 'number' ) |
oIcon = [ FCKConfig.SkinPath + 'fck_strip.gif', 16, icon ] ; |
var oUIButton = this._UIButton = new FCKToolbarButtonUI( commandName, label, tooltip, oIcon, style ) ; |
oUIButton._FCKToolbarPanelButton = this ; |
oUIButton.ShowArrow = true ; |
oUIButton.OnClick = FCKToolbarPanelButton_OnButtonClick ; |
} |
FCKToolbarPanelButton.prototype.TypeName = 'FCKToolbarPanelButton' ; |
FCKToolbarPanelButton.prototype.Create = function( parentElement ) |
{ |
parentElement.className += 'Menu' ; |
this._UIButton.Create( parentElement ) ; |
var oPanel = FCK.ToolbarSet.CurrentInstance.Commands.GetCommand( this.CommandName )._Panel ; |
oPanel._FCKToolbarPanelButton = this ; |
var eLineDiv = oPanel.Document.body.appendChild( oPanel.Document.createElement( 'div' ) ) ; |
eLineDiv.style.position = 'absolute' ; |
eLineDiv.style.top = '0px' ; |
var eLine = this.LineImg = eLineDiv.appendChild( oPanel.Document.createElement( 'IMG' ) ) ; |
eLine.className = 'TB_ConnectionLine' ; |
// eLine.style.backgroundColor = 'Red' ; |
eLine.src = FCK_SPACER_PATH ; |
oPanel.OnHide = FCKToolbarPanelButton_OnPanelHide ; |
} |
/* |
Events |
*/ |
function FCKToolbarPanelButton_OnButtonClick( toolbarButton ) |
{ |
var oButton = this._FCKToolbarPanelButton ; |
var e = oButton._UIButton.MainElement ; |
oButton._UIButton.ChangeState( FCK_TRISTATE_ON ) ; |
oButton.LineImg.style.width = ( e.offsetWidth - 2 ) + 'px' ; |
FCK.ToolbarSet.CurrentInstance.Commands.GetCommand( oButton.CommandName ).Execute( 0, e.offsetHeight - 1, e ) ; // -1 to be over the border |
} |
function FCKToolbarPanelButton_OnPanelHide() |
{ |
var oMenuButton = this._FCKToolbarPanelButton ; |
oMenuButton._UIButton.ChangeState( FCK_TRISTATE_OFF ) ; |
} |
// The Panel Button works like a normal button so the refresh state functions |
// defined for the normal button can be reused here. |
FCKToolbarPanelButton.prototype.RefreshState = FCKToolbarButton.prototype.RefreshState ; |
FCKToolbarPanelButton.prototype.Enable = FCKToolbarButton.prototype.Enable ; |
FCKToolbarPanelButton.prototype.Disable = FCKToolbarButton.prototype.Disable ; |
/branches/v1.0-menes/api/fckeditor/editor/_source/classes/fckstyledef.js |
---|
New file |
0,0 → 1,55 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckstyledef.js |
* FCKStyleDef Class: represents a single style definition. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
var FCKStyleDef = function( name, element ) |
{ |
this.Name = name ; |
this.Element = element.toUpperCase() ; |
this.IsObjectElement = FCKRegexLib.ObjectElements.test( this.Element ) ; |
this.Attributes = new Object() ; |
} |
FCKStyleDef.prototype.AddAttribute = function( name, value ) |
{ |
this.Attributes[ name ] = value ; |
} |
FCKStyleDef.prototype.GetOpenerTag = function() |
{ |
var s = '<' + this.Element ; |
for ( var a in this.Attributes ) |
s += ' ' + a + '="' + this.Attributes[a] + '"' ; |
return s + '>' ; |
} |
FCKStyleDef.prototype.GetCloserTag = function() |
{ |
return '</' + this.Element + '>' ; |
} |
FCKStyleDef.prototype.RemoveFromSelection = function() |
{ |
if ( FCKSelection.GetType() == 'Control' ) |
this._RemoveMe( FCK.ToolbarSet.CurrentInstance.Selection.GetSelectedElement() ) ; |
else |
this._RemoveMe( FCK.ToolbarSet.CurrentInstance.Selection.GetParentElement() ) ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/classes/fckmenublock.js |
---|
New file |
0,0 → 1,140 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckmenublock.js |
* Renders a list of menu items. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
var FCKMenuBlock = function() |
{ |
this._Items = new Array() ; |
} |
FCKMenuBlock.prototype.Count = function() |
{ |
return this._Items.length ; |
} |
FCKMenuBlock.prototype.AddItem = function( name, label, iconPathOrStripInfoArrayOrIndex, isDisabled ) |
{ |
var oItem = new FCKMenuItem( this, name, label, iconPathOrStripInfoArrayOrIndex, isDisabled ) ; |
oItem.OnClick = FCKTools.CreateEventListener( FCKMenuBlock_Item_OnClick, this ) ; |
oItem.OnActivate = FCKTools.CreateEventListener( FCKMenuBlock_Item_OnActivate, this ) ; |
this._Items.push( oItem ) ; |
return oItem ; |
} |
FCKMenuBlock.prototype.AddSeparator = function() |
{ |
this._Items.push( new FCKMenuSeparator() ) ; |
} |
FCKMenuBlock.prototype.RemoveAllItems = function() |
{ |
this._Items = new Array() ; |
var eItemsTable = this._ItemsTable ; |
if ( eItemsTable ) |
{ |
while ( eItemsTable.rows.length > 0 ) |
eItemsTable.deleteRow( 0 ) ; |
} |
} |
FCKMenuBlock.prototype.Create = function( parentElement ) |
{ |
if ( !this._ItemsTable ) |
{ |
if ( FCK.IECleanup ) |
FCK.IECleanup.AddItem( this, FCKMenuBlock_Cleanup ) ; |
this._Window = FCKTools.GetElementWindow( parentElement ) ; |
var oDoc = FCKTools.GetElementDocument( parentElement ) ; |
var eTable = parentElement.appendChild( oDoc.createElement( 'table' ) ) ; |
eTable.cellPadding = 0 ; |
eTable.cellSpacing = 0 ; |
FCKTools.DisableSelection( eTable ) ; |
var oMainElement = eTable.insertRow(-1).insertCell(-1) ; |
oMainElement.className = 'MN_Menu' ; |
var eItemsTable = this._ItemsTable = oMainElement.appendChild( oDoc.createElement( 'table' ) ) ; |
eItemsTable.cellPadding = 0 ; |
eItemsTable.cellSpacing = 0 ; |
} |
for ( var i = 0 ; i < this._Items.length ; i++ ) |
this._Items[i].Create( this._ItemsTable ) ; |
} |
/* Events */ |
function FCKMenuBlock_Item_OnClick( clickedItem, menuBlock ) |
{ |
FCKTools.RunFunction( menuBlock.OnClick, menuBlock, [ clickedItem ] ) ; |
} |
function FCKMenuBlock_Item_OnActivate( menuBlock ) |
{ |
var oActiveItem = menuBlock._ActiveItem ; |
if ( oActiveItem && oActiveItem != this ) |
{ |
// Set the focus to this menu block window (to fire OnBlur on opened panels). |
if ( !FCKBrowserInfo.IsIE && oActiveItem.HasSubMenu && !this.HasSubMenu ) |
menuBlock._Window.focus() ; |
oActiveItem.Deactivate() ; |
} |
menuBlock._ActiveItem = this ; |
} |
function FCKMenuBlock_Cleanup() |
{ |
this._Window = null ; |
this._ItemsTable = null ; |
} |
// ################# // |
var FCKMenuSeparator = function() |
{} |
FCKMenuSeparator.prototype.Create = function( parentTable ) |
{ |
var oDoc = FCKTools.GetElementDocument( parentTable ) ; |
var r = parentTable.insertRow(-1) ; |
var eCell = r.insertCell(-1) ; |
eCell.className = 'MN_Separator MN_Icon' ; |
eCell = r.insertCell(-1) ; |
eCell.className = 'MN_Separator' ; |
eCell.appendChild( oDoc.createElement( 'DIV' ) ).className = 'MN_Separator_Line' ; |
eCell = r.insertCell(-1) ; |
eCell.className = 'MN_Separator' ; |
eCell.appendChild( oDoc.createElement( 'DIV' ) ).className = 'MN_Separator_Line' ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/classes/fcktoolbarbreak_gecko.js |
---|
New file |
0,0 → 1,32 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fcktoolbarbreak_gecko.js |
* FCKToolbarBreak Class: breaks the toolbars. |
* It makes it possible to force the toolbar to break to a new line. |
* This is the Gecko specific implementation. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
var FCKToolbarBreak = function() |
{} |
FCKToolbarBreak.prototype.Create = function( targetElement ) |
{ |
var oBreakDiv = targetElement.ownerDocument.createElement( 'div' ) ; |
oBreakDiv.style.clear = oBreakDiv.style.cssFloat = FCKLang.Dir == 'rtl' ? 'right' : 'left' ; |
targetElement.appendChild( oBreakDiv ) ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/classes/fcktoolbarfontformatcombo.js |
---|
New file |
0,0 → 1,102 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fcktoolbarfontformatcombo.js |
* FCKToolbarPanelButton Class: Handles the Fonts combo selector. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
var FCKToolbarFontFormatCombo = function( tooltip, style ) |
{ |
this.CommandName = 'FontFormat' ; |
this.Label = this.GetLabel() ; |
this.Tooltip = tooltip ? tooltip : this.Label ; |
this.Style = style ? style : FCK_TOOLBARITEM_ICONTEXT ; |
this.NormalLabel = 'Normal' ; |
this.PanelWidth = 190 ; |
} |
// Inherit from FCKToolbarSpecialCombo. |
FCKToolbarFontFormatCombo.prototype = new FCKToolbarSpecialCombo ; |
FCKToolbarFontFormatCombo.prototype.GetLabel = function() |
{ |
return FCKLang.FontFormat ; |
} |
FCKToolbarFontFormatCombo.prototype.CreateItems = function( targetSpecialCombo ) |
{ |
// Add the Editor Area CSS to the panel to create a realistic preview. |
FCKTools.AppendStyleSheet( targetSpecialCombo._Panel.Document, FCKConfig.ToolbarComboPreviewCSS ) ; |
// Get the format names from the language file. |
var aNames = FCKLang['FontFormats'].split(';') ; |
var oNames = { |
p : aNames[0], |
pre : aNames[1], |
address : aNames[2], |
h1 : aNames[3], |
h2 : aNames[4], |
h3 : aNames[5], |
h4 : aNames[6], |
h5 : aNames[7], |
h6 : aNames[8], |
div : aNames[9] |
} ; |
// Get the available formats from the configuration file. |
var aTags = FCKConfig.FontFormats.split(';') ; |
for ( var i = 0 ; i < aTags.length ; i++ ) |
{ |
// Support for DIV in Firefox has been reintroduced on version 2.2. |
// if ( aTags[i] == 'div' && FCKBrowserInfo.IsGecko ) |
// continue ; |
var sTag = aTags[i] ; |
var sLabel = oNames[sTag] ; |
if ( sTag == 'p' ) |
this.NormalLabel = sLabel ; |
this._Combo.AddItem( sTag, '<div class="BaseFont"><' + sTag + '>' + sLabel + '</' + sTag + '></div>', sLabel ) ; |
} |
} |
if ( FCKBrowserInfo.IsIE ) |
{ |
FCKToolbarFontFormatCombo.prototype.RefreshActiveItems = function( combo, value ) |
{ |
// FCKDebug.Output( 'FCKToolbarFontFormatCombo Value: ' + value ) ; |
// IE returns normal for DIV and P, so to avoid confusion, we will not show it if normal. |
if ( value == this.NormalLabel ) |
{ |
if ( combo.Label != ' ' ) |
combo.DeselectAll(true) ; |
} |
else |
{ |
if ( this._LastValue == value ) |
return ; |
combo.SelectItemByLabel( value, true ) ; |
} |
this._LastValue = value ; |
} |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/classes/fckmenuitem.js |
---|
New file |
0,0 → 1,157 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckmenuitem.js |
* Defines and renders a menu items in a menu block. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
var FCKMenuItem = function( parentMenuBlock, name, label, iconPathOrStripInfoArray, isDisabled ) |
{ |
this.Name = name ; |
this.Label = label || name ; |
this.IsDisabled = isDisabled ; |
this.Icon = new FCKIcon( iconPathOrStripInfoArray ) ; |
this.SubMenu = new FCKMenuBlockPanel() ; |
this.SubMenu.Parent = parentMenuBlock ; |
this.SubMenu.OnClick = FCKTools.CreateEventListener( FCKMenuItem_SubMenu_OnClick, this ) ; |
if ( FCK.IECleanup ) |
FCK.IECleanup.AddItem( this, FCKMenuItem_Cleanup ) ; |
} |
FCKMenuItem.prototype.AddItem = function( name, label, iconPathOrStripInfoArrayOrIndex, isDisabled ) |
{ |
this.HasSubMenu = true ; |
return this.SubMenu.AddItem( name, label, iconPathOrStripInfoArrayOrIndex, isDisabled ) ; |
} |
FCKMenuItem.prototype.AddSeparator = function() |
{ |
this.SubMenu.AddSeparator() ; |
} |
FCKMenuItem.prototype.Create = function( parentTable ) |
{ |
var bHasSubMenu = this.HasSubMenu ; |
var oDoc = FCKTools.GetElementDocument( parentTable ) ; |
// Add a row in the table to hold the menu item. |
var r = this.MainElement = parentTable.insertRow(-1) ; |
r.className = this.IsDisabled ? 'MN_Item_Disabled' : 'MN_Item' ; |
// Set the row behavior. |
if ( !this.IsDisabled ) |
{ |
FCKTools.AddEventListenerEx( r, 'mouseover', FCKMenuItem_OnMouseOver, [ this ] ) ; |
FCKTools.AddEventListenerEx( r, 'click', FCKMenuItem_OnClick, [ this ] ) ; |
if ( !bHasSubMenu ) |
FCKTools.AddEventListenerEx( r, 'mouseout', FCKMenuItem_OnMouseOut, [ this ] ) ; |
} |
// Create the icon cell. |
var eCell = r.insertCell(-1) ; |
eCell.className = 'MN_Icon' ; |
eCell.appendChild( this.Icon.CreateIconElement( oDoc ) ) ; |
// Create the label cell. |
eCell = r.insertCell(-1) ; |
eCell.className = 'MN_Label' ; |
eCell.noWrap = true ; |
eCell.appendChild( oDoc.createTextNode( this.Label ) ) ; |
// Create the arrow cell and setup the sub menu panel (if needed). |
eCell = r.insertCell(-1) ; |
if ( bHasSubMenu ) |
{ |
eCell.className = 'MN_Arrow' ; |
// The arrow is a fixed size image. |
var eArrowImg = eCell.appendChild( oDoc.createElement( 'IMG' ) ) ; |
eArrowImg.src = FCK_IMAGES_PATH + 'arrow_' + FCKLang.Dir + '.gif' ; |
eArrowImg.width = 4 ; |
eArrowImg.height = 7 ; |
this.SubMenu.Create() ; |
this.SubMenu.Panel.OnHide = FCKTools.CreateEventListener( FCKMenuItem_SubMenu_OnHide, this ) ; |
} |
} |
FCKMenuItem.prototype.Activate = function() |
{ |
this.MainElement.className = 'MN_Item_Over' ; |
if ( this.HasSubMenu ) |
{ |
// Show the child menu block. The ( +2, -2 ) correction is done because |
// of the padding in the skin. It is not a good solution because one |
// could change the skin and so the final result would not be accurate. |
// For now it is ok because we are controlling the skin. |
this.SubMenu.Show( this.MainElement.offsetWidth + 2, -2, this.MainElement ) ; |
} |
FCKTools.RunFunction( this.OnActivate, this ) ; |
} |
FCKMenuItem.prototype.Deactivate = function() |
{ |
this.MainElement.className = 'MN_Item' ; |
if ( this.HasSubMenu ) |
this.SubMenu.Hide() ; |
} |
/* Events */ |
function FCKMenuItem_SubMenu_OnClick( clickedItem, listeningItem ) |
{ |
FCKTools.RunFunction( listeningItem.OnClick, listeningItem, [ clickedItem ] ) ; |
} |
function FCKMenuItem_SubMenu_OnHide( menuItem ) |
{ |
menuItem.Deactivate() ; |
} |
function FCKMenuItem_OnClick( ev, menuItem ) |
{ |
if ( menuItem.HasSubMenu ) |
menuItem.Activate() ; |
else |
{ |
menuItem.Deactivate() ; |
FCKTools.RunFunction( menuItem.OnClick, menuItem, [ menuItem ] ) ; |
} |
} |
function FCKMenuItem_OnMouseOver( ev, menuItem ) |
{ |
menuItem.Activate() ; |
} |
function FCKMenuItem_OnMouseOut( ev, menuItem ) |
{ |
menuItem.Deactivate() ; |
} |
function FCKMenuItem_Cleanup() |
{ |
this.MainElement = null ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/classes/fcktoolbarspecialcombo.js |
---|
New file |
0,0 → 1,129 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fcktoolbarspecialcombo.js |
* FCKToolbarSpecialCombo Class: This is a "abstract" base class to be used |
* by the special combo toolbar elements like font name, font size, paragraph format, etc... |
* |
* The following properties and methods must be implemented when inheriting from |
* this class: |
* - Property: CommandName [ The command name to be executed ] |
* - Method: GetLabel() [ Returns the label ] |
* - CreateItems( targetSpecialCombo ) [ Add all items in the special combo ] |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
var FCKToolbarSpecialCombo = function() |
{ |
this.SourceView = false ; |
this.ContextSensitive = true ; |
} |
function FCKToolbarSpecialCombo_OnSelect( itemId, item ) |
{ |
FCK.ToolbarSet.CurrentInstance.Commands.GetCommand( this.CommandName ).Execute( itemId, item ) ; |
} |
FCKToolbarSpecialCombo.prototype.Create = function( targetElement ) |
{ |
this._Combo = new FCKSpecialCombo( this.GetLabel(), this.FieldWidth, this.PanelWidth, this.PanelMaxHeight, FCKBrowserInfo.IsIE ? window : FCKTools.GetElementWindow( targetElement ).parent ) ; |
/* |
this._Combo.FieldWidth = this.FieldWidth != null ? this.FieldWidth : 100 ; |
this._Combo.PanelWidth = this.PanelWidth != null ? this.PanelWidth : 150 ; |
this._Combo.PanelMaxHeight = this.PanelMaxHeight != null ? this.PanelMaxHeight : 150 ; |
*/ |
//this._Combo.Command.Name = this.Command.Name; |
// this._Combo.Label = this.Label ; |
this._Combo.Tooltip = this.Tooltip ; |
this._Combo.Style = this.Style ; |
this.CreateItems( this._Combo ) ; |
this._Combo.Create( targetElement ) ; |
this._Combo.CommandName = this.CommandName ; |
this._Combo.OnSelect = FCKToolbarSpecialCombo_OnSelect ; |
} |
function FCKToolbarSpecialCombo_RefreshActiveItems( combo, value ) |
{ |
combo.DeselectAll() ; |
combo.SelectItem( value ) ; |
combo.SetLabelById( value ) ; |
} |
FCKToolbarSpecialCombo.prototype.RefreshState = function() |
{ |
// Gets the actual state. |
var eState ; |
// if ( FCK.EditMode == FCK_EDITMODE_SOURCE && ! this.SourceView ) |
// eState = FCK_TRISTATE_DISABLED ; |
// else |
// { |
var sValue = FCK.ToolbarSet.CurrentInstance.Commands.GetCommand( this.CommandName ).GetState() ; |
// FCKDebug.Output( 'RefreshState of Special Combo "' + this.TypeOf + '" - State: ' + sValue ) ; |
if ( sValue != FCK_TRISTATE_DISABLED ) |
{ |
eState = FCK_TRISTATE_ON ; |
if ( this.RefreshActiveItems ) |
this.RefreshActiveItems( this._Combo, sValue ) ; |
else |
{ |
if ( this._LastValue != sValue ) |
{ |
this._LastValue = sValue ; |
FCKToolbarSpecialCombo_RefreshActiveItems( this._Combo, sValue ) ; |
} |
} |
} |
else |
eState = FCK_TRISTATE_DISABLED ; |
// } |
// If there are no state changes then do nothing and return. |
if ( eState == this.State ) return ; |
if ( eState == FCK_TRISTATE_DISABLED ) |
{ |
this._Combo.DeselectAll() ; |
this._Combo.SetLabel( '' ) ; |
} |
// Sets the actual state. |
this.State = eState ; |
// Updates the graphical state. |
this._Combo.SetEnabled( eState != FCK_TRISTATE_DISABLED ) ; |
} |
FCKToolbarSpecialCombo.prototype.Enable = function() |
{ |
this.RefreshState() ; |
} |
FCKToolbarSpecialCombo.prototype.Disable = function() |
{ |
this.State = FCK_TRISTATE_DISABLED ; |
this._Combo.DeselectAll() ; |
this._Combo.SetLabel( '' ) ; |
this._Combo.SetEnabled( false ) ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/classes/fcktoolbarbreak_ie.js |
---|
New file |
0,0 → 1,34 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fcktoolbarbreak_ie.js |
* FCKToolbarBreak Class: breaks the toolbars. |
* It makes it possible to force the toolbar to brak to a new line. |
* This is the IE specific implementation. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
var FCKToolbarBreak = function() |
{} |
FCKToolbarBreak.prototype.Create = function( targetElement ) |
{ |
var oBreakDiv = FCKTools.GetElementDocument( targetElement ).createElement( 'div' ) ; |
oBreakDiv.className = 'TB_Break' ; |
oBreakDiv.style.clear = FCKLang.Dir == 'rtl' ? 'left' : 'right' ; |
targetElement.appendChild( oBreakDiv ) ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/classes/fckstyledef_gecko.js |
---|
New file |
0,0 → 1,116 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckstyledef_gecko.js |
* FCKStyleDef Class: represents a single stylke definition. (Gecko specific) |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
FCKStyleDef.prototype.ApplyToSelection = function() |
{ |
if ( FCKSelection.GetType() == 'Text' && !this.IsObjectElement ) |
{ |
var oSelection = FCK.ToolbarSet.CurrentInstance.EditorWindow.getSelection() ; |
// Create the main element. |
var e = FCK.ToolbarSet.CurrentInstance.EditorDocument.createElement( this.Element ) ; |
for ( var i = 0 ; i < oSelection.rangeCount ; i++ ) |
{ |
e.appendChild( oSelection.getRangeAt(i).extractContents() ) ; |
} |
// Set the attributes. |
this._AddAttributes( e ) ; |
// Remove the duplicated elements. |
this._RemoveDuplicates( e ) ; |
var oRange = oSelection.getRangeAt(0) ; |
oRange.insertNode( e ) ; |
} |
else |
{ |
var oControl = FCK.ToolbarSet.CurrentInstance.Selection.GetSelectedElement() ; |
if ( oControl.tagName == this.Element ) |
this._AddAttributes( oControl ) ; |
} |
} |
FCKStyleDef.prototype._AddAttributes = function( targetElement ) |
{ |
for ( var a in this.Attributes ) |
{ |
switch ( a.toLowerCase() ) |
{ |
case 'src' : |
targetElement.setAttribute( '_fcksavedurl', this.Attributes[a], 0 ) ; |
default : |
targetElement.setAttribute( a, this.Attributes[a], 0 ) ; |
} |
} |
} |
FCKStyleDef.prototype._RemoveDuplicates = function( parent ) |
{ |
for ( var i = 0 ; i < parent.childNodes.length ; i++ ) |
{ |
var oChild = parent.childNodes[i] ; |
if ( oChild.nodeType != 1 ) |
continue ; |
this._RemoveDuplicates( oChild ) ; |
if ( this.IsEqual( oChild ) ) |
FCKTools.RemoveOuterTags( oChild ) ; |
} |
} |
FCKStyleDef.prototype.IsEqual = function( e ) |
{ |
if ( e.tagName != this.Element ) |
return false ; |
for ( var a in this.Attributes ) |
{ |
if ( e.getAttribute( a ) != this.Attributes[a] ) |
return false ; |
} |
return true ; |
} |
FCKStyleDef.prototype._RemoveMe = function( elementToCheck ) |
{ |
if ( ! elementToCheck ) |
return ; |
var oParent = elementToCheck.parentNode ; |
if ( elementToCheck.nodeType == 1 && this.IsEqual( elementToCheck ) ) |
{ |
if ( this.IsObjectElement ) |
{ |
for ( var a in this.Attributes ) |
elementToCheck.removeAttribute( a, 0 ) ; |
return ; |
} |
else |
FCKTools.RemoveOuterTags( elementToCheck ) ; |
} |
this._RemoveMe( oParent ) ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/classes/fckicon.js |
---|
New file |
0,0 → 1,94 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckicon.js |
* FCKIcon Class: renders an icon from a single image, a strip or even a |
* spacer. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
var FCKIcon = function( iconPathOrStripInfoArray ) |
{ |
var sTypeOf = iconPathOrStripInfoArray ? typeof( iconPathOrStripInfoArray ) : 'undefined' ; |
switch ( sTypeOf ) |
{ |
case 'number' : |
this.Path = FCKConfig.SkinPath + 'fck_strip.gif' ; |
this.Size = 16 ; |
this.Position = iconPathOrStripInfoArray ; |
break ; |
case 'undefined' : |
this.Path = FCK_SPACER_PATH ; |
break ; |
case 'string' : |
this.Path = iconPathOrStripInfoArray ; |
break ; |
default : |
// It is an array in the format [ StripFilePath, IconSize, IconPosition ] |
this.Path = iconPathOrStripInfoArray[0] ; |
this.Size = iconPathOrStripInfoArray[1] ; |
this.Position = iconPathOrStripInfoArray[2] ; |
} |
} |
FCKIcon.prototype.CreateIconElement = function( document ) |
{ |
var eIcon ; |
if ( this.Position ) // It is using an icons strip image. |
{ |
var sPos = '-' + ( ( this.Position - 1 ) * this.Size ) + 'px' ; |
if ( FCKBrowserInfo.IsIE ) |
{ |
// <div class="TB_Button_Image"><img src="strip.gif" style="top:-16px"></div> |
eIcon = document.createElement( 'DIV' ) ; |
var eIconImage = eIcon.appendChild( document.createElement( 'IMG' ) ) ; |
eIconImage.src = this.Path ; |
eIconImage.style.top = sPos ; |
} |
else |
{ |
// <img class="TB_Button_Image" src="spacer.gif" style="background-position: 0px -16px;background-image: url(strip.gif);"> |
eIcon = document.createElement( 'IMG' ) ; |
eIcon.src = FCK_SPACER_PATH ; |
eIcon.style.backgroundPosition = '0px ' + sPos ; |
eIcon.style.backgroundImage = 'url(' + this.Path + ')' ; |
} |
} |
else // It is using a single icon image. |
{ |
// This is not working well with IE. See notes bellow. |
// <img class="TB_Button_Image" src="smiley.gif"> |
// eIcon = document.createElement( 'IMG' ) ; |
// eIcon.src = this.Path ? this.Path : FCK_SPACER_PATH ; |
// IE makes the button 1px higher if using the <img> directly, so we |
// are changing to the <div> system to clip the image correctly. |
eIcon = document.createElement( 'DIV' ) ; |
var eIconImage = eIcon.appendChild( document.createElement( 'IMG' ) ) ; |
eIconImage.src = this.Path ? this.Path : FCK_SPACER_PATH ; |
} |
eIcon.className = 'TB_Button_Image' ; |
return eIcon ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/classes/fckstyledef_ie.js |
---|
New file |
0,0 → 1,139 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckstyledef_ie.js |
* FCKStyleDef Class: represents a single stylke definition. (IE specific) |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
FCKStyleDef.prototype.ApplyToSelection = function() |
{ |
var oSelection = FCK.ToolbarSet.CurrentInstance.EditorDocument.selection ; |
if ( oSelection.type == 'Text' ) |
{ |
var oRange = oSelection.createRange() ; |
// Create the main element. |
var e = document.createElement( this.Element ) ; |
e.innerHTML = oRange.htmlText ; |
// Set the attributes. |
this._AddAttributes( e ) ; |
// Remove the duplicated elements. |
this._RemoveDuplicates( e ) ; |
// Replace the selection with the resulting HTML. |
oRange.pasteHTML( e.outerHTML ) ; |
} |
else if ( oSelection.type == 'Control' ) |
{ |
var oControl = FCK.ToolbarSet.CurrentInstance.Selection.GetSelectedElement() ; |
if ( oControl.tagName == this.Element ) |
this._AddAttributes( oControl ) ; |
} |
} |
FCKStyleDef.prototype._AddAttributes = function( targetElement ) |
{ |
for ( var a in this.Attributes ) |
{ |
switch ( a.toLowerCase() ) |
{ |
case 'style' : |
targetElement.style.cssText = this.Attributes[a] ; |
break ; |
case 'class' : |
targetElement.setAttribute( 'className', this.Attributes[a], 0 ) ; |
break ; |
case 'src' : |
targetElement.setAttribute( '_fcksavedurl', this.Attributes[a], 0 ) ; |
default : |
targetElement.setAttribute( a, this.Attributes[a], 0 ) ; |
} |
} |
} |
FCKStyleDef.prototype._RemoveDuplicates = function( parent ) |
{ |
for ( var i = 0 ; i < parent.children.length ; i++ ) |
{ |
var oChild = parent.children[i] ; |
this._RemoveDuplicates( oChild ) ; |
if ( this.IsEqual( oChild ) ) |
FCKTools.RemoveOuterTags( oChild ) ; |
} |
} |
FCKStyleDef.prototype.IsEqual = function( e ) |
{ |
if ( e.tagName != this.Element ) |
return false ; |
for ( var a in this.Attributes ) |
{ |
switch ( a.toLowerCase() ) |
{ |
case 'style' : |
if ( e.style.cssText.toLowerCase() != this.Attributes[a].toLowerCase() ) |
return false ; |
break ; |
case 'class' : |
if ( e.getAttribute( 'className', 0 ) != this.Attributes[a] ) |
return false ; |
break ; |
default : |
if ( e.getAttribute( a, 0 ) != this.Attributes[a] ) |
return false ; |
} |
} |
return true ; |
} |
FCKStyleDef.prototype._RemoveMe = function( elementToCheck ) |
{ |
if ( ! elementToCheck ) |
return ; |
var oParent = elementToCheck.parentElement ; |
if ( this.IsEqual( elementToCheck ) ) |
{ |
if ( this.IsObjectElement ) |
{ |
for ( var a in this.Attributes ) |
{ |
switch ( a.toLowerCase() ) |
{ |
case 'class' : |
elementToCheck.removeAttribute( 'className', 0 ) ; |
break ; |
default : |
elementToCheck.removeAttribute( a, 0 ) ; |
} |
} |
return ; |
} |
else |
FCKTools.RemoveOuterTags( elementToCheck ) ; |
} |
this._RemoveMe( oParent ) ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/classes/fcktoolbarbuttonui.js |
---|
New file |
0,0 → 1,218 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fcktoolbarbuttonui.js |
* FCKToolbarButtonUI Class: interface representation of a toolbar button. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
var FCKToolbarButtonUI = function( name, label, tooltip, iconPathOrStripInfoArray, style, state ) |
{ |
this.Name = name ; |
this.Label = label || name ; |
this.Tooltip = tooltip || this.Label ; |
this.Style = style || FCK_TOOLBARITEM_ONLYICON ; |
this.State = state || FCK_TRISTATE_OFF ; |
this.Icon = new FCKIcon( iconPathOrStripInfoArray ) ; |
if ( FCK.IECleanup ) |
FCK.IECleanup.AddItem( this, FCKToolbarButtonUI_Cleanup ) ; |
} |
FCKToolbarButtonUI.prototype._CreatePaddingElement = function( document ) |
{ |
var oImg = document.createElement( 'IMG' ) ; |
oImg.className = 'TB_Button_Padding' ; |
oImg.src = FCK_SPACER_PATH ; |
return oImg ; |
} |
FCKToolbarButtonUI.prototype.Create = function( parentElement ) |
{ |
var oMainElement = this.MainElement ; |
if ( oMainElement ) |
{ |
FCKToolbarButtonUI_Cleanup.call(this) ; |
if ( oMainElement.parentNode ) |
oMainElement.parentNode.removeChild( oMainElement ) ; |
oMainElement = this.MainElement = null ; |
} |
var oDoc = FCKTools.GetElementDocument( parentElement ) ; |
// Create the Main Element. |
oMainElement = this.MainElement = oDoc.createElement( 'DIV' ) ; |
oMainElement._FCKButton = this ; // IE Memory Leak (Circular reference). |
oMainElement.title = this.Tooltip ; |
// The following will prevent the button from catching the focus. |
if ( FCKBrowserInfo.IsGecko ) |
oMainElement.onmousedown = FCKTools.CancelEvent ; |
this.ChangeState( this.State, true ) ; |
if ( this.Style == FCK_TOOLBARITEM_ONLYICON && !this.ShowArrow ) |
{ |
// <td><div class="TB_Button_On" title="Smiley">{Image}</div></td> |
oMainElement.appendChild( this.Icon.CreateIconElement( oDoc ) ) ; |
} |
else |
{ |
// <td><div class="TB_Button_On" title="Smiley"><table cellpadding="0" cellspacing="0"><tr><td>{Image}</td><td nowrap>Toolbar Button</td><td><img class="TB_Button_Padding"></td></tr></table></div></td> |
// <td><div class="TB_Button_On" title="Smiley"><table cellpadding="0" cellspacing="0"><tr><td><img class="TB_Button_Padding"></td><td nowrap>Toolbar Button</td><td><img class="TB_Button_Padding"></td></tr></table></div></td> |
var oTable = oMainElement.appendChild( oDoc.createElement( 'TABLE' ) ) ; |
oTable.cellPadding = 0 ; |
oTable.cellSpacing = 0 ; |
var oRow = oTable.insertRow(-1) ; |
// The Image cell (icon or padding). |
var oCell = oRow.insertCell(-1) ; |
if ( this.Style == FCK_TOOLBARITEM_ONLYICON || this.Style == FCK_TOOLBARITEM_ICONTEXT ) |
oCell.appendChild( this.Icon.CreateIconElement( oDoc ) ) ; |
else |
oCell.appendChild( this._CreatePaddingElement( oDoc ) ) ; |
if ( this.Style == FCK_TOOLBARITEM_ONLYTEXT || this.Style == FCK_TOOLBARITEM_ICONTEXT ) |
{ |
// The Text cell. |
oCell = oRow.insertCell(-1) ; |
oCell.className = 'TB_Button_Text' ; |
oCell.noWrap = true ; |
oCell.appendChild( oDoc.createTextNode( this.Label ) ) ; |
} |
if ( this.ShowArrow ) |
{ |
if ( this.Style != FCK_TOOLBARITEM_ONLYICON ) |
{ |
// A padding cell. |
oRow.insertCell(-1).appendChild( this._CreatePaddingElement( oDoc ) ) ; |
} |
oCell = oRow.insertCell(-1) ; |
var eImg = oCell.appendChild( oDoc.createElement( 'IMG' ) ) ; |
eImg.src = FCKConfig.SkinPath + 'images/toolbar.buttonarrow.gif' ; |
eImg.width = 5 ; |
eImg.height = 3 ; |
} |
// The last padding cell. |
oCell = oRow.insertCell(-1) ; |
oCell.appendChild( this._CreatePaddingElement( oDoc ) ) ; |
} |
parentElement.appendChild( oMainElement ) ; |
} |
FCKToolbarButtonUI.prototype.ChangeState = function( newState, force ) |
{ |
if ( !force && this.State == newState ) |
return ; |
var e = this.MainElement ; |
switch ( parseInt( newState ) ) |
{ |
case FCK_TRISTATE_OFF : |
e.className = 'TB_Button_Off' ; |
e.onmouseover = FCKToolbarButton_OnMouseOverOff ; |
e.onmouseout = FCKToolbarButton_OnMouseOutOff ; |
e.onclick = FCKToolbarButton_OnClick ; |
break ; |
case FCK_TRISTATE_ON : |
e.className = 'TB_Button_On' ; |
e.onmouseover = FCKToolbarButton_OnMouseOverOn ; |
e.onmouseout = FCKToolbarButton_OnMouseOutOn ; |
e.onclick = FCKToolbarButton_OnClick ; |
break ; |
case FCK_TRISTATE_DISABLED : |
e.className = 'TB_Button_Disabled' ; |
e.onmouseover = null ; |
e.onmouseout = null ; |
e.onclick = null ; |
bEnableEvents = false ; |
break ; |
} |
this.State = newState ; |
} |
function FCKToolbarButtonUI_Cleanup() |
{ |
if ( this.MainElement ) |
{ |
this.MainElement._FCKButton = null ; |
this.MainElement = null ; |
} |
} |
// Event Handlers. |
function FCKToolbarButton_OnMouseOverOn() |
{ |
this.className = 'TB_Button_On_Over' ; |
} |
function FCKToolbarButton_OnMouseOutOn() |
{ |
this.className = 'TB_Button_On' ; |
} |
function FCKToolbarButton_OnMouseOverOff() |
{ |
this.className = 'TB_Button_Off_Over' ; |
} |
function FCKToolbarButton_OnMouseOutOff() |
{ |
this.className = 'TB_Button_Off' ; |
} |
function FCKToolbarButton_OnClick( e ) |
{ |
if ( this._FCKButton.OnClick ) |
this._FCKButton.OnClick( this._FCKButton ) ; |
} |
/* |
Sample outputs: |
This is the base structure. The variation is the image that is marked as {Image}: |
<td><div class="TB_Button_On" title="Smiley">{Image}</div></td> |
<td><div class="TB_Button_On" title="Smiley"><table cellpadding="0" cellspacing="0"><tr><td>{Image}</td><td nowrap>Toolbar Button</td><td><img class="TB_Button_Padding"></td></tr></table></div></td> |
<td><div class="TB_Button_On" title="Smiley"><table cellpadding="0" cellspacing="0"><tr><td><img class="TB_Button_Padding"></td><td nowrap>Toolbar Button</td><td><img class="TB_Button_Padding"></td></tr></table></div></td> |
These are samples of possible {Image} values: |
Strip - IE version: |
<div class="TB_Button_Image"><img src="strip.gif" style="top:-16px"></div> |
Strip : Firefox, Safari and Opera version |
<img class="TB_Button_Image" style="background-position: 0px -16px;background-image: url(strip.gif);"> |
No-Strip : Browser independent: |
<img class="TB_Button_Image" src="smiley.gif"> |
*/ |
/branches/v1.0-menes/api/fckeditor/editor/_source/classes/fcktoolbarfontscombo.js |
---|
New file |
0,0 → 1,43 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fcktoolbarfontscombo.js |
* FCKToolbarPanelButton Class: Handles the Fonts combo selector. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
var FCKToolbarFontsCombo = function( tooltip, style ) |
{ |
this.CommandName = 'FontName' ; |
this.Label = this.GetLabel() ; |
this.Tooltip = tooltip ? tooltip : this.Label ; |
this.Style = style ? style : FCK_TOOLBARITEM_ICONTEXT ; |
} |
// Inherit from FCKToolbarSpecialCombo. |
FCKToolbarFontsCombo.prototype = new FCKToolbarSpecialCombo ; |
FCKToolbarFontsCombo.prototype.GetLabel = function() |
{ |
return FCKLang.Font ; |
} |
FCKToolbarFontsCombo.prototype.CreateItems = function( targetSpecialCombo ) |
{ |
var aFonts = FCKConfig.FontNames.split(';') ; |
for ( var i = 0 ; i < aFonts.length ; i++ ) |
this._Combo.AddItem( aFonts[i], '<font face="' + aFonts[i] + '" style="font-size: 12px">' + aFonts[i] + '</font>' ) ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/classes/fcktoolbarbutton.js |
---|
New file |
0,0 → 1,70 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fcktoolbarbutton.js |
* FCKToolbarButton Class: represents a button in the toolbar. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
var FCKToolbarButton = function( commandName, label, tooltip, style, sourceView, contextSensitive, icon ) |
{ |
this.CommandName = commandName ; |
this.Label = label ; |
this.Tooltip = tooltip ; |
this.Style = style ; |
this.SourceView = sourceView ? true : false ; |
this.ContextSensitive = contextSensitive ? true : false ; |
if ( icon == null ) |
this.IconPath = FCKConfig.SkinPath + 'toolbar/' + commandName.toLowerCase() + '.gif' ; |
else if ( typeof( icon ) == 'number' ) |
this.IconPath = [ FCKConfig.SkinPath + 'fck_strip.gif', 16, icon ] ; |
} |
FCKToolbarButton.prototype.Create = function( targetElement ) |
{ |
this._UIButton = new FCKToolbarButtonUI( this.CommandName, this.Label, this.Tooltip, this.IconPath, this.Style ) ; |
this._UIButton.OnClick = this.Click ; |
this._UIButton._ToolbarButton = this ; |
this._UIButton.Create( targetElement ) ; |
} |
FCKToolbarButton.prototype.RefreshState = function() |
{ |
// Gets the actual state. |
var eState = FCK.ToolbarSet.CurrentInstance.Commands.GetCommand( this.CommandName ).GetState() ; |
// If there are no state changes than do nothing and return. |
if ( eState == this._UIButton.State ) return ; |
// Sets the actual state. |
this._UIButton.ChangeState( eState ) ; |
} |
FCKToolbarButton.prototype.Click = function() |
{ |
var oToolbarButton = this._ToolbarButton || this ; |
FCK.ToolbarSet.CurrentInstance.Commands.GetCommand( oToolbarButton.CommandName ).Execute() ; |
} |
FCKToolbarButton.prototype.Enable = function() |
{ |
this.RefreshState() ; |
} |
FCKToolbarButton.prototype.Disable = function() |
{ |
// Sets the actual state. |
this._UIButton.ChangeState( FCK_TRISTATE_DISABLED ) ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/classes/fckplugin.js |
---|
New file |
0,0 → 1,52 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckplugin.js |
* FCKPlugin Class: Represents a single plugin. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
var FCKPlugin = function( name, availableLangs, basePath ) |
{ |
this.Name = name ; |
this.BasePath = basePath ? basePath : FCKConfig.PluginsPath ; |
this.Path = this.BasePath + name + '/' ; |
if ( !availableLangs || availableLangs.length == 0 ) |
this.AvailableLangs = new Array() ; |
else |
this.AvailableLangs = availableLangs.split(',') ; |
} |
FCKPlugin.prototype.Load = function() |
{ |
// Load the language file, if defined. |
if ( this.AvailableLangs.length > 0 ) |
{ |
var sLang ; |
// Check if the plugin has the language file for the active language. |
if ( this.AvailableLangs.indexOf( FCKLanguageManager.ActiveLanguage.Code ) >= 0 ) |
sLang = FCKLanguageManager.ActiveLanguage.Code ; |
else |
// Load the default language file (first one) if the current one is not available. |
sLang = this.AvailableLangs[0] ; |
// Add the main plugin script. |
LoadScript( this.Path + 'lang/' + sLang + '.js' ) ; |
} |
// Add the main plugin script. |
LoadScript( this.Path + 'fckplugin.js' ) ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/classes/fckmenublockpanel.js |
---|
New file |
0,0 → 1,51 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckmenublockpanel.js |
* This class is a menu block that behaves like a panel. It's a mix of the |
* FCKMenuBlock and FCKPanel classes. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
var FCKMenuBlockPanel = function() |
{ |
// Call the "base" constructor. |
FCKMenuBlock.call( this ) ; |
} |
FCKMenuBlockPanel.prototype = new FCKMenuBlock() ; |
// Override the create method. |
FCKMenuBlockPanel.prototype.Create = function() |
{ |
var oPanel = this.Panel = ( this.Parent && this.Parent.Panel ? this.Parent.Panel.CreateChildPanel() : new FCKPanel() ) ; |
oPanel.AppendStyleSheet( FCKConfig.SkinPath + 'fck_editor.css' ) ; |
// Call the "base" implementation. |
FCKMenuBlock.prototype.Create.call( this, oPanel.MainNode ) ; |
} |
FCKMenuBlockPanel.prototype.Show = function( x, y, relElement ) |
{ |
if ( !this.Panel.CheckIsOpened() ) |
this.Panel.Show( x, y, relElement ) ; |
} |
FCKMenuBlockPanel.prototype.Hide = function() |
{ |
if ( this.Panel.CheckIsOpened() ) |
this.Panel.Hide() ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/classes/fckpanel.js |
---|
New file |
0,0 → 1,295 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckpanel.js |
* Component that creates floating panels. It is used by many |
* other components, like the toolbar items, context menu, etc... |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
var FCKPanel = function( parentWindow ) |
{ |
this.IsRTL = ( FCKLang.Dir == 'rtl' ) ; |
this.IsContextMenu = false ; |
this._LockCounter = 0 ; |
this._Window = parentWindow || window ; |
var oDocument ; |
if ( FCKBrowserInfo.IsIE ) |
{ |
// Create the Popup that will hold the panel. |
this._Popup = this._Window.createPopup() ; |
oDocument = this.Document = this._Popup.document ; |
} |
else |
{ |
var oIFrame = this._IFrame = this._Window.document.createElement('iframe') ; |
oIFrame.src = 'javascript:void(0)' ; |
oIFrame.allowTransparency = true ; |
oIFrame.frameBorder = '0' ; |
oIFrame.scrolling = 'no' ; |
oIFrame.style.position = 'absolute'; |
oIFrame.style.zIndex = FCKConfig.FloatingPanelsZIndex ; |
oIFrame.width = oIFrame.height = 0 ; |
if ( this._Window == window.parent && window.frameElement ) |
window.frameElement.parentNode.insertBefore( oIFrame, window.frameElement ) ; |
else |
this._Window.document.body.appendChild( oIFrame ) ; |
var oIFrameWindow = oIFrame.contentWindow ; |
oDocument = this.Document = oIFrameWindow.document ; |
// Initialize the IFRAME document body. |
oDocument.open() ; |
oDocument.write( '<html><head></head><body style="margin:0px;padding:0px;"><\/body><\/html>' ) ; |
oDocument.close() ; |
FCKTools.AddEventListenerEx( oIFrameWindow, 'focus', FCKPanel_Window_OnFocus, this ) ; |
FCKTools.AddEventListenerEx( oIFrameWindow, 'blur', FCKPanel_Window_OnBlur, this ) ; |
} |
oDocument.dir = FCKLang.Dir ; |
oDocument.oncontextmenu = FCKTools.CancelEvent ; |
// Create the main DIV that is used as the panel base. |
this.MainNode = oDocument.body.appendChild( oDocument.createElement('DIV') ) ; |
// The "float" property must be set so Firefox calculates the size correcly. |
this.MainNode.style.cssFloat = this.IsRTL ? 'right' : 'left' ; |
if ( FCK.IECleanup ) |
FCK.IECleanup.AddItem( this, FCKPanel_Cleanup ) ; |
} |
FCKPanel.prototype.AppendStyleSheet = function( styleSheet ) |
{ |
FCKTools.AppendStyleSheet( this.Document, styleSheet ) ; |
} |
FCKPanel.prototype.Preload = function( x, y, relElement ) |
{ |
// The offsetWidth and offsetHeight properties are not available if the |
// element is not visible. So we must "show" the popup with no size to |
// be able to use that values in the second call (IE only). |
if ( this._Popup ) |
this._Popup.show( x, y, 0, 0, relElement ) ; |
} |
FCKPanel.prototype.Show = function( x, y, relElement, width, height ) |
{ |
if ( this._Popup ) |
{ |
// The offsetWidth and offsetHeight properties are not available if the |
// element is not visible. So we must "show" the popup with no size to |
// be able to use that values in the second call. |
this._Popup.show( x, y, 0, 0, relElement ) ; |
// The following lines must be place after the above "show", otherwise it |
// doesn't has the desired effect. |
this.MainNode.style.width = width ? width + 'px' : '' ; |
this.MainNode.style.height = height ? height + 'px' : '' ; |
var iMainWidth = this.MainNode.offsetWidth ; |
if ( this.IsRTL ) |
{ |
if ( this.IsContextMenu ) |
x = x - iMainWidth + 1 ; |
else if ( relElement ) |
x = ( x * -1 ) + relElement.offsetWidth - iMainWidth ; |
} |
// Second call: Show the Popup at the specified location, with the correct size. |
this._Popup.show( x, y, iMainWidth, this.MainNode.offsetHeight, relElement ) ; |
if ( this.OnHide ) |
{ |
if ( this._Timer ) |
CheckPopupOnHide.call( this, true ) ; |
this._Timer = FCKTools.SetInterval( CheckPopupOnHide, 100, this ) ; |
} |
} |
else |
{ |
// Do not fire OnBlur while the panel is opened. |
if ( typeof( FCKFocusManager ) != 'undefined' ) |
FCKFocusManager.Lock() ; |
if ( this.ParentPanel ) |
this.ParentPanel.Lock() ; |
this.MainNode.style.width = width ? width + 'px' : '' ; |
this.MainNode.style.height = height ? height + 'px' : '' ; |
var iMainWidth = this.MainNode.offsetWidth ; |
if ( !width ) this._IFrame.width = 1 ; |
if ( !height ) this._IFrame.height = 1 ; |
// This is weird... but with Firefox, we must get the offsetWidth before |
// setting the _IFrame size (which returns "0"), and then after that, |
// to return the correct width. Remove the first step and it will not |
// work when the editor is in RTL. |
iMainWidth = this.MainNode.offsetWidth ; |
var oPos = FCKTools.GetElementPosition( ( relElement.nodeType == 9 ? relElement.body : relElement), this._Window ) ; |
if ( this.IsRTL && !this.IsContextMenu ) |
x = ( x * -1 ) ; |
x += oPos.X ; |
y += oPos.Y ; |
if ( this.IsRTL ) |
{ |
if ( this.IsContextMenu ) |
x = x - iMainWidth + 1 ; |
else if ( relElement ) |
x = x + relElement.offsetWidth - iMainWidth ; |
} |
else |
{ |
var oViewPaneSize = FCKTools.GetViewPaneSize( this._Window ) ; |
var oScrollPosition = FCKTools.GetScrollPosition( this._Window ) ; |
var iViewPaneHeight = oViewPaneSize.Height + oScrollPosition.Y ; |
var iViewPaneWidth = oViewPaneSize.Width + oScrollPosition.X ; |
if ( ( x + iMainWidth ) > iViewPaneWidth ) |
x -= x + iMainWidth - iViewPaneWidth ; |
if ( ( y + this.MainNode.offsetHeight ) > iViewPaneHeight ) |
y -= y + this.MainNode.offsetHeight - iViewPaneHeight ; |
} |
if ( x < 0 ) |
x = 0 ; |
// Set the context menu DIV in the specified location. |
this._IFrame.style.left = x + 'px' ; |
this._IFrame.style.top = y + 'px' ; |
var iWidth = iMainWidth ; |
var iHeight = this.MainNode.offsetHeight ; |
this._IFrame.width = iWidth ; |
this._IFrame.height = iHeight ; |
// Move the focus to the IFRAME so we catch the "onblur". |
this._IFrame.contentWindow.focus() ; |
} |
this._IsOpened = true ; |
FCKTools.RunFunction( this.OnShow, this ) ; |
} |
FCKPanel.prototype.Hide = function( ignoreOnHide ) |
{ |
if ( this._Popup ) |
this._Popup.hide() ; |
else |
{ |
if ( !this._IsOpened ) |
return ; |
// Enable the editor to fire the "OnBlur". |
if ( typeof( FCKFocusManager ) != 'undefined' ) |
FCKFocusManager.Unlock() ; |
// It is better to set the sizes to 0, otherwise Firefox would have |
// rendering problems. |
this._IFrame.width = this._IFrame.height = 0 ; |
this._IsOpened = false ; |
if ( this.ParentPanel ) |
this.ParentPanel.Unlock() ; |
if ( !ignoreOnHide ) |
FCKTools.RunFunction( this.OnHide, this ) ; |
} |
} |
FCKPanel.prototype.CheckIsOpened = function() |
{ |
if ( this._Popup ) |
return this._Popup.isOpen ; |
else |
return this._IsOpened ; |
} |
FCKPanel.prototype.CreateChildPanel = function() |
{ |
var oWindow = this._Popup ? FCKTools.GetParentWindow( this.Document ) : this._Window ; |
var oChildPanel = new FCKPanel( oWindow, true ) ; |
oChildPanel.ParentPanel = this ; |
return oChildPanel ; |
} |
FCKPanel.prototype.Lock = function() |
{ |
this._LockCounter++ ; |
} |
FCKPanel.prototype.Unlock = function() |
{ |
if ( --this._LockCounter == 0 && !this.HasFocus ) |
this.Hide() ; |
} |
/* Events */ |
function FCKPanel_Window_OnFocus( e, panel ) |
{ |
panel.HasFocus = true ; |
} |
function FCKPanel_Window_OnBlur( e, panel ) |
{ |
panel.HasFocus = false ; |
if ( panel._LockCounter == 0 ) |
FCKTools.RunFunction( panel.Hide, panel ) ; |
} |
function CheckPopupOnHide( forceHide ) |
{ |
if ( forceHide || !this._Popup.isOpen ) |
{ |
window.clearInterval( this._Timer ) ; |
this._Timer = null ; |
FCKTools.RunFunction( this.OnHide, this ) ; |
} |
} |
function FCKPanel_Cleanup() |
{ |
this._Popup = null ; |
this._Window = null ; |
this.Document = null ; |
this.MainNode = null ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/classes/fckspecialcombo.js |
---|
New file |
0,0 → 1,351 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckspecialcombo.js |
* FCKSpecialCombo Class: represents a special combo. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
var FCKSpecialCombo = function( caption, fieldWidth, panelWidth, panelMaxHeight, parentWindow ) |
{ |
// Default properties values. |
this.FieldWidth = fieldWidth || 100 ; |
this.PanelWidth = panelWidth || 150 ; |
this.PanelMaxHeight = panelMaxHeight || 150 ; |
this.Label = ' ' ; |
this.Caption = caption ; |
this.Tooltip = caption ; |
this.Style = FCK_TOOLBARITEM_ICONTEXT ; |
this.Enabled = true ; |
this.Items = new Object() ; |
this._Panel = new FCKPanel( parentWindow || window, true ) ; |
this._Panel.AppendStyleSheet( FCKConfig.SkinPath + 'fck_editor.css' ) ; |
this._PanelBox = this._Panel.MainNode.appendChild( this._Panel.Document.createElement( 'DIV' ) ) ; |
this._PanelBox.className = 'SC_Panel' ; |
this._PanelBox.style.width = this.PanelWidth + 'px' ; |
this._PanelBox.innerHTML = '<table cellpadding="0" cellspacing="0" width="100%" style="TABLE-LAYOUT: fixed"><tr><td nowrap></td></tr></table>' ; |
this._ItemsHolderEl = this._PanelBox.getElementsByTagName('TD')[0] ; |
if ( FCK.IECleanup ) |
FCK.IECleanup.AddItem( this, FCKSpecialCombo_Cleanup ) ; |
// this._Panel.StyleSheet = FCKConfig.SkinPath + 'fck_contextmenu.css' ; |
// this._Panel.Create() ; |
// this._Panel.PanelDiv.className += ' SC_Panel' ; |
// this._Panel.PanelDiv.innerHTML = '<table cellpadding="0" cellspacing="0" width="100%" style="TABLE-LAYOUT: fixed"><tr><td nowrap></td></tr></table>' ; |
// this._ItemsHolderEl = this._Panel.PanelDiv.getElementsByTagName('TD')[0] ; |
} |
function FCKSpecialCombo_ItemOnMouseOver() |
{ |
this.className += ' SC_ItemOver' ; |
} |
function FCKSpecialCombo_ItemOnMouseOut() |
{ |
this.className = this.originalClass ; |
} |
function FCKSpecialCombo_ItemOnClick() |
{ |
this.className = this.originalClass ; |
this.FCKSpecialCombo._Panel.Hide() ; |
this.FCKSpecialCombo.SetLabel( this.FCKItemLabel ) ; |
if ( typeof( this.FCKSpecialCombo.OnSelect ) == 'function' ) |
this.FCKSpecialCombo.OnSelect( this.FCKItemID, this ) ; |
} |
FCKSpecialCombo.prototype.AddItem = function( id, html, label, bgColor ) |
{ |
// <div class="SC_Item" onmouseover="this.className='SC_Item SC_ItemOver';" onmouseout="this.className='SC_Item';"><b>Bold 1</b></div> |
var oDiv = this._ItemsHolderEl.appendChild( this._Panel.Document.createElement( 'DIV' ) ) ; |
oDiv.className = oDiv.originalClass = 'SC_Item' ; |
oDiv.innerHTML = html ; |
oDiv.FCKItemID = id ; |
oDiv.FCKItemLabel = label || id ; |
oDiv.FCKSpecialCombo = this ; |
oDiv.Selected = false ; |
// In IE, the width must be set so the borders are shown correctly when the content overflows. |
if ( FCKBrowserInfo.IsIE ) |
oDiv.style.width = '100%' ; |
if ( bgColor ) |
oDiv.style.backgroundColor = bgColor ; |
oDiv.onmouseover = FCKSpecialCombo_ItemOnMouseOver ; |
oDiv.onmouseout = FCKSpecialCombo_ItemOnMouseOut ; |
oDiv.onclick = FCKSpecialCombo_ItemOnClick ; |
this.Items[ id.toString().toLowerCase() ] = oDiv ; |
return oDiv ; |
} |
FCKSpecialCombo.prototype.SelectItem = function( itemId ) |
{ |
itemId = itemId ? itemId.toString().toLowerCase() : '' ; |
var oDiv = this.Items[ itemId ] ; |
if ( oDiv ) |
{ |
oDiv.className = oDiv.originalClass = 'SC_ItemSelected' ; |
oDiv.Selected = true ; |
} |
} |
FCKSpecialCombo.prototype.SelectItemByLabel = function( itemLabel, setLabel ) |
{ |
for ( var id in this.Items ) |
{ |
var oDiv = this.Items[id] ; |
if ( oDiv.FCKItemLabel == itemLabel ) |
{ |
oDiv.className = oDiv.originalClass = 'SC_ItemSelected' ; |
oDiv.Selected = true ; |
if ( setLabel ) |
this.SetLabel( itemLabel ) ; |
} |
} |
} |
FCKSpecialCombo.prototype.DeselectAll = function( clearLabel ) |
{ |
for ( var i in this.Items ) |
{ |
this.Items[i].className = this.Items[i].originalClass = 'SC_Item' ; |
this.Items[i].Selected = false ; |
} |
if ( clearLabel ) |
this.SetLabel( '' ) ; |
} |
FCKSpecialCombo.prototype.SetLabelById = function( id ) |
{ |
id = id ? id.toString().toLowerCase() : '' ; |
var oDiv = this.Items[ id ] ; |
this.SetLabel( oDiv ? oDiv.FCKItemLabel : '' ) ; |
} |
FCKSpecialCombo.prototype.SetLabel = function( text ) |
{ |
this.Label = text.length == 0 ? ' ' : text ; |
if ( this._LabelEl ) |
this._LabelEl.innerHTML = this.Label ; |
} |
FCKSpecialCombo.prototype.SetEnabled = function( isEnabled ) |
{ |
this.Enabled = isEnabled ; |
this._OuterTable.className = isEnabled ? '' : 'SC_FieldDisabled' ; |
} |
FCKSpecialCombo.prototype.Create = function( targetElement ) |
{ |
var oDoc = FCKTools.GetElementDocument( targetElement ) ; |
var eOuterTable = this._OuterTable = targetElement.appendChild( oDoc.createElement( 'TABLE' ) ) ; |
eOuterTable.cellPadding = 0 ; |
eOuterTable.cellSpacing = 0 ; |
eOuterTable.insertRow(-1) ; |
var sClass ; |
var bShowLabel ; |
switch ( this.Style ) |
{ |
case FCK_TOOLBARITEM_ONLYICON : |
sClass = 'TB_ButtonType_Icon' ; |
bShowLabel = false; |
break ; |
case FCK_TOOLBARITEM_ONLYTEXT : |
sClass = 'TB_ButtonType_Text' ; |
bShowLabel = false; |
break ; |
case FCK_TOOLBARITEM_ICONTEXT : |
bShowLabel = true; |
break ; |
} |
if ( this.Caption && this.Caption.length > 0 && bShowLabel ) |
{ |
var oCaptionCell = eOuterTable.rows[0].insertCell(-1) ; |
oCaptionCell.innerHTML = this.Caption ; |
oCaptionCell.className = 'SC_FieldCaption' ; |
} |
// Create the main DIV element. |
var oField = FCKTools.AppendElement( eOuterTable.rows[0].insertCell(-1), 'div' ) ; |
if ( bShowLabel ) |
{ |
oField.className = 'SC_Field' ; |
oField.style.width = this.FieldWidth + 'px' ; |
oField.innerHTML = '<table width="100%" cellpadding="0" cellspacing="0" style="TABLE-LAYOUT: fixed;"><tbody><tr><td class="SC_FieldLabel"><label> </label></td><td class="SC_FieldButton"> </td></tr></tbody></table>' ; |
this._LabelEl = oField.getElementsByTagName('label')[0] ; // Memory Leak |
this._LabelEl.innerHTML = this.Label ; |
} |
else |
{ |
oField.className = 'TB_Button_Off' ; |
//oField.innerHTML = '<span className="SC_FieldCaption">' + this.Caption + '<table cellpadding="0" cellspacing="0" style="TABLE-LAYOUT: fixed;"><tbody><tr><td class="SC_FieldButton" style="border-left: none;"> </td></tr></tbody></table>' ; |
//oField.innerHTML = '<table cellpadding="0" cellspacing="0" style="TABLE-LAYOUT: fixed;"><tbody><tr><td class="SC_FieldButton" style="border-left: none;"> </td></tr></tbody></table>' ; |
// Gets the correct CSS class to use for the specified style (param). |
oField.innerHTML = '<table title="' + this.Tooltip + '" class="' + sClass + '" cellspacing="0" cellpadding="0" border="0">' + |
'<tr>' + |
//'<td class="TB_Icon"><img src="' + FCKConfig.SkinPath + 'toolbar/' + this.Command.Name.toLowerCase() + '.gif" width="21" height="21"></td>' + |
'<td><img class="TB_Button_Padding" src="' + FCK_SPACER_PATH + '" /></td>' + |
'<td class="TB_Text">' + this.Caption + '</td>' + |
'<td><img class="TB_Button_Padding" src="' + FCK_SPACER_PATH + '" /></td>' + |
'<td class="TB_ButtonArrow"><img src="' + FCKConfig.SkinPath + 'images/toolbar.buttonarrow.gif" width="5" height="3"></td>' + |
'<td><img class="TB_Button_Padding" src="' + FCK_SPACER_PATH + '" /></td>' + |
'</tr>' + |
'</table>' ; |
} |
// Events Handlers |
oField.SpecialCombo = this ; |
oField.onmouseover = FCKSpecialCombo_OnMouseOver ; |
oField.onmouseout = FCKSpecialCombo_OnMouseOut ; |
oField.onclick = FCKSpecialCombo_OnClick ; |
FCKTools.DisableSelection( this._Panel.Document.body ) ; |
} |
function FCKSpecialCombo_Cleanup() |
{ |
this._LabelEl = null ; |
this._OuterTable = null ; |
this._ItemsHolderEl = null ; |
this._PanelBox = null ; |
if ( this.Items ) |
{ |
for ( var key in this.Items ) |
this.Items[key] = null ; |
} |
} |
function FCKSpecialCombo_OnMouseOver() |
{ |
if ( this.SpecialCombo.Enabled ) |
{ |
switch ( this.SpecialCombo.Style ) |
{ |
case FCK_TOOLBARITEM_ONLYICON : |
this.className = 'TB_Button_On_Over'; |
break ; |
case FCK_TOOLBARITEM_ONLYTEXT : |
this.className = 'TB_Button_On_Over'; |
break ; |
case FCK_TOOLBARITEM_ICONTEXT : |
this.className = 'SC_Field SC_FieldOver' ; |
break ; |
} |
} |
} |
function FCKSpecialCombo_OnMouseOut() |
{ |
switch ( this.SpecialCombo.Style ) |
{ |
case FCK_TOOLBARITEM_ONLYICON : |
this.className = 'TB_Button_Off'; |
break ; |
case FCK_TOOLBARITEM_ONLYTEXT : |
this.className = 'TB_Button_Off'; |
break ; |
case FCK_TOOLBARITEM_ICONTEXT : |
this.className='SC_Field' ; |
break ; |
} |
} |
function FCKSpecialCombo_OnClick( e ) |
{ |
// For Mozilla we must stop the event propagation to avoid it hiding |
// the panel because of a click outside of it. |
// if ( e ) |
// { |
// e.stopPropagation() ; |
// FCKPanelEventHandlers.OnDocumentClick( e ) ; |
// } |
var oSpecialCombo = this.SpecialCombo ; |
if ( oSpecialCombo.Enabled ) |
{ |
var oPanel = oSpecialCombo._Panel ; |
var oPanelBox = oSpecialCombo._PanelBox ; |
var oItemsHolder = oSpecialCombo._ItemsHolderEl ; |
var iMaxHeight = oSpecialCombo.PanelMaxHeight ; |
if ( oSpecialCombo.OnBeforeClick ) |
oSpecialCombo.OnBeforeClick( oSpecialCombo ) ; |
// This is a tricky thing. We must call the "Load" function, otherwise |
// it will not be possible to retrieve "oItemsHolder.offsetHeight" (IE only). |
if ( FCKBrowserInfo.IsIE ) |
oPanel.Preload( 0, this.offsetHeight, this ) ; |
if ( oItemsHolder.offsetHeight > iMaxHeight ) |
// { |
oPanelBox.style.height = iMaxHeight + 'px' ; |
// if ( FCKBrowserInfo.IsGecko ) |
// oPanelBox.style.overflow = '-moz-scrollbars-vertical' ; |
// } |
else |
oPanelBox.style.height = '' ; |
// oPanel.PanelDiv.style.width = oSpecialCombo.PanelWidth + 'px' ; |
oPanel.Show( 0, this.offsetHeight, this ) ; |
} |
// return false ; |
} |
/* |
Sample Combo Field HTML output: |
<div class="SC_Field" style="width: 80px;"> |
<table width="100%" cellpadding="0" cellspacing="0" style="table-layout: fixed;"> |
<tbody> |
<tr> |
<td class="SC_FieldLabel"><label> </label></td> |
<td class="SC_FieldButton"> </td> |
</tr> |
</tbody> |
</table> |
</div> |
*/ |
/branches/v1.0-menes/api/fckeditor/editor/_source/classes/fcktoolbar.js |
---|
New file |
0,0 → 1,116 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fcktoolbar.js |
* FCKToolbar Class: represents a toolbar in the toolbarset. It is a group of |
* toolbar items. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
var FCKToolbar = function() |
{ |
this.Items = new Array() ; |
if ( FCK.IECleanup ) |
FCK.IECleanup.AddItem( this, FCKToolbar_Cleanup ) ; |
} |
FCKToolbar.prototype.AddItem = function( item ) |
{ |
return this.Items[ this.Items.length ] = item ; |
} |
FCKToolbar.prototype.AddButton = function( name, label, tooltip, iconPathOrStripInfoArrayOrIndex, style, state ) |
{ |
if ( typeof( iconPathOrStripInfoArrayOrIndex ) == 'number' ) |
iconPathOrStripInfoArrayOrIndex = [ this.DefaultIconsStrip, this.DefaultIconSize, iconPathOrStripInfoArrayOrIndex ] ; |
var oButton = new FCKToolbarButtonUI( name, label, tooltip, iconPathOrStripInfoArrayOrIndex, style, state ) ; |
oButton._FCKToolbar = this ; |
oButton.OnClick = FCKToolbar_OnItemClick ; |
return this.AddItem( oButton ) ; |
} |
function FCKToolbar_OnItemClick( item ) |
{ |
var oToolbar = item._FCKToolbar ; |
if ( oToolbar.OnItemClick ) |
oToolbar.OnItemClick( oToolbar, item ) ; |
} |
FCKToolbar.prototype.AddSeparator = function() |
{ |
this.AddItem( new FCKToolbarSeparator() ) ; |
} |
FCKToolbar.prototype.Create = function( parentElement ) |
{ |
if ( this.MainElement ) |
{ |
// this._Cleanup() ; |
if ( this.MainElement.parentNode ) |
this.MainElement.parentNode.removeChild( this.MainElement ) ; |
this.MainElement = null ; |
} |
var oDoc = FCKTools.GetElementDocument( parentElement ) ; |
var e = this.MainElement = oDoc.createElement( 'table' ) ; |
e.className = 'TB_Toolbar' ; |
e.style.styleFloat = e.style.cssFloat = ( FCKLang.Dir == 'ltr' ? 'left' : 'right' ) ; |
e.dir = FCKLang.Dir ; |
e.cellPadding = 0 ; |
e.cellSpacing = 0 ; |
this.RowElement = e.insertRow(-1) ; |
// Insert the start cell. |
var eCell ; |
if ( !this.HideStart ) |
{ |
eCell = this.RowElement.insertCell(-1) ; |
eCell.appendChild( oDoc.createElement( 'div' ) ).className = 'TB_Start' ; |
} |
for ( var i = 0 ; i < this.Items.length ; i++ ) |
{ |
this.Items[i].Create( this.RowElement.insertCell(-1) ) ; |
} |
// Insert the ending cell. |
if ( !this.HideEnd ) |
{ |
eCell = this.RowElement.insertCell(-1) ; |
eCell.appendChild( oDoc.createElement( 'div' ) ).className = 'TB_End' ; |
} |
parentElement.appendChild( e ) ; |
} |
function FCKToolbar_Cleanup() |
{ |
this.MainElement = null ; |
this.RowElement = null ; |
} |
var FCKToolbarSeparator = function() |
{} |
FCKToolbarSeparator.prototype.Create = function( parentElement ) |
{ |
FCKTools.AppendElement( parentElement, 'div' ).className = 'TB_Separator' ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/classes/fcktoolbarstylecombo.js |
---|
New file |
0,0 → 1,99 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fcktoolbarstylecombo.js |
* FCKToolbarPanelButton Class: Handles the Fonts combo selector. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
var FCKToolbarStyleCombo = function( tooltip, style ) |
{ |
this.CommandName = 'Style' ; |
this.Label = this.GetLabel() ; |
this.Tooltip = tooltip ? tooltip : this.Label ; |
this.Style = style ? style : FCK_TOOLBARITEM_ICONTEXT ; |
} |
// Inherit from FCKToolbarSpecialCombo. |
FCKToolbarStyleCombo.prototype = new FCKToolbarSpecialCombo ; |
FCKToolbarStyleCombo.prototype.GetLabel = function() |
{ |
return FCKLang.Style ; |
} |
FCKToolbarStyleCombo.prototype.CreateItems = function( targetSpecialCombo ) |
{ |
var oTargetDoc = targetSpecialCombo._Panel.Document ; |
// Add the Editor Area CSS to the panel so the style classes are previewed correctly. |
FCKTools.AppendStyleSheet( oTargetDoc, FCKConfig.ToolbarComboPreviewCSS ) ; |
oTargetDoc.body.className += ' ForceBaseFont' ; |
// For some reason Gecko is blocking inside the "RefreshVisibleItems" function. |
if ( ! FCKBrowserInfo.IsGecko ) |
targetSpecialCombo.OnBeforeClick = this.RefreshVisibleItems ; |
// Add the styles to the special combo. |
var aCommandStyles = FCK.ToolbarSet.CurrentInstance.Commands.GetCommand( this.CommandName ).Styles ; |
for ( var s in aCommandStyles ) |
{ |
var oStyle = aCommandStyles[s] ; |
var oItem ; |
if ( oStyle.IsObjectElement ) |
oItem = targetSpecialCombo.AddItem( s, s ) ; |
else |
oItem = targetSpecialCombo.AddItem( s, oStyle.GetOpenerTag() + s + oStyle.GetCloserTag() ) ; |
oItem.Style = oStyle ; |
} |
} |
FCKToolbarStyleCombo.prototype.RefreshActiveItems = function( targetSpecialCombo ) |
{ |
// Clear the actual selection. |
targetSpecialCombo.DeselectAll() ; |
// Get the active styles. |
var aStyles = FCK.ToolbarSet.CurrentInstance.Commands.GetCommand( this.CommandName ).GetActiveStyles() ; |
if ( aStyles.length > 0 ) |
{ |
// Select the active styles in the combo. |
for ( var i = 0 ; i < aStyles.length ; i++ ) |
targetSpecialCombo.SelectItem( aStyles[i].Name ) ; |
// Set the combo label to the first style in the collection. |
targetSpecialCombo.SetLabelById( aStyles[0].Name ) ; |
} |
else |
targetSpecialCombo.SetLabel('') ; |
} |
FCKToolbarStyleCombo.prototype.RefreshVisibleItems = function( targetSpecialCombo ) |
{ |
if ( FCKSelection.GetType() == 'Control' ) |
var sTagName = FCKSelection.GetSelectedElement().tagName ; |
for ( var i in targetSpecialCombo.Items ) |
{ |
var oItem = targetSpecialCombo.Items[i] ; |
if ( ( sTagName && oItem.Style.Element == sTagName ) || ( ! sTagName && ! oItem.Style.IsObjectElement ) ) |
oItem.style.display = '' ; |
else |
oItem.style.display = 'none' ; // For some reason Gecko is blocking here. |
} |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/classes/fcktoolbarfontsizecombo.js |
---|
New file |
0,0 → 1,48 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fcktoolbarfontsizecombo.js |
* FCKToolbarPanelButton Class: Handles the Fonts combo selector. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
var FCKToolbarFontSizeCombo = function( tooltip, style ) |
{ |
this.CommandName = 'FontSize' ; |
this.Label = this.GetLabel() ; |
this.Tooltip = tooltip ? tooltip : this.Label ; |
this.Style = style ? style : FCK_TOOLBARITEM_ICONTEXT ; |
} |
// Inherit from FCKToolbarSpecialCombo. |
FCKToolbarFontSizeCombo.prototype = new FCKToolbarSpecialCombo ; |
FCKToolbarFontSizeCombo.prototype.GetLabel = function() |
{ |
return FCKLang.FontSize ; |
} |
FCKToolbarFontSizeCombo.prototype.CreateItems = function( targetSpecialCombo ) |
{ |
targetSpecialCombo.FieldWidth = 70 ; |
var aSizes = FCKConfig.FontSizes.split(';') ; |
for ( var i = 0 ; i < aSizes.length ; i++ ) |
{ |
var aSizeParts = aSizes[i].split('/') ; |
this._Combo.AddItem( aSizeParts[0], '<font size="' + aSizeParts[0] + '">' + aSizeParts[1] + '</font>', aSizeParts[1] ) ; |
} |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/classes/fckevents.js |
---|
New file |
0,0 → 1,51 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckevents.js |
* FCKEvents Class: used to handle events is a advanced way. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
var FCKEvents ; |
FCKEvents = function( eventsOwner ) |
{ |
this.Owner = eventsOwner ; |
this.RegisteredEvents = new Object() ; |
} |
FCKEvents.prototype.AttachEvent = function( eventName, functionPointer ) |
{ |
var aTargets ; |
if ( !( aTargets = this.RegisteredEvents[ eventName ] ) ) |
this.RegisteredEvents[ eventName ] = [ functionPointer ] ; |
else |
aTargets.push( functionPointer ) ; |
} |
FCKEvents.prototype.FireEvent = function( eventName, params ) |
{ |
var bReturnValue = true ; |
var oCalls = this.RegisteredEvents[ eventName ] ; |
if ( oCalls ) |
{ |
for ( var i = 0 ; i < oCalls.length ; i++ ) |
bReturnValue = ( oCalls[ i ]( this.Owner, params ) && bReturnValue ) ; |
} |
return bReturnValue ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/classes/fckiecleanup.js |
---|
New file |
0,0 → 1,51 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckiecleanup.js |
* FCKIECleanup Class: a generic class used as a tool to remove IE leaks. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
var FCKIECleanup = function( attachWindow ) |
{ |
this.Items = new Array() ; |
attachWindow._FCKCleanupObj = this ; |
attachWindow.attachEvent( 'onunload', FCKIECleanup_Cleanup ) ; |
} |
FCKIECleanup.prototype.AddItem = function( dirtyItem, cleanupFunction ) |
{ |
this.Items.push( [ dirtyItem, cleanupFunction ] ) ; |
} |
function FCKIECleanup_Cleanup() |
{ |
var aItems = this._FCKCleanupObj.Items ; |
var iLenght = aItems.length ; |
for ( var i = 0 ; i < iLenght ; i++ ) |
{ |
var oItem = aItems[i] ; |
oItem[1].call( oItem[0] ) ; |
aItems[i] = null ; |
} |
this._FCKCleanupObj = null ; |
if ( CollectGarbage ) |
CollectGarbage() ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/fckeditorapi.js |
---|
New file |
0,0 → 1,104 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckeditorapi.js |
* Create the FCKeditorAPI object that is available as a global object in |
* the page where the editor is placed in. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
var FCKeditorAPI ; |
function InitializeAPI() |
{ |
if ( !( FCKeditorAPI = window.parent.FCKeditorAPI ) ) |
{ |
// Make the FCKeditorAPI object available in the parent window. Use |
// eval so it is independent from this window and so it will still be |
// available if the editor instance is removed ("Can't execute code |
// from a freed script" error). |
var sScript = '\ |
var FCKeditorAPI = {\ |
Version : \'2.3.2\',\ |
VersionBuild : \'1082\',\ |
__Instances : new Object(),\ |
GetInstance : function( instanceName )\ |
{\ |
return this.__Instances[ instanceName ] ;\ |
},\ |
_FunctionQueue : {\ |
Functions : new Array(),\ |
IsRunning : false,\ |
Add : function( functionToAdd )\ |
{\ |
this.Functions.push( functionToAdd ) ;\ |
if ( !this.IsRunning )\ |
this.StartNext() ;\ |
},\ |
StartNext : function()\ |
{\ |
var aQueue = this.Functions ;\ |
if ( aQueue.length > 0 )\ |
{\ |
this.IsRunning = true ;\ |
aQueue[0].call() ;\ |
}\ |
else\ |
this.IsRunning = false ;\ |
},\ |
Remove : function( func )\ |
{\ |
var aQueue = this.Functions ;\ |
var i = 0, fFunc ;\ |
while( fFunc = aQueue[ i ] )\ |
{\ |
if ( fFunc == func )\ |
aQueue.splice( i,1 ) ;\ |
i++ ;\ |
}\ |
this.StartNext() ;\ |
}\ |
}\ |
}' ; |
// In IE, the "eval" function is not always available (it works with |
// the JavaScript samples, but not with the ASP ones, for example). |
// So, let's use the execScript instead. |
if ( window.parent.execScript ) |
window.parent.execScript( sScript, 'JavaScript' ) ; |
else |
{ |
if ( FCKBrowserInfo.IsGecko10 ) |
{ |
// FF 1.0.4 gives an error with the above request. The |
// following seams to work well. It could become to official |
// implementation for all browsers, but we need to check it. |
eval.call( window.parent, sScript ) ; |
} |
else |
window.parent.eval( sScript ) ; |
} |
FCKeditorAPI = window.parent.FCKeditorAPI ; |
} |
// Add the current instance to the FCKeditorAPI's instances collection. |
FCKeditorAPI.__Instances[ FCK.Name ] = FCK ; |
} |
function FCKeditorAPI_Cleanup() |
{ |
FCKeditorAPI.__Instances[ FCK.Name ] = null ; |
} |
FCKTools.AddEventListener( window, 'unload', FCKeditorAPI_Cleanup ) ; |
/branches/v1.0-menes/api/fckeditor/editor/_source/internals/fckxhtml.js |
---|
New file |
0,0 → 1,390 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckxhtml.js |
* Defines the FCKXHtml object, responsible for the XHTML operations. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
var FCKXHtml = new Object() ; |
FCKXHtml.CurrentJobNum = 0 ; |
FCKXHtml.GetXHTML = function( node, includeNode, format ) |
{ |
FCKXHtmlEntities.Initialize() ; |
// Save the current IsDirty state. The XHTML processor may change the |
// original HTML, dirtying it. |
var bIsDirty = FCK.IsDirty() ; |
this._CreateNode = FCKConfig.ForceStrongEm ? FCKXHtml_CreateNode_StrongEm : FCKXHtml_CreateNode_Normal ; |
// Special blocks are blocks of content that remain untouched during the |
// process. It is used for SCRIPTs and STYLEs. |
FCKXHtml.SpecialBlocks = new Array() ; |
// Create the XML DOMDocument object. |
this.XML = FCKTools.CreateXmlObject( 'DOMDocument' ) ; |
// Add a root element that holds all child nodes. |
this.MainNode = this.XML.appendChild( this.XML.createElement( 'xhtml' ) ) ; |
FCKXHtml.CurrentJobNum++ ; |
if ( includeNode ) |
this._AppendNode( this.MainNode, node ) ; |
else |
this._AppendChildNodes( this.MainNode, node, false ) ; |
// Get the resulting XHTML as a string. |
var sXHTML = this._GetMainXmlString() ; |
this.XML = null ; |
// Strip the "XHTML" root node. |
sXHTML = sXHTML.substr( 7, sXHTML.length - 15 ).trim() ; |
// Remove the trailing <br> added by Gecko. |
if ( FCKBrowserInfo.IsGecko ) |
sXHTML = sXHTML.replace( /<br\/>$/, '' ) ; |
// Add a space in the tags with no closing tags, like <br/> -> <br /> |
sXHTML = sXHTML.replace( FCKRegexLib.SpaceNoClose, ' />'); |
if ( FCKConfig.ForceSimpleAmpersand ) |
sXHTML = sXHTML.replace( FCKRegexLib.ForceSimpleAmpersand, '&' ) ; |
if ( format ) |
sXHTML = FCKCodeFormatter.Format( sXHTML ) ; |
// Now we put back the SpecialBlocks contents. |
for ( var i = 0 ; i < FCKXHtml.SpecialBlocks.length ; i++ ) |
{ |
var oRegex = new RegExp( '___FCKsi___' + i ) ; |
sXHTML = sXHTML.replace( oRegex, FCKXHtml.SpecialBlocks[i] ) ; |
} |
// Replace entities marker with the ampersand. |
sXHTML = sXHTML.replace( FCKRegexLib.GeckoEntitiesMarker, '&' ) ; |
// Restore the IsDirty state if it was not dirty. |
if ( !bIsDirty ) |
FCK.ResetIsDirty() ; |
return sXHTML |
} |
FCKXHtml._AppendAttribute = function( xmlNode, attributeName, attributeValue ) |
{ |
if ( FCKConfig.ForceSimpleAmpersand && attributeValue.replace ) |
attributeValue = attributeValue.replace( /&/g, '___FCKAmp___' ) ; |
try |
{ |
// Create the attribute. |
var oXmlAtt = this.XML.createAttribute( attributeName ) ; |
oXmlAtt.value = attributeValue ? attributeValue : '' ; |
// Set the attribute in the node. |
xmlNode.attributes.setNamedItem( oXmlAtt ) ; |
} |
catch (e) |
{} |
} |
FCKXHtml._AppendChildNodes = function( xmlNode, htmlNode, isBlockElement ) |
{ |
var iCount = 0 ; |
var oNode = htmlNode.firstChild ; |
while ( oNode ) |
{ |
if ( this._AppendNode( xmlNode, oNode ) ) |
iCount++ ; |
oNode = oNode.nextSibling ; |
} |
if ( iCount == 0 ) |
{ |
if ( isBlockElement && FCKConfig.FillEmptyBlocks ) |
{ |
this._AppendEntity( xmlNode, 'nbsp' ) ; |
return ; |
} |
// We can't use short representation of empty elements that are not marked |
// as empty in th XHTML DTD. |
if ( !FCKRegexLib.EmptyElements.test( htmlNode.nodeName ) ) |
xmlNode.appendChild( this.XML.createTextNode('') ) ; |
} |
} |
FCKXHtml._AppendNode = function( xmlNode, htmlNode ) |
{ |
if ( !htmlNode ) |
return ; |
switch ( htmlNode.nodeType ) |
{ |
// Element Node. |
case 1 : |
// Here we found an element that is not the real element, but a |
// fake one (like the Flash placeholder image), so we must get the real one. |
if ( htmlNode.getAttribute('_fckfakelement') ) |
return FCKXHtml._AppendNode( xmlNode, FCK.GetRealElement( htmlNode ) ) ; |
// Mozilla insert custom nodes in the DOM. |
if ( FCKBrowserInfo.IsGecko && htmlNode.hasAttribute('_moz_editor_bogus_node') ) |
return false ; |
// This is for elements that are instrumental to FCKeditor and |
// must be removed from the final HTML. |
if ( htmlNode.getAttribute('_fcktemp') ) |
return false ; |
// Get the element name. |
var sNodeName = htmlNode.nodeName ; |
//Add namespace: |
if ( FCKBrowserInfo.IsIE && htmlNode.scopeName && htmlNode.scopeName != 'HTML' && htmlNode.scopeName != 'FCK' ) |
sNodeName = htmlNode.scopeName + ':' + sNodeName ; |
// Check if the node name is valid, otherwise ignore this tag. |
// If the nodeName starts with a slash, it is a orphan closing tag. |
// On some strange cases, the nodeName is empty, even if the node exists. |
if ( !FCKRegexLib.ElementName.test( sNodeName ) ) |
return false ; |
sNodeName = sNodeName.toLowerCase() ; |
if ( FCKBrowserInfo.IsGecko && sNodeName == 'br' && htmlNode.hasAttribute('type') && htmlNode.getAttribute( 'type', 2 ) == '_moz' ) |
return false ; |
// The already processed nodes must be marked to avoid then to be duplicated (bad formatted HTML). |
// So here, the "mark" is checked... if the element is Ok, then mark it. |
if ( htmlNode._fckxhtmljob && htmlNode._fckxhtmljob == FCKXHtml.CurrentJobNum ) |
return false ; |
var oNode = this._CreateNode( sNodeName ) ; |
// Add all attributes. |
FCKXHtml._AppendAttributes( xmlNode, htmlNode, oNode, sNodeName ) ; |
htmlNode._fckxhtmljob = FCKXHtml.CurrentJobNum ; |
// Tag specific processing. |
var oTagProcessor = FCKXHtml.TagProcessors[ sNodeName ] ; |
if ( oTagProcessor ) |
{ |
oNode = oTagProcessor( oNode, htmlNode, xmlNode ) ; |
if ( !oNode ) break ; |
} |
else |
this._AppendChildNodes( oNode, htmlNode, FCKRegexLib.BlockElements.test( sNodeName ) ) ; |
xmlNode.appendChild( oNode ) ; |
break ; |
// Text Node. |
case 3 : |
this._AppendTextNode( xmlNode, htmlNode.nodeValue.replaceNewLineChars(' ') ) ; |
break ; |
// Comment |
case 8 : |
// IE catches the <!DOTYPE ... > as a comment, but it has no |
// innerHTML, so we can catch it, and ignore it. |
if ( FCKBrowserInfo.IsIE && !htmlNode.innerHTML ) |
break ; |
try { xmlNode.appendChild( this.XML.createComment( htmlNode.nodeValue ) ) ; } |
catch (e) { /* Do nothing... probably this is a wrong format comment. */ } |
break ; |
// Unknown Node type. |
default : |
xmlNode.appendChild( this.XML.createComment( "Element not supported - Type: " + htmlNode.nodeType + " Name: " + htmlNode.nodeName ) ) ; |
break ; |
} |
return true ; |
} |
function FCKXHtml_CreateNode_StrongEm( nodeName ) |
{ |
switch ( nodeName ) |
{ |
case 'b' : |
nodeName = 'strong' ; |
break ; |
case 'i' : |
nodeName = 'em' ; |
break ; |
} |
return this.XML.createElement( nodeName ) ; |
} |
function FCKXHtml_CreateNode_Normal( nodeName ) |
{ |
return this.XML.createElement( nodeName ) ; |
} |
// Append an item to the SpecialBlocks array and returns the tag to be used. |
FCKXHtml._AppendSpecialItem = function( item ) |
{ |
return '___FCKsi___' + FCKXHtml.SpecialBlocks.AddItem( item ) ; |
} |
FCKXHtml._AppendEntity = function( xmlNode, entity ) |
{ |
xmlNode.appendChild( this.XML.createTextNode( '#?-:' + entity + ';' ) ) ; |
} |
FCKXHtml._AppendTextNode = function( targetNode, textValue ) |
{ |
targetNode.appendChild( this.XML.createTextNode( textValue.replace( FCKXHtmlEntities.EntitiesRegex, FCKXHtml_GetEntity ) ) ) ; |
return ; |
} |
// Retrieves a entity (internal format) for a given character. |
function FCKXHtml_GetEntity( character ) |
{ |
// We cannot simply place the entities in the text, because the XML parser |
// will translate & to &. So we use a temporary marker which is replaced |
// in the end of the processing. |
var sEntity = FCKXHtmlEntities.Entities[ character ] || ( '#' + character.charCodeAt(0) ) ; |
return '#?-:' + sEntity + ';' ; |
} |
// An object that hold tag specific operations. |
FCKXHtml.TagProcessors = new Object() ; |
FCKXHtml.TagProcessors['img'] = function( node, htmlNode ) |
{ |
// The "ALT" attribute is required in XHTML. |
if ( ! node.attributes.getNamedItem( 'alt' ) ) |
FCKXHtml._AppendAttribute( node, 'alt', '' ) ; |
var sSavedUrl = htmlNode.getAttribute( '_fcksavedurl' ) ; |
if ( sSavedUrl != null ) |
FCKXHtml._AppendAttribute( node, 'src', sSavedUrl ) ; |
return node ; |
} |
FCKXHtml.TagProcessors['a'] = function( node, htmlNode ) |
{ |
var sSavedUrl = htmlNode.getAttribute( '_fcksavedurl' ) ; |
if ( sSavedUrl != null ) |
FCKXHtml._AppendAttribute( node, 'href', sSavedUrl ) ; |
FCKXHtml._AppendChildNodes( node, htmlNode, false ) ; |
// Firefox may create empty tags when deleting the selection in some special cases (SF-BUG 1556878). |
if ( node.childNodes.length == 0 && !node.getAttribute( 'name' ) ) |
return false ; |
return node ; |
} |
FCKXHtml.TagProcessors['script'] = function( node, htmlNode ) |
{ |
// The "TYPE" attribute is required in XHTML. |
if ( ! node.attributes.getNamedItem( 'type' ) ) |
FCKXHtml._AppendAttribute( node, 'type', 'text/javascript' ) ; |
node.appendChild( FCKXHtml.XML.createTextNode( FCKXHtml._AppendSpecialItem( htmlNode.text ) ) ) ; |
return node ; |
} |
FCKXHtml.TagProcessors['style'] = function( node, htmlNode ) |
{ |
// The "TYPE" attribute is required in XHTML. |
if ( ! node.attributes.getNamedItem( 'type' ) ) |
FCKXHtml._AppendAttribute( node, 'type', 'text/css' ) ; |
node.appendChild( FCKXHtml.XML.createTextNode( FCKXHtml._AppendSpecialItem( htmlNode.innerHTML ) ) ) ; |
return node ; |
} |
FCKXHtml.TagProcessors['title'] = function( node, htmlNode ) |
{ |
node.appendChild( FCKXHtml.XML.createTextNode( FCK.EditorDocument.title ) ) ; |
return node ; |
} |
FCKXHtml.TagProcessors['table'] = function( node, htmlNode ) |
{ |
// There is a trick to show table borders when border=0. We add to the |
// table class the FCK__ShowTableBorders rule. So now we must remove it. |
var oClassAtt = node.attributes.getNamedItem( 'class' ) ; |
if ( oClassAtt && FCKRegexLib.TableBorderClass.test( oClassAtt.nodeValue ) ) |
{ |
var sClass = oClassAtt.nodeValue.replace( FCKRegexLib.TableBorderClass, '' ) ; |
if ( sClass.length == 0 ) |
node.attributes.removeNamedItem( 'class' ) ; |
else |
FCKXHtml._AppendAttribute( node, 'class', sClass ) ; |
} |
FCKXHtml._AppendChildNodes( node, htmlNode, false ) ; |
return node ; |
} |
// Fix nested <ul> and <ol>. |
FCKXHtml.TagProcessors['ol'] = FCKXHtml.TagProcessors['ul'] = function( node, htmlNode, targetNode ) |
{ |
if ( htmlNode.innerHTML.trim().length == 0 ) |
return ; |
var ePSibling = targetNode.lastChild ; |
if ( ePSibling && ePSibling.nodeType == 3 ) |
ePSibling = ePSibling.previousSibling ; |
if ( ePSibling && ePSibling.nodeName.toUpperCase() == 'LI' ) |
{ |
htmlNode._fckxhtmljob = null ; |
FCKXHtml._AppendNode( ePSibling, htmlNode ) ; |
return ; |
} |
FCKXHtml._AppendChildNodes( node, htmlNode ) ; |
return node ; |
} |
FCKXHtml.TagProcessors['span'] = function( node, htmlNode ) |
{ |
// Firefox may create empty tags when deleting the selection in some special cases (SF-BUG 1084404). |
if ( htmlNode.innerHTML.length == 0 ) |
return false ; |
FCKXHtml._AppendChildNodes( node, htmlNode, false ) ; |
return node ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/internals/fckselection_gecko.js |
---|
New file |
0,0 → 1,144 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckselection_gecko.js |
* Active selection functions. (Gecko specific implementation) |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
// Get the selection type (like document.select.type in IE). |
FCKSelection.GetType = function() |
{ |
// if ( ! this._Type ) |
// { |
// By default set the type to "Text". |
this._Type = 'Text' ; |
// Check if the actual selection is a Control (IMG, TABLE, HR, etc...). |
var oSel ; |
try { oSel = FCK.EditorWindow.getSelection() ; } |
catch (e) {} |
if ( oSel && oSel.rangeCount == 1 ) |
{ |
var oRange = oSel.getRangeAt(0) ; |
if ( oRange.startContainer == oRange.endContainer && (oRange.endOffset - oRange.startOffset) == 1 && oRange.startContainer.nodeType != Node.TEXT_NODE ) |
this._Type = 'Control' ; |
} |
// } |
return this._Type ; |
} |
// Retrieves the selected element (if any), just in the case that a single |
// element (object like and image or a table) is selected. |
FCKSelection.GetSelectedElement = function() |
{ |
if ( this.GetType() == 'Control' ) |
{ |
var oSel = FCK.EditorWindow.getSelection() ; |
return oSel.anchorNode.childNodes[ oSel.anchorOffset ] ; |
} |
} |
FCKSelection.GetParentElement = function() |
{ |
if ( this.GetType() == 'Control' ) |
return FCKSelection.GetSelectedElement().parentNode ; |
else |
{ |
var oSel = FCK.EditorWindow.getSelection() ; |
if ( oSel ) |
{ |
var oNode = oSel.anchorNode ; |
while ( oNode && oNode.nodeType != 1 ) |
oNode = oNode.parentNode ; |
return oNode ; |
} |
} |
} |
FCKSelection.SelectNode = function( element ) |
{ |
// FCK.Focus() ; |
var oRange = FCK.EditorDocument.createRange() ; |
oRange.selectNode( element ) ; |
var oSel = FCK.EditorWindow.getSelection() ; |
oSel.removeAllRanges() ; |
oSel.addRange( oRange ) ; |
} |
FCKSelection.Collapse = function( toStart ) |
{ |
var oSel = FCK.EditorWindow.getSelection() ; |
if ( toStart == null || toStart === true ) |
oSel.collapseToStart() ; |
else |
oSel.collapseToEnd() ; |
} |
// The "nodeTagName" parameter must be Upper Case. |
FCKSelection.HasAncestorNode = function( nodeTagName ) |
{ |
var oContainer = this.GetSelectedElement() ; |
if ( ! oContainer && FCK.EditorWindow ) |
{ |
try { oContainer = FCK.EditorWindow.getSelection().getRangeAt(0).startContainer ; } |
catch(e){} |
} |
while ( oContainer ) |
{ |
if ( oContainer.nodeType == 1 && oContainer.tagName == nodeTagName ) return true ; |
oContainer = oContainer.parentNode ; |
} |
return false ; |
} |
// The "nodeTagName" parameter must be Upper Case. |
FCKSelection.MoveToAncestorNode = function( nodeTagName ) |
{ |
var oNode ; |
var oContainer = this.GetSelectedElement() ; |
if ( ! oContainer ) |
oContainer = FCK.EditorWindow.getSelection().getRangeAt(0).startContainer ; |
while ( oContainer ) |
{ |
if ( oContainer.tagName == nodeTagName ) |
return oContainer ; |
oContainer = oContainer.parentNode ; |
} |
return null ; |
} |
FCKSelection.Delete = function() |
{ |
// Gets the actual selection. |
var oSel = FCK.EditorWindow.getSelection() ; |
// Deletes the actual selection contents. |
for ( var i = 0 ; i < oSel.rangeCount ; i++ ) |
{ |
oSel.getRangeAt(i).deleteContents() ; |
} |
return oSel ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/internals/fckcodeformatter.js |
---|
New file |
0,0 → 1,96 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckcodeformatter.js |
* Format the HTML. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
var FCKCodeFormatter = new Object() ; |
FCKCodeFormatter.Init = function() |
{ |
var oRegex = this.Regex = new Object() ; |
// Regex for line breaks. |
oRegex.BlocksOpener = /\<(P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|TITLE|META|LINK|BASE|SCRIPT|LINK|TD|TH|AREA|OPTION)[^\>]*\>/gi ; |
oRegex.BlocksCloser = /\<\/(P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|TITLE|META|LINK|BASE|SCRIPT|LINK|TD|TH|AREA|OPTION)[^\>]*\>/gi ; |
oRegex.NewLineTags = /\<(BR|HR)[^\>]*\>/gi ; |
oRegex.MainTags = /\<\/?(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR)[^\>]*\>/gi ; |
oRegex.LineSplitter = /\s*\n+\s*/g ; |
// Regex for indentation. |
oRegex.IncreaseIndent = /^\<(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR|UL|OL)[ \/\>]/i ; |
oRegex.DecreaseIndent = /^\<\/(HTML|HEAD|BODY|FORM|TABLE|TBODY|THEAD|TR|UL|OL)[ \>]/i ; |
oRegex.FormatIndentatorRemove = new RegExp( '^' + FCKConfig.FormatIndentator ) ; |
oRegex.ProtectedTags = /(<PRE[^>]*>)([\s\S]*?)(<\/PRE>)/gi ; |
} |
FCKCodeFormatter._ProtectData = function( outer, opener, data, closer ) |
{ |
return opener + '___FCKpd___' + FCKCodeFormatter.ProtectedData.AddItem( data ) + closer ; |
} |
FCKCodeFormatter.Format = function( html ) |
{ |
if ( !this.Regex ) |
this.Init() ; |
// Protected content that remain untouched during the |
// process go in the following array. |
FCKCodeFormatter.ProtectedData = new Array() ; |
var sFormatted = html.replace( this.Regex.ProtectedTags, FCKCodeFormatter._ProtectData ) ; |
// Line breaks. |
sFormatted = sFormatted.replace( this.Regex.BlocksOpener, '\n$&' ) ; ; |
sFormatted = sFormatted.replace( this.Regex.BlocksCloser, '$&\n' ) ; |
sFormatted = sFormatted.replace( this.Regex.NewLineTags, '$&\n' ) ; |
sFormatted = sFormatted.replace( this.Regex.MainTags, '\n$&\n' ) ; |
// Indentation. |
var sIndentation = '' ; |
var asLines = sFormatted.split( this.Regex.LineSplitter ) ; |
sFormatted = '' ; |
for ( var i = 0 ; i < asLines.length ; i++ ) |
{ |
var sLine = asLines[i] ; |
if ( sLine.length == 0 ) |
continue ; |
if ( this.Regex.DecreaseIndent.test( sLine ) ) |
sIndentation = sIndentation.replace( this.Regex.FormatIndentatorRemove, '' ) ; |
sFormatted += sIndentation + sLine + '\n' ; |
if ( this.Regex.IncreaseIndent.test( sLine ) ) |
sIndentation += FCKConfig.FormatIndentator ; |
} |
// Now we put back the protected data. |
for ( var i = 0 ; i < FCKCodeFormatter.ProtectedData.length ; i++ ) |
{ |
var oRegex = new RegExp( '___FCKpd___' + i ) ; |
sFormatted = sFormatted.replace( oRegex, FCKCodeFormatter.ProtectedData[i].replace( /\$/g, '$$$$' ) ) ; |
} |
return sFormatted.trim() ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/internals/fck_1.js |
---|
New file |
0,0 → 1,410 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fck_1.js |
* This is the first part of the "FCK" object creation. This is the main |
* object that represents an editor instance. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
var FCK_StartupValue ; |
FCK.Events = new FCKEvents( FCK ) ; |
FCK.Toolbar = null ; |
FCK.HasFocus = false ; |
FCK.StartEditor = function() |
{ |
FCK.TempBaseTag = FCKConfig.BaseHref.length > 0 ? '<base href="' + FCKConfig.BaseHref + '" _fcktemp="true"></base>' : '' ; |
FCK.EditingArea = new FCKEditingArea( document.getElementById( 'xEditingArea' ) ) ; |
// Set the editor's startup contents |
this.SetHTML( FCKTools.GetLinkedFieldValue() ) ; |
} |
FCK.Focus = function() |
{ |
FCK.EditingArea.Focus() ; |
} |
FCK.SetStatus = function( newStatus ) |
{ |
this.Status = newStatus ; |
if ( newStatus == FCK_STATUS_ACTIVE ) |
{ |
FCKFocusManager.AddWindow( window, true ) ; |
if ( FCKBrowserInfo.IsIE ) |
FCKFocusManager.AddWindow( window.frameElement, true ) ; |
// Force the focus in the editor. |
if ( FCKConfig.StartupFocus ) |
FCK.Focus() ; |
} |
this.Events.FireEvent( 'OnStatusChange', newStatus ) ; |
} |
// GetHTML is Deprecated : returns the same value as GetXHTML. |
FCK.GetHTML = FCK.GetXHTML = function( format ) |
{ |
// We assume that if the user is in source editing, the editor value must |
// represent the exact contents of the source, as the user wanted it to be. |
if ( FCK.EditMode == FCK_EDITMODE_SOURCE ) |
return FCK.EditingArea.Textarea.value ; |
var sXHTML ; |
var oDoc = FCK.EditorDocument ; |
if ( FCKConfig.FullPage ) |
sXHTML = FCKXHtml.GetXHTML( oDoc.getElementsByTagName( 'html' )[0], true, format ) ; |
else |
{ |
if ( FCKConfig.IgnoreEmptyParagraphValue && oDoc.body.innerHTML == '<P> </P>' ) |
sXHTML = '' ; |
else |
sXHTML = FCKXHtml.GetXHTML( oDoc.body, false, format ) ; |
} |
// Restore protected attributes. |
sXHTML = FCK.ProtectEventsRestore( sXHTML ) ; |
if ( FCKBrowserInfo.IsIE ) |
sXHTML = sXHTML.replace( FCKRegexLib.ToReplace, '$1' ) ; |
if ( FCK.DocTypeDeclaration && FCK.DocTypeDeclaration.length > 0 ) |
sXHTML = FCK.DocTypeDeclaration + '\n' + sXHTML ; |
if ( FCK.XmlDeclaration && FCK.XmlDeclaration.length > 0 ) |
sXHTML = FCK.XmlDeclaration + '\n' + sXHTML ; |
return FCKConfig.ProtectedSource.Revert( sXHTML ) ; |
} |
FCK.UpdateLinkedField = function() |
{ |
FCK.LinkedField.value = FCK.GetXHTML( FCKConfig.FormatOutput ) ; |
FCK.Events.FireEvent( 'OnAfterLinkedFieldUpdate' ) ; |
} |
FCK.RegisteredDoubleClickHandlers = new Object() ; |
FCK.OnDoubleClick = function( element ) |
{ |
var oHandler = FCK.RegisteredDoubleClickHandlers[ element.tagName ] ; |
if ( oHandler ) |
oHandler( element ) ; |
} |
// Register objects that can handle double click operations. |
FCK.RegisterDoubleClickHandler = function( handlerFunction, tag ) |
{ |
FCK.RegisteredDoubleClickHandlers[ tag.toUpperCase() ] = handlerFunction ; |
} |
FCK.OnAfterSetHTML = function() |
{ |
FCKDocumentProcessor.Process( FCK.EditorDocument ) ; |
FCKUndo.SaveUndoStep() ; |
FCK.Events.FireEvent( 'OnSelectionChange' ) ; |
FCK.Events.FireEvent( 'OnAfterSetHTML' ) ; |
} |
// Saves URLs on links and images on special attributes, so they don't change when |
// moving around. |
FCK.ProtectUrls = function( html ) |
{ |
// <A> href |
html = html.replace( FCKRegexLib.ProtectUrlsA , '$1$4$2$3$5$2 _fcksavedurl=$2$3$5$2' ) ; |
// <IMG> src |
html = html.replace( FCKRegexLib.ProtectUrlsImg , '$1$4$2$3$5$2 _fcksavedurl=$2$3$5$2' ) ; |
return html ; |
} |
// Saves event attributes (like onclick) so they don't get executed while |
// editing. |
FCK.ProtectEvents = function( html ) |
{ |
return html.replace( FCKRegexLib.TagsWithEvent, _FCK_ProtectEvents_ReplaceTags ) ; |
} |
// Replace all events attributes (like onclick). |
function _FCK_ProtectEvents_ReplaceTags( tagMatch ) |
{ |
return tagMatch.replace( FCKRegexLib.EventAttributes, _FCK_ProtectEvents_ReplaceEvents ) ; |
} |
// Replace an event attribute with its respective __fckprotectedatt attribute. |
// The original event markup will be encoded and saved as the value of the new |
// attribute. |
function _FCK_ProtectEvents_ReplaceEvents( eventMatch, attName ) |
{ |
return ' ' + attName + '_fckprotectedatt="' + eventMatch.ReplaceAll( [/&/g,/'/g,/"/g,/=/g,/</g,/>/g,/\r/g,/\n/g], [''',''','"','=','<','>',' ',' '] ) + '"' ; |
} |
FCK.ProtectEventsRestore = function( html ) |
{ |
return html.replace( FCKRegexLib.ProtectedEvents, _FCK_ProtectEvents_RestoreEvents ) ; |
} |
function _FCK_ProtectEvents_RestoreEvents( match, encodedOriginal ) |
{ |
return encodedOriginal.ReplaceAll( [/'/g,/"/g,/=/g,/</g,/>/g,/ /g,/ /g,/'/g], ["'",'"','=','<','>','\r','\n','&'] ) ; |
} |
FCK.IsDirty = function() |
{ |
return ( FCK_StartupValue != FCK.EditorDocument.body.innerHTML ) ; |
} |
FCK.ResetIsDirty = function() |
{ |
if ( FCK.EditorDocument.body ) |
FCK_StartupValue = FCK.EditorDocument.body.innerHTML ; |
} |
FCK.SetHTML = function( html ) |
{ |
this.EditingArea.Mode = FCK.EditMode ; |
if ( FCK.EditMode == FCK_EDITMODE_WYSIWYG ) |
{ |
html = FCKConfig.ProtectedSource.Protect( html ) ; |
html = FCK.ProtectEvents( html ) ; |
html = FCK.ProtectUrls( html ) ; |
// Firefox can't handle correctly the editing of the STRONG and EM tags. |
// We must replace them with B and I. |
if ( FCKBrowserInfo.IsGecko ) |
{ |
html = html.replace( FCKRegexLib.StrongOpener, '<b$1' ) ; |
html = html.replace( FCKRegexLib.StrongCloser, '<\/b>' ) ; |
html = html.replace( FCKRegexLib.EmOpener, '<i$1' ) ; |
html = html.replace( FCKRegexLib.EmCloser, '<\/i>' ) ; |
} |
else if ( FCKBrowserInfo.IsIE ) |
{ |
// IE doesn't support <abbr> and it breaks it. Let's protect it. |
html = html.replace( FCKRegexLib.AbbrOpener, '<FCK:abbr$1' ) ; |
html = html.replace( FCKRegexLib.AbbrCloser, '<\/FCK:abbr>' ) ; |
} |
var sHtml = '' ; |
if ( FCKConfig.FullPage ) |
{ |
// The HTML must be fixed if the <head> is not available. |
if ( !FCKRegexLib.HeadOpener.test( html ) ) |
{ |
// Check if the <html> is available. |
if ( !FCKRegexLib.HtmlOpener.test( html ) ) |
html = '<html dir="' + FCKConfig.ContentLangDirection + '">' + html + '</html>' ; |
// Add the <head>. |
html = html.replace( FCKRegexLib.HtmlOpener, '$&<head></head>' ) ; |
} |
// Save the DOCTYPE. |
FCK.DocTypeDeclaration = html.match( FCKRegexLib.DocTypeTag ) ; |
if ( FCKBrowserInfo.IsIE ) |
sHtml = FCK._GetBehaviorsStyle() ; |
else if ( FCKConfig.ShowBorders ) |
sHtml = '<link href="' + FCKConfig.FullBasePath + 'css/fck_showtableborders_gecko.css" rel="stylesheet" type="text/css" _fcktemp="true" />' ; |
sHtml += '<link href="' + FCKConfig.FullBasePath + 'css/fck_internal.css' + '" rel="stylesheet" type="text/css" _fcktemp="true" />' ; |
sHtml = html.replace( FCKRegexLib.HeadCloser, sHtml + '$&' ) ; |
// Insert the base tag (FCKConfig.BaseHref), if not exists in the source. |
if ( FCK.TempBaseTag.length > 0 && !FCKRegexLib.HasBaseTag.test( html ) ) |
sHtml = sHtml.replace( FCKRegexLib.HeadOpener, '$&' + FCK.TempBaseTag ) ; |
} |
else |
{ |
sHtml = |
FCKConfig.DocType + |
'<html dir="' + FCKConfig.ContentLangDirection + '"' ; |
// On IE, if you are use a DOCTYPE differenft of HTML 4 (like |
// XHTML), you must force the vertical scroll to show, otherwise |
// the horizontal one may appear when the page needs vertical scrolling. |
if ( FCKBrowserInfo.IsIE && !FCKRegexLib.Html4DocType.test( FCKConfig.DocType ) ) |
sHtml += ' style="overflow-y: scroll"' ; |
sHtml += |
'><head><title></title>' + |
this._GetEditorAreaStyleTags() + |
'<link href="' + FCKConfig.FullBasePath + 'css/fck_internal.css' + '" rel="stylesheet" type="text/css" _fcktemp="true" />' ; |
if ( FCKBrowserInfo.IsIE ) |
sHtml += FCK._GetBehaviorsStyle() ; |
else if ( FCKConfig.ShowBorders ) |
sHtml += '<link href="' + FCKConfig.FullBasePath + 'css/fck_showtableborders_gecko.css" rel="stylesheet" type="text/css" _fcktemp="true" />' ; |
sHtml += FCK.TempBaseTag ; |
sHtml += '</head><body>' ; |
if ( FCKBrowserInfo.IsGecko && ( html.length == 0 || FCKRegexLib.EmptyParagraph.test( html ) ) ) |
sHtml += GECKO_BOGUS ; |
else |
sHtml += html ; |
sHtml += '</body></html>' ; |
} |
this.EditingArea.OnLoad = FCK_EditingArea_OnLoad ; |
this.EditingArea.Start( sHtml ) ; |
} |
else |
{ |
this.EditingArea.OnLoad = null ; |
this.EditingArea.Start( html ) ; |
// Enables the context menu in the textarea. |
this.EditingArea.Textarea._FCKShowContextMenu = true ; |
} |
if ( FCKBrowserInfo.IsGecko ) |
window.onresize() ; |
} |
function FCK_EditingArea_OnLoad() |
{ |
// Get the editor's window and document (DOM) |
FCK.EditorWindow = FCK.EditingArea.Window ; |
FCK.EditorDocument = FCK.EditingArea.Document ; |
FCK.InitializeBehaviors() ; |
FCK.OnAfterSetHTML() ; |
// Check if it is not a startup call, otherwise complete the startup. |
if ( FCK.Status != FCK_STATUS_NOTLOADED ) |
return ; |
// Save the startup value for the "IsDirty()" check. |
FCK.ResetIsDirty() ; |
// Attach the editor to the form onsubmit event |
FCKTools.AttachToLinkedFieldFormSubmit( FCK.UpdateLinkedField ) ; |
FCK.SetStatus( FCK_STATUS_ACTIVE ) ; |
} |
FCK._GetEditorAreaStyleTags = function() |
{ |
var sTags = '' ; |
var aCSSs = FCKConfig.EditorAreaCSS ; |
for ( var i = 0 ; i < aCSSs.length ; i++ ) |
sTags += '<link href="' + aCSSs[i] + '" rel="stylesheet" type="text/css" />' ; |
return sTags ; |
} |
// # Focus Manager: Manages the focus in the editor. |
var FCKFocusManager = FCK.FocusManager = new Object() ; |
FCKFocusManager.IsLocked = false ; |
FCK.HasFocus = false ; |
FCKFocusManager.AddWindow = function( win, sendToEditingArea ) |
{ |
var oTarget ; |
if ( FCKBrowserInfo.IsIE ) |
oTarget = win.nodeType == 1 ? win : win.frameElement ? win.frameElement : win.document ; |
else |
oTarget = win.document ; |
FCKTools.AddEventListener( oTarget, 'blur', FCKFocusManager_Win_OnBlur ) ; |
FCKTools.AddEventListener( oTarget, 'focus', sendToEditingArea ? FCKFocusManager_Win_OnFocus_Area : FCKFocusManager_Win_OnFocus ) ; |
} |
FCKFocusManager.RemoveWindow = function( win ) |
{ |
if ( FCKBrowserInfo.IsIE ) |
oTarget = win.nodeType == 1 ? win : win.frameElement ? win.frameElement : win.document ; |
else |
oTarget = win.document ; |
FCKTools.RemoveEventListener( oTarget, 'blur', FCKFocusManager_Win_OnBlur ) ; |
FCKTools.RemoveEventListener( oTarget, 'focus', FCKFocusManager_Win_OnFocus_Area ) ; |
FCKTools.RemoveEventListener( oTarget, 'focus', FCKFocusManager_Win_OnFocus ) ; |
} |
FCKFocusManager.Lock = function() |
{ |
this.IsLocked = true ; |
} |
FCKFocusManager.Unlock = function() |
{ |
if ( this._HasPendingBlur ) |
FCKFocusManager._Timer = window.setTimeout( FCKFocusManager_FireOnBlur, 100 ) ; |
this.IsLocked = false ; |
} |
FCKFocusManager._ResetTimer = function() |
{ |
this._HasPendingBlur = false ; |
if ( this._Timer ) |
{ |
window.clearTimeout( this._Timer ) ; |
delete this._Timer ; |
} |
} |
function FCKFocusManager_Win_OnBlur() |
{ |
if ( typeof(FCK) != 'undefined' && FCK.HasFocus ) |
{ |
FCKFocusManager._ResetTimer() ; |
FCKFocusManager._Timer = window.setTimeout( FCKFocusManager_FireOnBlur, 100 ) ; |
} |
} |
function FCKFocusManager_FireOnBlur() |
{ |
if ( FCKFocusManager.IsLocked ) |
FCKFocusManager._HasPendingBlur = true ; |
else |
{ |
FCK.HasFocus = false ; |
FCK.Events.FireEvent( "OnBlur" ) ; |
} |
} |
function FCKFocusManager_Win_OnFocus_Area() |
{ |
FCKFocusManager_Win_OnFocus() ; |
FCK.Focus() ; |
} |
function FCKFocusManager_Win_OnFocus() |
{ |
FCKFocusManager._ResetTimer() ; |
if ( !FCK.HasFocus && !FCKFocusManager.IsLocked ) |
{ |
FCK.HasFocus = true ; |
FCK.Events.FireEvent( "OnFocus" ) ; |
} |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/internals/fckdialog.js |
---|
New file |
0,0 → 1,34 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckdialog.js |
* Dialog windows operations. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
var FCKDialog = new Object() ; |
// This method opens a dialog window using the standard dialog template. |
FCKDialog.OpenDialog = function( dialogName, dialogTitle, dialogPage, width, height, customValue, parentWindow, resizable ) |
{ |
// Setup the dialog info. |
var oDialogInfo = new Object() ; |
oDialogInfo.Title = dialogTitle ; |
oDialogInfo.Page = dialogPage ; |
oDialogInfo.Editor = window ; |
oDialogInfo.CustomValue = customValue ; // Optional |
var sUrl = FCKConfig.BasePath + 'fckdialog.html' ; |
this.Show( oDialogInfo, dialogName, sUrl, width, height, parentWindow, resizable ) ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/internals/fcktools.js |
---|
New file |
0,0 → 1,236 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fcktools.js |
* Utility functions. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
var FCKTools = new Object() ; |
FCKTools.AppendStyleSheet = function( documentElement, cssFileUrlOrArray ) |
{ |
if ( typeof( cssFileUrlOrArray ) == 'string' ) |
return this._AppendStyleSheet( documentElement, cssFileUrlOrArray ) ; |
else |
{ |
for ( var i = 0 ; i < cssFileUrlOrArray.length ; i++ ) |
this._AppendStyleSheet( documentElement, cssFileUrlOrArray[i] ) ; |
} |
} |
/** |
* Gets the value of the hidden INPUT element that is associated to the editor. |
* This element has its ID set to the editor's instance name so the user refers |
* to the instance name when getting the posted data. |
*/ |
FCKTools.GetLinkedFieldValue = function() |
{ |
return FCK.LinkedField.value ; |
} |
/** |
* Attachs a function call to the submit event of the linked field form. This |
* function us generally used to update the linked field value before |
* submitting the form. |
*/ |
FCKTools.AttachToLinkedFieldFormSubmit = function( functionPointer ) |
{ |
// Gets the linked field form |
var oForm = FCK.LinkedField.form ; |
// Return now if no form is available |
if (!oForm) return ; |
// Attaches the functionPointer call to the onsubmit event |
if ( FCKBrowserInfo.IsIE ) |
oForm.attachEvent( "onsubmit", functionPointer ) ; |
else |
oForm.addEventListener( 'submit', functionPointer, false ) ; |
//** |
// Attaches the functionPointer call to the submit method |
// This is done because IE doesn't fire onsubmit when the submit method is called |
// BEGIN -- |
// Creates a Array in the form object that will hold all Attached function call |
// (in the case there are more than one editor in the same page) |
if (! oForm.updateFCKeditor) oForm.updateFCKeditor = new Array() ; |
// Adds the function pointer to the array of functions to call when "submit" is called |
oForm.updateFCKeditor[oForm.updateFCKeditor.length] = functionPointer ; |
// Switches the original submit method with a new one that first call all functions |
// on the above array and the call the original submit |
// IE sees it oForm.submit function as an 'object'. |
if (! oForm.originalSubmit && ( typeof( oForm.submit ) == 'function' || ( !oForm.submit.tagName && !oForm.submit.length ) ) ) |
{ |
// Creates a copy of the original submit |
oForm.originalSubmit = oForm.submit ; |
// Creates our replacement for the submit |
oForm.submit = FCKTools_SubmitReplacer ; |
} |
// END -- |
} |
function FCKTools_SubmitReplacer() |
{ |
if (this.updateFCKeditor) |
{ |
// Calls all functions in the functions array |
for (var i = 0 ; i < this.updateFCKeditor.length ; i++) |
this.updateFCKeditor[i]() ; |
} |
// Calls the original "submit" |
this.originalSubmit() ; |
} |
// Get the window object where the element is placed in. |
FCKTools.GetElementWindow = function( element ) |
{ |
return this.GetDocumentWindow( this.GetElementDocument( element ) ) ; |
} |
FCKTools.GetDocumentWindow = function( doc ) |
{ |
// With Safari, there is not way to retrieve the window from the document, so we must fix it. |
if ( FCKBrowserInfo.IsSafari && !doc.parentWindow ) |
this.FixDocumentParentWindow( window.top ) ; |
return doc.parentWindow || doc.defaultView ; |
} |
/* |
This is a Safari specific function that fix the reference to the parent |
window from the document object. |
*/ |
FCKTools.FixDocumentParentWindow = function( targetWindow ) |
{ |
targetWindow.document.parentWindow = targetWindow ; |
for ( var i = 0 ; i < targetWindow.frames.length ; i++ ) |
FCKTools.FixDocumentParentWindow( targetWindow.frames[i] ) ; |
} |
FCKTools.GetParentWindow = function( document ) |
{ |
return document.contentWindow ? document.contentWindow : document.parentWindow ; |
} |
FCKTools.HTMLEncode = function( text ) |
{ |
if ( !text ) |
return '' ; |
text = text.replace( /&/g, '&' ) ; |
text = text.replace( /</g, '<' ) ; |
text = text.replace( />/g, '>' ) ; |
return text ; |
} |
/** |
* Adds an option to a SELECT element. |
*/ |
FCKTools.AddSelectOption = function( selectElement, optionText, optionValue ) |
{ |
var oOption = FCKTools.GetElementDocument( selectElement ).createElement( "OPTION" ) ; |
oOption.text = optionText ; |
oOption.value = optionValue ; |
selectElement.options.add(oOption) ; |
return oOption ; |
} |
FCKTools.RunFunction = function( func, thisObject, paramsArray, timerWindow ) |
{ |
if ( func ) |
this.SetTimeout( func, 0, thisObject, paramsArray, timerWindow ) ; |
} |
FCKTools.SetTimeout = function( func, milliseconds, thisObject, paramsArray, timerWindow ) |
{ |
return ( timerWindow || window ).setTimeout( |
function() |
{ |
if ( paramsArray ) |
func.apply( thisObject, [].concat( paramsArray ) ) ; |
else |
func.apply( thisObject ) ; |
}, |
milliseconds ) ; |
} |
FCKTools.SetInterval = function( func, milliseconds, thisObject, paramsArray, timerWindow ) |
{ |
return ( timerWindow || window ).setInterval( |
function() |
{ |
func.apply( thisObject, paramsArray || [] ) ; |
}, |
milliseconds ) ; |
} |
FCKTools.ConvertStyleSizeToHtml = function( size ) |
{ |
return size.endsWith( '%' ) ? size : parseInt( size ) ; |
} |
FCKTools.ConvertHtmlSizeToStyle = function( size ) |
{ |
return size.endsWith( '%' ) ? size : ( size + 'px' ) ; |
} |
// START iCM MODIFICATIONS |
// Amended to accept a list of one or more ascensor tag names |
// Amended to check the element itself before working back up through the parent hierarchy |
FCKTools.GetElementAscensor = function( element, ascensorTagNames ) |
{ |
// var e = element.parentNode ; |
var e = element ; |
var lstTags = "," + ascensorTagNames.toUpperCase() + "," ; |
while ( e ) |
{ |
if ( lstTags.indexOf( "," + e.nodeName.toUpperCase() + "," ) != -1 ) |
return e ; |
e = e.parentNode ; |
} |
return null ; |
} |
// END iCM MODIFICATIONS |
FCKTools.CreateEventListener = function( func, params ) |
{ |
var f = function() |
{ |
var aAllParams = [] ; |
for ( var i = 0 ; i < arguments.length ; i++ ) |
aAllParams.push( arguments[i] ) ; |
func.apply( this, aAllParams.concat( params ) ) ; |
} |
return f ; |
} |
FCKTools.GetElementDocument = function ( element ) |
{ |
return element.ownerDocument || element.document ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/internals/fckcommands.js |
---|
New file |
0,0 → 1,126 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckcommands.js |
* Define all commands available in the editor. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
var FCKCommands = FCK.Commands = new Object() ; |
FCKCommands.LoadedCommands = new Object() ; |
FCKCommands.RegisterCommand = function( commandName, command ) |
{ |
this.LoadedCommands[ commandName ] = command ; |
} |
FCKCommands.GetCommand = function( commandName ) |
{ |
var oCommand = FCKCommands.LoadedCommands[ commandName ] ; |
if ( oCommand ) |
return oCommand ; |
switch ( commandName ) |
{ |
case 'DocProps' : oCommand = new FCKDialogCommand( 'DocProps' , FCKLang.DocProps , 'dialog/fck_docprops.html' , 400, 390, FCKCommands.GetFullPageState ) ; break ; |
case 'Templates' : oCommand = new FCKDialogCommand( 'Templates' , FCKLang.DlgTemplatesTitle , 'dialog/fck_template.html' , 380, 450 ) ; break ; |
case 'Link' : oCommand = new FCKDialogCommand( 'Link' , FCKLang.DlgLnkWindowTitle , 'dialog/fck_link.html' , 400, 330, FCK.GetNamedCommandState, 'CreateLink' ) ; break ; |
case 'Unlink' : oCommand = new FCKUnlinkCommand() ; break ; |
case 'Anchor' : oCommand = new FCKDialogCommand( 'Anchor' , FCKLang.DlgAnchorTitle , 'dialog/fck_anchor.html' , 370, 170 ) ; break ; |
case 'BulletedList' : oCommand = new FCKDialogCommand( 'BulletedList', FCKLang.BulletedListProp , 'dialog/fck_listprop.html' , 370, 170 ) ; break ; |
case 'NumberedList' : oCommand = new FCKDialogCommand( 'NumberedList', FCKLang.NumberedListProp , 'dialog/fck_listprop.html' , 370, 170 ) ; break ; |
case 'About' : oCommand = new FCKDialogCommand( 'About' , FCKLang.About , 'dialog/fck_about.html' , 400, 330 ) ; break ; |
case 'Find' : oCommand = new FCKDialogCommand( 'Find' , FCKLang.DlgFindTitle , 'dialog/fck_find.html' , 340, 170 ) ; break ; |
case 'Replace' : oCommand = new FCKDialogCommand( 'Replace' , FCKLang.DlgReplaceTitle , 'dialog/fck_replace.html' , 340, 200 ) ; break ; |
case 'Image' : oCommand = new FCKDialogCommand( 'Image' , FCKLang.DlgImgTitle , 'dialog/fck_image.html' , 450, 400 ) ; break ; |
case 'Flash' : oCommand = new FCKDialogCommand( 'Flash' , FCKLang.DlgFlashTitle , 'dialog/fck_flash.html' , 450, 400 ) ; break ; |
case 'SpecialChar' : oCommand = new FCKDialogCommand( 'SpecialChar', FCKLang.DlgSpecialCharTitle , 'dialog/fck_specialchar.html' , 400, 320 ) ; break ; |
case 'Smiley' : oCommand = new FCKDialogCommand( 'Smiley' , FCKLang.DlgSmileyTitle , 'dialog/fck_smiley.html' , FCKConfig.SmileyWindowWidth, FCKConfig.SmileyWindowHeight ) ; break ; |
case 'Table' : oCommand = new FCKDialogCommand( 'Table' , FCKLang.DlgTableTitle , 'dialog/fck_table.html' , 450, 250 ) ; break ; |
case 'TableProp' : oCommand = new FCKDialogCommand( 'Table' , FCKLang.DlgTableTitle , 'dialog/fck_table.html?Parent', 400, 250 ) ; break ; |
case 'TableCellProp': oCommand = new FCKDialogCommand( 'TableCell' , FCKLang.DlgCellTitle , 'dialog/fck_tablecell.html' , 550, 250 ) ; break ; |
case 'UniversalKey' : oCommand = new FCKDialogCommand( 'UniversalKey', FCKLang.UniversalKeyboard , 'dialog/fck_universalkey.html', 415, 300 ) ; break ; |
case 'Style' : oCommand = new FCKStyleCommand() ; break ; |
case 'FontName' : oCommand = new FCKFontNameCommand() ; break ; |
case 'FontSize' : oCommand = new FCKFontSizeCommand() ; break ; |
case 'FontFormat' : oCommand = new FCKFormatBlockCommand() ; break ; |
case 'Source' : oCommand = new FCKSourceCommand() ; break ; |
case 'Preview' : oCommand = new FCKPreviewCommand() ; break ; |
case 'Save' : oCommand = new FCKSaveCommand() ; break ; |
case 'NewPage' : oCommand = new FCKNewPageCommand() ; break ; |
case 'PageBreak' : oCommand = new FCKPageBreakCommand() ; break ; |
case 'TextColor' : oCommand = new FCKTextColorCommand('ForeColor') ; break ; |
case 'BGColor' : oCommand = new FCKTextColorCommand('BackColor') ; break ; |
case 'PasteText' : oCommand = new FCKPastePlainTextCommand() ; break ; |
case 'PasteWord' : oCommand = new FCKPasteWordCommand() ; break ; |
case 'TableInsertRow' : oCommand = new FCKTableCommand('TableInsertRow') ; break ; |
case 'TableDeleteRows' : oCommand = new FCKTableCommand('TableDeleteRows') ; break ; |
case 'TableInsertColumn' : oCommand = new FCKTableCommand('TableInsertColumn') ; break ; |
case 'TableDeleteColumns' : oCommand = new FCKTableCommand('TableDeleteColumns') ; break ; |
case 'TableInsertCell' : oCommand = new FCKTableCommand('TableInsertCell') ; break ; |
case 'TableDeleteCells' : oCommand = new FCKTableCommand('TableDeleteCells') ; break ; |
case 'TableMergeCells' : oCommand = new FCKTableCommand('TableMergeCells') ; break ; |
case 'TableSplitCell' : oCommand = new FCKTableCommand('TableSplitCell') ; break ; |
case 'TableDelete' : oCommand = new FCKTableCommand('TableDelete') ; break ; |
case 'Form' : oCommand = new FCKDialogCommand( 'Form' , FCKLang.Form , 'dialog/fck_form.html' , 380, 230 ) ; break ; |
case 'Checkbox' : oCommand = new FCKDialogCommand( 'Checkbox' , FCKLang.Checkbox , 'dialog/fck_checkbox.html' , 380, 230 ) ; break ; |
case 'Radio' : oCommand = new FCKDialogCommand( 'Radio' , FCKLang.RadioButton , 'dialog/fck_radiobutton.html' , 380, 230 ) ; break ; |
case 'TextField' : oCommand = new FCKDialogCommand( 'TextField' , FCKLang.TextField , 'dialog/fck_textfield.html' , 380, 230 ) ; break ; |
case 'Textarea' : oCommand = new FCKDialogCommand( 'Textarea' , FCKLang.Textarea , 'dialog/fck_textarea.html' , 380, 230 ) ; break ; |
case 'HiddenField' : oCommand = new FCKDialogCommand( 'HiddenField', FCKLang.HiddenField , 'dialog/fck_hiddenfield.html' , 380, 230 ) ; break ; |
case 'Button' : oCommand = new FCKDialogCommand( 'Button' , FCKLang.Button , 'dialog/fck_button.html' , 380, 230 ) ; break ; |
case 'Select' : oCommand = new FCKDialogCommand( 'Select' , FCKLang.SelectionField, 'dialog/fck_select.html' , 400, 380 ) ; break ; |
case 'ImageButton' : oCommand = new FCKDialogCommand( 'ImageButton', FCKLang.ImageButton , 'dialog/fck_image.html?ImageButton', 450, 400 ) ; break ; |
case 'SpellCheck' : oCommand = new FCKSpellCheckCommand() ; break ; |
case 'FitWindow' : oCommand = new FCKFitWindow() ; break ; |
case 'Undo' : oCommand = new FCKUndoCommand() ; break ; |
case 'Redo' : oCommand = new FCKRedoCommand() ; break ; |
// Generic Undefined command (usually used when a command is under development). |
case 'Undefined' : oCommand = new FCKUndefinedCommand() ; break ; |
// By default we assume that it is a named command. |
default: |
if ( FCKRegexLib.NamedCommands.test( commandName ) ) |
oCommand = new FCKNamedCommand( commandName ) ; |
else |
{ |
alert( FCKLang.UnknownCommand.replace( /%1/g, commandName ) ) ; |
return null ; |
} |
} |
FCKCommands.LoadedCommands[ commandName ] = oCommand ; |
return oCommand ; |
} |
// Gets the state of the "Document Properties" button. It must be enabled only |
// when "Full Page" editing is available. |
FCKCommands.GetFullPageState = function() |
{ |
return FCKConfig.FullPage ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/internals/fckxhtmlentities.js |
---|
New file |
0,0 → 1,340 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckxhtmlentities.js |
* This file define the HTML entities handled by the editor. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
var FCKXHtmlEntities = new Object() ; |
FCKXHtmlEntities.Initialize = function() |
{ |
if ( FCKXHtmlEntities.Entities ) |
return ; |
var sChars = '' ; |
if ( FCKConfig.ProcessHTMLEntities ) |
{ |
FCKXHtmlEntities.Entities = { |
// Latin-1 Entities |
' ':'nbsp', |
'¡':'iexcl', |
'¢':'cent', |
'£':'pound', |
'¤':'curren', |
'¥':'yen', |
'¦':'brvbar', |
'§':'sect', |
'¨':'uml', |
'©':'copy', |
'ª':'ordf', |
'«':'laquo', |
'¬':'not', |
'':'shy', |
'®':'reg', |
'¯':'macr', |
'°':'deg', |
'±':'plusmn', |
'²':'sup2', |
'³':'sup3', |
'´':'acute', |
'µ':'micro', |
'¶':'para', |
'·':'middot', |
'¸':'cedil', |
'¹':'sup1', |
'º':'ordm', |
'»':'raquo', |
'¼':'frac14', |
'½':'frac12', |
'¾':'frac34', |
'¿':'iquest', |
'×':'times', |
'÷':'divide', |
// Symbols |
'ƒ':'fnof', |
'•':'bull', |
'…':'hellip', |
'′':'prime', |
'″':'Prime', |
'‾':'oline', |
'⁄':'frasl', |
'℘':'weierp', |
'ℑ':'image', |
'ℜ':'real', |
'™':'trade', |
'ℵ':'alefsym', |
'←':'larr', |
'↑':'uarr', |
'→':'rarr', |
'↓':'darr', |
'↔':'harr', |
'↵':'crarr', |
'⇐':'lArr', |
'⇑':'uArr', |
'⇒':'rArr', |
'⇓':'dArr', |
'⇔':'hArr', |
'∀':'forall', |
'∂':'part', |
'∃':'exist', |
'∅':'empty', |
'∇':'nabla', |
'∈':'isin', |
'∉':'notin', |
'∋':'ni', |
'∏':'prod', |
'∑':'sum', |
'−':'minus', |
'∗':'lowast', |
'√':'radic', |
'∝':'prop', |
'∞':'infin', |
'∠':'ang', |
'∧':'and', |
'∨':'or', |
'∩':'cap', |
'∪':'cup', |
'∫':'int', |
'∴':'there4', |
'∼':'sim', |
'≅':'cong', |
'≈':'asymp', |
'≠':'ne', |
'≡':'equiv', |
'≤':'le', |
'≥':'ge', |
'⊂':'sub', |
'⊃':'sup', |
'⊄':'nsub', |
'⊆':'sube', |
'⊇':'supe', |
'⊕':'oplus', |
'⊗':'otimes', |
'⊥':'perp', |
'⋅':'sdot', |
'◊':'loz', |
'♠':'spades', |
'♣':'clubs', |
'♥':'hearts', |
'♦':'diams', |
// Other Special Characters |
'"':'quot', |
// '&':'amp', // This entity is automatically handled by the XHTML parser. |
// '<':'lt', // This entity is automatically handled by the XHTML parser. |
// '>':'gt', // This entity is automatically handled by the XHTML parser. |
'ˆ':'circ', |
'˜':'tilde', |
' ':'ensp', |
' ':'emsp', |
' ':'thinsp', |
'':'zwnj', |
'':'zwj', |
'':'lrm', |
'':'rlm', |
'–':'ndash', |
'—':'mdash', |
'‘':'lsquo', |
'’':'rsquo', |
'‚':'sbquo', |
'“':'ldquo', |
'”':'rdquo', |
'„':'bdquo', |
'†':'dagger', |
'‡':'Dagger', |
'‰':'permil', |
'‹':'lsaquo', |
'›':'rsaquo', |
'¤':'euro' |
} ; |
// Process Base Entities. |
for ( var e in FCKXHtmlEntities.Entities ) |
sChars += e ; |
// Include Latin Letters Entities. |
if ( FCKConfig.IncludeLatinEntities ) |
{ |
var oEntities = { |
'À':'Agrave', |
'Á':'Aacute', |
'Â':'Acirc', |
'Ã':'Atilde', |
'Ä':'Auml', |
'Å':'Aring', |
'Æ':'AElig', |
'Ç':'Ccedil', |
'È':'Egrave', |
'É':'Eacute', |
'Ê':'Ecirc', |
'Ë':'Euml', |
'Ì':'Igrave', |
'Í':'Iacute', |
'Î':'Icirc', |
'Ï':'Iuml', |
'Ð':'ETH', |
'Ñ':'Ntilde', |
'Ò':'Ograve', |
'Ó':'Oacute', |
'Ô':'Ocirc', |
'Õ':'Otilde', |
'Ö':'Ouml', |
'Ø':'Oslash', |
'Ù':'Ugrave', |
'Ú':'Uacute', |
'Û':'Ucirc', |
'Ü':'Uuml', |
'Ý':'Yacute', |
'Þ':'THORN', |
'ß':'szlig', |
'à':'agrave', |
'á':'aacute', |
'â':'acirc', |
'ã':'atilde', |
'ä':'auml', |
'å':'aring', |
'æ':'aelig', |
'ç':'ccedil', |
'è':'egrave', |
'é':'eacute', |
'ê':'ecirc', |
'ë':'euml', |
'ì':'igrave', |
'í':'iacute', |
'î':'icirc', |
'ï':'iuml', |
'ð':'eth', |
'ñ':'ntilde', |
'ò':'ograve', |
'ó':'oacute', |
'ô':'ocirc', |
'õ':'otilde', |
'ö':'ouml', |
'ø':'oslash', |
'ù':'ugrave', |
'ú':'uacute', |
'û':'ucirc', |
'ü':'uuml', |
'ý':'yacute', |
'þ':'thorn', |
'ÿ':'yuml', |
'Œ':'OElig', |
'œ':'oelig', |
'Š':'Scaron', |
'š':'scaron', |
'¾':'Yuml' |
} ; |
for ( var e in oEntities ) |
{ |
FCKXHtmlEntities.Entities[ e ] = oEntities[ e ] ; |
sChars += e ; |
} |
oEntities = null ; |
} |
// Include Greek Letters Entities. |
if ( FCKConfig.IncludeGreekEntities ) |
{ |
var oEntities = { |
'Α':'Alpha', |
'Β':'Beta', |
'Γ':'Gamma', |
'Δ':'Delta', |
'Ε':'Epsilon', |
'Ζ':'Zeta', |
'Η':'Eta', |
'Θ':'Theta', |
'Ι':'Iota', |
'Κ':'Kappa', |
'Λ':'Lambda', |
'Μ':'Mu', |
'Ν':'Nu', |
'Ξ':'Xi', |
'Ο':'Omicron', |
'Π':'Pi', |
'Ρ':'Rho', |
'Σ':'Sigma', |
'Τ':'Tau', |
'Υ':'Upsilon', |
'Φ':'Phi', |
'Χ':'Chi', |
'Ψ':'Psi', |
'Ω':'Omega', |
'α':'alpha', |
'β':'beta', |
'γ':'gamma', |
'δ':'delta', |
'ε':'epsilon', |
'ζ':'zeta', |
'η':'eta', |
'θ':'theta', |
'ι':'iota', |
'κ':'kappa', |
'λ':'lambda', |
'μ':'mu', |
'ν':'nu', |
'ξ':'xi', |
'ο':'omicron', |
'π':'pi', |
'ρ':'rho', |
'ς':'sigmaf', |
'σ':'sigma', |
'τ':'tau', |
'υ':'upsilon', |
'φ':'phi', |
'χ':'chi', |
'ψ':'psi', |
'ω':'omega' |
} ; |
for ( var e in oEntities ) |
{ |
FCKXHtmlEntities.Entities[ e ] = oEntities[ e ] ; |
sChars += e ; |
} |
oEntities = null ; |
} |
} |
else |
{ |
FCKXHtmlEntities.Entities = {} ; |
// Even if we are not processing the entities, we must render the |
// correctly. As we don't want HTML entities, let's use its numeric |
// representation ( ). |
sChars = ' ' ; |
} |
// Create the Regex used to find entities in the text. |
var sRegexPattern = '[' + sChars + ']' ; |
if ( FCKConfig.ProcessNumericEntities ) |
sRegexPattern = '[^ -~]|' + sRegexPattern ; |
var sAdditional = FCKConfig.AdditionalNumericEntities ; |
if ( sAdditional || sAdditional.length > 0 ) |
sRegexPattern += '|' + FCKConfig.AdditionalNumericEntities ; |
FCKXHtmlEntities.EntitiesRegex = new RegExp( sRegexPattern, 'g' ) ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/internals/fcktablehandler_ie.js |
---|
New file |
0,0 → 1,54 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fcktablehandler_ie.js |
* Manage table operations (IE specific). |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
FCKTableHandler.GetSelectedCells = function() |
{ |
var aCells = new Array() ; |
var oRange = FCK.EditorDocument.selection.createRange() ; |
// var oParent = oRange.parentElement() ; |
var oParent = FCKSelection.GetParentElement() ; |
if ( oParent && oParent.tagName.Equals( 'TD', 'TH' ) ) |
aCells[0] = oParent ; |
else |
{ |
var oParent = FCKSelection.MoveToAncestorNode( "TABLE" ) ; |
if ( oParent ) |
{ |
// Loops throw all cells checking if the cell is, or part of it, is inside the selection |
// and then add it to the selected cells collection. |
for ( var i = 0 ; i < oParent.cells.length ; i++ ) |
{ |
var oCellRange = FCK.EditorDocument.selection.createRange() ; |
oCellRange.moveToElementText( oParent.cells[i] ) ; |
if ( oRange.inRange( oCellRange ) |
|| ( oRange.compareEndPoints('StartToStart',oCellRange) >= 0 && oRange.compareEndPoints('StartToEnd',oCellRange) <= 0 ) |
|| ( oRange.compareEndPoints('EndToStart',oCellRange) >= 0 && oRange.compareEndPoints('EndToEnd',oCellRange) <= 0 ) ) |
{ |
aCells[aCells.length] = oParent.cells[i] ; |
} |
} |
} |
} |
return aCells ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/internals/fcktoolbaritems.js |
---|
New file |
0,0 → 1,118 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fcktoolbaritems.js |
* Toolbar items definitions. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
var FCKToolbarItems = new Object() ; |
FCKToolbarItems.LoadedItems = new Object() ; |
FCKToolbarItems.RegisterItem = function( itemName, item ) |
{ |
this.LoadedItems[ itemName ] = item ; |
} |
FCKToolbarItems.GetItem = function( itemName ) |
{ |
var oItem = FCKToolbarItems.LoadedItems[ itemName ] ; |
if ( oItem ) |
return oItem ; |
switch ( itemName ) |
{ |
case 'Source' : oItem = new FCKToolbarButton( 'Source' , FCKLang.Source, null, FCK_TOOLBARITEM_ICONTEXT, true, true, 1 ) ; break ; |
case 'DocProps' : oItem = new FCKToolbarButton( 'DocProps' , FCKLang.DocProps, null, null, null, null, 2 ) ; break ; |
case 'Save' : oItem = new FCKToolbarButton( 'Save' , FCKLang.Save, null, null, true, null, 3 ) ; break ; |
case 'NewPage' : oItem = new FCKToolbarButton( 'NewPage' , FCKLang.NewPage, null, null, true, null, 4 ) ; break ; |
case 'Preview' : oItem = new FCKToolbarButton( 'Preview' , FCKLang.Preview, null, null, true, null, 5 ) ; break ; |
case 'Templates' : oItem = new FCKToolbarButton( 'Templates' , FCKLang.Templates, null, null, null, null, 6 ) ; break ; |
case 'About' : oItem = new FCKToolbarButton( 'About' , FCKLang.About, null, null, true, null, 47 ) ; break ; |
case 'Cut' : oItem = new FCKToolbarButton( 'Cut' , FCKLang.Cut, null, null, false, true, 7 ) ; break ; |
case 'Copy' : oItem = new FCKToolbarButton( 'Copy' , FCKLang.Copy, null, null, false, true, 8 ) ; break ; |
case 'Paste' : oItem = new FCKToolbarButton( 'Paste' , FCKLang.Paste, null, null, false, true, 9 ) ; break ; |
case 'PasteText' : oItem = new FCKToolbarButton( 'PasteText' , FCKLang.PasteText, null, null, false, true, 10 ) ; break ; |
case 'PasteWord' : oItem = new FCKToolbarButton( 'PasteWord' , FCKLang.PasteWord, null, null, false, true, 11 ) ; break ; |
case 'Print' : oItem = new FCKToolbarButton( 'Print' , FCKLang.Print, null, null, false, true, 12 ) ; break ; |
case 'SpellCheck' : oItem = new FCKToolbarButton( 'SpellCheck', FCKLang.SpellCheck, null, null, null, null, 13 ) ; break ; |
case 'Undo' : oItem = new FCKToolbarButton( 'Undo' , FCKLang.Undo, null, null, false, true, 14 ) ; break ; |
case 'Redo' : oItem = new FCKToolbarButton( 'Redo' , FCKLang.Redo, null, null, false, true, 15 ) ; break ; |
case 'SelectAll' : oItem = new FCKToolbarButton( 'SelectAll' , FCKLang.SelectAll, null, null, null, null, 18 ) ; break ; |
case 'RemoveFormat' : oItem = new FCKToolbarButton( 'RemoveFormat', FCKLang.RemoveFormat, null, null, false, true, 19 ) ; break ; |
case 'FitWindow' : oItem = new FCKToolbarButton( 'FitWindow' , FCKLang.FitWindow, null, null, true, true, 66 ) ; break ; |
case 'Bold' : oItem = new FCKToolbarButton( 'Bold' , FCKLang.Bold, null, null, false, true, 20 ) ; break ; |
case 'Italic' : oItem = new FCKToolbarButton( 'Italic' , FCKLang.Italic, null, null, false, true, 21 ) ; break ; |
case 'Underline' : oItem = new FCKToolbarButton( 'Underline' , FCKLang.Underline, null, null, false, true, 22 ) ; break ; |
case 'StrikeThrough' : oItem = new FCKToolbarButton( 'StrikeThrough' , FCKLang.StrikeThrough, null, null, false, true, 23 ) ; break ; |
case 'Subscript' : oItem = new FCKToolbarButton( 'Subscript' , FCKLang.Subscript, null, null, false, true, 24 ) ; break ; |
case 'Superscript' : oItem = new FCKToolbarButton( 'Superscript' , FCKLang.Superscript, null, null, false, true, 25 ) ; break ; |
case 'OrderedList' : oItem = new FCKToolbarButton( 'InsertOrderedList' , FCKLang.NumberedListLbl, FCKLang.NumberedList, null, false, true, 26 ) ; break ; |
case 'UnorderedList' : oItem = new FCKToolbarButton( 'InsertUnorderedList' , FCKLang.BulletedListLbl, FCKLang.BulletedList, null, false, true, 27 ) ; break ; |
case 'Outdent' : oItem = new FCKToolbarButton( 'Outdent' , FCKLang.DecreaseIndent, null, null, false, true, 28 ) ; break ; |
case 'Indent' : oItem = new FCKToolbarButton( 'Indent' , FCKLang.IncreaseIndent, null, null, false, true, 29 ) ; break ; |
case 'Link' : oItem = new FCKToolbarButton( 'Link' , FCKLang.InsertLinkLbl, FCKLang.InsertLink, null, false, true, 34 ) ; break ; |
case 'Unlink' : oItem = new FCKToolbarButton( 'Unlink' , FCKLang.RemoveLink, null, null, false, true, 35 ) ; break ; |
case 'Anchor' : oItem = new FCKToolbarButton( 'Anchor' , FCKLang.Anchor, null, null, null, null, 36 ) ; break ; |
case 'Image' : oItem = new FCKToolbarButton( 'Image' , FCKLang.InsertImageLbl, FCKLang.InsertImage, null, false, true, 37 ) ; break ; |
case 'Flash' : oItem = new FCKToolbarButton( 'Flash' , FCKLang.InsertFlashLbl, FCKLang.InsertFlash, null, false, true, 38 ) ; break ; |
case 'Table' : oItem = new FCKToolbarButton( 'Table' , FCKLang.InsertTableLbl, FCKLang.InsertTable, null, false, true, 39 ) ; break ; |
case 'SpecialChar' : oItem = new FCKToolbarButton( 'SpecialChar' , FCKLang.InsertSpecialCharLbl, FCKLang.InsertSpecialChar, null, false, true, 42 ) ; break ; |
case 'Smiley' : oItem = new FCKToolbarButton( 'Smiley' , FCKLang.InsertSmileyLbl, FCKLang.InsertSmiley, null, false, true, 41 ) ; break ; |
case 'PageBreak' : oItem = new FCKToolbarButton( 'PageBreak' , FCKLang.PageBreakLbl, FCKLang.PageBreak, null, false, true, 43 ) ; break ; |
case 'UniversalKey' : oItem = new FCKToolbarButton( 'UniversalKey' , FCKLang.UniversalKeyboard , null, null, false, true, 44) ; break ; |
case 'Rule' : oItem = new FCKToolbarButton( 'InsertHorizontalRule', FCKLang.InsertLineLbl, FCKLang.InsertLine, null, false, true, 40 ) ; break ; |
case 'JustifyLeft' : oItem = new FCKToolbarButton( 'JustifyLeft' , FCKLang.LeftJustify, null, null, false, true, 30 ) ; break ; |
case 'JustifyCenter' : oItem = new FCKToolbarButton( 'JustifyCenter' , FCKLang.CenterJustify, null, null, false, true, 31 ) ; break ; |
case 'JustifyRight' : oItem = new FCKToolbarButton( 'JustifyRight' , FCKLang.RightJustify, null, null, false, true, 32 ) ; break ; |
case 'JustifyFull' : oItem = new FCKToolbarButton( 'JustifyFull' , FCKLang.BlockJustify, null, null, false, true, 33 ) ; break ; |
case 'Style' : oItem = new FCKToolbarStyleCombo() ; break ; |
case 'FontName' : oItem = new FCKToolbarFontsCombo() ; break ; |
case 'FontSize' : oItem = new FCKToolbarFontSizeCombo() ; break ; |
case 'FontFormat' : oItem = new FCKToolbarFontFormatCombo() ; break ; |
case 'TextColor' : oItem = new FCKToolbarPanelButton( 'TextColor', FCKLang.TextColor, null, null, 45 ) ; break ; |
case 'BGColor' : oItem = new FCKToolbarPanelButton( 'BGColor' , FCKLang.BGColor, null, null, 46 ) ; break ; |
case 'Find' : oItem = new FCKToolbarButton( 'Find' , FCKLang.Find, null, null, null, null, 16 ) ; break ; |
case 'Replace' : oItem = new FCKToolbarButton( 'Replace' , FCKLang.Replace, null, null, null, null, 17 ) ; break ; |
case 'Form' : oItem = new FCKToolbarButton( 'Form' , FCKLang.Form, null, null, null, null, 48 ) ; break ; |
case 'Checkbox' : oItem = new FCKToolbarButton( 'Checkbox' , FCKLang.Checkbox, null, null, null, null, 49 ) ; break ; |
case 'Radio' : oItem = new FCKToolbarButton( 'Radio' , FCKLang.RadioButton, null, null, null, null, 50 ) ; break ; |
case 'TextField' : oItem = new FCKToolbarButton( 'TextField' , FCKLang.TextField, null, null, null, null, 51 ) ; break ; |
case 'Textarea' : oItem = new FCKToolbarButton( 'Textarea' , FCKLang.Textarea, null, null, null, null, 52 ) ; break ; |
case 'HiddenField' : oItem = new FCKToolbarButton( 'HiddenField' , FCKLang.HiddenField, null, null, null, null, 56 ) ; break ; |
case 'Button' : oItem = new FCKToolbarButton( 'Button' , FCKLang.Button, null, null, null, null, 54 ) ; break ; |
case 'Select' : oItem = new FCKToolbarButton( 'Select' , FCKLang.SelectionField, null, null, null, null, 53 ) ; break ; |
case 'ImageButton' : oItem = new FCKToolbarButton( 'ImageButton' , FCKLang.ImageButton, null, null, null, null, 55 ) ; break ; |
default: |
alert( FCKLang.UnknownToolbarItem.replace( /%1/g, itemName ) ) ; |
return null ; |
} |
FCKToolbarItems.LoadedItems[ itemName ] = oItem ; |
return oItem ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/internals/fckxhtml_gecko.js |
---|
New file |
0,0 → 1,62 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckxhtml_gecko.js |
* Defines the FCKXHtml object, responsible for the XHTML operations. |
* Gecko specific. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
FCKXHtml._GetMainXmlString = function() |
{ |
// Create the XMLSerializer. |
var oSerializer = new XMLSerializer() ; |
// Return the serialized XML as a string. |
return oSerializer.serializeToString( this.MainNode ) ; |
} |
FCKXHtml._AppendAttributes = function( xmlNode, htmlNode, node ) |
{ |
var aAttributes = htmlNode.attributes ; |
for ( var n = 0 ; n < aAttributes.length ; n++ ) |
{ |
var oAttribute = aAttributes[n] ; |
if ( oAttribute.specified ) |
{ |
var sAttName = oAttribute.nodeName.toLowerCase() ; |
var sAttValue ; |
// Ignore any attribute starting with "_fck". |
if ( sAttName.startsWith( '_fck' ) ) |
continue ; |
// There is a bug in Mozilla that returns '_moz_xxx' attributes as specified. |
else if ( sAttName.indexOf( '_moz' ) == 0 ) |
continue ; |
// There are one cases (on Gecko) when the oAttribute.nodeValue must be used: |
// - for the "class" attribute |
else if ( sAttName == 'class' ) |
sAttValue = oAttribute.nodeValue ; |
// XHTML doens't support attribute minimization like "CHECKED". It must be trasformed to cheched="checked". |
else if ( oAttribute.nodeValue === true ) |
sAttValue = sAttName ; |
else |
sAttValue = htmlNode.getAttribute( sAttName, 2 ) ; // We must use getAttribute to get it exactly as it is defined. |
this._AppendAttribute( node, sAttName, sAttValue ) ; |
} |
} |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/internals/fckconfig.js |
---|
New file |
0,0 → 1,195 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckconfig.js |
* Creates and initializes the FCKConfig object. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
var FCKConfig = FCK.Config = new Object() ; |
/* |
For the next major version (probably 3.0) we should move all this stuff to |
another dedicated object and leave FCKConfig as a holder object for settings only). |
*/ |
// Editor Base Path |
if ( document.location.protocol == 'file:' ) |
{ |
FCKConfig.BasePath = unescape( document.location.pathname.substr(1) ) ; |
FCKConfig.BasePath = FCKConfig.BasePath.replace( /\\/gi, '/' ) ; |
FCKConfig.BasePath = 'file://' + FCKConfig.BasePath.substring(0,FCKConfig.BasePath.lastIndexOf('/')+1) ; |
FCKConfig.FullBasePath = FCKConfig.BasePath ; |
} |
else |
{ |
FCKConfig.BasePath = document.location.pathname.substring(0,document.location.pathname.lastIndexOf('/')+1) ; |
FCKConfig.FullBasePath = document.location.protocol + '//' + document.location.host + FCKConfig.BasePath ; |
} |
FCKConfig.EditorPath = FCKConfig.BasePath.replace( /editor\/$/, '' ) ; |
// There is a bug in Gecko. If the editor is hidden on startup, an error is |
// thrown when trying to get the screen dimentions. |
try |
{ |
FCKConfig.ScreenWidth = screen.width ; |
FCKConfig.ScreenHeight = screen.height ; |
} |
catch (e) |
{ |
FCKConfig.ScreenWidth = 800 ; |
FCKConfig.ScreenHeight = 600 ; |
} |
// Override the actual configuration values with the values passed throw the |
// hidden field "<InstanceName>___Config". |
FCKConfig.ProcessHiddenField = function() |
{ |
this.PageConfig = new Object() ; |
// Get the hidden field. |
var oConfigField = window.parent.document.getElementById( FCK.Name + '___Config' ) ; |
// Do nothing if the config field was not defined. |
if ( ! oConfigField ) return ; |
var aCouples = oConfigField.value.split('&') ; |
for ( var i = 0 ; i < aCouples.length ; i++ ) |
{ |
if ( aCouples[i].length == 0 ) |
continue ; |
var aConfig = aCouples[i].split( '=' ) ; |
var sKey = unescape( aConfig[0] ) ; |
var sVal = unescape( aConfig[1] ) ; |
if ( sKey == 'CustomConfigurationsPath' ) // The Custom Config File path must be loaded immediately. |
FCKConfig[ sKey ] = sVal ; |
else if ( sVal.toLowerCase() == "true" ) // If it is a boolean TRUE. |
this.PageConfig[ sKey ] = true ; |
else if ( sVal.toLowerCase() == "false" ) // If it is a boolean FALSE. |
this.PageConfig[ sKey ] = false ; |
else if ( sVal.length > 0 && !isNaN( sVal ) ) // If it is a number. |
this.PageConfig[ sKey ] = parseInt( sVal ) ; |
else // In any other case it is a string. |
this.PageConfig[ sKey ] = sVal ; |
} |
} |
function FCKConfig_LoadPageConfig() |
{ |
var oPageConfig = FCKConfig.PageConfig ; |
for ( var sKey in oPageConfig ) |
FCKConfig[ sKey ] = oPageConfig[ sKey ] ; |
} |
function FCKConfig_PreProcess() |
{ |
var oConfig = FCKConfig ; |
// Force debug mode if fckdebug=true in the QueryString (main page). |
if ( oConfig.AllowQueryStringDebug ) |
{ |
try |
{ |
if ( (/fckdebug=true/i).test( window.top.location.search ) ) |
oConfig.Debug = true ; |
} |
catch (e) { /* Ignore it. Much probably we are inside a FRAME where the "top" is in another domain (security error). */ } |
} |
// Certifies that the "PluginsPath" configuration ends with a slash. |
if ( !oConfig.PluginsPath.endsWith('/') ) |
oConfig.PluginsPath += '/' ; |
// EditorAreaCSS accepts an array of paths or a single path (as string). |
// In the last case, transform it in an array. |
if ( typeof( oConfig.EditorAreaCSS ) == 'string' ) |
oConfig.EditorAreaCSS = [ oConfig.EditorAreaCSS ] ; |
var sComboPreviewCSS = oConfig.ToolbarComboPreviewCSS ; |
if ( !sComboPreviewCSS || sComboPreviewCSS.length == 0 ) |
oConfig.ToolbarComboPreviewCSS = oConfig.EditorAreaCSS ; |
else if ( typeof( sComboPreviewCSS ) == 'string' ) |
oConfig.ToolbarComboPreviewCSS = [ sComboPreviewCSS ] ; |
} |
// Define toolbar sets collection. |
FCKConfig.ToolbarSets = new Object() ; |
// Defines the plugins collection. |
FCKConfig.Plugins = new Object() ; |
FCKConfig.Plugins.Items = new Array() ; |
FCKConfig.Plugins.Add = function( name, langs, path ) |
{ |
FCKConfig.Plugins.Items.AddItem( [name, langs, path] ) ; |
} |
// FCKConfig.ProtectedSource: object that holds a collection of Regular |
// Expressions that defined parts of the raw HTML that must remain untouched |
// like custom tags, scripts, server side code, etc... |
FCKConfig.ProtectedSource = new Object() ; |
// Initialize the regex array with the default ones. |
FCKConfig.ProtectedSource.RegexEntries = [ |
// First of any other protection, we must protect all comments to avoid |
// loosing them (of course, IE related). |
/<!--[\s\S]*?-->/g , |
// Script tags will also be forced to be protected, otherwise IE will execute them. |
/<script[\s\S]*?<\/script>/gi, |
// <noscript> tags (get lost in IE and messed up in FF). |
/<noscript[\s\S]*?<\/noscript>/gi |
] ; |
FCKConfig.ProtectedSource.Add = function( regexPattern ) |
{ |
this.RegexEntries.AddItem( regexPattern ) ; |
} |
FCKConfig.ProtectedSource.Protect = function( html ) |
{ |
function _Replace( protectedSource ) |
{ |
var index = FCKTempBin.AddElement( protectedSource ) ; |
return '<!--{PS..' + index + '}-->' ; |
} |
for ( var i = 0 ; i < this.RegexEntries.length ; i++ ) |
{ |
html = html.replace( this.RegexEntries[i], _Replace ) ; |
} |
return html ; |
} |
FCKConfig.ProtectedSource.Revert = function( html, clearBin ) |
{ |
function _Replace( m, opener, index ) |
{ |
var protectedValue = clearBin ? FCKTempBin.RemoveElement( index ) : FCKTempBin.Elements[ index ] ; |
// There could be protected source inside another one. |
return FCKConfig.ProtectedSource.Revert( protectedValue, clearBin ) ; |
} |
return html.replace( /(<|<)!--\{PS..(\d+)\}--(>|>)/g, _Replace ) ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/internals/fck_1_gecko.js |
---|
New file |
0,0 → 1,112 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fck_1_gecko.js |
* This is the first part of the "FCK" object creation. This is the main |
* object that represents an editor instance. |
* (Gecko specific implementations) |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
FCK.Description = "FCKeditor for Gecko Browsers" ; |
FCK.InitializeBehaviors = function() |
{ |
// When calling "SetHTML", the editing area IFRAME gets a fixed height. So we must recaulculate it. |
Window_OnResize() ; |
FCKFocusManager.AddWindow( this.EditorWindow ) ; |
// Handle pasting operations. |
var oOnKeyDown = function( e ) |
{ |
var bPrevent ; |
if ( e.ctrlKey && !e.shiftKey && !e.altKey ) |
{ |
switch ( e.which ) |
{ |
case 66 : // B |
case 98 : // b |
FCK.ExecuteNamedCommand( 'bold' ) ; bPrevent = true ; |
break; |
case 105 : // i |
case 73 : // I |
FCK.ExecuteNamedCommand( 'italic' ) ; bPrevent = true ; |
break; |
case 117 : // u |
case 85 : // U |
FCK.ExecuteNamedCommand( 'underline' ) ; bPrevent = true ; |
break; |
case 86 : // V |
case 118 : // v |
bPrevent = ( FCK.Status != FCK_STATUS_COMPLETE || !FCK.Events.FireEvent( "OnPaste" ) ) ; |
break ; |
} |
} |
else if ( e.shiftKey && !e.ctrlKey && !e.altKey && e.keyCode == 45 ) // SHIFT + <INS> |
bPrevent = ( FCK.Status != FCK_STATUS_COMPLETE || !FCK.Events.FireEvent( "OnPaste" ) ) ; |
if ( bPrevent ) |
{ |
e.preventDefault() ; |
e.stopPropagation() ; |
} |
} |
this.EditorDocument.addEventListener( 'keypress', oOnKeyDown, true ) ; |
this.ExecOnSelectionChange = function() |
{ |
FCK.Events.FireEvent( "OnSelectionChange" ) ; |
} |
this.ExecOnSelectionChangeTimer = function() |
{ |
if ( FCK.LastOnChangeTimer ) |
window.clearTimeout( FCK.LastOnChangeTimer ) ; |
FCK.LastOnChangeTimer = window.setTimeout( FCK.ExecOnSelectionChange, 100 ) ; |
} |
this.EditorDocument.addEventListener( 'mouseup', this.ExecOnSelectionChange, false ) ; |
// On Gecko, firing the "OnSelectionChange" event on every key press started to be too much |
// slow. So, a timer has been implemented to solve performance issues when tipying to quickly. |
this.EditorDocument.addEventListener( 'keyup', this.ExecOnSelectionChangeTimer, false ) ; |
this._DblClickListener = function( e ) |
{ |
FCK.OnDoubleClick( e.target ) ; |
e.stopPropagation() ; |
} |
this.EditorDocument.addEventListener( 'dblclick', this._DblClickListener, true ) ; |
// Reset the context menu. |
FCK.ContextMenu._InnerContextMenu.SetMouseClickWindow( FCK.EditorWindow ) ; |
FCK.ContextMenu._InnerContextMenu.AttachToElement( FCK.EditorDocument ) ; |
} |
FCK.MakeEditable = function() |
{ |
this.EditingArea.MakeEditable() ; |
} |
// Disable the context menu in the editor (outside the editing area). |
function Document_OnContextMenu( e ) |
{ |
if ( !e.target._FCKShowContextMenu ) |
e.preventDefault() ; |
} |
document.oncontextmenu = Document_OnContextMenu ; |
/branches/v1.0-menes/api/fckeditor/editor/_source/internals/fckdialog_gecko.js |
---|
New file |
0,0 → 1,101 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckdialog_gecko.js |
* Dialog windows operations. (Gecko specific implementations) |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
FCKDialog.Show = function( dialogInfo, dialogName, pageUrl, dialogWidth, dialogHeight, parentWindow, resizable ) |
{ |
var iTop = (FCKConfig.ScreenHeight - dialogHeight) / 2 ; |
var iLeft = (FCKConfig.ScreenWidth - dialogWidth) / 2 ; |
var sOption = "location=no,menubar=no,toolbar=no,dependent=yes,dialog=yes,minimizable=no,modal=yes,alwaysRaised=yes" + |
",resizable=" + ( resizable ? 'yes' : 'no' ) + |
",width=" + dialogWidth + |
",height=" + dialogHeight + |
",top=" + iTop + |
",left=" + iLeft ; |
if ( !parentWindow ) |
parentWindow = window ; |
FCKFocusManager.Lock() ; |
var oWindow = parentWindow.open( '', 'FCKeditorDialog_' + dialogName, sOption, true ) ; |
if ( !oWindow ) |
{ |
alert( FCKLang.DialogBlocked ) ; |
FCKFocusManager.Unlock() ; |
return ; |
} |
oWindow.moveTo( iLeft, iTop ) ; |
oWindow.resizeTo( dialogWidth, dialogHeight ) ; |
oWindow.focus() ; |
oWindow.location.href = pageUrl ; |
oWindow.dialogArguments = dialogInfo ; |
// On some Gecko browsers (probably over slow connections) the |
// "dialogArguments" are not set to the target window so we must |
// put it in the opener window so it can be used by the target one. |
parentWindow.FCKLastDialogInfo = dialogInfo ; |
this.Window = oWindow ; |
// Try/Catch must be used to avoit an error when using a frameset |
// on a different domain: |
// "Permission denied to get property Window.releaseEvents". |
try |
{ |
window.top.captureEvents( Event.CLICK | Event.MOUSEDOWN | Event.MOUSEUP | Event.FOCUS ) ; |
window.top.parent.addEventListener( 'mousedown', this.CheckFocus, true ) ; |
window.top.parent.addEventListener( 'mouseup', this.CheckFocus, true ) ; |
window.top.parent.addEventListener( 'click', this.CheckFocus, true ) ; |
window.top.parent.addEventListener( 'focus', this.CheckFocus, true ) ; |
} |
catch (e) |
{} |
} |
FCKDialog.CheckFocus = function() |
{ |
// It is strange, but we have to check the FCKDialog existence to avoid a |
// random error: "FCKDialog is not defined". |
if ( typeof( FCKDialog ) != "object" ) |
return false ; |
if ( FCKDialog.Window && !FCKDialog.Window.closed ) |
FCKDialog.Window.focus() ; |
else |
{ |
// Try/Catch must be used to avoit an error when using a frameset |
// on a different domain: |
// "Permission denied to get property Window.releaseEvents". |
try |
{ |
window.top.releaseEvents(Event.CLICK | Event.MOUSEDOWN | Event.MOUSEUP | Event.FOCUS) ; |
window.top.parent.removeEventListener( 'onmousedown', FCKDialog.CheckFocus, true ) ; |
window.top.parent.removeEventListener( 'mouseup', FCKDialog.CheckFocus, true ) ; |
window.top.parent.removeEventListener( 'click', FCKDialog.CheckFocus, true ) ; |
window.top.parent.removeEventListener( 'onfocus', FCKDialog.CheckFocus, true ) ; |
} |
catch (e) |
{} |
} |
return false ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/internals/fcktools_gecko.js |
---|
New file |
0,0 → 1,231 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fcktools_gecko.js |
* Utility functions. (Gecko version). |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
// Constant for the Gecko Bogus Node. |
var GECKO_BOGUS = FCKBrowserInfo.IsGecko ? '<br _moz_editor_bogus_node="TRUE">' : '' ; |
FCKTools.CancelEvent = function( e ) |
{ |
if ( e ) |
e.preventDefault() ; |
} |
FCKTools.DisableSelection = function( element ) |
{ |
if ( FCKBrowserInfo.IsGecko ) |
element.style.MozUserSelect = 'none' ; // Gecko only. |
else |
element.style.userSelect = 'none' ; // CSS3 (not supported yet). |
} |
// Appends a CSS file to a document. |
FCKTools._AppendStyleSheet = function( documentElement, cssFileUrl ) |
{ |
var e = documentElement.createElement( 'LINK' ) ; |
e.rel = 'stylesheet' ; |
e.type = 'text/css' ; |
e.href = cssFileUrl ; |
documentElement.getElementsByTagName("HEAD")[0].appendChild( e ) ; |
return e ; |
} |
// Removes all attributes and values from the element. |
FCKTools.ClearElementAttributes = function( element ) |
{ |
// Loop throw all attributes in the element |
for ( var i = 0 ; i < element.attributes.length ; i++ ) |
{ |
// Remove the element by name. |
element.removeAttribute( element.attributes[i].name, 0 ) ; // 0 : Case Insensitive |
} |
} |
// Returns an Array of strings with all defined in the elements inside another element. |
FCKTools.GetAllChildrenIds = function( parentElement ) |
{ |
// Create the array that will hold all Ids. |
var aIds = new Array() ; |
// Define a recursive function that search for the Ids. |
var fGetIds = function( parent ) |
{ |
for ( var i = 0 ; i < parent.childNodes.length ; i++ ) |
{ |
var sId = parent.childNodes[i].id ; |
// Check if the Id is defined for the element. |
if ( sId && sId.length > 0 ) aIds[ aIds.length ] = sId ; |
// Recursive call. |
fGetIds( parent.childNodes[i] ) ; |
} |
} |
// Start the recursive calls. |
fGetIds( parentElement ) ; |
return aIds ; |
} |
FCKTools.RemoveOuterTags = function( e ) |
{ |
var oFragment = e.ownerDocument.createDocumentFragment() ; |
for ( var i = 0 ; i < e.childNodes.length ; i++ ) |
oFragment.appendChild( e.childNodes[i] ) ; |
e.parentNode.replaceChild( oFragment, e ) ; |
} |
FCKTools.CreateXmlObject = function( object ) |
{ |
switch ( object ) |
{ |
case 'XmlHttp' : |
return new XMLHttpRequest() ; |
case 'DOMDocument' : |
return document.implementation.createDocument( '', '', null ) ; |
} |
return null ; |
} |
FCKTools.GetScrollPosition = function( relativeWindow ) |
{ |
return { X : relativeWindow.pageXOffset, Y : relativeWindow.pageYOffset } ; |
} |
FCKTools.AddEventListener = function( sourceObject, eventName, listener ) |
{ |
sourceObject.addEventListener( eventName, listener, false ) ; |
} |
FCKTools.RemoveEventListener = function( sourceObject, eventName, listener ) |
{ |
sourceObject.removeEventListener( eventName, listener, false ) ; |
} |
// Listeners attached with this function cannot be detached. |
FCKTools.AddEventListenerEx = function( sourceObject, eventName, listener, paramsArray ) |
{ |
sourceObject.addEventListener( |
eventName, |
function( e ) |
{ |
listener.apply( sourceObject, [ e ].concat( paramsArray || [] ) ) ; |
}, |
false |
) ; |
} |
// Returns and object with the "Width" and "Height" properties. |
FCKTools.GetViewPaneSize = function( win ) |
{ |
return { Width : win.innerWidth, Height : win.innerHeight } ; |
} |
FCKTools.SaveStyles = function( element ) |
{ |
var oSavedStyles = new Object() ; |
if ( element.className.length > 0 ) |
{ |
oSavedStyles.Class = element.className ; |
element.className = '' ; |
} |
var sInlineStyle = element.getAttribute( 'style' ) ; |
if ( sInlineStyle && sInlineStyle.length > 0 ) |
{ |
oSavedStyles.Inline = sInlineStyle ; |
element.setAttribute( 'style', '', 0 ) ; // 0 : Case Insensitive |
} |
return oSavedStyles ; |
} |
FCKTools.RestoreStyles = function( element, savedStyles ) |
{ |
element.className = savedStyles.Class || '' ; |
if ( savedStyles.Inline ) |
element.setAttribute( 'style', savedStyles.Inline, 0 ) ; // 0 : Case Insensitive |
else |
element.removeAttribute( 'style', 0 ) ; |
} |
FCKTools.RegisterDollarFunction = function( targetWindow ) |
{ |
targetWindow.$ = function( id ) |
{ |
return this.document.getElementById( id ) ; |
} ; |
} |
FCKTools.AppendElement = function( target, elementName ) |
{ |
return target.appendChild( target.ownerDocument.createElement( elementName ) ) ; |
} |
// Get the coordinates of an element. |
// @el : The element to get the position. |
// @relativeWindow: The window to which we want the coordinates relative to. |
FCKTools.GetElementPosition = function( el, relativeWindow ) |
{ |
// Initializes the Coordinates object that will be returned by the function. |
var c = { X:0, Y:0 } ; |
var oWindow = relativeWindow || window ; |
var oOwnerWindow = FCKTools.GetElementWindow( el ) ; |
// Loop throw the offset chain. |
while ( el ) |
{ |
var sPosition = oOwnerWindow.getComputedStyle(el, '').position ; |
// Check for non "static" elements. |
// 'FCKConfig.FloatingPanelsZIndex' -- Submenus are under a positioned IFRAME. |
if ( sPosition && sPosition != 'static' && el.style.zIndex != FCKConfig.FloatingPanelsZIndex ) |
break ; |
c.X += el.offsetLeft - el.scrollLeft ; |
c.Y += el.offsetTop - el.scrollTop ; |
if ( el.offsetParent ) |
el = el.offsetParent ; |
else |
{ |
if ( oOwnerWindow != oWindow ) |
{ |
if ( el = oOwnerWindow.frameElement ) |
oOwnerWindow = FCKTools.GetElementWindow( el ) ; |
} |
else |
{ |
c.X += el.scrollLeft ; |
c.Y += el.scrollTop ; |
break ; |
} |
} |
} |
// Return the Coordinates object |
return c ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/internals/fckxhtml_ie.js |
---|
New file |
0,0 → 1,184 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckxhtml_ie.js |
* Defines the FCKXHtml object, responsible for the XHTML operations. |
* IE specific. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
FCKXHtml._GetMainXmlString = function() |
{ |
return this.MainNode.xml ; |
} |
FCKXHtml._AppendAttributes = function( xmlNode, htmlNode, node, nodeName ) |
{ |
var aAttributes = htmlNode.attributes ; |
for ( var n = 0 ; n < aAttributes.length ; n++ ) |
{ |
var oAttribute = aAttributes[n] ; |
if ( oAttribute.specified ) |
{ |
var sAttName = oAttribute.nodeName.toLowerCase() ; |
var sAttValue ; |
// Ignore any attribute starting with "_fck". |
if ( sAttName.startsWith( '_fck' ) ) |
continue ; |
// The following must be done because of a bug on IE regarding the style |
// attribute. It returns "null" for the nodeValue. |
else if ( sAttName == 'style' ) |
sAttValue = htmlNode.style.cssText ; |
// There are two cases when the oAttribute.nodeValue must be used: |
// - for the "class" attribute |
// - for events attributes (on IE only). |
else if ( sAttName == 'class' || sAttName.indexOf('on') == 0 ) |
sAttValue = oAttribute.nodeValue ; |
else if ( nodeName == 'body' && sAttName == 'contenteditable' ) |
continue ; |
// XHTML doens't support attribute minimization like "CHECKED". It must be trasformed to cheched="checked". |
else if ( oAttribute.nodeValue === true ) |
sAttValue = sAttName ; |
// We must use getAttribute to get it exactly as it is defined. |
else if ( ! (sAttValue = htmlNode.getAttribute( sAttName, 2 ) ) ) |
sAttValue = oAttribute.nodeValue ; |
this._AppendAttribute( node, sAttName, sAttValue ) ; |
} |
} |
} |
FCKXHtml.TagProcessors['meta'] = function( node, htmlNode ) |
{ |
var oHttpEquiv = node.attributes.getNamedItem( 'http-equiv' ) ; |
if ( oHttpEquiv == null || oHttpEquiv.value.length == 0 ) |
{ |
// Get the http-equiv value from the outerHTML. |
var sHttpEquiv = htmlNode.outerHTML.match( FCKRegexLib.MetaHttpEquiv ) ; |
if ( sHttpEquiv ) |
{ |
sHttpEquiv = sHttpEquiv[1] ; |
FCKXHtml._AppendAttribute( node, 'http-equiv', sHttpEquiv ) ; |
} |
} |
return node ; |
} |
// IE automaticaly changes <FONT> tags to <FONT size=+0>. |
FCKXHtml.TagProcessors['font'] = function( node, htmlNode ) |
{ |
if ( node.attributes.length == 0 ) |
node = FCKXHtml.XML.createDocumentFragment() ; |
FCKXHtml._AppendChildNodes( node, htmlNode ) ; |
return node ; |
} |
// IE doens't see the value attribute as an attribute for the <INPUT> tag. |
FCKXHtml.TagProcessors['input'] = function( node, htmlNode ) |
{ |
if ( htmlNode.name ) |
FCKXHtml._AppendAttribute( node, 'name', htmlNode.name ) ; |
if ( htmlNode.value && !node.attributes.getNamedItem( 'value' ) ) |
FCKXHtml._AppendAttribute( node, 'value', htmlNode.value ) ; |
if ( !node.attributes.getNamedItem( 'type' ) ) |
FCKXHtml._AppendAttribute( node, 'type', 'text' ) ; |
return node ; |
} |
// IE ignores the "SELECTED" attribute so we must add it manually. |
FCKXHtml.TagProcessors['option'] = function( node, htmlNode ) |
{ |
if ( htmlNode.selected && !node.attributes.getNamedItem( 'selected' ) ) |
FCKXHtml._AppendAttribute( node, 'selected', 'selected' ) ; |
FCKXHtml._AppendChildNodes( node, htmlNode ) ; |
return node ; |
} |
// IE ignores the "COORDS" and "SHAPE" attribute so we must add it manually. |
FCKXHtml.TagProcessors['area'] = function( node, htmlNode ) |
{ |
if ( ! node.attributes.getNamedItem( 'coords' ) ) |
{ |
var sCoords = htmlNode.getAttribute( 'coords', 2 ) ; |
if ( sCoords && sCoords != '0,0,0' ) |
FCKXHtml._AppendAttribute( node, 'coords', sCoords ) ; |
} |
if ( ! node.attributes.getNamedItem( 'shape' ) ) |
{ |
var sCoords = htmlNode.getAttribute( 'shape', 2 ) ; |
if ( sCoords && sCoords.length > 0 ) |
FCKXHtml._AppendAttribute( node, 'shape', sCoords ) ; |
} |
return node ; |
} |
FCKXHtml.TagProcessors['label'] = function( node, htmlNode ) |
{ |
if ( htmlNode.htmlFor.length > 0 ) |
FCKXHtml._AppendAttribute( node, 'for', htmlNode.htmlFor ) ; |
FCKXHtml._AppendChildNodes( node, htmlNode ) ; |
return node ; |
} |
FCKXHtml.TagProcessors['form'] = function( node, htmlNode ) |
{ |
if ( htmlNode.acceptCharset && htmlNode.acceptCharset.length > 0 && htmlNode.acceptCharset != 'UNKNOWN' ) |
FCKXHtml._AppendAttribute( node, 'accept-charset', htmlNode.acceptCharset ) ; |
if ( htmlNode.name ) |
FCKXHtml._AppendAttribute( node, 'name', htmlNode.name ) ; |
FCKXHtml._AppendChildNodes( node, htmlNode ) ; |
return node ; |
} |
// IE doens't hold the name attribute as an attribute for the <TEXTAREA> and <SELECT> tags. |
FCKXHtml.TagProcessors['textarea'] = FCKXHtml.TagProcessors['select'] = function( node, htmlNode ) |
{ |
if ( htmlNode.name ) |
FCKXHtml._AppendAttribute( node, 'name', htmlNode.name ) ; |
FCKXHtml._AppendChildNodes( node, htmlNode ) ; |
return node ; |
} |
// On very rare cases, IE is loosing the "align" attribute for DIV. (right align and apply bulleted list) |
FCKXHtml.TagProcessors['div'] = function( node, htmlNode ) |
{ |
if ( htmlNode.align.length > 0 ) |
FCKXHtml._AppendAttribute( node, 'align', htmlNode.align ) ; |
FCKXHtml._AppendChildNodes( node, htmlNode ) ; |
return node ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/internals/fcktools_ie.js |
---|
New file |
0,0 → 1,202 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fcktools_ie.js |
* Utility functions. (IE version). |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
FCKTools.CancelEvent = function( e ) |
{ |
return false ; |
} |
// Appends one or more CSS files to a document. |
FCKTools._AppendStyleSheet = function( documentElement, cssFileUrl ) |
{ |
return documentElement.createStyleSheet( cssFileUrl ).owningElement ; |
} |
// Removes all attributes and values from the element. |
FCKTools.ClearElementAttributes = function( element ) |
{ |
element.clearAttributes() ; |
} |
FCKTools.GetAllChildrenIds = function( parentElement ) |
{ |
var aIds = new Array() ; |
for ( var i = 0 ; i < parentElement.all.length ; i++ ) |
{ |
var sId = parentElement.all[i].id ; |
if ( sId && sId.length > 0 ) |
aIds[ aIds.length ] = sId ; |
} |
return aIds ; |
} |
FCKTools.RemoveOuterTags = function( e ) |
{ |
e.insertAdjacentHTML( 'beforeBegin', e.innerHTML ) ; |
e.parentNode.removeChild( e ) ; |
} |
FCKTools.CreateXmlObject = function( object ) |
{ |
var aObjs ; |
switch ( object ) |
{ |
case 'XmlHttp' : |
aObjs = [ 'MSXML2.XmlHttp', 'Microsoft.XmlHttp' ] ; |
break ; |
case 'DOMDocument' : |
aObjs = [ 'MSXML2.DOMDocument', 'Microsoft.XmlDom' ] ; |
break ; |
} |
for ( var i = 0 ; i < 2 ; i++ ) |
{ |
try { return new ActiveXObject( aObjs[i] ) ; } |
catch (e) |
{} |
} |
if ( FCKLang.NoActiveX ) |
{ |
alert( FCKLang.NoActiveX ) ; |
FCKLang.NoActiveX = null ; |
} |
} |
FCKTools.DisableSelection = function( element ) |
{ |
element.unselectable = 'on' ; |
var e, i = 0 ; |
while ( e = element.all[ i++ ] ) |
{ |
switch ( e.tagName ) |
{ |
case 'IFRAME' : |
case 'TEXTAREA' : |
case 'INPUT' : |
case 'SELECT' : |
/* Ignore the above tags */ |
break ; |
default : |
e.unselectable = 'on' ; |
} |
} |
} |
FCKTools.GetScrollPosition = function( relativeWindow ) |
{ |
var oDoc = relativeWindow.document ; |
// Try with the doc element. |
var oPos = { X : oDoc.documentElement.scrollLeft, Y : oDoc.documentElement.scrollTop } ; |
if ( oPos.X > 0 || oPos.Y > 0 ) |
return oPos ; |
// If no scroll, try with the body. |
return { X : oDoc.body.scrollLeft, Y : oDoc.body.scrollTop } ; |
} |
FCKTools.AddEventListener = function( sourceObject, eventName, listener ) |
{ |
sourceObject.attachEvent( 'on' + eventName, listener ) ; |
} |
FCKTools.RemoveEventListener = function( sourceObject, eventName, listener ) |
{ |
sourceObject.detachEvent( 'on' + eventName, listener ) ; |
} |
// Listeners attached with this function cannot be detached. |
FCKTools.AddEventListenerEx = function( sourceObject, eventName, listener, paramsArray ) |
{ |
// Ok... this is a closures party, but is the only way to make it clean of memory leaks. |
var o = new Object() ; |
o.Source = sourceObject ; |
o.Params = paramsArray || [] ; // Memory leak if we have DOM objects here. |
o.Listener = function( ev ) |
{ |
return listener.apply( o.Source, [ ev ].concat( o.Params ) ) ; |
} |
if ( FCK.IECleanup ) |
FCK.IECleanup.AddItem( null, function() { o.Source = null ; o.Params = null ; } ) ; |
sourceObject.attachEvent( 'on' + eventName, o.Listener ) ; |
sourceObject = null ; // Memory leak cleaner (because of the above closure). |
paramsArray = null ; // Memory leak cleaner (because of the above closure). |
} |
// Returns and object with the "Width" and "Height" properties. |
FCKTools.GetViewPaneSize = function( win ) |
{ |
var oSizeSource ; |
var oDoc = win.document.documentElement ; |
if ( oDoc && oDoc.clientWidth ) // IE6 Strict Mode |
oSizeSource = oDoc ; |
else |
oSizeSource = top.document.body ; // Other IEs |
if ( oSizeSource ) |
return { Width : oSizeSource.clientWidth, Height : oSizeSource.clientHeight } ; |
else |
return { Width : 0, Height : 0 } ; |
} |
FCKTools.SaveStyles = function( element ) |
{ |
var oSavedStyles = new Object() ; |
if ( element.className.length > 0 ) |
{ |
oSavedStyles.Class = element.className ; |
element.className = '' ; |
} |
var sInlineStyle = element.style.cssText ; |
if ( sInlineStyle.length > 0 ) |
{ |
oSavedStyles.Inline = sInlineStyle ; |
element.style.cssText = '' ; |
} |
return oSavedStyles ; |
} |
FCKTools.RestoreStyles = function( element, savedStyles ) |
{ |
element.className = savedStyles.Class || '' ; |
element.style.cssText = savedStyles.Inline || '' ; |
} |
FCKTools.RegisterDollarFunction = function( targetWindow ) |
{ |
targetWindow.$ = targetWindow.document.getElementById ; |
} |
FCKTools.AppendElement = function( target, elementName ) |
{ |
return target.appendChild( this.GetElementDocument( target ).createElement( elementName ) ) ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/internals/fck.js |
---|
New file |
0,0 → 1,77 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fck.js |
* Creation and initialization of the "FCK" object. This is the main object |
* that represents an editor instance. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
// FCK represents the active editor instance |
var FCK = new Object() ; |
FCK.Name = FCKURLParams[ 'InstanceName' ] ; |
FCK.Status = FCK_STATUS_NOTLOADED ; |
FCK.EditMode = FCK_EDITMODE_WYSIWYG ; |
FCK.LoadLinkedFile = function() |
{ |
// There is a bug on IE... getElementById returns any META tag that has the |
// name set to the ID you are looking for. So the best way in to get the array |
// by names and look for the correct one. |
// As ASP.Net generates a ID that is different from the Name, we must also |
// look for the field based on the ID (the first one is the ID). |
var oDocument = window.parent.document ; |
var eLinkedField = oDocument.getElementById( FCK.Name ) ; |
var colElementsByName = oDocument.getElementsByName( FCK.Name ) ; |
var i = 0; |
while ( eLinkedField || i == 0 ) |
{ |
if ( eLinkedField && ( eLinkedField.tagName.toLowerCase() == 'input' || eLinkedField.tagName.toLowerCase() == 'textarea' ) ) |
{ |
FCK.LinkedField = eLinkedField ; |
break ; |
} |
eLinkedField = colElementsByName[i++] ; |
} |
} |
FCK.LoadLinkedFile() ; |
var FCKTempBin = new Object() ; |
FCKTempBin.Elements = new Array() ; |
FCKTempBin.AddElement = function( element ) |
{ |
var iIndex = this.Elements.length ; |
this.Elements[ iIndex ] = element ; |
return iIndex ; |
} |
FCKTempBin.RemoveElement = function( index ) |
{ |
var e = this.Elements[ index ] ; |
this.Elements[ index ] = null ; |
return e ; |
} |
FCKTempBin.Reset = function() |
{ |
var i = 0 ; |
while ( i < this.Elements.length ) |
this.Elements[ i++ ] == null ; |
this.Elements.length = 0 ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/internals/fckundo_ie.js |
---|
New file |
0,0 → 1,119 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckundo_ie.js |
* IE specific implementation for the Undo/Redo system. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
var FCKUndo = new Object() ; |
FCKUndo.SavedData = new Array() ; |
FCKUndo.CurrentIndex = -1 ; |
FCKUndo.TypesCount = FCKUndo.MaxTypes = 25 ; |
FCKUndo.Typing = false ; |
FCKUndo.SaveUndoStep = function() |
{ |
if ( FCK.EditMode != FCK_EDITMODE_WYSIWYG ) |
return ; |
// Shrink the array to the current level. |
FCKUndo.SavedData = FCKUndo.SavedData.slice( 0, FCKUndo.CurrentIndex + 1 ) ; |
// Get the Actual HTML. |
var sHtml = FCK.EditorDocument.body.innerHTML ; |
// Cancel operation if the new step is identical to the previous one. |
if ( FCKUndo.CurrentIndex >= 0 && sHtml == FCKUndo.SavedData[ FCKUndo.CurrentIndex ][0] ) |
return ; |
// If we reach the Maximun number of undo levels, we must remove the first |
// entry of the list shifting all elements. |
if ( FCKUndo.CurrentIndex + 1 >= FCKConfig.MaxUndoLevels ) |
FCKUndo.SavedData.shift() ; |
else |
FCKUndo.CurrentIndex++ ; |
// Get the actual selection. |
var sBookmark ; |
if ( FCK.EditorDocument.selection.type == 'Text' ) |
sBookmark = FCK.EditorDocument.selection.createRange().getBookmark() ; |
// Save the new level in front of the actual position. |
FCKUndo.SavedData[ FCKUndo.CurrentIndex ] = [ sHtml, sBookmark ] ; |
FCK.Events.FireEvent( "OnSelectionChange" ) ; |
} |
FCKUndo.CheckUndoState = function() |
{ |
return ( FCKUndo.Typing || FCKUndo.CurrentIndex > 0 ) ; |
} |
FCKUndo.CheckRedoState = function() |
{ |
return ( !FCKUndo.Typing && FCKUndo.CurrentIndex < ( FCKUndo.SavedData.length - 1 ) ) ; |
} |
FCKUndo.Undo = function() |
{ |
if ( FCKUndo.CheckUndoState() ) |
{ |
// If it is the first step. |
if ( FCKUndo.CurrentIndex == ( FCKUndo.SavedData.length - 1 ) ) |
{ |
// Save the actual state for a possible "Redo" call. |
FCKUndo.SaveUndoStep() ; |
} |
// Go a step back. |
FCKUndo._ApplyUndoLevel( --FCKUndo.CurrentIndex ) ; |
FCK.Events.FireEvent( "OnSelectionChange" ) ; |
} |
} |
FCKUndo.Redo = function() |
{ |
if ( FCKUndo.CheckRedoState() ) |
{ |
// Go a step forward. |
FCKUndo._ApplyUndoLevel( ++FCKUndo.CurrentIndex ) ; |
FCK.Events.FireEvent( "OnSelectionChange" ) ; |
} |
} |
FCKUndo._ApplyUndoLevel = function(level) |
{ |
var oData = FCKUndo.SavedData[ level ] ; |
if ( !oData ) |
return ; |
// Update the editor contents with that step data. |
FCK.SetInnerHtml( oData[0] ) ; |
// FCK.EditorDocument.body.innerHTML = oData[0] ; |
if ( oData[1] ) |
{ |
var oRange = FCK.EditorDocument.selection.createRange() ; |
oRange.moveToBookmark( oData[1] ) ; |
oRange.select() ; |
} |
FCKUndo.TypesCount = 0 ; |
FCKUndo.Typing = false ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/internals/fcktablehandler.js |
---|
New file |
0,0 → 1,383 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fcktablehandler.js |
* Manage table operations. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
var FCKTableHandler = new Object() ; |
FCKTableHandler.InsertRow = function() |
{ |
// Get the row where the selection is placed in. |
var oRow = FCKSelection.MoveToAncestorNode("TR") ; |
if ( !oRow ) return ; |
// Create a clone of the row. |
var oNewRow = oRow.cloneNode( true ) ; |
// Insert the new row (copy) before of it. |
oRow.parentNode.insertBefore( oNewRow, oRow ) ; |
// Clean the row (it seems that the new row has been added after it). |
FCKTableHandler.ClearRow( oRow ) ; |
} |
FCKTableHandler.DeleteRows = function( row ) |
{ |
// If no row has been passed as a parameer, |
// then get the row where the selection is placed in. |
if ( !row ) |
row = FCKSelection.MoveToAncestorNode("TR") ; |
if ( !row ) return ; |
// Get the row's table. |
var oTable = FCKTools.GetElementAscensor( row, 'TABLE' ) ; |
// If just one row is available then delete the entire table. |
if ( oTable.rows.length == 1 ) |
{ |
FCKTableHandler.DeleteTable( oTable ) ; |
return ; |
} |
// Delete the row. |
row.parentNode.removeChild( row ) ; |
} |
FCKTableHandler.DeleteTable = function( table ) |
{ |
// If no table has been passed as a parameer, |
// then get the table where the selection is placed in. |
if ( !table ) |
{ |
var table = FCKSelection.GetSelectedElement() ; |
if ( !table || table.tagName != 'TABLE' ) |
table = FCKSelection.MoveToAncestorNode("TABLE") ; |
} |
if ( !table ) return ; |
// Delete the table. |
FCKSelection.SelectNode( table ) ; |
FCKSelection.Collapse(); |
table.parentNode.removeChild( table ) ; |
} |
FCKTableHandler.InsertColumn = function() |
{ |
// Get the cell where the selection is placed in. |
var oCell = FCKSelection.MoveToAncestorNode("TD") ; |
if ( !oCell ) |
oCell = FCKSelection.MoveToAncestorNode("TH") ; |
if ( !oCell ) return ; |
// Get the cell's table. |
var oTable = FCKTools.GetElementAscensor( oCell, 'TABLE' ) ; |
// Get the index of the column to be created (based on the cell). |
var iIndex = oCell.cellIndex + 1 ; |
// Loop throw all rows available in the table. |
for ( var i = 0 ; i < oTable.rows.length ; i++ ) |
{ |
// Get the row. |
var oRow = oTable.rows[i] ; |
// If the row doens't have enought cells, ignore it. |
if ( oRow.cells.length < iIndex ) |
continue ; |
oCell = oRow.cells[iIndex-1].cloneNode(false) ; |
if ( FCKBrowserInfo.IsGecko ) |
oCell.innerHTML = GECKO_BOGUS ; |
// Get the cell that is placed in the new cell place. |
var oBaseCell = oRow.cells[iIndex] ; |
// If the cell is available (we are not in the last cell of the row). |
if ( oBaseCell ) |
oRow.insertBefore( oCell, oBaseCell ) ; // Insert the new cell just before of it. |
else |
oRow.appendChild( oCell ) ; // Append the cell at the end of the row. |
} |
} |
FCKTableHandler.DeleteColumns = function() |
{ |
// Get the cell where the selection is placed in. |
var oCell = FCKSelection.MoveToAncestorNode('TD') || FCKSelection.MoveToAncestorNode('TH') ; |
if ( !oCell ) return ; |
// Get the cell's table. |
var oTable = FCKTools.GetElementAscensor( oCell, 'TABLE' ) ; |
// Get the cell index. |
var iIndex = oCell.cellIndex ; |
// Loop throw all rows (from down to up, because it's possible that some |
// rows will be deleted). |
for ( var i = oTable.rows.length - 1 ; i >= 0 ; i-- ) |
{ |
// Get the row. |
var oRow = oTable.rows[i] ; |
// If the cell to be removed is the first one and the row has just one cell. |
if ( iIndex == 0 && oRow.cells.length == 1 ) |
{ |
// Remove the entire row. |
FCKTableHandler.DeleteRows( oRow ) ; |
continue ; |
} |
// If the cell to be removed exists the delete it. |
if ( oRow.cells[iIndex] ) |
oRow.removeChild( oRow.cells[iIndex] ) ; |
} |
} |
FCKTableHandler.InsertCell = function( cell ) |
{ |
// Get the cell where the selection is placed in. |
var oCell = cell ? cell : FCKSelection.MoveToAncestorNode("TD") ; |
if ( !oCell ) return ; |
// Create the new cell element to be added. |
var oNewCell = FCK.EditorDocument.createElement("TD"); |
if ( FCKBrowserInfo.IsGecko ) |
oNewCell.innerHTML = GECKO_BOGUS ; |
// oNewCell.innerHTML = " " ; |
// If it is the last cell in the row. |
if ( oCell.cellIndex == oCell.parentNode.cells.length - 1 ) |
{ |
// Add the new cell at the end of the row. |
oCell.parentNode.appendChild( oNewCell ) ; |
} |
else |
{ |
// Add the new cell before the next cell (after the active one). |
oCell.parentNode.insertBefore( oNewCell, oCell.nextSibling ) ; |
} |
return oNewCell ; |
} |
FCKTableHandler.DeleteCell = function( cell ) |
{ |
// If this is the last cell in the row. |
if ( cell.parentNode.cells.length == 1 ) |
{ |
// Delete the entire row. |
FCKTableHandler.DeleteRows( FCKTools.GetElementAscensor( cell, 'TR' ) ) ; |
return ; |
} |
// Delete the cell from the row. |
cell.parentNode.removeChild( cell ) ; |
} |
FCKTableHandler.DeleteCells = function() |
{ |
var aCells = FCKTableHandler.GetSelectedCells() ; |
for ( var i = aCells.length - 1 ; i >= 0 ; i-- ) |
{ |
FCKTableHandler.DeleteCell( aCells[i] ) ; |
} |
} |
FCKTableHandler.MergeCells = function() |
{ |
// Get all selected cells. |
var aCells = FCKTableHandler.GetSelectedCells() ; |
// At least 2 cells must be selected. |
if ( aCells.length < 2 ) |
return ; |
// The merge can occour only if the selected cells are from the same row. |
if ( aCells[0].parentNode != aCells[aCells.length-1].parentNode ) |
return ; |
// Calculate the new colSpan for the first cell. |
var iColSpan = isNaN( aCells[0].colSpan ) ? 1 : aCells[0].colSpan ; |
var sHtml = '' ; |
var oCellsContents = FCK.EditorDocument.createDocumentFragment() ; |
for ( var i = aCells.length - 1 ; i >= 0 ; i-- ) |
{ |
var eCell = aCells[i] ; |
// Move its contents to the document fragment. |
for ( var c = eCell.childNodes.length - 1 ; c >= 0 ; c-- ) |
{ |
var eChild = eCell.removeChild( eCell.childNodes[c] ) ; |
if ( ( eChild.hasAttribute && eChild.hasAttribute('_moz_editor_bogus_node') ) || ( eChild.getAttribute && eChild.getAttribute( 'type', 2 ) == '_moz' ) ) |
continue ; |
oCellsContents.insertBefore( eChild, oCellsContents.firstChild ) ; |
} |
if ( i > 0 ) |
{ |
// Accumulate the colspan of the cell. |
iColSpan += isNaN( eCell.colSpan ) ? 1 : eCell.colSpan ; |
// Delete the cell. |
FCKTableHandler.DeleteCell( eCell ) ; |
} |
} |
// Set the innerHTML of the remaining cell (the first one). |
aCells[0].colSpan = iColSpan ; |
if ( FCKBrowserInfo.IsGecko && oCellsContents.childNodes.length == 0 ) |
aCells[0].innerHTML = GECKO_BOGUS ; |
else |
aCells[0].appendChild( oCellsContents ) ; |
} |
FCKTableHandler.SplitCell = function() |
{ |
// Check that just one cell is selected, otherwise return. |
var aCells = FCKTableHandler.GetSelectedCells() ; |
if ( aCells.length != 1 ) |
return ; |
var aMap = this._CreateTableMap( aCells[0].parentNode.parentNode ) ; |
var iCellIndex = FCKTableHandler._GetCellIndexSpan( aMap, aCells[0].parentNode.rowIndex , aCells[0] ) ; |
var aCollCells = this._GetCollumnCells( aMap, iCellIndex ) ; |
for ( var i = 0 ; i < aCollCells.length ; i++ ) |
{ |
if ( aCollCells[i] == aCells[0] ) |
{ |
var oNewCell = this.InsertCell( aCells[0] ) ; |
if ( !isNaN( aCells[0].rowSpan ) && aCells[0].rowSpan > 1 ) |
oNewCell.rowSpan = aCells[0].rowSpan ; |
} |
else |
{ |
if ( isNaN( aCollCells[i].colSpan ) ) |
aCollCells[i].colSpan = 2 ; |
else |
aCollCells[i].colSpan += 1 ; |
} |
} |
} |
// Get the cell index from a TableMap. |
FCKTableHandler._GetCellIndexSpan = function( tableMap, rowIndex, cell ) |
{ |
if ( tableMap.length < rowIndex + 1 ) |
return null ; |
var oRow = tableMap[ rowIndex ] ; |
for ( var c = 0 ; c < oRow.length ; c++ ) |
{ |
if ( oRow[c] == cell ) |
return c ; |
} |
return null ; |
} |
// Get the cells available in a collumn of a TableMap. |
FCKTableHandler._GetCollumnCells = function( tableMap, collumnIndex ) |
{ |
var aCollCells = new Array() ; |
for ( var r = 0 ; r < tableMap.length ; r++ ) |
{ |
var oCell = tableMap[r][collumnIndex] ; |
if ( oCell && ( aCollCells.length == 0 || aCollCells[ aCollCells.length - 1 ] != oCell ) ) |
aCollCells[ aCollCells.length ] = oCell ; |
} |
return aCollCells ; |
} |
// This function is quite hard to explain. It creates a matrix representing all cells in a table. |
// The difference here is that the "spanned" cells (colSpan and rowSpan) are duplicated on the matrix |
// cells that are "spanned". For example, a row with 3 cells where the second cell has colSpan=2 and rowSpan=3 |
// will produce a bi-dimensional matrix with the following values (representing the cells): |
// Cell1, Cell2, Cell2, Cell 3 |
// Cell4, Cell2, Cell2, Cell 5 |
FCKTableHandler._CreateTableMap = function( table ) |
{ |
var aRows = table.rows ; |
// Row and Collumn counters. |
var r = -1 ; |
var aMap = new Array() ; |
for ( var i = 0 ; i < aRows.length ; i++ ) |
{ |
r++ ; |
if ( !aMap[r] ) |
aMap[r] = new Array() ; |
var c = -1 ; |
for ( var j = 0 ; j < aRows[i].cells.length ; j++ ) |
{ |
var oCell = aRows[i].cells[j] ; |
c++ ; |
while ( aMap[r][c] ) |
c++ ; |
var iColSpan = isNaN( oCell.colSpan ) ? 1 : oCell.colSpan ; |
var iRowSpan = isNaN( oCell.rowSpan ) ? 1 : oCell.rowSpan ; |
for ( var rs = 0 ; rs < iRowSpan ; rs++ ) |
{ |
if ( !aMap[r + rs] ) |
aMap[r + rs] = new Array() ; |
for ( var cs = 0 ; cs < iColSpan ; cs++ ) |
{ |
aMap[r + rs][c + cs] = aRows[i].cells[j] ; |
} |
} |
c += iColSpan - 1 ; |
} |
} |
return aMap ; |
} |
FCKTableHandler.ClearRow = function( tr ) |
{ |
// Get the array of row's cells. |
var aCells = tr.cells ; |
// Replace the contents of each cell with "nothing". |
for ( var i = 0 ; i < aCells.length ; i++ ) |
{ |
if ( FCKBrowserInfo.IsGecko ) |
aCells[i].innerHTML = GECKO_BOGUS ; |
else |
aCells[i].innerHTML = '' ; |
} |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/internals/fcktablehandler_gecko.js |
---|
New file |
0,0 → 1,53 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fcktablehandler_gecko.js |
* Manage table operations (IE specific). |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
FCKTableHandler.GetSelectedCells = function() |
{ |
var aCells = new Array() ; |
var oSelection = FCK.EditorWindow.getSelection() ; |
// If the selection is a text. |
if ( oSelection.rangeCount == 1 && oSelection.anchorNode.nodeType == 3 ) |
{ |
var oParent = FCKTools.GetElementAscensor( oSelection.anchorNode, 'TD,TH' ) ; |
if ( oParent ) |
{ |
aCells[0] = oParent ; |
return aCells ; |
} |
} |
for ( var i = 0 ; i < oSelection.rangeCount ; i++ ) |
{ |
var oRange = oSelection.getRangeAt(i) ; |
var oCell ; |
if ( oRange.startContainer.tagName.Equals( 'TD', 'TH' ) ) |
oCell = oRange.startContainer ; |
else |
oCell = oRange.startContainer.childNodes[ oRange.startOffset ] ; |
if ( oCell.tagName.Equals( 'TD', 'TH' ) ) |
aCells[aCells.length] = oCell ; |
} |
return aCells ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/internals/fckbrowserinfo.js |
---|
New file |
0,0 → 1,37 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckbrowserinfo.js |
* Contains browser detection information. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
var s = navigator.userAgent.toLowerCase() ; |
var FCKBrowserInfo = |
{ |
IsIE : s.Contains('msie'), |
IsIE7 : s.Contains('msie 7'), |
IsGecko : s.Contains('gecko/'), |
IsSafari : s.Contains('safari'), |
IsOpera : s.Contains('opera') |
} |
FCKBrowserInfo.IsGeckoLike = FCKBrowserInfo.IsGecko || FCKBrowserInfo.IsSafari || FCKBrowserInfo.IsOpera ; |
if ( FCKBrowserInfo.IsGecko ) |
{ |
var sGeckoVersion = s.match( /gecko\/(\d+)/ )[1] ; |
FCKBrowserInfo.IsGecko10 = sGeckoVersion < 20051111 ; // Actually "10" refers to versions before Firefox 1.5, where Gecko 20051111 has been released. |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/internals/fck_2.js |
---|
New file |
0,0 → 1,162 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fck_2.js |
* This is the second part of the "FCK" object creation. This is the main |
* object that represents an editor instance. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
// This collection is used by the browser specific implementations to tell |
// wich named commands must be handled separately. |
FCK.RedirectNamedCommands = new Object() ; |
FCK.ExecuteNamedCommand = function( commandName, commandParameter, noRedirect ) |
{ |
FCKUndo.SaveUndoStep() ; |
if ( !noRedirect && FCK.RedirectNamedCommands[ commandName ] != null ) |
FCK.ExecuteRedirectedNamedCommand( commandName, commandParameter ) ; |
else |
{ |
FCK.Focus() ; |
FCK.EditorDocument.execCommand( commandName, false, commandParameter ) ; |
FCK.Events.FireEvent( 'OnSelectionChange' ) ; |
} |
FCKUndo.SaveUndoStep() ; |
} |
FCK.GetNamedCommandState = function( commandName ) |
{ |
try |
{ |
if ( !FCK.EditorDocument.queryCommandEnabled( commandName ) ) |
return FCK_TRISTATE_DISABLED ; |
else |
return FCK.EditorDocument.queryCommandState( commandName ) ? FCK_TRISTATE_ON : FCK_TRISTATE_OFF ; |
} |
catch ( e ) |
{ |
return FCK_TRISTATE_OFF ; |
} |
} |
FCK.GetNamedCommandValue = function( commandName ) |
{ |
var sValue = '' ; |
var eState = FCK.GetNamedCommandState( commandName ) ; |
if ( eState == FCK_TRISTATE_DISABLED ) |
return null ; |
try |
{ |
sValue = this.EditorDocument.queryCommandValue( commandName ) ; |
} |
catch(e) {} |
return sValue ? sValue : '' ; |
} |
FCK.PasteFromWord = function() |
{ |
FCKDialog.OpenDialog( 'FCKDialog_Paste', FCKLang.PasteFromWord, 'dialog/fck_paste.html', 400, 330, 'Word' ) ; |
} |
FCK.Preview = function() |
{ |
var iWidth = FCKConfig.ScreenWidth * 0.8 ; |
var iHeight = FCKConfig.ScreenHeight * 0.7 ; |
var iLeft = ( FCKConfig.ScreenWidth - iWidth ) / 2 ; |
var oWindow = window.open( '', null, 'toolbar=yes,location=no,status=yes,menubar=yes,scrollbars=yes,resizable=yes,width=' + iWidth + ',height=' + iHeight + ',left=' + iLeft ) ; |
var sHTML ; |
if ( FCKConfig.FullPage ) |
{ |
if ( FCK.TempBaseTag.length > 0 ) |
sHTML = FCK.TempBaseTag + FCK.GetXHTML() ; |
else |
sHTML = FCK.GetXHTML() ; |
} |
else |
{ |
sHTML = |
FCKConfig.DocType + |
'<html dir="' + FCKConfig.ContentLangDirection + '">' + |
'<head>' + |
FCK.TempBaseTag + |
'<title>' + FCKLang.Preview + '</title>' + |
FCK._GetEditorAreaStyleTags() + |
'</head><body>' + |
FCK.GetXHTML() + |
'</body></html>' ; |
} |
oWindow.document.write( sHTML ); |
oWindow.document.close(); |
} |
FCK.SwitchEditMode = function( noUndo ) |
{ |
var bIsWysiwyg = ( FCK.EditMode == FCK_EDITMODE_WYSIWYG ) ; |
var sHtml ; |
// Update the HTML in the view output to show. |
if ( bIsWysiwyg ) |
{ |
if ( !noUndo && FCKBrowserInfo.IsIE ) |
FCKUndo.SaveUndoStep() ; |
sHtml = FCK.GetXHTML( FCKConfig.FormatSource ) ; |
} |
else |
sHtml = this.EditingArea.Textarea.value ; |
FCK.EditMode = bIsWysiwyg ? FCK_EDITMODE_SOURCE : FCK_EDITMODE_WYSIWYG ; |
FCK.SetHTML( sHtml ) ; |
// Set the Focus. |
FCK.Focus() ; |
// Update the toolbar (Running it directly causes IE to fail). |
FCKTools.RunFunction( FCK.ToolbarSet.RefreshModeState, FCK.ToolbarSet ) ; |
} |
FCK.CreateElement = function( tag ) |
{ |
var e = FCK.EditorDocument.createElement( tag ) ; |
return FCK.InsertElementAndGetIt( e ) ; |
} |
FCK.InsertElementAndGetIt = function( e ) |
{ |
e.setAttribute( 'FCKTempLabel', 'true' ) ; |
this.InsertElement( e ) ; |
var aEls = FCK.EditorDocument.getElementsByTagName( e.tagName ) ; |
for ( var i = 0 ; i < aEls.length ; i++ ) |
{ |
if ( aEls[i].getAttribute( 'FCKTempLabel' ) ) |
{ |
aEls[i].removeAttribute( 'FCKTempLabel' ) ; |
return aEls[i] ; |
} |
} |
return null ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/internals/fckregexlib.js |
---|
New file |
0,0 → 1,87 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckregexlib.js |
* These are some Regular Expresions used by the editor. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
var FCKRegexLib = { |
// This is the Regular expression used by the SetHTML method for the "'" entity. |
AposEntity : /'/gi , |
// Used by the Styles combo to identify styles that can't be applied to text. |
ObjectElements : /^(?:IMG|TABLE|TR|TD|TH|INPUT|SELECT|TEXTAREA|HR|OBJECT|A|UL|OL|LI)$/i , |
BlockElements : /^(?:P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|OL|UL|LI|TD|TH)$/i , |
// Elements marked as empty "Empty" in the XHTML DTD. |
EmptyElements : /^(?:BASE|META|LINK|HR|BR|PARAM|IMG|AREA|INPUT)$/i , |
// List all named commands (commands that can be interpreted by the browser "execCommand" method. |
NamedCommands : /^(?:Cut|Copy|Paste|Print|SelectAll|RemoveFormat|Unlink|Undo|Redo|Bold|Italic|Underline|StrikeThrough|Subscript|Superscript|JustifyLeft|JustifyCenter|JustifyRight|JustifyFull|Outdent|Indent|InsertOrderedList|InsertUnorderedList|InsertHorizontalRule)$/i , |
BodyContents : /([\s\S]*\<body[^\>]*\>)([\s\S]*)(\<\/body\>[\s\S]*)/i , |
// Temporary text used to solve some browser specific limitations. |
ToReplace : /___fcktoreplace:([\w]+)/ig , |
// Get the META http-equiv attribute from the tag. |
MetaHttpEquiv : /http-equiv\s*=\s*["']?([^"' ]+)/i , |
HasBaseTag : /<base /i , |
HtmlOpener : /<html\s?[^>]*>/i , |
HeadOpener : /<head\s?[^>]*>/i , |
HeadCloser : /<\/head\s*>/i , |
TableBorderClass : /\s*FCK__ShowTableBorders\s*/ , |
// Validate element names. |
ElementName : /(^[A-Za-z_:][\w.\-:]*\w$)|(^[A-Za-z_]$)/ , |
// Used in conjuction with the FCKConfig.ForceSimpleAmpersand configuration option. |
ForceSimpleAmpersand : /___FCKAmp___/g , |
// Get the closing parts of the tags with no closing tags, like <br/>... gets the "/>" part. |
SpaceNoClose : /\/>/g , |
EmptyParagraph : /^<(p|div)>\s*<\/\1>$/i , |
TagBody : /></ , |
StrongOpener : /<STRONG([ \>])/gi , |
StrongCloser : /<\/STRONG>/gi , |
EmOpener : /<EM([ \>])/gi , |
EmCloser : /<\/EM>/gi , |
AbbrOpener : /<ABBR([ \>])/gi , |
AbbrCloser : /<\/ABBR>/gi , |
GeckoEntitiesMarker : /#\?-\:/g , |
// We look for the "src" and href attribute with the " or ' or whithout one of |
// them. We have to do all in one, otherwhise we will have problems with URLs |
// like "thumbnail.php?src=someimage.jpg" (SF-BUG 1554141). |
ProtectUrlsImg : /(?:(<img(?=\s).*?\ssrc=)("|')(.*?)\2)|(?:(<img\s.*?src=)([^"'][^ >]+))/gi , |
ProtectUrlsA : /(?:(<a(?=\s).*?\shref=)("|')(.*?)\2)|(?:(<a\s.*?href=)([^"'][^ >]+))/gi , |
Html4DocType : /HTML 4\.0 Transitional/i , |
DocTypeTag : /<!DOCTYPE[^>]*>/i , |
// These regex are used to save the original event attributes in the HTML. |
TagsWithEvent : /<[^\>]+ on\w+[\s\r\n]*=[\s\r\n]*?('|")[\s\S]+?\>/g , |
EventAttributes : /\s(on\w+)[\s\r\n]*=[\s\r\n]*?('|")([\s\S]*?)\2/g, |
ProtectedEvents : /\s\w+_fckprotectedatt="([^"]+)"/g |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/internals/fckselection_ie.js |
---|
New file |
0,0 → 1,151 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckselection_ie.js |
* Active selection functions. (IE specific implementation) |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
// Get the selection type. |
FCKSelection.GetType = function() |
{ |
return FCK.EditorDocument.selection.type ; |
} |
// Retrieves the selected element (if any), just in the case that a single |
// element (object like and image or a table) is selected. |
FCKSelection.GetSelectedElement = function() |
{ |
if ( this.GetType() == 'Control' ) |
{ |
var oRange = FCK.EditorDocument.selection.createRange() ; |
if ( oRange && oRange.item ) |
return FCK.EditorDocument.selection.createRange().item(0) ; |
} |
} |
FCKSelection.GetParentElement = function() |
{ |
switch ( this.GetType() ) |
{ |
case 'Control' : |
return FCKSelection.GetSelectedElement().parentElement ; |
case 'None' : |
return ; |
default : |
return FCK.EditorDocument.selection.createRange().parentElement() ; |
} |
} |
FCKSelection.SelectNode = function( node ) |
{ |
FCK.Focus() ; |
FCK.EditorDocument.selection.empty() ; |
try |
{ |
// Try to select the node as a control. |
var oRange = FCK.EditorDocument.body.createControlRange() ; |
oRange.addElement( node ) ; |
} |
catch(e) |
{ |
// If failed, select it as a text range. |
var oRange = FCK.EditorDocument.selection.createRange() ; |
oRange.moveToElementText( node ) ; |
} |
oRange.select() ; |
} |
FCKSelection.Collapse = function( toStart ) |
{ |
FCK.Focus() ; |
if ( this.GetType() == 'Text' ) |
{ |
var oRange = FCK.EditorDocument.selection.createRange() ; |
oRange.collapse( toStart == null || toStart === true ) ; |
oRange.select() ; |
} |
} |
// The "nodeTagName" parameter must be Upper Case. |
FCKSelection.HasAncestorNode = function( nodeTagName ) |
{ |
var oContainer ; |
if ( FCK.EditorDocument.selection.type == "Control" ) |
{ |
oContainer = this.GetSelectedElement() ; |
} |
else |
{ |
var oRange = FCK.EditorDocument.selection.createRange() ; |
oContainer = oRange.parentElement() ; |
} |
while ( oContainer ) |
{ |
if ( oContainer.tagName == nodeTagName ) return true ; |
oContainer = oContainer.parentNode ; |
} |
return false ; |
} |
// The "nodeTagName" parameter must be UPPER CASE. |
FCKSelection.MoveToAncestorNode = function( nodeTagName ) |
{ |
var oNode ; |
if ( FCK.EditorDocument.selection.type == "Control" ) |
{ |
var oRange = FCK.EditorDocument.selection.createRange() ; |
for ( i = 0 ; i < oRange.length ; i++ ) |
{ |
if (oRange(i).parentNode) |
{ |
oNode = oRange(i).parentNode ; |
break ; |
} |
} |
} |
else |
{ |
var oRange = FCK.EditorDocument.selection.createRange() ; |
oNode = oRange.parentElement() ; |
} |
while ( oNode && oNode.nodeName != nodeTagName ) |
oNode = oNode.parentNode ; |
return oNode ; |
} |
FCKSelection.Delete = function() |
{ |
// Gets the actual selection. |
var oSel = FCK.EditorDocument.selection ; |
// Deletes the actual selection contents. |
if ( oSel.type.toLowerCase() != "none" ) |
{ |
oSel.clear() ; |
} |
return oSel ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/internals/fckurlparams.js |
---|
New file |
0,0 → 1,32 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckurlparams.js |
* Defines the FCKURLParams object that is used to get all parameters |
* passed by the URL QueryString (after the "?"). |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
// #### URLParams: holds all URL passed parameters (like ?Param1=Value1&Param2=Value2) |
var FCKURLParams = new Object() ; |
var aParams = document.location.search.substr(1).split('&') ; |
for ( var i = 0 ; i < aParams.length ; i++ ) |
{ |
var aParam = aParams[i].split('=') ; |
var sParamName = aParam[0] ; |
var sParamValue = aParam[1] ; |
FCKURLParams[ sParamName ] = sParamValue ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/internals/fck_contextmenu.js |
---|
New file |
0,0 → 1,290 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fck_contextmenu.js |
* Defines the FCK.ContextMenu object that is responsible for all |
* Context Menu operations in the editing area. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
FCK.ContextMenu = new Object() ; |
FCK.ContextMenu.Listeners = new Array() ; |
FCK.ContextMenu.RegisterListener = function( listener ) |
{ |
if ( listener ) |
this.Listeners.push( listener ) ; |
} |
function FCK_ContextMenu_Init() |
{ |
var oInnerContextMenu = FCK.ContextMenu._InnerContextMenu = new FCKContextMenu( FCKBrowserInfo.IsIE ? window : window.parent, FCK.EditorWindow, FCKLang.Dir ) ; |
oInnerContextMenu.OnBeforeOpen = FCK_ContextMenu_OnBeforeOpen ; |
oInnerContextMenu.OnItemClick = FCK_ContextMenu_OnItemClick ; |
// Get the registering function. |
var oMenu = FCK.ContextMenu ; |
// Register all configured context menu listeners. |
for ( var i = 0 ; i < FCKConfig.ContextMenu.length ; i++ ) |
oMenu.RegisterListener( FCK_ContextMenu_GetListener( FCKConfig.ContextMenu[i] ) ) ; |
} |
function FCK_ContextMenu_GetListener( listenerName ) |
{ |
switch ( listenerName ) |
{ |
case 'Generic' : |
return { |
AddItems : function( menu, tag, tagName ) |
{ |
menu.AddItem( 'Cut' , FCKLang.Cut , 7, FCKCommands.GetCommand( 'Cut' ).GetState() == FCK_TRISTATE_DISABLED ) ; |
menu.AddItem( 'Copy' , FCKLang.Copy , 8, FCKCommands.GetCommand( 'Copy' ).GetState() == FCK_TRISTATE_DISABLED ) ; |
menu.AddItem( 'Paste' , FCKLang.Paste , 9, FCKCommands.GetCommand( 'Paste' ).GetState() == FCK_TRISTATE_DISABLED ) ; |
}} ; |
case 'Table' : |
return { |
AddItems : function( menu, tag, tagName ) |
{ |
var bIsTable = ( tagName == 'TABLE' ) ; |
var bIsCell = ( !bIsTable && FCKSelection.HasAncestorNode( 'TABLE' ) ) ; |
if ( bIsCell ) |
{ |
menu.AddSeparator() ; |
var oItem = menu.AddItem( 'Cell' , FCKLang.CellCM ) ; |
oItem.AddItem( 'TableInsertCell' , FCKLang.InsertCell, 58 ) ; |
oItem.AddItem( 'TableDeleteCells' , FCKLang.DeleteCells, 59 ) ; |
oItem.AddItem( 'TableMergeCells' , FCKLang.MergeCells, 60 ) ; |
oItem.AddItem( 'TableSplitCell' , FCKLang.SplitCell, 61 ) ; |
oItem.AddSeparator() ; |
oItem.AddItem( 'TableCellProp' , FCKLang.CellProperties, 57 ) ; |
menu.AddSeparator() ; |
oItem = menu.AddItem( 'Row' , FCKLang.RowCM ) ; |
oItem.AddItem( 'TableInsertRow' , FCKLang.InsertRow, 62 ) ; |
oItem.AddItem( 'TableDeleteRows' , FCKLang.DeleteRows, 63 ) ; |
menu.AddSeparator() ; |
oItem = menu.AddItem( 'Column' , FCKLang.ColumnCM ) ; |
oItem.AddItem( 'TableInsertColumn' , FCKLang.InsertColumn, 64 ) ; |
oItem.AddItem( 'TableDeleteColumns' , FCKLang.DeleteColumns, 65 ) ; |
} |
if ( bIsTable || bIsCell ) |
{ |
menu.AddSeparator() ; |
menu.AddItem( 'TableDelete' , FCKLang.TableDelete ) ; |
menu.AddItem( 'TableProp' , FCKLang.TableProperties, 39 ) ; |
} |
}} ; |
case 'Link' : |
return { |
AddItems : function( menu, tag, tagName ) |
{ |
var bInsideLink = ( tagName == 'A' || FCKSelection.HasAncestorNode( 'A' ) ) ; |
if ( bInsideLink || FCK.GetNamedCommandState( 'Unlink' ) != FCK_TRISTATE_DISABLED ) |
{ |
menu.AddSeparator() ; |
if ( bInsideLink ) |
menu.AddItem( 'Link', FCKLang.EditLink , 34 ) ; |
menu.AddItem( 'Unlink' , FCKLang.RemoveLink , 35 ) ; |
} |
}} ; |
case 'Image' : |
return { |
AddItems : function( menu, tag, tagName ) |
{ |
if ( tagName == 'IMG' && !tag.getAttribute( '_fckfakelement' ) ) |
{ |
menu.AddSeparator() ; |
menu.AddItem( 'Image', FCKLang.ImageProperties, 37 ) ; |
} |
}} ; |
case 'Anchor' : |
return { |
AddItems : function( menu, tag, tagName ) |
{ |
if ( tagName == 'IMG' && tag.getAttribute( '_fckanchor' ) ) |
{ |
menu.AddSeparator() ; |
menu.AddItem( 'Anchor', FCKLang.AnchorProp, 36 ) ; |
} |
}} ; |
case 'Flash' : |
return { |
AddItems : function( menu, tag, tagName ) |
{ |
if ( tagName == 'IMG' && tag.getAttribute( '_fckflash' ) ) |
{ |
menu.AddSeparator() ; |
menu.AddItem( 'Flash', FCKLang.FlashProperties, 38 ) ; |
} |
}} ; |
case 'Form' : |
return { |
AddItems : function( menu, tag, tagName ) |
{ |
if ( FCKSelection.HasAncestorNode('FORM') ) |
{ |
menu.AddSeparator() ; |
menu.AddItem( 'Form', FCKLang.FormProp, 48 ) ; |
} |
}} ; |
case 'Checkbox' : |
return { |
AddItems : function( menu, tag, tagName ) |
{ |
if ( tagName == 'INPUT' && tag.type == 'checkbox' ) |
{ |
menu.AddSeparator() ; |
menu.AddItem( 'Checkbox', FCKLang.CheckboxProp, 49 ) ; |
} |
}} ; |
case 'Radio' : |
return { |
AddItems : function( menu, tag, tagName ) |
{ |
if ( tagName == 'INPUT' && tag.type == 'radio' ) |
{ |
menu.AddSeparator() ; |
menu.AddItem( 'Radio', FCKLang.RadioButtonProp, 50 ) ; |
} |
}} ; |
case 'TextField' : |
return { |
AddItems : function( menu, tag, tagName ) |
{ |
if ( tagName == 'INPUT' && ( tag.type == 'text' || tag.type == 'password' ) ) |
{ |
menu.AddSeparator() ; |
menu.AddItem( 'TextField', FCKLang.TextFieldProp, 51 ) ; |
} |
}} ; |
case 'HiddenField' : |
return { |
AddItems : function( menu, tag, tagName ) |
{ |
if ( tagName == 'INPUT' && tag.type == 'hidden' ) |
{ |
menu.AddSeparator() ; |
menu.AddItem( 'HiddenField', FCKLang.HiddenFieldProp, 56 ) ; |
} |
}} ; |
case 'ImageButton' : |
return { |
AddItems : function( menu, tag, tagName ) |
{ |
if ( tagName == 'INPUT' && tag.type == 'image' ) |
{ |
menu.AddSeparator() ; |
menu.AddItem( 'ImageButton', FCKLang.ImageButtonProp, 55 ) ; |
} |
}} ; |
case 'Button' : |
return { |
AddItems : function( menu, tag, tagName ) |
{ |
if ( tagName == 'INPUT' && ( tag.type == 'button' || tag.type == 'submit' || tag.type == 'reset' ) ) |
{ |
menu.AddSeparator() ; |
menu.AddItem( 'Button', FCKLang.ButtonProp, 54 ) ; |
} |
}} ; |
case 'Select' : |
return { |
AddItems : function( menu, tag, tagName ) |
{ |
if ( tagName == 'SELECT' ) |
{ |
menu.AddSeparator() ; |
menu.AddItem( 'Select', FCKLang.SelectionFieldProp, 53 ) ; |
} |
}} ; |
case 'Textarea' : |
return { |
AddItems : function( menu, tag, tagName ) |
{ |
if ( tagName == 'TEXTAREA' ) |
{ |
menu.AddSeparator() ; |
menu.AddItem( 'Textarea', FCKLang.TextareaProp, 52 ) ; |
} |
}} ; |
case 'BulletedList' : |
return { |
AddItems : function( menu, tag, tagName ) |
{ |
if ( FCKSelection.HasAncestorNode('UL') ) |
{ |
menu.AddSeparator() ; |
menu.AddItem( 'BulletedList', FCKLang.BulletedListProp, 27 ) ; |
} |
}} ; |
case 'NumberedList' : |
return { |
AddItems : function( menu, tag, tagName ) |
{ |
if ( FCKSelection.HasAncestorNode('OL') ) |
{ |
menu.AddSeparator() ; |
menu.AddItem( 'NumberedList', FCKLang.NumberedListProp, 26 ) ; |
} |
}} ; |
} |
} |
function FCK_ContextMenu_OnBeforeOpen() |
{ |
// Update the UI. |
FCK.Events.FireEvent( "OnSelectionChange" ) ; |
// Get the actual selected tag (if any). |
var oTag, sTagName ; |
if ( oTag = FCKSelection.GetSelectedElement() ) |
sTagName = oTag.tagName ; |
// Cleanup the current menu items. |
var oMenu = FCK.ContextMenu._InnerContextMenu ; |
oMenu.RemoveAllItems() ; |
// Loop through the listeners. |
var aListeners = FCK.ContextMenu.Listeners ; |
for ( var i = 0 ; i < aListeners.length ; i++ ) |
aListeners[i].AddItems( oMenu, oTag, sTagName ) ; |
} |
function FCK_ContextMenu_OnItemClick( item ) |
{ |
FCK.Focus() ; |
FCKCommands.GetCommand( item.Name ).Execute() ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/internals/fck_2_gecko.js |
---|
New file |
0,0 → 1,196 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fck_2_gecko.js |
* This is the second part of the "FCK" object creation. This is the main |
* object that represents an editor instance. |
* (Gecko specific implementations) |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
// GetNamedCommandState overload for Gecko. |
FCK._BaseGetNamedCommandState = FCK.GetNamedCommandState ; |
FCK.GetNamedCommandState = function( commandName ) |
{ |
switch ( commandName ) |
{ |
case 'Unlink' : |
return FCKSelection.HasAncestorNode('A') ? FCK_TRISTATE_OFF : FCK_TRISTATE_DISABLED ; |
default : |
return FCK._BaseGetNamedCommandState( commandName ) ; |
} |
} |
// Named commands to be handled by this browsers specific implementation. |
FCK.RedirectNamedCommands = |
{ |
Print : true, |
Paste : true, |
Cut : true, |
Copy : true |
} |
// ExecuteNamedCommand overload for Gecko. |
FCK.ExecuteRedirectedNamedCommand = function( commandName, commandParameter ) |
{ |
switch ( commandName ) |
{ |
case 'Print' : |
FCK.EditorWindow.print() ; |
break ; |
case 'Paste' : |
try { if ( FCK.Paste() ) FCK.ExecuteNamedCommand( 'Paste', null, true ) ; } |
catch (e) { alert(FCKLang.PasteErrorPaste) ; } |
break ; |
case 'Cut' : |
try { FCK.ExecuteNamedCommand( 'Cut', null, true ) ; } |
catch (e) { alert(FCKLang.PasteErrorCut) ; } |
break ; |
case 'Copy' : |
try { FCK.ExecuteNamedCommand( 'Copy', null, true ) ; } |
catch (e) { alert(FCKLang.PasteErrorCopy) ; } |
break ; |
default : |
FCK.ExecuteNamedCommand( commandName, commandParameter ) ; |
} |
} |
FCK.AttachToOnSelectionChange = function( functionPointer ) |
{ |
this.Events.AttachEvent( 'OnSelectionChange', functionPointer ) ; |
} |
FCK.Paste = function() |
{ |
if ( FCKConfig.ForcePasteAsPlainText ) |
{ |
FCK.PasteAsPlainText() ; |
return false ; |
} |
/* For now, the AutoDetectPasteFromWord feature is IE only. |
else if ( FCKConfig.AutoDetectPasteFromWord ) |
{ |
var sHTML = FCK.GetClipboardHTML() ; |
var re = /<\w[^>]* class="?MsoNormal"?/gi ; |
if ( re.test( sHTML ) ) |
{ |
if ( confirm( FCKLang["PasteWordConfirm"] ) ) |
{ |
FCK.PasteFromWord() ; |
return false ; |
} |
} |
} |
*/ |
else |
return true ; |
} |
//** |
// FCK.InsertHtml: Inserts HTML at the current cursor location. Deletes the |
// selected content if any. |
FCK.InsertHtml = function( html ) |
{ |
html = FCKConfig.ProtectedSource.Protect( html ) ; |
html = FCK.ProtectUrls( html ) ; |
// Delete the actual selection. |
var oSel = FCKSelection.Delete() ; |
// Get the first available range. |
var oRange = oSel.getRangeAt(0) ; |
// Create a fragment with the input HTML. |
var oFragment = oRange.createContextualFragment( html ) ; |
// Get the last available node. |
var oLastNode = oFragment.lastChild ; |
// Insert the fragment in the range. |
oRange.insertNode(oFragment) ; |
// Set the cursor after the inserted fragment. |
FCKSelection.SelectNode( oLastNode ) ; |
FCKSelection.Collapse( false ) ; |
this.Focus() ; |
} |
FCK.InsertElement = function( element ) |
{ |
// Deletes the actual selection. |
var oSel = FCKSelection.Delete() ; |
// Gets the first available range. |
var oRange = oSel.getRangeAt(0) ; |
// Inserts the element in the range. |
oRange.insertNode( element ) ; |
// Set the cursor after the inserted fragment. |
FCKSelection.SelectNode( element ) ; |
FCKSelection.Collapse( false ) ; |
this.Focus() ; |
} |
FCK.PasteAsPlainText = function() |
{ |
// TODO: Implement the "Paste as Plain Text" code. |
FCKDialog.OpenDialog( 'FCKDialog_Paste', FCKLang.PasteAsText, 'dialog/fck_paste.html', 400, 330, 'PlainText' ) ; |
/* |
var sText = FCKTools.HTMLEncode( clipboardData.getData("Text") ) ; |
sText = sText.replace( /\n/g, '<BR>' ) ; |
this.InsertHtml( sText ) ; |
*/ |
} |
/* |
FCK.PasteFromWord = function() |
{ |
// TODO: Implement the "Paste as Plain Text" code. |
FCKDialog.OpenDialog( 'FCKDialog_Paste', FCKLang.PasteFromWord, 'dialog/fck_paste.html', 400, 330, 'Word' ) ; |
// FCK.CleanAndPaste( FCK.GetClipboardHTML() ) ; |
} |
*/ |
FCK.GetClipboardHTML = function() |
{ |
return '' ; |
} |
FCK.CreateLink = function( url ) |
{ |
FCK.ExecuteNamedCommand( 'Unlink' ) ; |
if ( url.length > 0 ) |
{ |
// Generate a temporary name for the link. |
var sTempUrl = 'javascript:void(0);/*' + ( new Date().getTime() ) + '*/' ; |
// Use the internal "CreateLink" command to create the link. |
FCK.ExecuteNamedCommand( 'CreateLink', sTempUrl ) ; |
// Retrieve the just created link using XPath. |
var oLink = document.evaluate("//a[@href='" + sTempUrl + "']", this.EditorDocument.body, null, 9, null).singleNodeValue ; |
if ( oLink ) |
{ |
oLink.href = url ; |
return oLink ; |
} |
} |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/internals/fckdialog_ie.js |
---|
New file |
0,0 → 1,40 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckdialog_ie.js |
* Dialog windows operations. (IE specific implementations) |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
FCKDialog.Show = function( dialogInfo, dialogName, pageUrl, dialogWidth, dialogHeight, parentWindow ) |
{ |
if ( !parentWindow ) |
parentWindow = window ; |
FCKFocusManager.Lock() ; |
var oReturn ; |
try |
{ |
oReturn = parentWindow.showModalDialog( pageUrl, dialogInfo, "dialogWidth:" + dialogWidth + "px;dialogHeight:" + dialogHeight + "px;help:no;scroll:no;status:no") ; |
} |
catch( e ) |
{} |
if ( !oReturn ) |
alert( FCKLang.DialogBlocked ) ; |
FCKFocusManager.Unlock() ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/internals/fck_1_ie.js |
---|
New file |
0,0 → 1,294 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fck_1_ie.js |
* This is the first part of the "FCK" object creation. This is the main |
* object that represents an editor instance. |
* (IE specific implementations) |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
FCK.Description = "FCKeditor for Internet Explorer 5.5+" ; |
FCK._GetBehaviorsStyle = function() |
{ |
if ( !FCK._BehaviorsStyle ) |
{ |
var sBasePath = FCKConfig.FullBasePath ; |
var sTableBehavior = '' ; |
var sStyle ; |
// The behaviors should be pointed using the FullBasePath to avoid security |
// errors when using a differente BaseHref. |
sStyle = |
'<style type="text/css" _fcktemp="true">' + |
'INPUT { behavior: url(' + sBasePath + 'css/behaviors/hiddenfield.htc) ; }' ; |
if ( FCKConfig.ShowBorders ) |
sTableBehavior = 'url(' + sBasePath + 'css/behaviors/showtableborders.htc)' ; |
// Disable resize handlers. |
sStyle += 'INPUT,TEXTAREA,SELECT,.FCK__Anchor,.FCK__PageBreak' ; |
if ( FCKConfig.DisableObjectResizing ) |
{ |
sStyle += ',IMG' ; |
sTableBehavior += ' url(' + sBasePath + 'css/behaviors/disablehandles.htc)' ; |
} |
sStyle += ' { behavior: url(' + sBasePath + 'css/behaviors/disablehandles.htc) ; }' ; |
if ( sTableBehavior.length > 0 ) |
sStyle += 'TABLE { behavior: ' + sTableBehavior + ' ; }' ; |
sStyle += '</style>' ; |
FCK._BehaviorsStyle = sStyle ; |
} |
return FCK._BehaviorsStyle ; |
} |
function Doc_OnMouseUp() |
{ |
if ( FCK.EditorWindow.event.srcElement.tagName == 'HTML' ) |
{ |
FCK.Focus() ; |
FCK.EditorWindow.event.cancelBubble = true ; |
FCK.EditorWindow.event.returnValue = false ; |
} |
} |
function Doc_OnPaste() |
{ |
if ( FCK.Status == FCK_STATUS_COMPLETE ) |
FCK.Events.FireEvent( "OnPaste" ) ; |
return false ; |
} |
/* |
function Doc_OnContextMenu() |
{ |
var e = FCK.EditorWindow.event ; |
FCK.ShowContextMenu( e.screenX, e.screenY ) ; |
return false ; |
} |
*/ |
function Doc_OnKeyDown() |
{ |
var e = FCK.EditorWindow.event ; |
switch ( e.keyCode ) |
{ |
case 13 : // ENTER |
if ( FCKConfig.UseBROnCarriageReturn && !(e.ctrlKey || e.altKey || e.shiftKey) ) |
{ |
Doc_OnKeyDownUndo() ; |
// We must ignore it if we are inside a List. |
if ( FCK.EditorDocument.queryCommandState( 'InsertOrderedList' ) || FCK.EditorDocument.queryCommandState( 'InsertUnorderedList' ) ) |
return true ; |
// Insert the <BR> (The must be also inserted to make it work) |
FCK.InsertHtml( '<br> ' ) ; |
// Remove the |
var oRange = FCK.EditorDocument.selection.createRange() ; |
oRange.moveStart( 'character', -1 ) ; |
oRange.select() ; |
FCK.EditorDocument.selection.clear() ; |
return false ; |
} |
break ; |
case 8 : // BACKSPACE |
// We must delete a control selection by code and cancels the |
// keystroke, otherwise IE will execute the browser's "back" button. |
if ( FCKSelection.GetType() == 'Control' ) |
{ |
FCKSelection.Delete() ; |
return false ; |
} |
break ; |
case 9 : // TAB |
if ( FCKConfig.TabSpaces > 0 && !(e.ctrlKey || e.altKey || e.shiftKey) ) |
{ |
Doc_OnKeyDownUndo() ; |
FCK.InsertHtml( window.FCKTabHTML ) ; |
return false ; |
} |
break ; |
case 90 : // Z |
if ( e.ctrlKey && !(e.altKey || e.shiftKey) ) |
{ |
FCKUndo.Undo() ; |
return false ; |
} |
break ; |
case 89 : // Y |
if ( e.ctrlKey && !(e.altKey || e.shiftKey) ) |
{ |
FCKUndo.Redo() ; |
return false ; |
} |
break ; |
} |
if ( !( e.keyCode >=16 && e.keyCode <= 18 ) ) |
Doc_OnKeyDownUndo() ; |
return true ; |
} |
function Doc_OnKeyDownUndo() |
{ |
if ( !FCKUndo.Typing ) |
{ |
FCKUndo.SaveUndoStep() ; |
FCKUndo.Typing = true ; |
FCK.Events.FireEvent( "OnSelectionChange" ) ; |
} |
FCKUndo.TypesCount++ ; |
if ( FCKUndo.TypesCount > FCKUndo.MaxTypes ) |
{ |
FCKUndo.TypesCount = 0 ; |
FCKUndo.SaveUndoStep() ; |
} |
} |
function Doc_OnDblClick() |
{ |
FCK.OnDoubleClick( FCK.EditorWindow.event.srcElement ) ; |
FCK.EditorWindow.event.cancelBubble = true ; |
} |
function Doc_OnSelectionChange() |
{ |
FCK.Events.FireEvent( "OnSelectionChange" ) ; |
} |
FCK.InitializeBehaviors = function( dontReturn ) |
{ |
// Set the focus to the editable area when clicking in the document area. |
// TODO: The cursor must be positioned at the end. |
this.EditorDocument.attachEvent( 'onmouseup', Doc_OnMouseUp ) ; |
// Intercept pasting operations |
this.EditorDocument.body.attachEvent( 'onpaste', Doc_OnPaste ) ; |
// Reset the context menu. |
FCK.ContextMenu._InnerContextMenu.AttachToElement( FCK.EditorDocument.body ) ; |
// Build the "TAB" key replacement (if necessary). |
if ( FCKConfig.TabSpaces > 0 ) |
{ |
window.FCKTabHTML = '' ; |
for ( i = 0 ; i < FCKConfig.TabSpaces ; i++ ) |
window.FCKTabHTML += " " ; |
} |
this.EditorDocument.attachEvent("onkeydown", Doc_OnKeyDown ) ; |
this.EditorDocument.attachEvent("ondblclick", Doc_OnDblClick ) ; |
// Catch cursor movements |
this.EditorDocument.attachEvent("onselectionchange", Doc_OnSelectionChange ) ; |
//Enable editing |
// this.EditorDocument.body.contentEditable = true ; |
} |
FCK.InsertHtml = function( html ) |
{ |
html = FCKConfig.ProtectedSource.Protect( html ) ; |
html = FCK.ProtectUrls( html ) ; |
FCK.Focus() ; |
FCKUndo.SaveUndoStep() ; |
// Gets the actual selection. |
var oSel = FCK.EditorDocument.selection ; |
// Deletes the actual selection contents. |
if ( oSel.type.toLowerCase() == 'control' ) |
oSel.clear() ; |
// Insert the HTML. |
oSel.createRange().pasteHTML( html ) ; |
FCKDocumentProcessor.Process( FCK.EditorDocument ) ; |
} |
FCK.SetInnerHtml = function( html ) // IE Only |
{ |
var oDoc = FCK.EditorDocument ; |
// Using the following trick, any comment in the begining of the HTML will |
// be preserved. |
oDoc.body.innerHTML = '<div id="__fakeFCKRemove__"> </div>' + html ; |
oDoc.getElementById('__fakeFCKRemove__').removeNode( true ) ; |
} |
var FCK_PreloadImages_Count = 0 ; |
var FCK_PreloadImages_Images = new Array() ; |
function FCK_PreloadImages() |
{ |
// Get the images to preload. |
var aImages = FCKConfig.PreloadImages || [] ; |
if ( typeof( aImages ) == 'string' ) |
aImages = aImages.split( ';' ) ; |
// Add the skin icons strip. |
aImages.push( FCKConfig.SkinPath + 'fck_strip.gif' ) ; |
FCK_PreloadImages_Count = aImages.length ; |
var aImageElements = new Array() ; |
for ( var i = 0 ; i < aImages.length ; i++ ) |
{ |
var eImg = document.createElement( 'img' ) ; |
eImg.onload = eImg.onerror = FCK_PreloadImages_OnImage ; |
eImg.src = aImages[i] ; |
FCK_PreloadImages_Images[i] = eImg ; |
} |
} |
function FCK_PreloadImages_OnImage() |
{ |
if ( (--FCK_PreloadImages_Count) == 0 ) |
FCKTools.RunFunction( LoadToolbarSetup ) ; |
} |
// Disable the context menu in the editor (outside the editing area). |
function Document_OnContextMenu() |
{ |
return ( event.srcElement._FCKShowContextMenu == true ) ; |
} |
document.oncontextmenu = Document_OnContextMenu ; |
function FCK_Cleanup() |
{ |
this.EditorWindow = null ; |
this.EditorDocument = null ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/internals/fck_2_ie.js |
---|
New file |
0,0 → 1,164 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fck_2_ie.js |
* This is the second part of the "FCK" object creation. This is the main |
* object that represents an editor instance. |
* (IE specific implementations) |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
/* |
if ( FCKConfig.UseBROnCarriageReturn ) |
{ |
// Named commands to be handled by this browsers specific implementation. |
FCK.RedirectNamedCommands = |
{ |
InsertOrderedList : true, |
InsertUnorderedList : true |
} |
FCK.ExecuteRedirectedNamedCommand = function( commandName, commandParameter ) |
{ |
if ( commandName == 'InsertOrderedList' || commandName == 'InsertUnorderedList' ) |
{ |
if ( !(FCK.EditorDocument.queryCommandState( 'InsertOrderedList' ) || FCK.EditorDocument.queryCommandState( 'InsertUnorderedList' )) ) |
{ |
} |
} |
FCK.ExecuteNamedCommand( commandName, commandParameter ) ; |
} |
} |
*/ |
FCK.Paste = function() |
{ |
if ( FCKConfig.ForcePasteAsPlainText ) |
{ |
FCK.PasteAsPlainText() ; |
return ; |
} |
var sHTML = FCK.GetClipboardHTML() ; |
if ( FCKConfig.AutoDetectPasteFromWord ) |
{ |
var re = /<\w[^>]*(( class="?MsoNormal"?)|(="mso-))/gi ; |
if ( re.test( sHTML ) ) |
{ |
if ( confirm( FCKLang["PasteWordConfirm"] ) ) |
{ |
FCK.PasteFromWord() ; |
return ; |
} |
} |
} |
FCK.InsertHtml( sHTML ) ; |
} |
FCK.PasteAsPlainText = function() |
{ |
// Get the data available in the clipboard and encodes it in HTML. |
var sText = FCKTools.HTMLEncode( clipboardData.getData("Text") ) ; |
// Replace the carriage returns with <BR> |
sText = sText.replace( /\n/g, '<BR>' ) ; |
// Insert the resulting data in the editor. |
this.InsertHtml( sText ) ; |
} |
/* |
FCK.PasteFromWord = function() |
{ |
FCK.CleanAndPaste( FCK.GetClipboardHTML() ) ; |
} |
*/ |
FCK.InsertElement = function( element ) |
{ |
FCK.InsertHtml( element.outerHTML ) ; |
} |
FCK.GetClipboardHTML = function() |
{ |
var oDiv = document.getElementById( '___FCKHiddenDiv' ) ; |
if ( !oDiv ) |
{ |
var oDiv = document.createElement( 'DIV' ) ; |
oDiv.id = '___FCKHiddenDiv' ; |
oDiv.style.visibility = 'hidden' ; |
oDiv.style.overflow = 'hidden' ; |
oDiv.style.position = 'absolute' ; |
oDiv.style.width = 1 ; |
oDiv.style.height = 1 ; |
document.body.appendChild( oDiv ) ; |
} |
oDiv.innerHTML = '' ; |
var oTextRange = document.body.createTextRange() ; |
oTextRange.moveToElementText( oDiv ) ; |
oTextRange.execCommand( 'Paste' ) ; |
var sData = oDiv.innerHTML ; |
oDiv.innerHTML = '' ; |
return sData ; |
} |
FCK.AttachToOnSelectionChange = function( functionPointer ) |
{ |
this.Events.AttachEvent( 'OnSelectionChange', functionPointer ) ; |
} |
/* |
FCK.AttachToOnSelectionChange = function( functionPointer ) |
{ |
FCK.EditorDocument.attachEvent( 'onselectionchange', functionPointer ) ; |
} |
*/ |
FCK.CreateLink = function( url ) |
{ |
// Remove any existing link in the selection. |
FCK.ExecuteNamedCommand( 'Unlink' ) ; |
if ( url.length > 0 ) |
{ |
// Generate a temporary name for the link. |
var sTempUrl = 'javascript:void(0);/*' + ( new Date().getTime() ) + '*/' ; |
// Use the internal "CreateLink" command to create the link. |
FCK.ExecuteNamedCommand( 'CreateLink', sTempUrl ) ; |
// Look for the just create link. |
var oLinks = this.EditorDocument.links ; |
for ( i = 0 ; i < oLinks.length ; i++ ) |
{ |
var oLink = oLinks[i] ; |
if ( oLink.href == sTempUrl ) |
{ |
var sInnerHtml = oLink.innerHTML ; // Save the innerHTML (IE changes it if it is like an URL). |
oLink.href = url ; |
oLink.innerHTML = sInnerHtml ; // Restore the innerHTML. |
return oLink ; |
} |
} |
} |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/internals/fckundo_gecko.js |
---|
New file |
0,0 → 1,23 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckundo_gecko.js |
* Fake implementation to ignore calls on Gecko. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
var FCKUndo = new Object() ; |
FCKUndo.SaveUndoStep = function() |
{} |
/branches/v1.0-menes/api/fckeditor/editor/_source/internals/fcklanguagemanager.js |
---|
New file |
0,0 → 1,152 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fcklanguagemanager.js |
* Defines the FCKLanguageManager object that is used for language |
* operations. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
var FCKLanguageManager = FCK.Language = new Object() ; |
FCKLanguageManager.AvailableLanguages = |
{ |
'ar' : 'Arabic', |
'bg' : 'Bulgarian', |
'bn' : 'Bengali/Bangla', |
'bs' : 'Bosnian', |
'ca' : 'Catalan', |
'cs' : 'Czech', |
'da' : 'Danish', |
'de' : 'German', |
'el' : 'Greek', |
'en' : 'English', |
'en-au' : 'English (Australia)', |
'en-ca' : 'English (Canadian)', |
'en-uk' : 'English (United Kingdom)', |
'eo' : 'Esperanto', |
'es' : 'Spanish', |
'et' : 'Estonian', |
'eu' : 'Basque', |
'fa' : 'Persian', |
'fi' : 'Finnish', |
'fo' : 'Faroese', |
'fr' : 'French', |
'gl' : 'Galician', |
'he' : 'Hebrew', |
'hi' : 'Hindi', |
'hr' : 'Croatian', |
'hu' : 'Hungarian', |
'it' : 'Italian', |
'ja' : 'Japanese', |
'km' : 'Khmer', |
'ko' : 'Korean', |
'lt' : 'Lithuanian', |
'lv' : 'Latvian', |
'mn' : 'Mongolian', |
'ms' : 'Malay', |
'nb' : 'Norwegian Bokmal', |
'nl' : 'Dutch', |
'no' : 'Norwegian', |
'pl' : 'Polish', |
'pt' : 'Portuguese (Portugal)', |
'pt-br' : 'Portuguese (Brazil)', |
'ro' : 'Romanian', |
'ru' : 'Russian', |
'sk' : 'Slovak', |
'sl' : 'Slovenian', |
'sr' : 'Serbian (Cyrillic)', |
'sr-latn' : 'Serbian (Latin)', |
'sv' : 'Swedish', |
'th' : 'Thai', |
'tr' : 'Turkish', |
'uk' : 'Ukrainian', |
'vi' : 'Vietnamese', |
'zh' : 'Chinese Traditional', |
'zh-cn' : 'Chinese Simplified' |
} |
FCKLanguageManager.GetActiveLanguage = function() |
{ |
if ( FCKConfig.AutoDetectLanguage ) |
{ |
var sUserLang ; |
// IE accepts "navigator.userLanguage" while Gecko "navigator.language". |
if ( navigator.userLanguage ) |
sUserLang = navigator.userLanguage.toLowerCase() ; |
else if ( navigator.language ) |
sUserLang = navigator.language.toLowerCase() ; |
else |
{ |
// Firefox 1.0 PR has a bug: it doens't support the "language" property. |
return FCKConfig.DefaultLanguage ; |
} |
// Some language codes are set in 5 characters, |
// like "pt-br" for Brasilian Portuguese. |
if ( sUserLang.length >= 5 ) |
{ |
sUserLang = sUserLang.substr(0,5) ; |
if ( this.AvailableLanguages[sUserLang] ) return sUserLang ; |
} |
// If the user's browser is set to, for example, "pt-br" but only the |
// "pt" language file is available then get that file. |
if ( sUserLang.length >= 2 ) |
{ |
sUserLang = sUserLang.substr(0,2) ; |
if ( this.AvailableLanguages[sUserLang] ) return sUserLang ; |
} |
} |
return this.DefaultLanguage ; |
} |
FCKLanguageManager.TranslateElements = function( targetDocument, tag, propertyToSet, encode ) |
{ |
var e = targetDocument.getElementsByTagName(tag) ; |
var sKey, s ; |
for ( var i = 0 ; i < e.length ; i++ ) |
{ |
if ( sKey = e[i].getAttribute( 'fckLang' ) ) |
{ |
if ( s = FCKLang[ sKey ] ) |
{ |
if ( encode ) |
s = FCKTools.HTMLEncode( s ) ; |
eval( 'e[i].' + propertyToSet + ' = s' ) ; |
} |
} |
} |
} |
FCKLanguageManager.TranslatePage = function( targetDocument ) |
{ |
this.TranslateElements( targetDocument, 'INPUT', 'value' ) ; |
this.TranslateElements( targetDocument, 'SPAN', 'innerHTML' ) ; |
this.TranslateElements( targetDocument, 'LABEL', 'innerHTML' ) ; |
this.TranslateElements( targetDocument, 'OPTION', 'innerHTML', true ) ; |
} |
FCKLanguageManager.Initialize = function() |
{ |
if ( this.AvailableLanguages[ FCKConfig.DefaultLanguage ] ) |
this.DefaultLanguage = FCKConfig.DefaultLanguage ; |
else |
this.DefaultLanguage = 'en' ; |
this.ActiveLanguage = new Object() ; |
this.ActiveLanguage.Code = this.GetActiveLanguage() ; |
this.ActiveLanguage.Name = this.AvailableLanguages[ this.ActiveLanguage.Code ] ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/internals/fcktoolbarset.js |
---|
New file |
0,0 → 1,352 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fcktoolbarset.js |
* Defines the FCKToolbarSet object that is used to load and draw the |
* toolbar. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
function FCKToolbarSet_Create( overhideLocation ) |
{ |
var oToolbarSet ; |
var sLocation = overhideLocation || FCKConfig.ToolbarLocation ; |
switch ( sLocation ) |
{ |
case 'In' : |
document.getElementById( 'xToolbarRow' ).style.display = '' ; |
oToolbarSet = new FCKToolbarSet( document ) ; |
break ; |
// case 'OutTop' : |
// Not supported. |
default : |
FCK.Events.AttachEvent( 'OnBlur', FCK_OnBlur ) ; |
FCK.Events.AttachEvent( 'OnFocus', FCK_OnFocus ) ; |
var eToolbarTarget ; |
// Out:[TargetWindow]([TargetId]) |
var oOutMatch = sLocation.match( /^Out:(.+)\((\w+)\)$/ ) ; |
if ( oOutMatch ) |
{ |
eToolbarTarget = eval( 'parent.' + oOutMatch[1] ).document.getElementById( oOutMatch[2] ) ; |
} |
else |
{ |
// Out:[TargetId] |
oOutMatch = sLocation.match( /^Out:(\w+)$/ ) ; |
if ( oOutMatch ) |
eToolbarTarget = parent.document.getElementById( oOutMatch[1] ) ; |
} |
if ( !eToolbarTarget ) |
{ |
alert( 'Invalid value for "ToolbarLocation"' ) ; |
return this._Init( 'In' ) ; |
} |
// If it is a shared toolbar, it may be already available in the target element. |
if ( oToolbarSet = eToolbarTarget.__FCKToolbarSet ) |
break ; |
// Create the IFRAME that will hold the toolbar inside the target element. |
var eToolbarIFrame = FCKTools.GetElementDocument( eToolbarTarget ).createElement( 'iframe' ) ; |
eToolbarIFrame.frameBorder = 0 ; |
eToolbarIFrame.width = '100%' ; |
eToolbarIFrame.height = '10' ; |
eToolbarTarget.appendChild( eToolbarIFrame ) ; |
eToolbarIFrame.unselectable = 'on' ; |
// Write the basic HTML for the toolbar (copy from the editor main page). |
var eTargetDocument = eToolbarIFrame.contentWindow.document ; |
eTargetDocument.open() ; |
eTargetDocument.write( '<html><head><script type="text/javascript"> window.onload = window.onresize = function() { window.frameElement.height = document.body.scrollHeight ; } </script></head><body style="overflow: hidden">' + document.getElementById( 'xToolbarSpace' ).innerHTML + '</body></html>' ) ; |
eTargetDocument.close() ; |
eTargetDocument.oncontextmenu = FCKTools.CancelEvent ; |
// Load external resources (must be done here, otherwise Firefox will not |
// have the document DOM ready to be used right away. |
FCKTools.AppendStyleSheet( eTargetDocument, FCKConfig.SkinPath + 'fck_editor.css' ) ; |
oToolbarSet = eToolbarTarget.__FCKToolbarSet = new FCKToolbarSet( eTargetDocument ) ; |
oToolbarSet._IFrame = eToolbarIFrame ; |
if ( FCK.IECleanup ) |
FCK.IECleanup.AddItem( eToolbarTarget, FCKToolbarSet_Target_Cleanup ) ; |
} |
oToolbarSet.CurrentInstance = FCK ; |
FCK.AttachToOnSelectionChange( oToolbarSet.RefreshItemsState ) ; |
return oToolbarSet ; |
} |
function FCK_OnBlur( editorInstance ) |
{ |
var eToolbarSet = editorInstance.ToolbarSet ; |
if ( eToolbarSet.CurrentInstance == editorInstance ) |
eToolbarSet.Disable() ; |
} |
function FCK_OnFocus( editorInstance ) |
{ |
var oToolbarset = editorInstance.ToolbarSet ; |
var oInstance = editorInstance || FCK ; |
// Unregister the toolbar window from the current instance. |
oToolbarset.CurrentInstance.FocusManager.RemoveWindow( oToolbarset._IFrame.contentWindow ) ; |
// Set the new current instance. |
oToolbarset.CurrentInstance = oInstance ; |
// Register the toolbar window in the current instance. |
oInstance.FocusManager.AddWindow( oToolbarset._IFrame.contentWindow, true ) ; |
oToolbarset.Enable() ; |
} |
function FCKToolbarSet_Cleanup() |
{ |
this._TargetElement = null ; |
this._IFrame = null ; |
} |
function FCKToolbarSet_Target_Cleanup() |
{ |
this.__FCKToolbarSet = null ; |
} |
var FCKToolbarSet = function( targetDocument ) |
{ |
this._Document = targetDocument ; |
// Get the element that will hold the elements structure. |
this._TargetElement = targetDocument.getElementById( 'xToolbar' ) ; |
// Setup the expand and collapse handlers. |
var eExpandHandle = targetDocument.getElementById( 'xExpandHandle' ) ; |
var eCollapseHandle = targetDocument.getElementById( 'xCollapseHandle' ) ; |
eExpandHandle.title = FCKLang.ToolbarExpand ; |
eExpandHandle.onclick = FCKToolbarSet_Expand_OnClick ; |
eCollapseHandle.title = FCKLang.ToolbarCollapse ; |
eCollapseHandle.onclick = FCKToolbarSet_Collapse_OnClick ; |
// Set the toolbar state at startup. |
if ( !FCKConfig.ToolbarCanCollapse || FCKConfig.ToolbarStartExpanded ) |
this.Expand() ; |
else |
this.Collapse() ; |
// Enable/disable the collapse handler |
eCollapseHandle.style.display = FCKConfig.ToolbarCanCollapse ? '' : 'none' ; |
if ( FCKConfig.ToolbarCanCollapse ) |
eCollapseHandle.style.display = '' ; |
else |
targetDocument.getElementById( 'xTBLeftBorder' ).style.display = '' ; |
// Set the default properties. |
this.Toolbars = new Array() ; |
this.IsLoaded = false ; |
if ( FCK.IECleanup ) |
FCK.IECleanup.AddItem( this, FCKToolbarSet_Cleanup ) ; |
} |
function FCKToolbarSet_Expand_OnClick() |
{ |
FCK.ToolbarSet.Expand() ; |
} |
function FCKToolbarSet_Collapse_OnClick() |
{ |
FCK.ToolbarSet.Collapse() ; |
} |
FCKToolbarSet.prototype.Expand = function() |
{ |
this._ChangeVisibility( false ) ; |
} |
FCKToolbarSet.prototype.Collapse = function() |
{ |
this._ChangeVisibility( true ) ; |
} |
FCKToolbarSet.prototype._ChangeVisibility = function( collapse ) |
{ |
this._Document.getElementById( 'xCollapsed' ).style.display = collapse ? '' : 'none' ; |
this._Document.getElementById( 'xExpanded' ).style.display = collapse ? 'none' : '' ; |
if ( FCKBrowserInfo.IsGecko ) |
{ |
// I had to use "setTimeout" because Gecko was not responding in a right |
// way when calling window.onresize() directly. |
FCKTools.RunFunction( window.onresize ) ; |
} |
} |
FCKToolbarSet.prototype.Load = function( toolbarSetName ) |
{ |
this.Name = toolbarSetName ; |
this.Items = new Array() ; |
// Reset the array of toolbat items that are active only on WYSIWYG mode. |
this.ItemsWysiwygOnly = new Array() ; |
// Reset the array of toolbar items that are sensitive to the cursor position. |
this.ItemsContextSensitive = new Array() ; |
// Cleanup the target element. |
this._TargetElement.innerHTML = '' ; |
var ToolbarSet = FCKConfig.ToolbarSets[toolbarSetName] ; |
if ( !ToolbarSet ) |
{ |
alert( FCKLang.UnknownToolbarSet.replace( /%1/g, toolbarSetName ) ) ; |
return ; |
} |
this.Toolbars = new Array() ; |
for ( var x = 0 ; x < ToolbarSet.length ; x++ ) |
{ |
var oToolbarItems = ToolbarSet[x] ; |
var oToolbar ; |
if ( typeof( oToolbarItems ) == 'string' ) |
{ |
if ( oToolbarItems == '/' ) |
oToolbar = new FCKToolbarBreak() ; |
} |
else |
{ |
oToolbar = new FCKToolbar() ; |
for ( var j = 0 ; j < oToolbarItems.length ; j++ ) |
{ |
var sItem = oToolbarItems[j] ; |
if ( sItem == '-') |
oToolbar.AddSeparator() ; |
else |
{ |
var oItem = FCKToolbarItems.GetItem( sItem ) ; |
if ( oItem ) |
{ |
oToolbar.AddItem( oItem ) ; |
this.Items.push( oItem ) ; |
if ( !oItem.SourceView ) |
this.ItemsWysiwygOnly.push( oItem ) ; |
if ( oItem.ContextSensitive ) |
this.ItemsContextSensitive.push( oItem ) ; |
} |
} |
} |
// oToolbar.AddTerminator() ; |
} |
oToolbar.Create( this._TargetElement ) ; |
this.Toolbars[ this.Toolbars.length ] = oToolbar ; |
} |
FCKTools.DisableSelection( this._Document.getElementById( 'xCollapseHandle' ).parentNode ) ; |
if ( FCK.Status != FCK_STATUS_COMPLETE ) |
FCK.Events.AttachEvent( 'OnStatusChange', this.RefreshModeState ) ; |
else |
this.RefreshModeState() ; |
this.IsLoaded = true ; |
this.IsEnabled = true ; |
FCKTools.RunFunction( this.OnLoad ) ; |
} |
FCKToolbarSet.prototype.Enable = function() |
{ |
if ( this.IsEnabled ) |
return ; |
this.IsEnabled = true ; |
var aItems = this.Items ; |
for ( var i = 0 ; i < aItems.length ; i++ ) |
aItems[i].RefreshState() ; |
} |
FCKToolbarSet.prototype.Disable = function() |
{ |
if ( !this.IsEnabled ) |
return ; |
this.IsEnabled = false ; |
var aItems = this.Items ; |
for ( var i = 0 ; i < aItems.length ; i++ ) |
aItems[i].Disable() ; |
} |
FCKToolbarSet.prototype.RefreshModeState = function( editorInstance ) |
{ |
if ( FCK.Status != FCK_STATUS_COMPLETE ) |
return ; |
var oToolbarSet = editorInstance ? editorInstance.ToolbarSet : this ; |
var aItems = oToolbarSet.ItemsWysiwygOnly ; |
if ( FCK.EditMode == FCK_EDITMODE_WYSIWYG ) |
{ |
// Enable all buttons that are available on WYSIWYG mode only. |
for ( var i = 0 ; i < aItems.length ; i++ ) |
aItems[i].Enable() ; |
// Refresh the buttons state. |
oToolbarSet.RefreshItemsState( editorInstance ) ; |
} |
else |
{ |
// Refresh the buttons state. |
oToolbarSet.RefreshItemsState( editorInstance ) ; |
// Disable all buttons that are available on WYSIWYG mode only. |
for ( var i = 0 ; i < aItems.length ; i++ ) |
aItems[i].Disable() ; |
} |
} |
FCKToolbarSet.prototype.RefreshItemsState = function( editorInstance ) |
{ |
var aItems = ( editorInstance ? editorInstance.ToolbarSet : this ).ItemsContextSensitive ; |
for ( var i = 0 ; i < aItems.length ; i++ ) |
aItems[i].RefreshState() ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/internals/fckdocumentprocessor.js |
---|
New file |
0,0 → 1,175 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckdocumentprocessor.js |
* Advanced document processors. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
var FCKDocumentProcessor = new Object() ; |
FCKDocumentProcessor._Items = new Array() ; |
FCKDocumentProcessor.AppendNew = function() |
{ |
var oNewItem = new Object() ; |
this._Items.AddItem( oNewItem ) ; |
return oNewItem ; |
} |
FCKDocumentProcessor.Process = function( document ) |
{ |
var oProcessor, i = 0 ; |
while( ( oProcessor = this._Items[i++] ) ) |
oProcessor.ProcessDocument( document ) ; |
} |
var FCKDocumentProcessor_CreateFakeImage = function( fakeClass, realElement ) |
{ |
var oImg = FCK.EditorDocument.createElement( 'IMG' ) ; |
oImg.className = fakeClass ; |
oImg.src = FCKConfig.FullBasePath + 'images/spacer.gif' ; |
oImg.setAttribute( '_fckfakelement', 'true', 0 ) ; |
oImg.setAttribute( '_fckrealelement', FCKTempBin.AddElement( realElement ), 0 ) ; |
return oImg ; |
} |
// Link Anchors |
var FCKAnchorsProcessor = FCKDocumentProcessor.AppendNew() ; |
FCKAnchorsProcessor.ProcessDocument = function( document ) |
{ |
var aLinks = document.getElementsByTagName( 'A' ) ; |
var oLink ; |
var i = aLinks.length - 1 ; |
while ( i >= 0 && ( oLink = aLinks[i--] ) ) |
{ |
// If it is anchor. |
if ( oLink.name.length > 0 && ( !oLink.getAttribute('href') || oLink.getAttribute('href').length == 0 ) ) |
{ |
var oImg = FCKDocumentProcessor_CreateFakeImage( 'FCK__Anchor', oLink.cloneNode(true) ) ; |
oImg.setAttribute( '_fckanchor', 'true', 0 ) ; |
oLink.parentNode.insertBefore( oImg, oLink ) ; |
oLink.parentNode.removeChild( oLink ) ; |
} |
} |
} |
// Page Breaks |
var FCKPageBreaksProcessor = FCKDocumentProcessor.AppendNew() ; |
FCKPageBreaksProcessor.ProcessDocument = function( document ) |
{ |
var aDIVs = document.getElementsByTagName( 'DIV' ) ; |
var eDIV ; |
var i = aDIVs.length - 1 ; |
while ( i >= 0 && ( eDIV = aDIVs[i--] ) ) |
{ |
if ( eDIV.style.pageBreakAfter == 'always' && eDIV.childNodes.length == 1 && eDIV.childNodes[0].style && eDIV.childNodes[0].style.display == 'none' ) |
{ |
var oFakeImage = FCKDocumentProcessor_CreateFakeImage( 'FCK__PageBreak', eDIV.cloneNode(true) ) ; |
eDIV.parentNode.insertBefore( oFakeImage, eDIV ) ; |
eDIV.parentNode.removeChild( eDIV ) ; |
} |
} |
/* |
var aCenters = document.getElementsByTagName( 'CENTER' ) ; |
var oCenter ; |
var i = aCenters.length - 1 ; |
while ( i >= 0 && ( oCenter = aCenters[i--] ) ) |
{ |
if ( oCenter.style.pageBreakAfter == 'always' && oCenter.innerHTML.trim().length == 0 ) |
{ |
var oFakeImage = FCKDocumentProcessor_CreateFakeImage( 'FCK__PageBreak', oCenter.cloneNode(true) ) ; |
oCenter.parentNode.insertBefore( oFakeImage, oCenter ) ; |
oCenter.parentNode.removeChild( oCenter ) ; |
} |
} |
*/ |
} |
// Flash Embeds. |
var FCKFlashProcessor = FCKDocumentProcessor.AppendNew() ; |
FCKFlashProcessor.ProcessDocument = function( document ) |
{ |
/* |
Sample code: |
This is some <embed src="/UserFiles/Flash/Yellow_Runners.swf"></embed><strong>sample text</strong>. You are <a name="fred"></a> using <a href="http://www.fckeditor.net/">FCKeditor</a>. |
*/ |
var aEmbeds = document.getElementsByTagName( 'EMBED' ) ; |
var oEmbed ; |
var i = aEmbeds.length - 1 ; |
while ( i >= 0 && ( oEmbed = aEmbeds[i--] ) ) |
{ |
if ( oEmbed.src.endsWith( '.swf', true ) ) |
{ |
var oCloned = oEmbed.cloneNode( true ) ; |
// On IE, some properties are not getting clonned properly, so we |
// must fix it. Thanks to Alfonso Martinez. |
if ( FCKBrowserInfo.IsIE ) |
{ |
var oAtt ; |
if ( oAtt = oEmbed.getAttribute( 'scale' ) ) oCloned.setAttribute( 'scale', oAtt ) ; |
if ( oAtt = oEmbed.getAttribute( 'play' ) ) oCloned.setAttribute( 'play', oAtt ) ; |
if ( oAtt = oEmbed.getAttribute( 'loop' ) ) oCloned.setAttribute( 'loop', oAtt ) ; |
if ( oAtt = oEmbed.getAttribute( 'menu' ) ) oCloned.setAttribute( 'menu', oAtt ) ; |
if ( oAtt = oEmbed.getAttribute( 'wmode' ) ) oCloned.setAttribute( 'wmode', oAtt ) ; |
if ( oAtt = oEmbed.getAttribute( 'quality' ) ) oCloned.setAttribute( 'quality', oAtt ) ; |
} |
var oImg = FCKDocumentProcessor_CreateFakeImage( 'FCK__Flash', oCloned ) ; |
oImg.setAttribute( '_fckflash', 'true', 0 ) ; |
FCKFlashProcessor.RefreshView( oImg, oEmbed ) ; |
oEmbed.parentNode.insertBefore( oImg, oEmbed ) ; |
oEmbed.parentNode.removeChild( oEmbed ) ; |
// oEmbed.setAttribute( '_fcktemp', 'true', 0) ; |
// oEmbed.style.display = 'none' ; |
// oEmbed.hidden = true ; |
} |
} |
} |
FCKFlashProcessor.RefreshView = function( placholderImage, originalEmbed ) |
{ |
if ( originalEmbed.width > 0 ) |
placholderImage.style.width = FCKTools.ConvertHtmlSizeToStyle( originalEmbed.width ) ; |
if ( originalEmbed.height > 0 ) |
placholderImage.style.height = FCKTools.ConvertHtmlSizeToStyle( originalEmbed.height ) ; |
} |
FCK.GetRealElement = function( fakeElement ) |
{ |
var e = FCKTempBin.Elements[ fakeElement.getAttribute('_fckrealelement') ] ; |
if ( fakeElement.getAttribute('_fckflash') ) |
{ |
if ( fakeElement.style.width.length > 0 ) |
e.width = FCKTools.ConvertStyleSizeToHtml( fakeElement.style.width ) ; |
if ( fakeElement.style.height.length > 0 ) |
e.height = FCKTools.ConvertStyleSizeToHtml( fakeElement.style.height ) ; |
} |
return e ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/internals/fckplugins.js |
---|
New file |
0,0 → 1,42 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckplugins.js |
* Defines the FCKPlugins object that is responsible for loading the Plugins. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
var FCKPlugins = FCK.Plugins = new Object() ; |
FCKPlugins.ItemsCount = 0 ; |
FCKPlugins.Items = new Object() ; |
FCKPlugins.Load = function() |
{ |
var oItems = FCKPlugins.Items ; |
// build the plugins collection. |
for ( var i = 0 ; i < FCKConfig.Plugins.Items.length ; i++ ) |
{ |
var oItem = FCKConfig.Plugins.Items[i] ; |
var oPlugin = oItems[ oItem[0] ] = new FCKPlugin( oItem[0], oItem[1], oItem[2] ) ; |
FCKPlugins.ItemsCount++ ; |
} |
// Load all items in the plugins collection. |
for ( var s in oItems ) |
oItems[s].Load() ; |
// This is a self destroyable function (must be called once). |
FCKPlugins.Load = null ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/internals/fckselection.js |
---|
New file |
0,0 → 1,20 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckselection.js |
* Active selection functions. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
var FCKSelection = FCK.Selection = new Object() ; |
/branches/v1.0-menes/api/fckeditor/editor/_source/internals/fckdebug.js |
---|
New file |
0,0 → 1,77 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckdebug.js |
* Debug window control and operations. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
var FCKDebug = new Object() ; |
FCKDebug.Output = function( message, color, noParse ) |
{ |
if ( ! FCKConfig.Debug ) return ; |
if ( !noParse && message != null && isNaN( message ) ) |
message = message.replace(/</g, "<") ; |
if ( !this.DebugWindow || this.DebugWindow.closed ) |
this.DebugWindow = window.open( FCKConfig.BasePath + 'fckdebug.html', 'FCKeditorDebug', 'menubar=no,scrollbars=no,resizable=yes,location=no,toolbar=no,width=600,height=500', true ) ; |
if ( this.DebugWindow && this.DebugWindow.Output) |
{ |
try |
{ |
this.DebugWindow.Output( message, color ) ; |
} |
catch ( e ) {} // Ignore errors |
} |
} |
FCKDebug.OutputObject = function( anyObject, color ) |
{ |
if ( ! FCKConfig.Debug ) return ; |
var message ; |
if ( anyObject != null ) |
{ |
message = 'Properties of: ' + anyObject + '</b><blockquote>' ; |
for (var prop in anyObject) |
{ |
try |
{ |
var sVal = anyObject[ prop ] ? anyObject[ prop ] + '' : '[null]' ; |
message += '<b>' + prop + '</b> : ' + sVal.replace(/</g, '<') + '<br>' ; |
} |
catch (e) |
{ |
try |
{ |
message += '<b>' + prop + '</b> : [' + typeof( anyObject[ prop ] ) + ']<br>' ; |
} |
catch (e) |
{ |
message += '<b>' + prop + '</b> : [-error-]<br>' ; |
} |
} |
} |
message += '</blockquote><b>' ; |
} else |
message = 'OutputObject : Object is "null".' ; |
FCKDebug.Output( message, color, true ) ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/_source/fckjscoreextensions.js |
---|
New file |
0,0 → 1,120 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckjscoreextensions.js |
* Extensions to the JavaScript Core. |
* |
* All custom extentions functions are PascalCased to differ from the standard |
* camelCased ones. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
String.prototype.Contains = function( textToCheck ) |
{ |
return ( this.indexOf( textToCheck ) > -1 ) ; |
} |
String.prototype.Equals = function() |
{ |
for ( var i = 0 ; i < arguments.length ; i++ ) |
if ( this == arguments[i] ) |
return true ; |
return false ; |
} |
String.prototype.ReplaceAll = function( searchArray, replaceArray ) |
{ |
var replaced = this ; |
for ( var i = 0 ; i < searchArray.length ; i++ ) |
{ |
replaced = replaced.replace( searchArray[i], replaceArray[i] ) ; |
} |
return replaced ; |
} |
Array.prototype.AddItem = function( item ) |
{ |
var i = this.length ; |
this[ i ] = item ; |
return i ; |
} |
Array.prototype.indexOf = function( value ) |
{ |
for ( var i = 0 ; i < this.length ; i++ ) |
{ |
if ( this[i] == value ) |
return i ; |
} |
return -1 ; |
} |
String.prototype.startsWith = function( value ) |
{ |
return ( this.substr( 0, value.length ) == value ) ; |
} |
// Extends the String object, creating a "endsWith" method on it. |
String.prototype.endsWith = function( value, ignoreCase ) |
{ |
var L1 = this.length ; |
var L2 = value.length ; |
if ( L2 > L1 ) |
return false ; |
if ( ignoreCase ) |
{ |
var oRegex = new RegExp( value + '$' , 'i' ) ; |
return oRegex.test( this ) ; |
} |
else |
return ( L2 == 0 || this.substr( L1 - L2, L2 ) == value ) ; |
} |
String.prototype.remove = function( start, length ) |
{ |
var s = '' ; |
if ( start > 0 ) |
s = this.substring( 0, start ) ; |
if ( start + length < this.length ) |
s += this.substring( start + length , this.length ) ; |
return s ; |
} |
String.prototype.trim = function() |
{ |
return this.replace( /(^\s*)|(\s*$)/g, '' ) ; |
} |
String.prototype.ltrim = function() |
{ |
return this.replace( /^\s*/g, '' ) ; |
} |
String.prototype.rtrim = function() |
{ |
return this.replace( /\s*$/g, '' ) ; |
} |
String.prototype.replaceNewLineChars = function( replacement ) |
{ |
return this.replace( /\n/g, replacement ) ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_docprops/fck_document_preview.html |
---|
New file |
0,0 → 1,109 |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> |
<!-- |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fck_document_preview.html |
* Preview shown in the "Document Properties" dialog window. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
--> |
<html> |
<head> |
<title>Document Properties - Preview</title> |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> |
<meta name="robots" content="noindex, nofollow"> |
<script language="javascript"> |
var eBase = parent.FCK.EditorDocument.getElementsByTagName( 'BASE' ) ; |
if ( eBase.length > 0 && eBase[0].href.length > 0 ) |
{ |
document.write( '<base href="' + eBase[0].href + '">' ) ; |
} |
window.onload = function() |
{ |
if ( typeof( parent.OnPreviewLoad ) == 'function' ) |
parent.OnPreviewLoad( window, document.body ) ; |
} |
function SetBaseHRef( baseHref ) |
{ |
var eBase = document.createElement( 'BASE' ) ; |
eBase.href = baseHref ; |
var eHead = document.getElementsByTagName( 'HEAD' )[0] ; |
eHead.appendChild( eBase ) ; |
} |
function SetLinkColor( color ) |
{ |
if ( color && color.length > 0 ) |
document.getElementById('eLink').style.color = color ; |
else |
document.getElementById('eLink').style.color = window.document.linkColor ; |
} |
function SetVisitedColor( color ) |
{ |
if ( color && color.length > 0 ) |
document.getElementById('eVisited').style.color = color ; |
else |
document.getElementById('eVisited').style.color = window.document.vlinkColor ; |
} |
function SetActiveColor( color ) |
{ |
if ( color && color.length > 0 ) |
document.getElementById('eActive').style.color = color ; |
else |
document.getElementById('eActive').style.color = window.document.alinkColor ; |
} |
</script> |
</head> |
<body> |
<table width="100%" height="100%" cellpadding="0" cellspacing="0" border="0"> |
<tr> |
<td align="center" valign="middle"> |
Normal Text |
</td> |
<td id="eLink" align="center" valign="middle"> |
<u>Link Text</u> |
</td> |
</tr> |
<tr> |
<td id="eVisited" valign="middle" align="center"> |
<u>Visited Link</u> |
</td> |
<td id="eActive" valign="middle" align="center"> |
<u>Active Link</u> |
</td> |
</tr> |
</table> |
<br> |
<br> |
<br> |
<br> |
<br> |
<br> |
<br> |
<br> |
<br> |
<br> |
<br> |
<br> |
<br> |
<br> |
<br> |
<br> |
</body> |
</html> |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_docprops.html |
---|
New file |
0,0 → 1,591 |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> |
<!-- |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fck_docprops.html |
* Link dialog window. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
--> |
<html xmlns="http://www.w3.org/1999/xhtml"> |
<head> |
<title></title> |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
<meta content="noindex, nofollow" name="robots" /> |
<script src="common/fck_dialog_common.js" type="text/javascript"></script> |
<script type="text/javascript"> |
var oEditor = window.parent.InnerDialogLoaded() ; |
var FCK = oEditor.FCK ; |
var FCKLang = oEditor.FCKLang ; |
var FCKConfig = oEditor.FCKConfig ; |
//#### Dialog Tabs |
// Set the dialog tabs. |
window.parent.AddTab( 'General' , FCKLang.DlgDocGeneralTab ) ; |
window.parent.AddTab( 'Background' , FCKLang.DlgDocBackTab ) ; |
window.parent.AddTab( 'Colors' , FCKLang.DlgDocColorsTab ) ; |
window.parent.AddTab( 'Meta' , FCKLang.DlgDocMetaTab ) ; |
// Function called when a dialog tag is selected. |
function OnDialogTabChange( tabCode ) |
{ |
ShowE( 'divGeneral' , ( tabCode == 'General' ) ) ; |
ShowE( 'divBackground' , ( tabCode == 'Background' ) ) ; |
ShowE( 'divColors' , ( tabCode == 'Colors' ) ) ; |
ShowE( 'divMeta' , ( tabCode == 'Meta' ) ) ; |
ShowE( 'ePreview' , ( tabCode == 'Background' || tabCode == 'Colors' ) ) ; |
} |
//#### Get Base elements from the document: BEGIN |
// The HTML element of the document. |
var oHTML = FCK.EditorDocument.getElementsByTagName('html')[0] ; |
// The HEAD element of the document. |
var oHead = oHTML.getElementsByTagName('head')[0] ; |
var oBody = FCK.EditorDocument.body ; |
// This object contains all META tags defined in the document. |
var oMetaTags = new Object() ; |
// Get all META tags defined in the document. |
var aMetas = oHead.getElementsByTagName('meta') ; |
// Loop throw all METAs and put it in the HashTable. |
for ( var i = 0 ; i < aMetas.length ; i++ ) |
{ |
// Try to get the "name" attribute. |
var sName = GetAttribute( aMetas[i], 'name', GetAttribute( aMetas[i], '___fcktoreplace:name', '' ) ) ; |
// If no "name", try with the "http-equiv" attribute. |
if ( sName.length == 0 ) |
{ |
if ( document.all ) |
{ |
// Get the http-equiv value from the outerHTML. |
var oHttpEquivMatch = aMetas[i].outerHTML.match( oEditor.FCKRegexLib.MetaHttpEquiv ) ; |
if ( oHttpEquivMatch ) |
sName = oHttpEquivMatch[1] ; |
} |
else |
sName = GetAttribute( aMetas[i], 'http-equiv', '' ) ; |
} |
if ( sName.length > 0 ) |
oMetaTags[ sName.toLowerCase() ] = aMetas[i] ; |
} |
//#### END |
// Set a META tag in the document. |
function SetMetadata( name, content, isHttp ) |
{ |
if ( content.length == 0 ) |
{ |
RemoveMetadata( name ) ; |
return ; |
} |
var oMeta = oMetaTags[ name.toLowerCase() ] ; |
if ( !oMeta ) |
{ |
oMeta = oHead.appendChild( FCK.EditorDocument.createElement('META') ) ; |
if ( isHttp ) |
SetAttribute( oMeta, 'http-equiv', name ) ; |
else |
{ |
// On IE, it is not possible to set the "name" attribute of the META tag. |
// So a temporary attribute is used and it is replaced when getting the |
// editor's HTML/XHTML value. This is sad, I know :( |
if ( document.all ) |
SetAttribute( oMeta, '___fcktoreplace:name', name ) ; |
else |
SetAttribute( oMeta, 'name', name ) ; |
} |
oMetaTags[ name.toLowerCase() ] = oMeta ; |
} |
oMeta.content = content ; |
} |
function RemoveMetadata( name ) |
{ |
var oMeta = oMetaTags[ name.toLowerCase() ] ; |
if ( oMeta && oMeta != null ) |
{ |
oMeta.parentNode.removeChild( oMeta ) ; |
oMetaTags[ name.toLowerCase() ] = null ; |
} |
} |
function GetMetadata( name ) |
{ |
var oMeta = oMetaTags[ name.toLowerCase() ] ; |
if ( oMeta && oMeta != null ) |
return oMeta.content ; |
else |
return '' ; |
} |
window.onload = function () |
{ |
// Show/Hide the "Browse Server" button. |
GetE('tdBrowse').style.display = oEditor.FCKConfig.ImageBrowser ? "" : "none"; |
// First of all, translate the dialog box texts |
oEditor.FCKLanguageManager.TranslatePage( document ) ; |
FillFields() ; |
UpdatePreview() ; |
// Show the "Ok" button. |
window.parent.SetOkButton( true ) ; |
window.parent.SetAutoSize( true ) ; |
} |
function FillFields() |
{ |
// ### General Info |
GetE('txtPageTitle').value = FCK.EditorDocument.title ; |
GetE('selDirection').value = GetAttribute( oHTML, 'dir', '' ) ; |
GetE('txtLang').value = GetAttribute( oHTML, 'xml:lang', GetAttribute( oHTML, 'lang', '' ) ) ; // "xml:lang" takes precedence to "lang". |
// Character Set Encoding. |
// if ( document.all ) |
// var sCharSet = FCK.EditorDocument.charset ; |
// else |
var sCharSet = GetMetadata( 'Content-Type' ) ; |
if ( sCharSet != null && sCharSet.length > 0 ) |
{ |
// if ( !document.all ) |
sCharSet = sCharSet.match( /[^=]*$/ ) ; |
GetE('selCharSet').value = sCharSet ; |
if ( GetE('selCharSet').selectedIndex == -1 ) |
{ |
GetE('selCharSet').value = '...' ; |
GetE('txtCustomCharSet').value = sCharSet ; |
CheckOther( GetE('selCharSet'), 'txtCustomCharSet' ) ; |
} |
} |
// Document Type. |
if ( FCK.DocTypeDeclaration && FCK.DocTypeDeclaration.length > 0 ) |
{ |
GetE('selDocType').value = FCK.DocTypeDeclaration ; |
if ( GetE('selDocType').selectedIndex == -1 ) |
{ |
GetE('selDocType').value = '...' ; |
GetE('txtDocType').value = FCK.DocTypeDeclaration ; |
CheckOther( GetE('selDocType'), 'txtDocType' ) ; |
} |
} |
// Document Type. |
GetE('chkIncXHTMLDecl').checked = ( FCK.XmlDeclaration && FCK.XmlDeclaration.length > 0 ) ; |
// ### Background |
GetE('txtBackColor').value = GetAttribute( oBody, 'bgColor' , '' ) ; |
GetE('txtBackImage').value = GetAttribute( oBody, 'background' , '' ) ; |
GetE('chkBackNoScroll').checked = ( GetAttribute( oBody, 'bgProperties', '' ).toLowerCase() == 'fixed' ) ; |
// ### Colors |
GetE('txtColorText').value = GetAttribute( oBody, 'text' , '' ) ; |
GetE('txtColorLink').value = GetAttribute( oBody, 'link' , '' ) ; |
GetE('txtColorVisited').value = GetAttribute( oBody, 'vLink' , '' ) ; |
GetE('txtColorActive').value = GetAttribute( oBody, 'aLink' , '' ) ; |
// ### Margins |
GetE('txtMarginTop').value = GetAttribute( oBody, 'topMargin' , '' ) ; |
GetE('txtMarginLeft').value = GetAttribute( oBody, 'leftMargin' , '' ) ; |
GetE('txtMarginRight').value = GetAttribute( oBody, 'rightMargin' , '' ) ; |
GetE('txtMarginBottom').value = GetAttribute( oBody, 'bottomMargin' , '' ) ; |
// ### Meta Data |
GetE('txtMetaKeywords').value = GetMetadata( 'keywords' ) ; |
GetE('txtMetaDescription').value = GetMetadata( 'description' ) ; |
GetE('txtMetaAuthor').value = GetMetadata( 'author' ) ; |
GetE('txtMetaCopyright').value = GetMetadata( 'copyright' ) ; |
} |
// Called when the "Ok" button is clicked. |
function Ok() |
{ |
// ### General Info |
FCK.EditorDocument.title = GetE('txtPageTitle').value ; |
var oHTML = FCK.EditorDocument.getElementsByTagName('html')[0] ; |
SetAttribute( oHTML, 'dir' , GetE('selDirection').value ) ; |
SetAttribute( oHTML, 'lang' , GetE('txtLang').value ) ; |
SetAttribute( oHTML, 'xml:lang' , GetE('txtLang').value ) ; |
// Character Set Enconding. |
var sCharSet = GetE('selCharSet').value ; |
if ( sCharSet == '...' ) |
sCharSet = GetE('txtCustomCharSet').value ; |
if ( sCharSet.length > 0 ) |
sCharSet = 'text/html; charset=' + sCharSet ; |
// if ( document.all ) |
// FCK.EditorDocument.charset = sCharSet ; |
// else |
SetMetadata( 'Content-Type', sCharSet, true ) ; |
// Document Type |
var sDocType = GetE('selDocType').value ; |
if ( sDocType == '...' ) |
sDocType = GetE('txtDocType').value ; |
FCK.DocTypeDeclaration = sDocType ; |
// XHTML Declarations. |
if ( GetE('chkIncXHTMLDecl').checked ) |
{ |
if ( sCharSet.length == 0 ) |
sCharSet = 'utf-8' ; |
FCK.XmlDeclaration = '<?xml version="1.0" encoding="' + sCharSet + '"?>' ; |
SetAttribute( oHTML, 'xmlns', 'http://www.w3.org/1999/xhtml' ) ; |
} |
else |
{ |
FCK.XmlDeclaration = null ; |
oHTML.removeAttribute( 'xmlns', 0 ) ; |
} |
// ### Background |
SetAttribute( oBody, 'bgcolor' , GetE('txtBackColor').value ) ; |
SetAttribute( oBody, 'background' , GetE('txtBackImage').value ) ; |
SetAttribute( oBody, 'bgproperties' , GetE('chkBackNoScroll').checked ? 'fixed' : '' ) ; |
// ### Colors |
SetAttribute( oBody, 'text' , GetE('txtColorText').value ) ; |
SetAttribute( oBody, 'link' , GetE('txtColorLink').value ) ; |
SetAttribute( oBody, 'vlink', GetE('txtColorVisited').value ) ; |
SetAttribute( oBody, 'alink', GetE('txtColorActive').value ) ; |
// ### Margins |
SetAttribute( oBody, 'topmargin' , GetE('txtMarginTop').value ) ; |
SetAttribute( oBody, 'leftmargin' , GetE('txtMarginLeft').value ) ; |
SetAttribute( oBody, 'rightmargin' , GetE('txtMarginRight').value ) ; |
SetAttribute( oBody, 'bottommargin' , GetE('txtMarginBottom').value ) ; |
// ### Meta data |
SetMetadata( 'keywords' , GetE('txtMetaKeywords').value ) ; |
SetMetadata( 'description' , GetE('txtMetaDescription').value ) ; |
SetMetadata( 'author' , GetE('txtMetaAuthor').value ) ; |
SetMetadata( 'copyright' , GetE('txtMetaCopyright').value ) ; |
return true ; |
} |
var bPreviewIsLoaded = false ; |
var oPreviewWindow ; |
var oPreviewBody ; |
// Called by the Preview page when loaded. |
function OnPreviewLoad( previewWindow, previewBody ) |
{ |
oPreviewWindow = previewWindow ; |
oPreviewBody = previewBody ; |
bPreviewIsLoaded = true ; |
UpdatePreview() ; |
} |
function UpdatePreview() |
{ |
if ( !bPreviewIsLoaded ) |
return ; |
// ### Background |
SetAttribute( oPreviewBody, 'bgcolor' , GetE('txtBackColor').value ) ; |
SetAttribute( oPreviewBody, 'background' , GetE('txtBackImage').value ) ; |
SetAttribute( oPreviewBody, 'bgproperties' , GetE('chkBackNoScroll').checked ? 'fixed' : '' ) ; |
// ### Colors |
SetAttribute( oPreviewBody, 'text', GetE('txtColorText').value ) ; |
oPreviewWindow.SetLinkColor( GetE('txtColorLink').value ) ; |
oPreviewWindow.SetVisitedColor( GetE('txtColorVisited').value ) ; |
oPreviewWindow.SetActiveColor( GetE('txtColorActive').value ) ; |
} |
function CheckOther( combo, txtField ) |
{ |
var bNotOther = ( combo.value != '...' ) ; |
GetE(txtField).style.backgroundColor = ( bNotOther ? '#cccccc' : '' ) ; |
GetE(txtField).disabled = bNotOther ; |
} |
function SetColor( inputId, color ) |
{ |
GetE( inputId ).value = color + '' ; |
UpdatePreview() ; |
} |
function SelectBackColor( color ) { SetColor('txtBackColor', color ) ; } |
function SelectColorText( color ) { SetColor('txtColorText', color ) ; } |
function SelectColorLink( color ) { SetColor('txtColorLink', color ) ; } |
function SelectColorVisited( color ) { SetColor('txtColorVisited', color ) ; } |
function SelectColorActive( color ) { SetColor('txtColorActive', color ) ; } |
function SelectColor( wich ) |
{ |
switch ( wich ) |
{ |
case 'Back' : oEditor.FCKDialog.OpenDialog( 'FCKDialog_Color', FCKLang.DlgColorTitle, 'dialog/fck_colorselector.html', 400, 330, SelectBackColor, window ) ; return ; |
case 'ColorText' : oEditor.FCKDialog.OpenDialog( 'FCKDialog_Color', FCKLang.DlgColorTitle, 'dialog/fck_colorselector.html', 400, 330, SelectColorText, window ) ; return ; |
case 'ColorLink' : oEditor.FCKDialog.OpenDialog( 'FCKDialog_Color', FCKLang.DlgColorTitle, 'dialog/fck_colorselector.html', 400, 330, SelectColorLink, window ) ; return ; |
case 'ColorVisited' : oEditor.FCKDialog.OpenDialog( 'FCKDialog_Color', FCKLang.DlgColorTitle, 'dialog/fck_colorselector.html', 400, 330, SelectColorVisited, window ) ; return ; |
case 'ColorActive' : oEditor.FCKDialog.OpenDialog( 'FCKDialog_Color', FCKLang.DlgColorTitle, 'dialog/fck_colorselector.html', 400, 330, SelectColorActive, window ) ; return ; |
} |
} |
function BrowseServerBack() |
{ |
OpenFileBrowser( FCKConfig.ImageBrowserURL, FCKConfig.ImageBrowserWindowWidth, FCKConfig.ImageBrowserWindowHeight ) ; |
} |
function SetUrl( url ) |
{ |
GetE('txtBackImage').value = url ; |
UpdatePreview() ; |
} |
</script> |
</head> |
<body style="overflow: hidden"> |
<table cellspacing="0" cellpadding="0" width="100%" border="0" style="height: 100%"> |
<tr> |
<td valign="top" style="height: 100%"> |
<div id="divGeneral"> |
<span fcklang="DlgDocPageTitle">Page Title</span><br /> |
<input id="txtPageTitle" style="width: 100%" type="text" /> |
<br /> |
<table cellspacing="0" cellpadding="0" border="0"> |
<tr> |
<td> |
<span fcklang="DlgDocLangDir">Language Direction</span><br /> |
<select id="selDirection"> |
<option value="" selected="selected"></option> |
<option value="ltr" fcklang="DlgDocLangDirLTR">Left to Right (LTR)</option> |
<option value="rtl" fcklang="DlgDocLangDirRTL">Right to Left (RTL)</option> |
</select> |
</td> |
<td> |
</td> |
<td> |
<span fcklang="DlgDocLangCode">Language Code</span><br /> |
<input id="txtLang" type="text" /> |
</td> |
</tr> |
</table> |
<br /> |
<table cellspacing="0" cellpadding="0" width="100%" border="0"> |
<tr> |
<td style="white-space: nowrap"> |
<span fcklang="DlgDocCharSet">Character Set Encoding</span><br /> |
<select id="selCharSet" onchange="CheckOther( this, 'txtCustomCharSet' );"> |
<option value="" selected="selected"></option> |
<option value="us-ascii">ASCII</option> |
<option fcklang="DlgDocCharSetCE" value="iso-8859-2">Central European</option> |
<option fcklang="DlgDocCharSetCT" value="big5">Chinese Traditional (Big5)</option> |
<option fcklang="DlgDocCharSetCR" value="iso-8859-5">Cyrillic</option> |
<option fcklang="DlgDocCharSetGR" value="iso-8859-7">Greek</option> |
<option fcklang="DlgDocCharSetJP" value="iso-2022-jp">Japanese</option> |
<option fcklang="DlgDocCharSetKR" value="iso-2022-kr">Korean</option> |
<option fcklang="DlgDocCharSetTR" value="iso-8859-9">Turkish</option> |
<option fcklang="DlgDocCharSetUN" value="utf-8">Unicode (UTF-8)</option> |
<option fcklang="DlgDocCharSetWE" value="iso-8859-1">Western European</option> |
<option fcklang="DlgOpOther" value="..."><Other></option> |
</select> |
</td> |
<td> |
</td> |
<td width="100%"> |
<span fcklang="DlgDocCharSetOther">Other Character Set Encoding</span><br /> |
<input id="txtCustomCharSet" style="width: 100%; background-color: #cccccc" disabled="disabled" |
type="text" /> |
</td> |
</tr> |
<tr> |
<td colspan="3"> |
</td> |
</tr> |
<tr> |
<td nowrap="nowrap"> |
<span fcklang="DlgDocDocType">Document Type Heading</span><br /> |
<select id="selDocType" name="selDocType" onchange="CheckOther( this, 'txtDocType' );"> |
<option value="" selected="selected"></option> |
<option value='<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">'>HTML |
4.01 Transitional</option> |
<option value='<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">'> |
HTML 4.01 Strict</option> |
<option value='<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">'> |
HTML 4.01 Frameset</option> |
<option value='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'> |
XHTML 1.0 Transitional</option> |
<option value='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'> |
XHTML 1.0 Strict</option> |
<option value='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">'> |
XHTML 1.0 Frameset</option> |
<option value='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">'> |
XHTML 1.1</option> |
<option value='<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">'>HTML 3.2</option> |
<option value='<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">'>HTML 2.0</option> |
<option value="..." fcklang="DlgOpOther"><Other></option> |
</select> |
</td> |
<td> |
</td> |
<td width="100%"> |
<span fcklang="DlgDocDocTypeOther">Other Document Type Heading</span><br /> |
<input id="txtDocType" style="width: 100%; background-color: #cccccc" disabled="disabled" |
type="text" /> |
</td> |
</tr> |
</table> |
<br /> |
<input id="chkIncXHTMLDecl" type="checkbox" /> |
<label for="chkIncXHTMLDecl" fcklang="DlgDocIncXHTML"> |
Include XHTML Declarations</label> |
</div> |
<div id="divBackground" style="display: none"> |
<span fcklang="DlgDocBgColor">Background Color</span><br /> |
<input id="txtBackColor" type="text" onchange="UpdatePreview();" onkeyup="UpdatePreview();" /> <input |
id="btnSelBackColor" onclick="SelectColor( 'Back' )" type="button" value="Select..." |
fcklang="DlgCellBtnSelect" /><br /> |
<br /> |
<span fcklang="DlgDocBgImage">Background Image URL</span><br /> |
<table cellspacing="0" cellpadding="0" width="100%" border="0"> |
<tr> |
<td width="100%"> |
<input id="txtBackImage" style="width: 100%" type="text" onchange="UpdatePreview();" |
onkeyup="UpdatePreview();" /></td> |
<td id="tdBrowse" nowrap="nowrap"> |
<input id="btnBrowse" onclick="BrowseServerBack();" type="button" fcklang="DlgBtnBrowseServer" |
value="Browse Server" /></td> |
</tr> |
</table> |
<input id="chkBackNoScroll" type="checkbox" onclick="UpdatePreview();" /> |
<label for="chkBackNoScroll" fcklang="DlgDocBgNoScroll"> |
Nonscrolling Background</label> |
</div> |
<div id="divColors" style="display: none"> |
<table cellspacing="0" cellpadding="0" width="100%" border="0"> |
<tr> |
<td> |
<span fcklang="DlgDocCText">Text</span><br /> |
<input id="txtColorText" type="text" onchange="UpdatePreview();" onkeyup="UpdatePreview();" /><input |
onclick="SelectColor( 'ColorText' )" type="button" value="Select..." fcklang="DlgCellBtnSelect" /> |
<br /> |
<span fcklang="DlgDocCLink">Link</span><br /> |
<input id="txtColorLink" type="text" onchange="UpdatePreview();" onkeyup="UpdatePreview();" /><input |
onclick="SelectColor( 'ColorLink' )" type="button" value="Select..." fcklang="DlgCellBtnSelect" /> |
<br /> |
<span fcklang="DlgDocCVisited">Visited Link</span><br /> |
<input id="txtColorVisited" type="text" onchange="UpdatePreview();" onkeyup="UpdatePreview();" /><input |
onclick="SelectColor( 'ColorVisited' )" type="button" value="Select..." fcklang="DlgCellBtnSelect" /> |
<br /> |
<span fcklang="DlgDocCActive">Active Link</span><br /> |
<input id="txtColorActive" type="text" onchange="UpdatePreview();" onkeyup="UpdatePreview();" /><input |
onclick="SelectColor( 'ColorActive' )" type="button" value="Select..." fcklang="DlgCellBtnSelect" /> |
</td> |
<td valign="middle" align="center"> |
<table cellspacing="2" cellpadding="0" border="0"> |
<tr> |
<td> |
<span fcklang="DlgDocMargins">Page Margins</span></td> |
</tr> |
<tr> |
<td style="border: #000000 1px solid; padding: 5px"> |
<table cellpadding="0" cellspacing="0" border="0" dir="ltr"> |
<tr> |
<td align="center" colspan="3"> |
<span fcklang="DlgDocMaTop">Top</span><br /> |
<input id="txtMarginTop" type="text" size="3" /> |
</td> |
</tr> |
<tr> |
<td align="left"> |
<span fcklang="DlgDocMaLeft">Left</span><br /> |
<input id="txtMarginLeft" type="text" size="3" /> |
</td> |
<td> |
</td> |
<td align="right"> |
<span fcklang="DlgDocMaRight">Right</span><br /> |
<input id="txtMarginRight" type="text" size="3" /> |
</td> |
</tr> |
<tr> |
<td align="center" colspan="3"> |
<span fcklang="DlgDocMaBottom">Bottom</span><br /> |
<input id="txtMarginBottom" type="text" size="3" /> |
</td> |
</tr> |
</table> |
</td> |
</tr> |
</table> |
</td> |
</tr> |
</table> |
</div> |
<div id="divMeta" style="display: none"> |
<span fcklang="DlgDocMeIndex">Document Indexing Keywords (comma separated)</span><br /> |
<textarea id="txtMetaKeywords" style="width: 100%" rows="2" cols="20"></textarea> |
<br /> |
<span fcklang="DlgDocMeDescr">Document Description</span><br /> |
<textarea id="txtMetaDescription" style="width: 100%" rows="4" cols="20"></textarea> |
<br /> |
<span fcklang="DlgDocMeAuthor">Author</span><br /> |
<input id="txtMetaAuthor" style="width: 100%" type="text" /><br /> |
<br /> |
<span fcklang="DlgDocMeCopy">Copyright</span><br /> |
<input id="txtMetaCopyright" type="text" style="width: 100%" /> |
</div> |
</td> |
</tr> |
<tr id="ePreview" style="display: none"> |
<td> |
<span fcklang="DlgDocPreview">Preview</span><br /> |
<iframe id="frmPreview" src="fck_docprops/fck_document_preview.html" width="100%" |
height="100"></iframe> |
</td> |
</tr> |
</table> |
</body> |
</html> |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_source.html |
---|
New file |
0,0 → 1,61 |
<!-- |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fck_source.html |
* Source editor dialog window. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
--> |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > |
<html> |
<head> |
<title>Source</title> |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> |
<meta name="robots" content="noindex, nofollow"> |
<link href="common/fck_dialog_common.css" rel="stylesheet" type="text/css" /> |
<script language="javascript"> |
var oEditor = window.parent.InnerDialogLoaded() ; |
var FCK = oEditor.FCK ; |
var FCKConfig = oEditor.FCKConfig ; |
window.onload = function() |
{ |
// EnableXHTML and EnableSourceXHTML has been deprecated |
// document.getElementById('txtSource').value = ( FCKConfig.EnableXHTML && FCKConfig.EnableSourceXHTML ? FCK.GetXHTML( FCKConfig.FormatSource ) : FCK.GetHTML( FCKConfig.FormatSource ) ) ; |
document.getElementById('txtSource').value = FCK.GetXHTML( FCKConfig.FormatSource ) ; |
// Activate the "OK" button. |
window.parent.SetOkButton( true ) ; |
} |
//#### The OK button was hit. |
function Ok() |
{ |
if ( oEditor.FCKBrowserInfo.IsIE ) |
oEditor.FCKUndo.SaveUndoStep() ; |
FCK.SetHTML( document.getElementById('txtSource').value, false ) ; |
return true ; |
} |
</script> |
</head> |
<body scroll="no" style="OVERFLOW: hidden"> |
<table width="100%" height="100%"> |
<tr> |
<td height="100%"><textarea id="txtSource" dir="ltr" style="PADDING-RIGHT: 5px; PADDING-LEFT: 5px; FONT-SIZE: 14px; PADDING-BOTTOM: 5px; WIDTH: 100%; PADDING-TOP: 5px; FONT-FAMILY: Monospace; HEIGHT: 100%">Loading. Please wait...</textarea></td> |
</tr> |
</table> |
</body> |
</html> |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_smiley.html |
---|
New file |
0,0 → 1,101 |
<!-- |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fck_smiley.html |
* Smileys (emoticons) dialog window. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
--> |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > |
<html xmlns="http://www.w3.org/1999/xhtml"> |
<head> |
<title></title> |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
<meta name="robots" content="noindex, nofollow" /> |
<style type="text/css"> |
.Hand |
{ |
cursor: pointer; |
cursor: hand; |
} |
</style> |
<script type="text/javascript"> |
var oEditor = window.parent.InnerDialogLoaded() ; |
window.onload = function () |
{ |
// First of all, translate the dialog box texts |
oEditor.FCKLanguageManager.TranslatePage(document) ; |
} |
function InsertSmiley( url ) |
{ |
var oImg = oEditor.FCK.CreateElement( 'IMG' ) ; |
oImg.src = url ; |
oImg.setAttribute( '_fcksavedurl', url ) ; |
// For long smileys list, it seams that IE continues loading the images in |
// the background when you quickly select one image. so, let's clear |
// everything before closing. |
document.body.innerHTML = '' ; |
window.parent.Cancel() ; |
} |
function over(td) |
{ |
td.className = 'LightBackground Hand' ; |
} |
function out(td) |
{ |
td.className = 'DarkBackground Hand' ; |
} |
</script> |
</head> |
<body scroll="no"> |
<table cellpadding="2" cellspacing="2" align="center" border="0" width="100%" height="100%"> |
<script type="text/javascript"> |
var FCKConfig = oEditor.FCKConfig ; |
var sBasePath = FCKConfig.SmileyPath ; |
var aImages = FCKConfig.SmileyImages ; |
var iCols = FCKConfig.SmileyColumns ; |
var iColWidth = parseInt( 100 / iCols ) ; |
var i = 0 ; |
while (i < aImages.length) |
{ |
document.write( '<tr>' ) ; |
for(var j = 0 ; j < iCols ; j++) |
{ |
if (aImages[i]) |
{ |
var sUrl = sBasePath + aImages[i] ; |
document.write( '<td width="' + iColWidth + '%" align="center" class="DarkBackground Hand" onclick="InsertSmiley(\'' + sUrl.replace(/'/g, "\\'" ) + '\')" onmouseover="over(this)" onmouseout="out(this)">' ) ; |
document.write( '<img src="' + sUrl + '" border="0" />' ) ; |
} |
else |
document.write( '<td width="' + iColWidth + '%" class="DarkBackground"> ' ) ; |
document.write( '<\/td>' ) ; |
i++ ; |
} |
document.write('<\/tr>') ; |
} |
</script> |
</table> |
</body> |
</html> |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_about.html |
---|
New file |
0,0 → 1,145 |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> |
<!-- |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fck_about.html |
* "About" dialog window. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
--> |
<html> |
<head> |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> |
<meta name="robots" content="noindex, nofollow"> |
<script src="common/fck_dialog_common.js" type="text/javascript"></script> |
<script language="javascript"> |
var oEditor = window.parent.InnerDialogLoaded() ; |
var FCKLang = oEditor.FCKLang ; |
window.parent.AddTab( 'About', FCKLang.DlgAboutAboutTab ) ; |
window.parent.AddTab( 'License', FCKLang.DlgAboutLicenseTab ) ; |
window.parent.AddTab( 'BrowserInfo', FCKLang.DlgAboutBrowserInfoTab ) ; |
// Function called when a dialog tag is selected. |
function OnDialogTabChange( tabCode ) |
{ |
ShowE('divAbout', ( tabCode == 'About' ) ) ; |
ShowE('divLicense', ( tabCode == 'License' ) ) ; |
ShowE('divInfo' , ( tabCode == 'BrowserInfo' ) ) ; |
} |
function SendEMail() |
{ |
var eMail = 'mailto:' ; |
eMail += 'fredck' ; |
eMail += '@' ; |
eMail += 'fckeditor' ; |
eMail += '.' ; |
eMail += 'net' ; |
window.location = eMail ; |
} |
window.onload = function() |
{ |
// Translate the dialog box texts. |
oEditor.FCKLanguageManager.TranslatePage(document) ; |
window.parent.SetAutoSize( true ) ; |
} |
</script> |
</head> |
<body scroll="no" style="OVERFLOW: hidden"> |
<div id="divAbout"> |
<table cellpadding="0" cellspacing="0" border="0" width="100%" height="100%"> |
<tr> |
<td> |
<img alt="" src="fck_about/logo_fckeditor.gif" width="236" height="41" align="left"> |
<table width="80" border="0" cellspacing="0" cellpadding="5" bgcolor="#ffffff" align="right"> |
<tr> |
<td align="center" nowrap style="BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid"> |
<span fckLang="DlgAboutVersion">version</span> |
<br> |
<b>2.3.2</b><br /> |
Build 1082</td> |
</tr> |
</table> |
</td> |
</tr> |
<tr height="100%"> |
<td align="center"> |
<br> |
<span style="FONT-SIZE: 14px" dir="ltr"><br> |
<b><a href="http://www.fckeditor.net/?about" target="_blank" title="Visit the FCKeditor web site"> |
Support <b>Open Source</b> Software</a></b> </span> |
<br><br><br> |
<span fckLang="DlgAboutInfo">For further information go to</span> <a href="http://www.fckeditor.net/?About" target="_blank"> |
http://www.fckeditor.net/</a>. |
<br> |
Copyright © 2003-2006 <a href="#" onclick="SendEMail();">Frederico Caldeira |
Knabben</a> |
</td> |
</tr> |
<tr> |
<td align="center"> |
<img alt="" src="fck_about/logo_fredck.gif" width="87" height="36"> |
</td> |
</tr> |
</table> |
</div> |
<div id="divLicense" style="DISPLAY: none"> |
<table height="100%" width="100%"> |
<tr> |
<td> |
<span fckLang="DlgAboutLicense">Licensed under the terms of the GNU Lesser General |
Public License</span> |
<br> |
<a href="http://www.opensource.org/licenses/lgpl-license.php" target="_blank">http://www.opensource.org/licenses/lgpl-license.php</a> |
<br> |
</td> |
</tr> |
<tr> |
<td height="100%"> |
<iframe height="100%" width="100%" src="fck_about/lgpl.html"></iframe> |
</td> |
</tr> |
</table> |
</div> |
<div id="divInfo" style="DISPLAY: none" dir="ltr"> |
<table align="center" width="80%" border="0"> |
<tr> |
<td> |
<script language="javascript"> |
<!-- |
document.write( '<b>User Agent<\/b><br>' + window.navigator.userAgent + '<br><br>' ) ; |
document.write( '<b>Browser<\/b><br>' + window.navigator.appName + ' ' + window.navigator.appVersion + '<br><br>' ) ; |
document.write( '<b>Platform<\/b><br>' + window.navigator.platform + '<br><br>' ) ; |
var sUserLang = '?' ; |
if ( window.navigator.language ) |
sUserLang = window.navigator.language.toLowerCase() ; |
else if ( window.navigator.userLanguage ) |
sUserLang = window.navigator.userLanguage.toLowerCase() ; |
document.write( '<b>User Language<\/b><br>' + sUserLang ) ; |
//--> |
</script> |
</td> |
</tr> |
</table> |
</div> |
</body> |
</html> |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_replace.html |
---|
New file |
0,0 → 1,153 |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> |
<!-- |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fck_replace.html |
* "Replace" dialog box window. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
* Abdul-Aziz A. Al-Oraij (aziz.oraij.com) |
--> |
<html xmlns="http://www.w3.org/1999/xhtml"> |
<head> |
<title></title> |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
<meta content="noindex, nofollow" name="robots" /> |
<script type="text/javascript"> |
var oEditor = window.parent.InnerDialogLoaded() ; |
function OnLoad() |
{ |
// First of all, translate the dialog box texts |
oEditor.FCKLanguageManager.TranslatePage( document ) ; |
window.parent.SetAutoSize( true ) ; |
oEditor.FCKUndo.SaveUndoStep() ; |
} |
function btnStat(frm) |
{ |
document.getElementById('btnReplace').disabled = |
document.getElementById('btnReplaceAll').disabled = |
( document.getElementById('txtFind').value.length == 0 ) ; |
} |
function ReplaceTextNodes( parentNode, regex, replaceValue, replaceAll, hasFound ) |
{ |
for ( var i = 0 ; i < parentNode.childNodes.length ; i++ ) |
{ |
var oNode = parentNode.childNodes[i] ; |
if ( oNode.nodeType == 3 ) |
{ |
var sReplaced = oNode.nodeValue.replace( regex, replaceValue ) ; |
if ( oNode.nodeValue != sReplaced ) |
{ |
oNode.nodeValue = sReplaced ; |
if ( ! replaceAll ) |
return true ; |
hasFound = true ; |
} |
} |
hasFound = ReplaceTextNodes( oNode, regex, replaceValue, replaceAll, hasFound ) ; |
if ( ! replaceAll && hasFound ) |
return true ; |
} |
return hasFound ; |
} |
function GetRegexExpr() |
{ |
var sExpr = EscapeRegexString( document.getElementById('txtFind').value ) ; |
if ( document.getElementById('chkWord').checked ) |
sExpr = '\\b' + sExpr + '\\b' ; |
return sExpr ; |
} |
function GetCase() |
{ |
return ( document.getElementById('chkCase').checked ? '' : 'i' ) ; |
} |
function GetReplacement() |
{ |
return document.getElementById('txtReplace').value.replace( /\$/g, '$$$$' ) ; |
} |
function EscapeRegexString( str ) |
{ |
return str.replace( /[\\\^\$\*\+\?\{\}\.\(\)\!\|\[\]\-]/g, '\\$&' ) ; |
} |
function Replace() |
{ |
var oRegex = new RegExp( GetRegexExpr(), GetCase() ) ; |
if ( !ReplaceTextNodes( oEditor.FCK.EditorDocument.body, oRegex, GetReplacement(), false, false ) ) |
alert( oEditor.FCKLang.DlgFindNotFoundMsg ) ; |
} |
function ReplaceAll() |
{ |
var oRegex = new RegExp( GetRegexExpr(), GetCase() + 'g' ) ; |
if ( !ReplaceTextNodes( oEditor.FCK.EditorDocument.body, oRegex, GetReplacement(), true, false ) ) |
alert( oEditor.FCKLang.DlgFindNotFoundMsg ) ; |
window.parent.Cancel() ; |
} |
</script> |
</head> |
<body onload="OnLoad()" style="overflow: hidden"> |
<table cellspacing="3" cellpadding="2" width="100%" border="0"> |
<tr> |
<td nowrap="nowrap"> |
<label for="txtFind" fcklang="DlgReplaceFindLbl"> |
Find what:</label> |
</td> |
<td width="100%"> |
<input id="txtFind" onkeyup="btnStat(this.form)" style="width: 100%" tabindex="1" |
type="text" /> |
</td> |
<td> |
<input id="btnReplace" style="width: 100%" disabled="disabled" onclick="Replace();" |
type="button" value="Replace" fcklang="DlgReplaceReplaceBtn" /> |
</td> |
</tr> |
<tr> |
<td valign="top" nowrap="nowrap"> |
<label for="txtReplace" fcklang="DlgReplaceReplaceLbl"> |
Replace with:</label> |
</td> |
<td valign="top"> |
<input id="txtReplace" style="width: 100%" tabindex="2" type="text" /> |
</td> |
<td> |
<input id="btnReplaceAll" disabled="disabled" onclick="ReplaceAll()" type="button" |
value="Replace All" fcklang="DlgReplaceReplAllBtn" /> |
</td> |
</tr> |
<tr> |
<td valign="bottom" colspan="3"> |
<input id="chkCase" tabindex="3" type="checkbox" /><label for="chkCase" fcklang="DlgReplaceCaseChk">Match |
case</label> |
<br /> |
<input id="chkWord" tabindex="4" type="checkbox" /><label for="chkWord" fcklang="DlgReplaceWordChk">Match |
whole word</label> |
</td> |
</tr> |
</table> |
</body> |
</html> |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_paste.html |
---|
New file |
0,0 → 1,230 |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> |
<!-- |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fck_paste.html |
* This dialog is shown when, for some reason (usually security settings), |
* the user is not able to paste data from the clipboard to the editor using |
* the toolbar buttons or the context menu. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
--> |
<html xmlns="http://www.w3.org/1999/xhtml"> |
<head> |
<title></title> |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
<meta name="robots" content="noindex, nofollow" /> |
<script type="text/javascript"> |
var oEditor = window.parent.InnerDialogLoaded() ; |
window.onload = function () |
{ |
// First of all, translate the dialog box texts |
oEditor.FCKLanguageManager.TranslatePage(document) ; |
if ( window.parent.dialogArguments.CustomValue == 'Word' ) |
{ |
var oFrame = document.getElementById('frmData') |
oFrame.style.display = '' ; |
if ( oFrame.contentDocument ) |
oFrame.contentDocument.designMode = 'on' ; |
else |
oFrame.contentWindow.document.body.contentEditable = true ; |
} |
else |
{ |
document.getElementById('txtData').style.display = '' ; |
document.getElementById('oWordCommands').style.display = 'none' ; |
} |
window.parent.SetOkButton( true ) ; |
window.parent.SetAutoSize( true ) ; |
} |
function Ok() |
{ |
var sHtml ; |
if ( window.parent.dialogArguments.CustomValue == 'Word' ) |
{ |
var oFrame = document.getElementById('frmData') ; |
if ( oFrame.contentDocument ) |
sHtml = oFrame.contentDocument.body.innerHTML ; |
else |
sHtml = oFrame.contentWindow.document.body.innerHTML ; |
sHtml = CleanWord( sHtml ) ; |
} |
else |
{ |
var sHtml = oEditor.FCKTools.HTMLEncode( document.getElementById('txtData').value ) ; |
sHtml = sHtml.replace( /\n/g, '<BR>' ) ; |
} |
oEditor.FCK.InsertHtml( sHtml ) ; |
return true ; |
} |
function CleanUpBox() |
{ |
var oFrame = document.getElementById('frmData') ; |
if ( oFrame.contentDocument ) |
oFrame.contentDocument.body.innerHTML = '' ; |
else |
oFrame.contentWindow.document.body.innerHTML = '' ; |
} |
function CleanWord( html ) |
{ |
var bIgnoreFont = document.getElementById('chkRemoveFont').checked ; |
var bRemoveStyles = document.getElementById('chkRemoveStyles').checked ; |
html = html.replace(/<o:p>\s*<\/o:p>/g, "") ; |
html = html.replace(/<o:p>.*?<\/o:p>/g, " ") ; |
// Remove mso-xxx styles. |
html = html.replace( /\s*mso-[^:]+:[^;"]+;?/gi, "" ) ; |
// Remove margin styles. |
html = html.replace( /\s*MARGIN: 0cm 0cm 0pt\s*;/gi, "" ) ; |
html = html.replace( /\s*MARGIN: 0cm 0cm 0pt\s*"/gi, "\"" ) ; |
html = html.replace( /\s*TEXT-INDENT: 0cm\s*;/gi, "" ) ; |
html = html.replace( /\s*TEXT-INDENT: 0cm\s*"/gi, "\"" ) ; |
html = html.replace( /\s*TEXT-ALIGN: [^\s;]+;?"/gi, "\"" ) ; |
html = html.replace( /\s*PAGE-BREAK-BEFORE: [^\s;]+;?"/gi, "\"" ) ; |
html = html.replace( /\s*FONT-VARIANT: [^\s;]+;?"/gi, "\"" ) ; |
html = html.replace( /\s*tab-stops:[^;"]*;?/gi, "" ) ; |
html = html.replace( /\s*tab-stops:[^"]*/gi, "" ) ; |
// Remove FONT face attributes. |
if ( bIgnoreFont ) |
{ |
html = html.replace( /\s*face="[^"]*"/gi, "" ) ; |
html = html.replace( /\s*face=[^ >]*/gi, "" ) ; |
html = html.replace( /\s*FONT-FAMILY:[^;"]*;?/gi, "" ) ; |
} |
// Remove Class attributes |
html = html.replace(/<(\w[^>]*) class=([^ |>]*)([^>]*)/gi, "<$1$3") ; |
// Remove styles. |
if ( bRemoveStyles ) |
html = html.replace( /<(\w[^>]*) style="([^\"]*)"([^>]*)/gi, "<$1$3" ) ; |
// Remove empty styles. |
html = html.replace( /\s*style="\s*"/gi, '' ) ; |
html = html.replace( /<SPAN\s*[^>]*>\s* \s*<\/SPAN>/gi, ' ' ) ; |
html = html.replace( /<SPAN\s*[^>]*><\/SPAN>/gi, '' ) ; |
// Remove Lang attributes |
html = html.replace(/<(\w[^>]*) lang=([^ |>]*)([^>]*)/gi, "<$1$3") ; |
html = html.replace( /<SPAN\s*>(.*?)<\/SPAN>/gi, '$1' ) ; |
html = html.replace( /<FONT\s*>(.*?)<\/FONT>/gi, '$1' ) ; |
// Remove XML elements and declarations |
html = html.replace(/<\\?\?xml[^>]*>/gi, "") ; |
// Remove Tags with XML namespace declarations: <o:p><\/o:p> |
html = html.replace(/<\/?\w+:[^>]*>/gi, "") ; |
// Remove comments [SF BUG-1481861]. |
html = html.replace(/<\!--.*-->/g, "") ; |
html = html.replace( /<H\d>\s*<\/H\d>/gi, '' ) ; |
html = html.replace( /<H1([^>]*)>/gi, '<div$1><b><font size="6">' ) ; |
html = html.replace( /<H2([^>]*)>/gi, '<div$1><b><font size="5">' ) ; |
html = html.replace( /<H3([^>]*)>/gi, '<div$1><b><font size="4">' ) ; |
html = html.replace( /<H4([^>]*)>/gi, '<div$1><b><font size="3">' ) ; |
html = html.replace( /<H5([^>]*)>/gi, '<div$1><b><font size="2">' ) ; |
html = html.replace( /<H6([^>]*)>/gi, '<div$1><b><font size="1">' ) ; |
html = html.replace( /<\/H\d>/gi, '<\/font><\/b><\/div>' ) ; |
html = html.replace( /<(U|I|STRIKE)> <\/\1>/g, ' ' ) ; |
// Remove empty tags (three times, just to be sure). |
html = html.replace( /<([^\s>]+)(\s[^>]*)?>\s*<\/\1>/g, '' ) ; |
html = html.replace( /<([^\s>]+)(\s[^>]*)?>\s*<\/\1>/g, '' ) ; |
html = html.replace( /<([^\s>]+)(\s[^>]*)?>\s*<\/\1>/g, '' ) ; |
// Transform <P> to <DIV> |
var re = new RegExp( "(<P)([^>]*>.*?)(<\/P>)", "gi" ) ; // Different because of a IE 5.0 error |
html = html.replace( re, "<div$2<\/div>" ) ; |
// Fix relative anchor URLs (IE automatically adds the current page URL). |
re = new RegExp( window.location + "#", "g" ) ; |
html = html.replace( re, '#') ; |
return html ; |
} |
</script> |
</head> |
<body style="overflow: hidden"> |
<table cellspacing="0" cellpadding="0" width="100%" border="0" style="height: 98%"> |
<tr> |
<td> |
<span fcklang="DlgPasteMsg2">Please paste inside the following box using the keyboard |
(<strong>Ctrl+V</strong>) and hit <strong>OK</strong>.</span> |
<br /> |
|
</td> |
</tr> |
<tr> |
<td valign="top" height="100%" style="border-right: #000000 1px solid; border-top: #000000 1px solid; |
border-left: #000000 1px solid; border-bottom: #000000 1px solid"> |
<textarea id="txtData" cols="80" rows="5" style="border: #000000 1px; display: none; |
width: 99%; height: 98%"></textarea> |
<iframe id="frmData" src="javascript:void(0)" height="98%" width="99%" frameborder="0" |
style="border-right: #000000 1px; border-top: #000000 1px; display: none; border-left: #000000 1px; |
border-bottom: #000000 1px; background-color: #ffffff"></iframe> |
</td> |
</tr> |
<tr id="oWordCommands"> |
<td> |
<table border="0" cellpadding="0" cellspacing="0" width="100%"> |
<tr> |
<td nowrap="nowrap"> |
<input id="chkRemoveFont" type="checkbox" checked="checked" /> |
<label for="chkRemoveFont" fcklang="DlgPasteIgnoreFont"> |
Ignore Font Face definitions</label> |
<br /> |
<input id="chkRemoveStyles" type="checkbox" /> |
<label for="chkRemoveStyles" fcklang="DlgPasteRemoveStyles"> |
Remove Styles definitions</label> |
</td> |
<td align="right" valign="top"> |
<input type="button" fcklang="DlgPasteCleanBox" value="Clean Up Box" onclick="CleanUpBox()" /> |
</td> |
</tr> |
</table> |
</td> |
</tr> |
</table> |
</body> |
</html> |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_listprop.html |
---|
New file |
0,0 → 1,113 |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > |
<!-- |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fck_listprop.html |
* Bulleted List dialog window. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
* Marcel J Bennett (start attribute) |
--> |
<html xmlns="http://www.w3.org/1999/xhtml"> |
<head> |
<title></title> |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
<meta content="noindex, nofollow" name="robots" /> |
<script src="common/fck_dialog_common.js" type="text/javascript"></script> |
<script type="text/javascript"> |
var oEditor = window.parent.InnerDialogLoaded() ; |
// Gets the document DOM |
var oDOM = oEditor.FCK.EditorDocument ; |
var oActiveEl = oEditor.FCKSelection.MoveToAncestorNode( 'UL' ) ; |
var oActiveSel ; |
window.onload = function() |
{ |
// First of all, translate the dialog box texts |
oEditor.FCKLanguageManager.TranslatePage(document) ; |
if ( oActiveEl ) |
oActiveSel = GetE('selBulleted') ; |
else |
{ |
oActiveEl = oEditor.FCKSelection.MoveToAncestorNode( 'OL' ) ; |
if ( oActiveEl ) |
{ |
oActiveSel = GetE('selNumbered') ; |
GetE('eStart').style.display = '' ; |
GetE('txtStartPosition').value = GetAttribute( oActiveEl, 'start' ) ; |
} |
} |
oActiveSel.style.display = '' ; |
if ( oActiveEl ) |
{ |
if ( oActiveEl.getAttribute('type') ) |
oActiveSel.value = oActiveEl.getAttribute('type').toLowerCase() ; |
} |
window.parent.SetOkButton( true ) ; |
} |
function Ok() |
{ |
if ( oActiveEl ){ |
SetAttribute( oActiveEl, 'type' , oActiveSel.value ) ; |
if(oActiveEl.tagName == 'OL') |
SetAttribute( oActiveEl, 'start', GetE('txtStartPosition').value ) ; |
} |
return true ; |
} |
</script> |
</head> |
<body style="overflow: hidden"> |
<table width="100%" style="height: 100%"> |
<tr> |
<td style="text-align:center"> |
<table cellspacing="0" cellpadding="0" border="0" style="margin-left: auto; margin-right: auto;"> |
<tr> |
<td id="eStart" style="display: none; padding-right: 5px; padding-left: 5px"> |
<span fcklang="DlgLstStart">Start</span><br /> |
<input type="text" id="txtStartPosition" size="5" /> |
</td> |
<td style="padding-right: 5px; padding-left: 5px"> |
<span fcklang="DlgLstType">List Type</span><br /> |
<select id="selBulleted" style="display: none"> |
<option value="" selected="selected"></option> |
<option value="circle" fcklang="DlgLstTypeCircle">Circle</option> |
<option value="disc" fcklang="DlgLstTypeDisc">Disc</option> |
<option value="square" fcklang="DlgLstTypeSquare">Square</option> |
</select> |
<select id="selNumbered" style="display: none"> |
<option value="" selected="selected"></option> |
<option value="1" fcklang="DlgLstTypeNumbers">Numbers (1, 2, 3)</option> |
<option value="a" fcklang="DlgLstTypeLCase">Lowercase Letters (a, b, c)</option> |
<option value="A" fcklang="DlgLstTypeUCase">Uppercase Letters (A, B, C)</option> |
<option value="i" fcklang="DlgLstTypeSRoman">Small Roman Numerals (i, ii, iii)</option> |
<option value="I" fcklang="DlgLstTypeLRoman">Large Roman Numerals (I, II, III)</option> |
</select> |
|
</td> |
</tr> |
</table> |
</td> |
</tr> |
</table> |
</body> |
</html> |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_textarea.html |
---|
New file |
0,0 → 1,90 |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > |
<!-- |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fck_textarea.html |
* Text Area dialog window. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
--> |
<html> |
<head> |
<title>Text Area Properties</title> |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> |
<meta content="noindex, nofollow" name="robots"> |
<script src="common/fck_dialog_common.js" type="text/javascript"></script> |
<script type="text/javascript"> |
var oEditor = window.parent.InnerDialogLoaded() ; |
// Gets the document DOM |
var oDOM = oEditor.FCK.EditorDocument ; |
var oActiveEl = oEditor.FCKSelection.GetSelectedElement() ; |
window.onload = function() |
{ |
// First of all, translate the dialog box texts |
oEditor.FCKLanguageManager.TranslatePage(document) ; |
if ( oActiveEl && oActiveEl.tagName == 'TEXTAREA' ) |
{ |
GetE('txtName').value = oActiveEl.name ; |
GetE('txtCols').value = GetAttribute( oActiveEl, 'cols' ) ; |
GetE('txtRows').value = GetAttribute( oActiveEl, 'rows' ) ; |
} |
else |
oActiveEl = null ; |
window.parent.SetOkButton( true ) ; |
} |
function Ok() |
{ |
if ( !oActiveEl ) |
{ |
oActiveEl = oEditor.FCK.EditorDocument.createElement( 'TEXTAREA' ) ; |
oActiveEl = oEditor.FCK.InsertElementAndGetIt( oActiveEl ) ; |
} |
oActiveEl.name = GetE('txtName').value ; |
SetAttribute( oActiveEl, 'cols', GetE('txtCols').value ) ; |
SetAttribute( oActiveEl, 'rows', GetE('txtRows').value ) ; |
return true ; |
} |
</script> |
</head> |
<body style='OVERFLOW: hidden' scroll='no'> |
<table height="100%" width="100%"> |
<tr> |
<td align="center"> |
<table border="0" cellpadding="0" cellspacing="0" width="80%"> |
<tr> |
<td> |
<span fckLang="DlgTextareaName">Name</span><br> |
<input type="text" id="txtName" style="WIDTH: 100%"> |
<span fckLang="DlgTextareaCols">Collumns</span><br> |
<input id="txtCols" type="text" size="5"> |
<br> |
<span fckLang="DlgTextareaRows">Rows</span><br> |
<input id="txtRows" type="text" size="5"> |
</td> |
</tr> |
</table> |
</td> |
</tr> |
</table> |
</body> |
</html> |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_specialchar.html |
---|
New file |
0,0 → 1,109 |
<!-- |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fck_specialchar.html |
* Special Chars Selector dialog window. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
--> |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > |
<html> |
<head> |
<meta name="robots" content="noindex, nofollow"> |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> |
<style type="text/css"> |
.Hand |
{ |
cursor: pointer ; |
cursor: hand ; |
} |
.Sample { font-size: 24px; } |
</style> |
<script type="text/javascript"> |
var oEditor = window.parent.InnerDialogLoaded() ; |
var oSample ; |
function insertChar(charValue) |
{ |
oEditor.FCK.InsertHtml( charValue || "" ) ; |
window.parent.Cancel() ; |
} |
function over(td) |
{ |
oSample.innerHTML = td.innerHTML ; |
td.className = 'LightBackground SpecialCharsOver Hand' ; |
} |
function out(td) |
{ |
oSample.innerHTML = " " ; |
td.className = 'DarkBackground SpecialCharsOut Hand' ; |
} |
function setDefaults() |
{ |
// Gets the sample placeholder. |
oSample = document.getElementById("SampleTD") ; |
// First of all, translates the dialog box texts. |
oEditor.FCKLanguageManager.TranslatePage(document) ; |
} |
</script> |
</HEAD> |
<BODY onload="setDefaults()" scroll="no"> |
<table cellpadding="0" cellspacing="0" width="100%" height="100%"> |
<tr> |
<td width="100%"> |
<table cellpadding="1" cellspacing="1" align="center" border="0" width="100%" height="100%"> |
<script type="text/javascript"> |
var aChars = ["!",""","#","$","%","&","\\'","(",")","*","+","-",".","/","0","1","2","3","4","5","6","7","8","9",":",";","<","=",">","?","@","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","[","]","^","_","`","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","{","|","}","~","€","‘","’","’","“","”","–","—","¡","¢","£","¤","¥","¦","§","¨","©","ª","«","¬","®","¯","°","±","²","³","´","µ","¶","·","¸","¹","º","»","¼","½","¾","¿","À","Á","Â","Ã","Ä","Å","Æ","Ç","È","É","Ê","Ë","Ì","Í","Î","Ï","Ð","Ñ","Ò","Ó","Ô","Õ","Ö","×","Ø","Ù","Ú","Û","Ü","Ý","Þ","ß","à","á","â","ã","ä","å","æ","ç","è","é","ê","ë","ì","í","î","ï","ð","ñ","ò","ó","ô","õ","ö","÷","ø","ù","ú","û","ü","ü","ý","þ","ÿ","Œ","œ","‚","‛","„","…","™","►","•","→","⇒","⇔","♦","≈"] ; |
var cols = 20 ; |
var i = 0 ; |
while (i < aChars.length) |
{ |
document.write("<TR>") ; |
for(var j = 0 ; j < cols ; j++) |
{ |
if (aChars[i]) |
{ |
document.write('<TD width="1%" class="DarkBackground SpecialCharsOut Hand" align="center" onclick="insertChar(\'' + aChars[i].replace(/&/g, "&") + '\')" onmouseover="over(this)" onmouseout="out(this)">') ; |
document.write(aChars[i]) ; |
} |
else |
document.write("<TD class='DarkBackground SpecialCharsOut'> ") ; |
document.write("<\/TD>") ; |
i++ ; |
} |
document.write("<\/TR>") ; |
} |
</script> |
</table> |
</td> |
<td nowrap> </td> |
<td valign="top"> |
<table width="40" cellpadding="0" cellspacing="0" border="0"> |
<tr> |
<td id="SampleTD" width="40" height="40" align="center" class="DarkBackground SpecialCharsOut Sample"> </td> |
</tr> |
</table> |
</td> |
</tr> |
</table> |
</BODY> |
</HTML> |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_colorselector.html |
---|
New file |
0,0 → 1,167 |
<!-- |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fck_colorselector.html |
* Color Selection dialog window. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
--> |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > |
<html> |
<head> |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
<meta name="robots" content="noindex, nofollow" /> |
<style TYPE="text/css"> |
#ColorTable { cursor: pointer ; cursor: hand ; } |
#hicolor { height: 74px ; width: 74px ; border-width: 1px ; border-style: solid ; } |
#hicolortext { width: 75px ; text-align: right ; margin-bottom: 7px ; } |
#selhicolor { height: 20px ; width: 74px ; border-width: 1px ; border-style: solid ; } |
#selcolor { width: 75px ; height: 20px ; margin-top: 0px ; margin-bottom: 7px ; } |
#btnClear { width: 75px ; height: 22px ; margin-bottom: 6px ; } |
.ColorCell { height: 15px ; width: 15px ; } |
</style> |
<script type="text/javascript"> |
var oEditor = window.parent.InnerDialogLoaded() ; |
function OnLoad() |
{ |
// First of all, translate the dialog box texts |
oEditor.FCKLanguageManager.TranslatePage(document) ; |
CreateColorTable() ; |
window.parent.SetOkButton( true ) ; |
window.parent.SetAutoSize( true ) ; |
} |
function CreateColorTable() |
{ |
// Get the target table. |
var oTable = document.getElementById('ColorTable') ; |
// Create the base colors array. |
var aColors = ['00','33','66','99','cc','ff'] ; |
// This function combines two ranges of three values from the color array into a row. |
function AppendColorRow( rangeA, rangeB ) |
{ |
for ( var i = rangeA ; i < rangeA + 3 ; i++ ) |
{ |
var oRow = oTable.insertRow(-1) ; |
for ( var j = rangeB ; j < rangeB + 3 ; j++ ) |
{ |
for ( var n = 0 ; n < 6 ; n++ ) |
{ |
AppendColorCell( oRow, '#' + aColors[j] + aColors[n] + aColors[i] ) ; |
} |
} |
} |
} |
// This function create a single color cell in the color table. |
function AppendColorCell( targetRow, color ) |
{ |
var oCell = targetRow.insertCell(-1) ; |
oCell.className = 'ColorCell' ; |
oCell.bgColor = color ; |
oCell.onmouseover = function() |
{ |
document.getElementById('hicolor').style.backgroundColor = this.bgColor ; |
document.getElementById('hicolortext').innerHTML = this.bgColor ; |
} |
oCell.onclick = function() |
{ |
document.getElementById('selhicolor').style.backgroundColor = this.bgColor ; |
document.getElementById('selcolor').value = this.bgColor ; |
} |
} |
AppendColorRow( 0, 0 ) ; |
AppendColorRow( 3, 0 ) ; |
AppendColorRow( 0, 3 ) ; |
AppendColorRow( 3, 3 ) ; |
// Create the last row. |
var oRow = oTable.insertRow(-1) ; |
// Create the gray scale colors cells. |
for ( var n = 0 ; n < 6 ; n++ ) |
{ |
AppendColorCell( oRow, '#' + aColors[n] + aColors[n] + aColors[n] ) ; |
} |
// Fill the row with black cells. |
for ( var i = 0 ; i < 12 ; i++ ) |
{ |
AppendColorCell( oRow, '#000000' ) ; |
} |
} |
function Clear() |
{ |
document.getElementById('selhicolor').style.backgroundColor = '' ; |
document.getElementById('selcolor').value = '' ; |
} |
function ClearActual() |
{ |
document.getElementById('hicolor').style.backgroundColor = '' ; |
document.getElementById('hicolortext').innerHTML = ' ' ; |
} |
function UpdateColor() |
{ |
try { document.getElementById('selhicolor').style.backgroundColor = document.getElementById('selcolor').value ; } |
catch (e) { Clear() ; } |
} |
function Ok() |
{ |
if ( typeof(window.parent.dialogArguments.CustomValue) == 'function' ) |
window.parent.dialogArguments.CustomValue( document.getElementById('selcolor').value ) ; |
return true ; |
} |
</script> |
</head> |
<body onload="OnLoad()" scroll="no" style="OVERFLOW: hidden"> |
<table cellpadding="0" cellspacing="0" border="0" width="100%" height="100%"> |
<tr> |
<td align="center" valign="middle"> |
<table border="0" cellspacing="5" cellpadding="0" width="100%"> |
<tr> |
<td valign="top" align="center" nowrap width="100%"> |
<table id="ColorTable" border="0" cellspacing="0" cellpadding="0" width="270" onmouseout="ClearActual();"> |
</table> |
</td> |
<td valign="top" align="left" nowrap> |
<span fckLang="DlgColorHighlight">Highlight</span> |
<div id="hicolor"></div> |
<div id="hicolortext"> </div> |
<span fckLang="DlgColorSelected">Selected</span> |
<div id="selhicolor"></div> |
<input id="selcolor" type="text" maxlength="20" onchange="UpdateColor();"> |
<br> |
<input id="btnClear" type="button" fckLang="DlgColorBtnClear" value="Clear" onclick="Clear();" /> |
</td> |
</tr> |
</table> |
</td> |
</tr> |
</table> |
</body> |
</html> |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_image.html |
---|
New file |
0,0 → 1,248 |
<!-- |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fck_image.html |
* Image Properties dialog window. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
--> |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> |
<html xmlns="http://www.w3.org/1999/xhtml"> |
<head> |
<title>Image Properties</title> |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
<meta name="robots" content="noindex, nofollow" /> |
<script src="common/fck_dialog_common.js" type="text/javascript"></script> |
<script src="fck_image/fck_image.js" type="text/javascript"></script> |
<link href="common/fck_dialog_common.css" rel="stylesheet" type="text/css" /> |
</head> |
<body scroll="no" style="overflow: hidden"> |
<div id="divInfo"> |
<table cellspacing="1" cellpadding="1" border="0" width="100%" height="100%"> |
<tr> |
<td> |
<table cellspacing="0" cellpadding="0" width="100%" border="0"> |
<tr> |
<td width="100%"> |
<span fcklang="DlgImgURL">URL</span> |
</td> |
<td id="tdBrowse" style="display: none" nowrap="nowrap" rowspan="2"> |
|
<input id="btnBrowse" onclick="BrowseServer();" type="button" value="Browse Server" |
fcklang="DlgBtnBrowseServer" /> |
</td> |
</tr> |
<tr> |
<td valign="top"> |
<input id="txtUrl" style="width: 100%" type="text" onblur="UpdatePreview();" /> |
</td> |
</tr> |
</table> |
</td> |
</tr> |
<tr> |
<td> |
<span fcklang="DlgImgAlt">Short Description</span><br /> |
<input id="txtAlt" style="width: 100%" type="text" /><br /> |
</td> |
</tr> |
<tr height="100%"> |
<td valign="top"> |
<table cellspacing="0" cellpadding="0" width="100%" border="0" height="100%"> |
<tr> |
<td valign="top"> |
<br /> |
<table cellspacing="0" cellpadding="0" border="0"> |
<tr> |
<td nowrap="nowrap"> |
<span fcklang="DlgImgWidth">Width</span> </td> |
<td> |
<input type="text" size="3" id="txtWidth" onkeyup="OnSizeChanged('Width',this.value);" /></td> |
<td rowspan="2"> |
<div id="btnLockSizes" class="BtnLocked" onmouseover="this.className = (bLockRatio ? 'BtnLocked' : 'BtnUnlocked' ) + ' BtnOver';" |
onmouseout="this.className = (bLockRatio ? 'BtnLocked' : 'BtnUnlocked' );" title="Lock Sizes" |
onclick="SwitchLock(this);"> |
</div> |
</td> |
<td rowspan="2"> |
<div id="btnResetSize" class="BtnReset" onmouseover="this.className='BtnReset BtnOver';" |
onmouseout="this.className='BtnReset';" title="Reset Size" onclick="ResetSizes();"> |
</div> |
</td> |
</tr> |
<tr> |
<td nowrap="nowrap"> |
<span fcklang="DlgImgHeight">Height</span> </td> |
<td> |
<input type="text" size="3" id="txtHeight" onkeyup="OnSizeChanged('Height',this.value);" /></td> |
</tr> |
</table> |
<br /> |
<table cellspacing="0" cellpadding="0" border="0"> |
<tr> |
<td nowrap="nowrap"> |
<span fcklang="DlgImgBorder">Border</span> </td> |
<td> |
<input type="text" size="2" value="" id="txtBorder" onkeyup="UpdatePreview();" /></td> |
</tr> |
<tr> |
<td nowrap="nowrap"> |
<span fcklang="DlgImgHSpace">HSpace</span> </td> |
<td> |
<input type="text" size="2" id="txtHSpace" onkeyup="UpdatePreview();" /></td> |
</tr> |
<tr> |
<td nowrap="nowrap"> |
<span fcklang="DlgImgVSpace">VSpace</span> </td> |
<td> |
<input type="text" size="2" id="txtVSpace" onkeyup="UpdatePreview();" /></td> |
</tr> |
<tr> |
<td nowrap="nowrap"> |
<span fcklang="DlgImgAlign">Align</span> </td> |
<td> |
<select id="cmbAlign" onchange="UpdatePreview();"> |
<option value="" selected="selected"></option> |
<option fcklang="DlgImgAlignLeft" value="left">Left</option> |
<option fcklang="DlgImgAlignAbsBottom" value="absBottom">Abs Bottom</option> |
<option fcklang="DlgImgAlignAbsMiddle" value="absMiddle">Abs Middle</option> |
<option fcklang="DlgImgAlignBaseline" value="baseline">Baseline</option> |
<option fcklang="DlgImgAlignBottom" value="bottom">Bottom</option> |
<option fcklang="DlgImgAlignMiddle" value="middle">Middle</option> |
<option fcklang="DlgImgAlignRight" value="right">Right</option> |
<option fcklang="DlgImgAlignTextTop" value="textTop">Text Top</option> |
<option fcklang="DlgImgAlignTop" value="top">Top</option> |
</select> |
</td> |
</tr> |
</table> |
</td> |
<td> |
</td> |
<td width="100%" valign="top"> |
<table cellpadding="0" cellspacing="0" width="100%" style="table-layout: fixed"> |
<tr> |
<td> |
<span fcklang="DlgImgPreview">Preview</span></td> |
</tr> |
<tr> |
<td valign="top"> |
<iframe class="ImagePreviewArea" src="fck_image/fck_image_preview.html" frameborder="0" |
marginheight="0" marginwidth="0"></iframe> |
</td> |
</tr> |
</table> |
</td> |
</tr> |
</table> |
</td> |
</tr> |
</table> |
</div> |
<div id="divUpload" style="display: none"> |
<form id="frmUpload" method="post" target="UploadWindow" enctype="multipart/form-data" |
action="" onsubmit="return CheckUpload();"> |
<span fcklang="DlgLnkUpload">Upload</span><br /> |
<input id="txtUploadFile" style="width: 100%" type="file" size="40" name="NewFile" /><br /> |
<br /> |
<input id="btnUpload" type="submit" value="Send it to the Server" fcklang="DlgLnkBtnUpload" /> |
<iframe name="UploadWindow" style="display: none" src="../fckblank.html"></iframe> |
</form> |
</div> |
<div id="divLink" style="display: none"> |
<table cellspacing="1" cellpadding="1" border="0" width="100%"> |
<tr> |
<td> |
<div> |
<span fcklang="DlgLnkURL">URL</span><br /> |
<input id="txtLnkUrl" style="width: 100%" type="text" onblur="UpdatePreview();" /> |
</div> |
<div id="divLnkBrowseServer" align="right"> |
<input type="button" value="Browse Server" fcklang="DlgBtnBrowseServer" onclick="LnkBrowseServer();" /> |
</div> |
<div> |
<span fcklang="DlgLnkTarget">Target</span><br /> |
<select id="cmbLnkTarget"> |
<option value="" fcklang="DlgGenNotSet" selected="selected"><not set></option> |
<option value="_blank" fcklang="DlgLnkTargetBlank">New Window (_blank)</option> |
<option value="_top" fcklang="DlgLnkTargetTop">Topmost Window (_top)</option> |
<option value="_self" fcklang="DlgLnkTargetSelf">Same Window (_self)</option> |
<option value="_parent" fcklang="DlgLnkTargetParent">Parent Window (_parent)</option> |
</select> |
</div> |
</td> |
</tr> |
</table> |
</div> |
<div id="divAdvanced" style="display: none"> |
<table cellspacing="0" cellpadding="0" width="100%" align="center" border="0"> |
<tr> |
<td valign="top" width="50%"> |
<span fcklang="DlgGenId">Id</span><br /> |
<input id="txtAttId" style="width: 100%" type="text" /> |
</td> |
<td width="1"> |
</td> |
<td valign="top"> |
<table cellspacing="0" cellpadding="0" width="100%" align="center" border="0"> |
<tr> |
<td width="60%"> |
<span fcklang="DlgGenLangDir">Language Direction</span><br /> |
<select id="cmbAttLangDir" style="width: 100%"> |
<option value="" fcklang="DlgGenNotSet" selected="selected"><not set></option> |
<option value="ltr" fcklang="DlgGenLangDirLtr">Left to Right (LTR)</option> |
<option value="rtl" fcklang="DlgGenLangDirRtl">Right to Left (RTL)</option> |
</select> |
</td> |
<td width="1%"> |
</td> |
<td nowrap="nowrap"> |
<span fcklang="DlgGenLangCode">Language Code</span><br /> |
<input id="txtAttLangCode" style="width: 100%" type="text" /> |
</td> |
</tr> |
</table> |
</td> |
</tr> |
<tr> |
<td colspan="3"> |
</td> |
</tr> |
<tr> |
<td colspan="3"> |
<span fcklang="DlgGenLongDescr">Long Description URL</span><br /> |
<input id="txtLongDesc" style="width: 100%" type="text" /> |
</td> |
</tr> |
<tr> |
<td colspan="3"> |
</td> |
</tr> |
<tr> |
<td valign="top"> |
<span fcklang="DlgGenClass">Stylesheet Classes</span><br /> |
<input id="txtAttClasses" style="width: 100%" type="text" /> |
</td> |
<td> |
</td> |
<td valign="top"> |
<span fcklang="DlgGenTitle">Advisory Title</span><br /> |
<input id="txtAttTitle" style="width: 100%" type="text" /> |
</td> |
</tr> |
</table> |
<span fcklang="DlgGenStyle">Style</span><br /> |
<input id="txtAttStyle" style="width: 100%" type="text" /> |
</div> |
</body> |
</html> |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_spellerpages.html |
---|
New file |
0,0 → 1,59 |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > |
<!-- |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fck_spellerpages.html |
* Spell Check dialog window. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
--> |
<html> |
<head> |
<title>Spell Check</title> |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> |
<meta content="noindex, nofollow" name="robots"> |
<script src="fck_spellerpages/spellerpages/spellChecker.js"></script> |
<script type="text/javascript"> |
var oEditor = window.parent.InnerDialogLoaded() ; |
var FCKLang = oEditor.FCKLang ; |
window.onload = function() |
{ |
document.getElementById('txtHtml').value = oEditor.FCK.EditorDocument.body.innerHTML ; |
var oSpeller = new spellChecker( document.getElementById('txtHtml') ) ; |
oSpeller.OnFinished = oSpeller_OnFinished ; |
oSpeller.openChecker() ; |
} |
function OnSpellerControlsLoad( controlsWindow ) |
{ |
// Translate the dialog box texts |
oEditor.FCKLanguageManager.TranslatePage( controlsWindow.document ) ; |
} |
function oSpeller_OnFinished( numberOCorrections ) |
{ |
if ( numberOCorrections > 0 ) |
oEditor.FCK.SetHTML( document.getElementById('txtHtml').value ) ; |
window.parent.Cancel() ; |
} |
</script> |
</head> |
<body style="OVERFLOW: hidden" scroll="no" style="padding:0px;"> |
<input type="hidden" id="txtHtml" value=""> |
<iframe id="frmSpell" src="../fckblank.html" name="spellchecker" width="100%" height="100%" frameborder="0"></iframe> |
</body> |
</html> |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_checkbox.html |
---|
New file |
0,0 → 1,103 |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > |
<!-- |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fck_checkbox.html |
* Checkbox dialog window. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
--> |
<html> |
<head> |
<title>Checkbox Properties</title> |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> |
<meta content="noindex, nofollow" name="robots"> |
<script src="common/fck_dialog_common.js" type="text/javascript"></script> |
<script type="text/javascript"> |
var oEditor = window.parent.InnerDialogLoaded() ; |
// Gets the document DOM |
var oDOM = oEditor.FCK.EditorDocument ; |
var oActiveEl = oEditor.FCKSelection.GetSelectedElement() ; |
window.onload = function() |
{ |
// First of all, translate the dialog box texts |
oEditor.FCKLanguageManager.TranslatePage(document) ; |
if ( oActiveEl && oActiveEl.tagName == 'INPUT' && oActiveEl.type == 'checkbox' ) |
{ |
GetE('txtName').value = oActiveEl.name ; |
GetE('txtValue').value = oEditor.FCKBrowserInfo.IsIE ? oActiveEl.value : GetAttribute( oActiveEl, 'value' ) ; |
GetE('txtSelected').checked = oActiveEl.checked ; |
} |
else |
oActiveEl = null ; |
window.parent.SetOkButton( true ) ; |
} |
function Ok() |
{ |
if ( !oActiveEl ) |
{ |
oActiveEl = oEditor.FCK.EditorDocument.createElement( 'INPUT' ) ; |
oActiveEl.type = 'checkbox' ; |
oActiveEl = oEditor.FCK.InsertElementAndGetIt( oActiveEl ) ; |
} |
if ( GetE('txtName').value.length > 0 ) |
oActiveEl.name = GetE('txtName').value ; |
if ( oEditor.FCKBrowserInfo.IsIE ) |
oActiveEl.value = GetE('txtValue').value ; |
else |
SetAttribute( oActiveEl, 'value', GetE('txtValue').value ) ; |
var bIsChecked = GetE('txtSelected').checked ; |
SetAttribute( oActiveEl, 'checked', bIsChecked ? 'checked' : null ) ; // For Firefox |
oActiveEl.checked = bIsChecked ; |
return true ; |
} |
</script> |
</head> |
<body style="OVERFLOW: hidden" scroll="no"> |
<table height="100%" width="100%"> |
<tr> |
<td align="center"> |
<table border="0" cellpadding="0" cellspacing="0" width="80%"> |
<tr> |
<td> |
<span fckLang="DlgCheckboxName">Name</span><br> |
<input type="text" size="20" id="txtName" style="WIDTH: 100%"> |
</td> |
</tr> |
<tr> |
<td> |
<span fckLang="DlgCheckboxValue">Value</span><br> |
<input type="text" size="20" id="txtValue" style="WIDTH: 100%"> |
</td> |
</tr> |
<tr> |
<td><input type="checkbox" id="txtSelected"><label for="txtSelected" fckLang="DlgCheckboxSelected">Checked</label></td> |
</tr> |
</table> |
</td> |
</tr> |
</table> |
</body> |
</html> |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_table.html |
---|
New file |
0,0 → 1,316 |
<!-- |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fck_table.html |
* Table dialog window. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
--> |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > |
<html xmlns="http://www.w3.org/1999/xhtml"> |
<head> |
<title>Table Properties</title> |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
<meta name="robots" content="noindex, nofollow" /> |
<script type="text/javascript"> |
var oEditor = window.parent.InnerDialogLoaded() ; |
// Gets the document DOM |
var oDOM = oEditor.FCK.EditorDocument ; |
// Gets the table if there is one selected. |
var table ; |
var e = oEditor.FCKSelection.GetSelectedElement() ; |
if ( ( !e && document.location.search.substr(1) == 'Parent' ) || ( e && e.tagName != 'TABLE' ) ) |
e = oEditor.FCKSelection.MoveToAncestorNode( 'TABLE' ) ; |
if ( e && e.tagName == "TABLE" ) |
table = e ; |
// Fired when the window loading process is finished. It sets the fields with the |
// actual values if a table is selected in the editor. |
window.onload = function() |
{ |
// First of all, translate the dialog box texts |
oEditor.FCKLanguageManager.TranslatePage(document) ; |
if (table) |
{ |
document.getElementById('txtRows').value = table.rows.length ; |
document.getElementById('txtColumns').value = table.rows[0].cells.length ; |
// Gets the value from the Width or the Style attribute |
var iWidth = (table.style.width ? table.style.width : table.width ) ; |
var iHeight = (table.style.height ? table.style.height : table.height ) ; |
if (iWidth.indexOf('%') >= 0) // Percentual = % |
{ |
iWidth = parseInt( iWidth.substr(0,iWidth.length - 1) ) ; |
document.getElementById('selWidthType').value = "percent" ; |
} |
else if (iWidth.indexOf('px') >= 0) // Style Pixel = px |
{ // |
iWidth = iWidth.substr(0,iWidth.length - 2); |
document.getElementById('selWidthType').value = "pixels" ; |
} |
if (iHeight && iHeight.indexOf('px') >= 0) // Style Pixel = px |
iHeight = iHeight.substr(0,iHeight.length - 2); |
document.getElementById('txtWidth').value = iWidth ; |
document.getElementById('txtHeight').value = iHeight ; |
document.getElementById('txtBorder').value = table.border ; |
document.getElementById('selAlignment').value = table.align ; |
document.getElementById('txtCellPadding').value = table.cellPadding ; |
document.getElementById('txtCellSpacing').value = table.cellSpacing ; |
document.getElementById('txtSummary').value = table.summary; |
// document.getElementById('cmbFontStyle').value = table.className ; |
if (table.caption) document.getElementById('txtCaption').value = table.caption.innerHTML ; |
document.getElementById('txtRows').disabled = true ; |
document.getElementById('txtColumns').disabled = true ; |
} |
window.parent.SetOkButton( true ) ; |
window.parent.SetAutoSize( true ) ; |
} |
// Fired when the user press the OK button |
function Ok() |
{ |
var bExists = ( table != null ) ; |
if ( ! bExists ) |
{ |
table = oEditor.FCK.EditorDocument.createElement( "TABLE" ) ; |
} |
// Removes the Width and Height styles |
if ( bExists && table.style.width ) table.style.width = null ; //.removeAttribute("width") ; |
if ( bExists && table.style.height ) table.style.height = null ; //.removeAttribute("height") ; |
table.width = document.getElementById('txtWidth').value + ( document.getElementById('selWidthType').value == "percent" ? "%" : "") ; |
table.height = document.getElementById('txtHeight').value ; |
table.border = document.getElementById('txtBorder').value ; |
table.align = document.getElementById('selAlignment').value ; |
table.cellPadding = document.getElementById('txtCellPadding').value ; |
table.cellSpacing = document.getElementById('txtCellSpacing').value ; |
table.summary = document.getElementById('txtSummary').value ; |
// table.className = cmbFontStyle.value ; |
if ( document.getElementById('txtCaption').value != '') |
{ |
if (! table.caption) table.createCaption() ; |
table.caption.innerHTML = document.getElementById('txtCaption').value ; |
} |
else if ( bExists && table.caption ) |
{ |
if ( document.all ) |
table.caption.innerHTML = '' ; // TODO: It causes an IE internal error if using removeChild. |
else |
table.caption.parentNode.removeChild( table.caption ) ; |
} |
if (! bExists) |
{ |
var iRows = document.getElementById('txtRows').value ; |
var iCols = document.getElementById('txtColumns').value ; |
for ( var r = 0 ; r < iRows ; r++ ) |
{ |
var oRow = table.insertRow(-1) ; |
for ( var c = 0 ; c < iCols ; c++ ) |
{ |
var oCell = oRow.insertCell(-1) ; |
if ( oEditor.FCKBrowserInfo.IsGecko ) |
oCell.innerHTML = '<br _moz_editor_bogus_node="TRUE">' ; |
//oCell.innerHTML = " " ; |
} |
} |
oEditor.FCKUndo.SaveUndoStep() ; |
// START iCM MODIFICATIONS |
// Amended to ensure that newly inserted tables are not incorrectly nested in P tags, etc |
// We insert the table first and then rectify any nestings afterwards so we can re-use the |
// FCKTablesProcessor function that corrects tables on SetHTML() |
/* |
table = oEditor.FCK.InsertElementAndGetIt( table ) ; |
if ( !oEditor.FCKConfig.UseBROnCarriageReturn ) |
{ |
oEditor.FCKTablesProcessor.CheckTableNesting( table ) ; |
} |
*/ |
// END iCM MODIFICATIONS |
oEditor.FCK.InsertElement( table ) ; |
} |
return true ; |
} |
function IsDigit( e ) |
{ |
e = e || event ; |
var iCode = ( e.keyCode || e.charCode ) ; |
return |
( |
( iCode >= 48 && iCode <= 57 ) // Numbers |
|| (iCode >= 37 && iCode <= 40) // Arrows |
|| iCode == 8 // Backspace |
|| iCode == 46 // Delete |
) ; |
} |
</script> |
</head> |
<body style="overflow: hidden"> |
<table id="otable" cellspacing="0" cellpadding="0" width="100%" border="0" style="height: 100%"> |
<tr> |
<td> |
<table cellspacing="1" cellpadding="1" width="100%" border="0"> |
<tr> |
<td valign="top"> |
<table cellspacing="0" cellpadding="0" border="0"> |
<tr> |
<td> |
<span fcklang="DlgTableRows">Rows</span>:</td> |
<td> |
<input id="txtRows" type="text" maxlength="3" size="2" value="3" name="txtRows" |
onkeypress="return IsDigit(event);" /></td> |
</tr> |
<tr> |
<td> |
<span fcklang="DlgTableColumns">Columns</span>:</td> |
<td> |
<input id="txtColumns" type="text" maxlength="2" size="2" value="2" name="txtColumns" |
onkeypress="return IsDigit(event);" /></td> |
</tr> |
<tr> |
<td> |
</td> |
<td> |
</td> |
</tr> |
<tr> |
<td> |
<span fcklang="DlgTableBorder">Border size</span>:</td> |
<td> |
<input id="txtBorder" type="text" maxlength="2" size="2" value="1" name="txtBorder" |
onkeypress="return IsDigit(event);" /></td> |
</tr> |
<tr> |
<td> |
<span fcklang="DlgTableAlign">Alignment</span>:</td> |
<td> |
<select id="selAlignment" name="selAlignment"> |
<option fcklang="DlgTableAlignNotSet" value="" selected="selected"><Not set></option> |
<option fcklang="DlgTableAlignLeft" value="left">Left</option> |
<option fcklang="DlgTableAlignCenter" value="center">Center</option> |
<option fcklang="DlgTableAlignRight" value="right">Right</option> |
</select></td> |
</tr> |
</table> |
</td> |
<td> |
</td> |
<td align="right" valign="top"> |
<table cellspacing="0" cellpadding="0" border="0"> |
<tr> |
<td> |
<span fcklang="DlgTableWidth">Width</span>:</td> |
<td> |
<input id="txtWidth" type="text" maxlength="4" size="3" value="200" name="txtWidth" |
onkeypress="return IsDigit(event);" /></td> |
<td> |
<select id="selWidthType" name="selWidthType"> |
<option fcklang="DlgTableWidthPx" value="pixels" selected="selected">pixels</option> |
<option fcklang="DlgTableWidthPc" value="percent">percent</option> |
</select></td> |
</tr> |
<tr> |
<td> |
<span fcklang="DlgTableHeight">Height</span>:</td> |
<td> |
<input id="txtHeight" type="text" maxlength="4" size="3" name="txtHeight" onkeypress="return IsDigit(event);" /></td> |
<td> |
<span fcklang="DlgTableWidthPx">pixels</span></td> |
</tr> |
<tr> |
<td> |
</td> |
<td> |
</td> |
<td> |
</td> |
</tr> |
<tr> |
<td nowrap="nowrap"> |
<span fcklang="DlgTableCellSpace">Cell spacing</span>:</td> |
<td> |
<input id="txtCellSpacing" type="text" maxlength="2" size="2" value="1" name="txtCellSpacing" |
onkeypress="return IsDigit(event);" /></td> |
<td> |
</td> |
</tr> |
<tr> |
<td nowrap="nowrap"> |
<span fcklang="DlgTableCellPad">Cell padding</span>:</td> |
<td> |
<input id="txtCellPadding" type="text" maxlength="2" size="2" value="1" name="txtCellPadding" |
onkeypress="return IsDigit(event);" /></td> |
<td> |
</td> |
</tr> |
</table> |
</td> |
</tr> |
</table> |
<table cellspacing="0" cellpadding="0" width="100%" border="0"> |
<!-- |
<tr> |
<td nowrap> |
<span fcklang="DlgClassName">Class Name</span>:</td> |
<td> </td> |
<td> |
<script type="text/javascript"> |
// var tbstyles = new TBCombo( "FontStyle" , "null" , "", oEditor.config.StyleNames, oEditor.config.StyleValues, 'CheckStyle("cmbFontStyle")'); |
// document.write(tbstyles.GetHTML()); |
</script></td> |
</tr> |
--> |
<tr> |
<td nowrap="nowrap"> |
<span fcklang="DlgTableCaption">Caption</span>: </td> |
<td> |
</td> |
<td width="100%" nowrap="nowrap"> |
<input id="txtCaption" type="text" style="width: 100%" /></td> |
</tr> |
<tr> |
<td nowrap="nowrap"> |
<span fcklang="DlgTableSummary">Summary</span>: </td> |
<td> |
</td> |
<td width="100%" nowrap="nowrap"> |
<input id="txtSummary" type="text" style="width: 100%" /></td> |
</tr> |
</table> |
</td> |
</tr> |
</table> |
</body> |
</html> |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_tablecell.html |
---|
New file |
0,0 → 1,251 |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > |
<!-- |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fck_tablecell.html |
* Cell properties dialog window. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
--> |
<html xmlns="http://www.w3.org/1999/xhtml"> |
<head> |
<title>Table Cell Properties</title> |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
<meta name="robots" content="noindex, nofollow" /> |
<script src="common/fck_dialog_common.js" type="text/javascript"></script> |
<script type="text/javascript"> |
var oEditor = window.parent.InnerDialogLoaded() ; |
// Gets the document DOM |
var oDOM = oEditor.FCK.EditorDocument ; |
// Array of selected Cells |
var aCells = oEditor.FCKTableHandler.GetSelectedCells() ; |
window.onload = function() |
{ |
// First of all, translate the dialog box texts |
oEditor.FCKLanguageManager.TranslatePage( document ) ; |
SetStartupValue() ; |
window.parent.SetOkButton( true ) ; |
window.parent.SetAutoSize( true ) ; |
} |
function SetStartupValue() |
{ |
if ( aCells.length > 0 ) |
{ |
var oCell = aCells[0] ; |
var iWidth = GetAttribute( oCell, 'width' ) ; |
if ( iWidth.indexOf && iWidth.indexOf( '%' ) >= 0 ) |
{ |
iWidth = iWidth.substr( 0, iWidth.length - 1 ) ; |
GetE('selWidthType').value = 'percent' ; |
} |
if ( oCell.attributes['noWrap'] != null && oCell.attributes['noWrap'].specified ) |
GetE('selWordWrap').value = !oCell.noWrap ; |
GetE('txtWidth').value = iWidth ; |
GetE('txtHeight').value = GetAttribute( oCell, 'height' ) ; |
GetE('selHAlign').value = GetAttribute( oCell, 'align' ) ; |
GetE('selVAlign').value = GetAttribute( oCell, 'vAlign' ) ; |
GetE('txtRowSpan').value = GetAttribute( oCell, 'rowSpan' ) ; |
GetE('txtCollSpan').value = GetAttribute( oCell, 'colSpan' ) ; |
GetE('txtBackColor').value = GetAttribute( oCell, 'bgColor' ) ; |
GetE('txtBorderColor').value = GetAttribute( oCell, 'borderColor' ) ; |
// GetE('cmbFontStyle').value = oCell.className ; |
} |
} |
// Fired when the user press the OK button |
function Ok() |
{ |
for( i = 0 ; i < aCells.length ; i++ ) |
{ |
if ( GetE('txtWidth').value.length > 0 ) |
aCells[i].width = GetE('txtWidth').value + ( GetE('selWidthType').value == 'percent' ? '%' : '') ; |
else |
aCells[i].removeAttribute( 'width', 0 ) ; |
if ( GetE('selWordWrap').value == 'false' ) |
aCells[i].noWrap = true ; |
else |
aCells[i].removeAttribute( 'noWrap' ) ; |
SetAttribute( aCells[i], 'height' , GetE('txtHeight').value ) ; |
SetAttribute( aCells[i], 'align' , GetE('selHAlign').value ) ; |
SetAttribute( aCells[i], 'vAlign' , GetE('selVAlign').value ) ; |
SetAttribute( aCells[i], 'rowSpan' , GetE('txtRowSpan').value ) ; |
SetAttribute( aCells[i], 'colSpan' , GetE('txtCollSpan').value ) ; |
SetAttribute( aCells[i], 'bgColor' , GetE('txtBackColor').value ) ; |
SetAttribute( aCells[i], 'borderColor' , GetE('txtBorderColor').value ) ; |
// SetAttribute( aCells[i], 'className' , GetE('cmbFontStyle').value ) ; |
} |
return true ; |
} |
function SelectBackColor( color ) |
{ |
if ( color && color.length > 0 ) |
GetE('txtBackColor').value = color ; |
} |
function SelectBorderColor( color ) |
{ |
if ( color && color.length > 0 ) |
GetE('txtBorderColor').value = color ; |
} |
function SelectColor( wich ) |
{ |
oEditor.FCKDialog.OpenDialog( 'FCKDialog_Color', oEditor.FCKLang.DlgColorTitle, 'dialog/fck_colorselector.html', 400, 330, wich == 'Back' ? SelectBackColor : SelectBorderColor, window ) ; |
} |
</script> |
</head> |
<body scroll="no" style="overflow: hidden"> |
<table cellspacing="0" cellpadding="0" width="100%" border="0" height="100%"> |
<tr> |
<td> |
<table cellspacing="1" cellpadding="1" width="100%" border="0"> |
<tr> |
<td> |
<table cellspacing="0" cellpadding="0" border="0"> |
<tr> |
<td nowrap="nowrap"> |
<span fcklang="DlgCellWidth">Width</span>:</td> |
<td> |
<input onkeypress="return IsDigit(event);" id="txtWidth" type="text" maxlength="4" |
size="3" name="txtWidth" /> <select id="selWidthType" name="selWidthType"> |
<option fcklang="DlgCellWidthPx" value="pixels" selected="selected">pixels</option> |
<option fcklang="DlgCellWidthPc" value="percent">percent</option> |
</select></td> |
</tr> |
<tr> |
<td nowrap="nowrap"> |
<span fcklang="DlgCellHeight">Height</span>:</td> |
<td> |
<input id="txtHeight" type="text" maxlength="4" size="3" name="txtHeight" onkeypress="return IsDigit(event);" /> <span |
fcklang="DlgCellWidthPx">pixels</span></td> |
</tr> |
<tr> |
<td> |
</td> |
<td> |
</td> |
</tr> |
<tr> |
<td nowrap="nowrap"> |
<span fcklang="DlgCellWordWrap">Word Wrap</span>:</td> |
<td> |
<select id="selWordWrap" name="selAlignment"> |
<option fcklang="DlgCellWordWrapYes" value="true" selected="selected">Yes</option> |
<option fcklang="DlgCellWordWrapNo" value="false">No</option> |
</select></td> |
</tr> |
<tr> |
<td> |
</td> |
<td> |
</td> |
</tr> |
<tr> |
<td nowrap="nowrap"> |
<span fcklang="DlgCellHorAlign">Horizontal Alignment</span>:</td> |
<td> |
<select id="selHAlign" name="selAlignment"> |
<option fcklang="DlgCellHorAlignNotSet" value="" selected><Not set></option> |
<option fcklang="DlgCellHorAlignLeft" value="left">Left</option> |
<option fcklang="DlgCellHorAlignCenter" value="center">Center</option> |
<option fcklang="DlgCellHorAlignRight" value="right">Right</option> |
</select></td> |
</tr> |
<tr> |
<td nowrap="nowrap"> |
<span fcklang="DlgCellVerAlign">Vertical Alignment</span>:</td> |
<td> |
<select id="selVAlign" name="selAlignment"> |
<option fcklang="DlgCellVerAlignNotSet" value="" selected><Not set></option> |
<option fcklang="DlgCellVerAlignTop" value="top">Top</option> |
<option fcklang="DlgCellVerAlignMiddle" value="middle">Middle</option> |
<option fcklang="DlgCellVerAlignBottom" value="bottom">Bottom</option> |
<option fcklang="DlgCellVerAlignBaseline" value="baseline">Baseline</option> |
</select></td> |
</tr> |
</table> |
</td> |
<td> |
</td> |
<td align="right"> |
<table cellspacing="0" cellpadding="0" border="0"> |
<tr> |
<td nowrap="nowrap"> |
<span fcklang="DlgCellRowSpan">Rows Span</span>:</td> |
<td> |
|
<input onkeypress="return IsDigit(event);" id="txtRowSpan" type="text" maxlength="3" size="2" |
name="txtRows"></td> |
<td> |
</td> |
</tr> |
<tr> |
<td nowrap="nowrap"> |
<span fcklang="DlgCellCollSpan">Columns Span</span>:</td> |
<td> |
|
<input onkeypress="return IsDigit(event);" id="txtCollSpan" type="text" maxlength="2" |
size="2" name="txtColumns"></td> |
<td> |
</td> |
</tr> |
<tr> |
<td> |
</td> |
<td> |
</td> |
<td> |
</td> |
</tr> |
<tr> |
<td nowrap="nowrap"> |
<span fcklang="DlgCellBackColor">Background Color</span>:</td> |
<td> |
<input id="txtBackColor" type="text" size="8" name="txtCellSpacing"></td> |
<td> |
|
<input type="button" fcklang="DlgCellBtnSelect" value="Select..." onclick="SelectColor( 'Back' )"></td> |
</tr> |
<tr> |
<td nowrap="nowrap"> |
<span fcklang="DlgCellBorderColor">Border Color</span>:</td> |
<td> |
<input id="txtBorderColor" type="text" size="8" name="txtCellPadding" /></td> |
<td> |
|
<input type="button" fcklang="DlgCellBtnSelect" value="Select..." onclick="SelectColor( 'Border' )" /></td> |
</tr> |
</table> |
</td> |
</tr> |
</table> |
</td> |
</tr> |
</table> |
</body> |
</html> |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_textfield.html |
---|
New file |
0,0 → 1,135 |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > |
<!-- |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fck_textfield.html |
* Text field dialog window. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
--> |
<html xmlns="http://www.w3.org/1999/xhtml"> |
<head> |
<title></title> |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
<meta content="noindex, nofollow" name="robots" /> |
<script src="common/fck_dialog_common.js" type="text/javascript"></script> |
<script type="text/javascript"> |
var oEditor = window.parent.InnerDialogLoaded() ; |
// Gets the document DOM |
var oDOM = oEditor.FCK.EditorDocument ; |
var oActiveEl = oEditor.FCKSelection.GetSelectedElement() ; |
window.onload = function() |
{ |
// First of all, translate the dialog box texts |
oEditor.FCKLanguageManager.TranslatePage(document) ; |
if ( oActiveEl && oActiveEl.tagName == 'INPUT' && ( oActiveEl.type == 'text' || oActiveEl.type == 'password' ) ) |
{ |
GetE('txtName').value = oActiveEl.name ; |
GetE('txtValue').value = oActiveEl.value ; |
GetE('txtSize').value = GetAttribute( oActiveEl, 'size' ) ; |
GetE('txtMax').value = GetAttribute( oActiveEl, 'maxLength' ) ; |
GetE('txtType').value = oActiveEl.type ; |
GetE('txtType').disabled = true ; |
} |
else |
oActiveEl = null ; |
window.parent.SetOkButton( true ) ; |
} |
function Ok() |
{ |
if ( isNaN( GetE('txtMax').value ) || GetE('txtMax').value < 0 ) |
{ |
alert( "Maximum characters must be a positive number." ) ; |
GetE('txtMax').focus() ; |
return false ; |
} |
else if( isNaN( GetE('txtSize').value ) || GetE('txtSize').value < 0 ) |
{ |
alert( "Width must be a positive number." ) ; |
GetE('txtSize').focus() ; |
return false ; |
} |
if ( !oActiveEl ) |
{ |
oActiveEl = oEditor.FCK.EditorDocument.createElement( 'INPUT' ) ; |
oActiveEl.type = GetE('txtType').value ; |
oActiveEl = oEditor.FCK.InsertElementAndGetIt( oActiveEl ) ; |
} |
oActiveEl.name = GetE('txtName').value ; |
SetAttribute( oActiveEl, 'value' , GetE('txtValue').value ) ; |
SetAttribute( oActiveEl, 'size' , GetE('txtSize').value ) ; |
SetAttribute( oActiveEl, 'maxlength', GetE('txtMax').value ) ; |
return true ; |
} |
</script> |
</head> |
<body style="overflow: hidden"> |
<table width="100%" style="height: 100%"> |
<tr> |
<td align="center"> |
<table cellspacing="0" cellpadding="0" border="0"> |
<tr> |
<td> |
<span fcklang="DlgTextName">Name</span><br /> |
<input id="txtName" type="text" size="20" /> |
</td> |
<td> |
</td> |
<td> |
<span fcklang="DlgTextValue">Value</span><br /> |
<input id="txtValue" type="text" size="25" /> |
</td> |
</tr> |
<tr> |
<td> |
<span fcklang="DlgTextCharWidth">Character Width</span><br /> |
<input id="txtSize" type="text" size="5" /> |
</td> |
<td> |
</td> |
<td> |
<span fcklang="DlgTextMaxChars">Maximum Characters</span><br /> |
<input id="txtMax" type="text" size="5" /> |
</td> |
</tr> |
<tr> |
<td> |
<span fcklang="DlgTextType">Type</span><br /> |
<select id="txtType"> |
<option value="text" selected="selected" fcklang="DlgTextTypeText">Text</option> |
<option value="password" fcklang="DlgTextTypePass">Password</option> |
</select> |
</td> |
<td> |
</td> |
<td> |
</td> |
</tr> |
</table> |
</td> |
</tr> |
</table> |
</body> |
</html> |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_link/fck_link.js |
---|
New file |
0,0 → 1,630 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fck_link.js |
* Scripts related to the Link dialog window (see fck_link.html). |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
* Dominik Pesch ?dom? (empty selection patch) (d.pesch@11com7.de) |
*/ |
var oEditor = window.parent.InnerDialogLoaded() ; |
var FCK = oEditor.FCK ; |
var FCKLang = oEditor.FCKLang ; |
var FCKConfig = oEditor.FCKConfig ; |
//#### Dialog Tabs |
// Set the dialog tabs. |
window.parent.AddTab( 'Info', FCKLang.DlgLnkInfoTab ) ; |
if ( !FCKConfig.LinkDlgHideTarget ) |
window.parent.AddTab( 'Target', FCKLang.DlgLnkTargetTab, true ) ; |
if ( FCKConfig.LinkUpload ) |
window.parent.AddTab( 'Upload', FCKLang.DlgLnkUpload, true ) ; |
if ( !FCKConfig.LinkDlgHideAdvanced ) |
window.parent.AddTab( 'Advanced', FCKLang.DlgAdvancedTag ) ; |
// Function called when a dialog tag is selected. |
function OnDialogTabChange( tabCode ) |
{ |
ShowE('divInfo' , ( tabCode == 'Info' ) ) ; |
ShowE('divTarget' , ( tabCode == 'Target' ) ) ; |
ShowE('divUpload' , ( tabCode == 'Upload' ) ) ; |
ShowE('divAttribs' , ( tabCode == 'Advanced' ) ) ; |
window.parent.SetAutoSize( true ) ; |
} |
//#### Regular Expressions library. |
var oRegex = new Object() ; |
oRegex.UriProtocol = new RegExp('') ; |
oRegex.UriProtocol.compile( '^(((http|https|ftp|news):\/\/)|mailto:)', 'gi' ) ; |
oRegex.UrlOnChangeProtocol = new RegExp('') ; |
oRegex.UrlOnChangeProtocol.compile( '^(http|https|ftp|news)://(?=.)', 'gi' ) ; |
oRegex.UrlOnChangeTestOther = new RegExp('') ; |
//oRegex.UrlOnChangeTestOther.compile( '^(javascript:|#|/)', 'gi' ) ; |
oRegex.UrlOnChangeTestOther.compile( '^((javascript:)|[#/\.])', 'gi' ) ; |
oRegex.ReserveTarget = new RegExp('') ; |
oRegex.ReserveTarget.compile( '^_(blank|self|top|parent)$', 'i' ) ; |
oRegex.PopupUri = new RegExp('') ; |
oRegex.PopupUri.compile( "^javascript:void\\(\\s*window.open\\(\\s*'([^']+)'\\s*,\\s*(?:'([^']*)'|null)\\s*,\\s*'([^']*)'\\s*\\)\\s*\\)\\s*$" ) ; |
oRegex.PopupFeatures = new RegExp('') ; |
oRegex.PopupFeatures.compile( '(?:^|,)([^=]+)=(\\d+|yes|no)', 'gi' ) ; |
//#### Parser Functions |
var oParser = new Object() ; |
oParser.ParseEMailUrl = function( emailUrl ) |
{ |
// Initializes the EMailInfo object. |
var oEMailInfo = new Object() ; |
oEMailInfo.Address = '' ; |
oEMailInfo.Subject = '' ; |
oEMailInfo.Body = '' ; |
var oParts = emailUrl.match( /^([^\?]+)\??(.+)?/ ) ; |
if ( oParts ) |
{ |
// Set the e-mail address. |
oEMailInfo.Address = oParts[1] ; |
// Look for the optional e-mail parameters. |
if ( oParts[2] ) |
{ |
var oMatch = oParts[2].match( /(^|&)subject=([^&]+)/i ) ; |
if ( oMatch ) oEMailInfo.Subject = unescape( oMatch[2] ) ; |
oMatch = oParts[2].match( /(^|&)body=([^&]+)/i ) ; |
if ( oMatch ) oEMailInfo.Body = unescape( oMatch[2] ) ; |
} |
} |
return oEMailInfo ; |
} |
oParser.CreateEMailUri = function( address, subject, body ) |
{ |
var sBaseUri = 'mailto:' + address ; |
var sParams = '' ; |
if ( subject.length > 0 ) |
sParams = '?subject=' + escape( subject ) ; |
if ( body.length > 0 ) |
{ |
sParams += ( sParams.length == 0 ? '?' : '&' ) ; |
sParams += 'body=' + escape( body ) ; |
} |
return sBaseUri + sParams ; |
} |
//#### Initialization Code |
// oLink: The actual selected link in the editor. |
var oLink = FCK.Selection.MoveToAncestorNode( 'A' ) ; |
if ( oLink ) |
FCK.Selection.SelectNode( oLink ) ; |
window.onload = function() |
{ |
// Translate the dialog box texts. |
oEditor.FCKLanguageManager.TranslatePage(document) ; |
// Fill the Anchor Names and Ids combos. |
LoadAnchorNamesAndIds() ; |
// Load the selected link information (if any). |
LoadSelection() ; |
// Update the dialog box. |
SetLinkType( GetE('cmbLinkType').value ) ; |
// Show/Hide the "Browse Server" button. |
GetE('divBrowseServer').style.display = FCKConfig.LinkBrowser ? '' : 'none' ; |
// Show the initial dialog content. |
GetE('divInfo').style.display = '' ; |
// Set the actual uploader URL. |
if ( FCKConfig.LinkUpload ) |
GetE('frmUpload').action = FCKConfig.LinkUploadURL ; |
// Activate the "OK" button. |
window.parent.SetOkButton( true ) ; |
} |
var bHasAnchors ; |
function LoadAnchorNamesAndIds() |
{ |
// Since version 2.0, the anchors are replaced in the DOM by IMGs so the user see the icon |
// to edit them. So, we must look for that images now. |
var aAnchors = new Array() ; |
var oImages = oEditor.FCK.EditorDocument.getElementsByTagName( 'IMG' ) ; |
for( var i = 0 ; i < oImages.length ; i++ ) |
{ |
if ( oImages[i].getAttribute('_fckanchor') ) |
aAnchors[ aAnchors.length ] = oEditor.FCK.GetRealElement( oImages[i] ) ; |
} |
var aIds = oEditor.FCKTools.GetAllChildrenIds( oEditor.FCK.EditorDocument.body ) ; |
bHasAnchors = ( aAnchors.length > 0 || aIds.length > 0 ) ; |
for ( var i = 0 ; i < aAnchors.length ; i++ ) |
{ |
var sName = aAnchors[i].name ; |
if ( sName && sName.length > 0 ) |
oEditor.FCKTools.AddSelectOption( GetE('cmbAnchorName'), sName, sName ) ; |
} |
for ( var i = 0 ; i < aIds.length ; i++ ) |
{ |
oEditor.FCKTools.AddSelectOption( GetE('cmbAnchorId'), aIds[i], aIds[i] ) ; |
} |
ShowE( 'divSelAnchor' , bHasAnchors ) ; |
ShowE( 'divNoAnchor' , !bHasAnchors ) ; |
} |
function LoadSelection() |
{ |
if ( !oLink ) return ; |
var sType = 'url' ; |
// Get the actual Link href. |
var sHRef = oLink.getAttribute( '_fcksavedurl' ) ; |
if ( sHRef == null ) |
sHRef = oLink.getAttribute( 'href' , 2 ) + '' ; |
// Look for a popup javascript link. |
var oPopupMatch = oRegex.PopupUri.exec( sHRef ) ; |
if( oPopupMatch ) |
{ |
GetE('cmbTarget').value = 'popup' ; |
sHRef = oPopupMatch[1] ; |
FillPopupFields( oPopupMatch[2], oPopupMatch[3] ) ; |
SetTarget( 'popup' ) ; |
} |
// Search for the protocol. |
var sProtocol = oRegex.UriProtocol.exec( sHRef ) ; |
if ( sProtocol ) |
{ |
sProtocol = sProtocol[0].toLowerCase() ; |
GetE('cmbLinkProtocol').value = sProtocol ; |
// Remove the protocol and get the remainig URL. |
var sUrl = sHRef.replace( oRegex.UriProtocol, '' ) ; |
if ( sProtocol == 'mailto:' ) // It is an e-mail link. |
{ |
sType = 'email' ; |
var oEMailInfo = oParser.ParseEMailUrl( sUrl ) ; |
GetE('txtEMailAddress').value = oEMailInfo.Address ; |
GetE('txtEMailSubject').value = oEMailInfo.Subject ; |
GetE('txtEMailBody').value = oEMailInfo.Body ; |
} |
else // It is a normal link. |
{ |
sType = 'url' ; |
GetE('txtUrl').value = sUrl ; |
} |
} |
else if ( sHRef.substr(0,1) == '#' && sHRef.length > 1 ) // It is an anchor link. |
{ |
sType = 'anchor' ; |
GetE('cmbAnchorName').value = GetE('cmbAnchorId').value = sHRef.substr(1) ; |
} |
else // It is another type of link. |
{ |
sType = 'url' ; |
GetE('cmbLinkProtocol').value = '' ; |
GetE('txtUrl').value = sHRef ; |
} |
if ( !oPopupMatch ) |
{ |
// Get the target. |
var sTarget = oLink.target ; |
if ( sTarget && sTarget.length > 0 ) |
{ |
if ( oRegex.ReserveTarget.test( sTarget ) ) |
{ |
sTarget = sTarget.toLowerCase() ; |
GetE('cmbTarget').value = sTarget ; |
} |
else |
GetE('cmbTarget').value = 'frame' ; |
GetE('txtTargetFrame').value = sTarget ; |
} |
} |
// Get Advances Attributes |
GetE('txtAttId').value = oLink.id ; |
GetE('txtAttName').value = oLink.name ; |
GetE('cmbAttLangDir').value = oLink.dir ; |
GetE('txtAttLangCode').value = oLink.lang ; |
GetE('txtAttAccessKey').value = oLink.accessKey ; |
GetE('txtAttTabIndex').value = oLink.tabIndex <= 0 ? '' : oLink.tabIndex ; |
GetE('txtAttTitle').value = oLink.title ; |
GetE('txtAttContentType').value = oLink.type ; |
GetE('txtAttCharSet').value = oLink.charset ; |
if ( oEditor.FCKBrowserInfo.IsIE ) |
{ |
GetE('txtAttClasses').value = oLink.getAttribute('className',2) || '' ; |
GetE('txtAttStyle').value = oLink.style.cssText ; |
} |
else |
{ |
GetE('txtAttClasses').value = oLink.getAttribute('class',2) || '' ; |
GetE('txtAttStyle').value = oLink.getAttribute('style',2) ; |
} |
// Update the Link type combo. |
GetE('cmbLinkType').value = sType ; |
} |
//#### Link type selection. |
function SetLinkType( linkType ) |
{ |
ShowE('divLinkTypeUrl' , (linkType == 'url') ) ; |
ShowE('divLinkTypeAnchor' , (linkType == 'anchor') ) ; |
ShowE('divLinkTypeEMail' , (linkType == 'email') ) ; |
if ( !FCKConfig.LinkDlgHideTarget ) |
window.parent.SetTabVisibility( 'Target' , (linkType == 'url') ) ; |
if ( FCKConfig.LinkUpload ) |
window.parent.SetTabVisibility( 'Upload' , (linkType == 'url') ) ; |
if ( !FCKConfig.LinkDlgHideAdvanced ) |
window.parent.SetTabVisibility( 'Advanced' , (linkType != 'anchor' || bHasAnchors) ) ; |
if ( linkType == 'email' ) |
window.parent.SetAutoSize( true ) ; |
} |
//#### Target type selection. |
function SetTarget( targetType ) |
{ |
GetE('tdTargetFrame').style.display = ( targetType == 'popup' ? 'none' : '' ) ; |
GetE('tdPopupName').style.display = |
GetE('tablePopupFeatures').style.display = ( targetType == 'popup' ? '' : 'none' ) ; |
switch ( targetType ) |
{ |
case "_blank" : |
case "_self" : |
case "_parent" : |
case "_top" : |
GetE('txtTargetFrame').value = targetType ; |
break ; |
case "" : |
GetE('txtTargetFrame').value = '' ; |
break ; |
} |
if ( targetType == 'popup' ) |
window.parent.SetAutoSize( true ) ; |
} |
//#### Called while the user types the URL. |
function OnUrlChange() |
{ |
var sUrl = GetE('txtUrl').value ; |
var sProtocol = oRegex.UrlOnChangeProtocol.exec( sUrl ) ; |
if ( sProtocol ) |
{ |
sUrl = sUrl.substr( sProtocol[0].length ) ; |
GetE('txtUrl').value = sUrl ; |
GetE('cmbLinkProtocol').value = sProtocol[0].toLowerCase() ; |
} |
else if ( oRegex.UrlOnChangeTestOther.test( sUrl ) ) |
{ |
GetE('cmbLinkProtocol').value = '' ; |
} |
} |
//#### Called while the user types the target name. |
function OnTargetNameChange() |
{ |
var sFrame = GetE('txtTargetFrame').value ; |
if ( sFrame.length == 0 ) |
GetE('cmbTarget').value = '' ; |
else if ( oRegex.ReserveTarget.test( sFrame ) ) |
GetE('cmbTarget').value = sFrame.toLowerCase() ; |
else |
GetE('cmbTarget').value = 'frame' ; |
} |
//#### Builds the javascript URI to open a popup to the specified URI. |
function BuildPopupUri( uri ) |
{ |
var oReg = new RegExp( "'", "g" ) ; |
var sWindowName = "'" + GetE('txtPopupName').value.replace(oReg, "\\'") + "'" ; |
var sFeatures = '' ; |
var aChkFeatures = document.getElementsByName('chkFeature') ; |
for ( var i = 0 ; i < aChkFeatures.length ; i++ ) |
{ |
if ( i > 0 ) sFeatures += ',' ; |
sFeatures += aChkFeatures[i].value + '=' + ( aChkFeatures[i].checked ? 'yes' : 'no' ) ; |
} |
if ( GetE('txtPopupWidth').value.length > 0 ) sFeatures += ',width=' + GetE('txtPopupWidth').value ; |
if ( GetE('txtPopupHeight').value.length > 0 ) sFeatures += ',height=' + GetE('txtPopupHeight').value ; |
if ( GetE('txtPopupLeft').value.length > 0 ) sFeatures += ',left=' + GetE('txtPopupLeft').value ; |
if ( GetE('txtPopupTop').value.length > 0 ) sFeatures += ',top=' + GetE('txtPopupTop').value ; |
return ( "javascript:void(window.open('" + uri + "'," + sWindowName + ",'" + sFeatures + "'))" ) ; |
} |
//#### Fills all Popup related fields. |
function FillPopupFields( windowName, features ) |
{ |
if ( windowName ) |
GetE('txtPopupName').value = windowName ; |
var oFeatures = new Object() ; |
var oFeaturesMatch ; |
while( ( oFeaturesMatch = oRegex.PopupFeatures.exec( features ) ) != null ) |
{ |
var sValue = oFeaturesMatch[2] ; |
if ( sValue == ( 'yes' || '1' ) ) |
oFeatures[ oFeaturesMatch[1] ] = true ; |
else if ( ! isNaN( sValue ) && sValue != 0 ) |
oFeatures[ oFeaturesMatch[1] ] = sValue ; |
} |
// Update all features check boxes. |
var aChkFeatures = document.getElementsByName('chkFeature') ; |
for ( var i = 0 ; i < aChkFeatures.length ; i++ ) |
{ |
if ( oFeatures[ aChkFeatures[i].value ] ) |
aChkFeatures[i].checked = true ; |
} |
// Update position and size text boxes. |
if ( oFeatures['width'] ) GetE('txtPopupWidth').value = oFeatures['width'] ; |
if ( oFeatures['height'] ) GetE('txtPopupHeight').value = oFeatures['height'] ; |
if ( oFeatures['left'] ) GetE('txtPopupLeft').value = oFeatures['left'] ; |
if ( oFeatures['top'] ) GetE('txtPopupTop').value = oFeatures['top'] ; |
} |
//#### The OK button was hit. |
function Ok() |
{ |
var sUri, sInnerHtml ; |
switch ( GetE('cmbLinkType').value ) |
{ |
case 'url' : |
sUri = GetE('txtUrl').value ; |
if ( sUri.length == 0 ) |
{ |
alert( FCKLang.DlnLnkMsgNoUrl ) ; |
return false ; |
} |
sUri = GetE('cmbLinkProtocol').value + sUri ; |
if( GetE('cmbTarget').value == 'popup' ) |
{ |
// Check the window name, according to http://www.w3.org/TR/html4/types.html#type-frame-target (IE throw erros with spaces). |
if ( /(^[^a-zA-Z])|(\s)/.test( GetE('txtPopupName').value ) ) |
{ |
alert( FCKLang.DlnLnkMsgInvPopName ) ; |
return false ; |
} |
sUri = BuildPopupUri( sUri ) ; |
} |
break ; |
case 'email' : |
sUri = GetE('txtEMailAddress').value ; |
if ( sUri.length == 0 ) |
{ |
alert( FCKLang.DlnLnkMsgNoEMail ) ; |
return false ; |
} |
sUri = oParser.CreateEMailUri( |
sUri, |
GetE('txtEMailSubject').value, |
GetE('txtEMailBody').value ) ; |
break ; |
case 'anchor' : |
var sAnchor = GetE('cmbAnchorName').value ; |
if ( sAnchor.length == 0 ) sAnchor = GetE('cmbAnchorId').value ; |
if ( sAnchor.length == 0 ) |
{ |
alert( FCKLang.DlnLnkMsgNoAnchor ) ; |
return false ; |
} |
sUri = '#' + sAnchor ; |
break ; |
} |
// No link selected, so try to create one. |
if ( !oLink ) |
oLink = oEditor.FCK.CreateLink( sUri ) ; |
if ( oLink ) |
sInnerHtml = oLink.innerHTML ; // Save the innerHTML (IE changes it if it is like an URL). |
else |
{ |
// If no selection, use the uri as the link text (by dom, 2006-05-26) |
sInnerHtml = sUri; |
// Built a better text for empty links. |
switch ( GetE('cmbLinkType').value ) |
{ |
// anchor: use old behavior --> return true |
case 'anchor': |
sInnerHtml = sInnerHtml.replace( /^#/, '' ) ; |
break ; |
// url: try to get path |
case 'url': |
var oLinkPathRegEx = new RegExp("//?([^?\"']+)([?].*)?$") ; |
var asLinkPath = oLinkPathRegEx.exec( sUri ) ; |
if (asLinkPath != null) |
sInnerHtml = asLinkPath[1]; // use matched path |
break ; |
// mailto: try to get email address |
case 'email': |
sInnerHtml = GetE('txtEMailAddress').value ; |
break ; |
} |
// Create a new (empty) anchor. |
oLink = oEditor.FCK.CreateElement( 'a' ) ; |
} |
oEditor.FCKUndo.SaveUndoStep() ; |
oLink.href = sUri ; |
SetAttribute( oLink, '_fcksavedurl', sUri ) ; |
oLink.innerHTML = sInnerHtml ; // Set (or restore) the innerHTML |
// Target |
if( GetE('cmbTarget').value != 'popup' ) |
SetAttribute( oLink, 'target', GetE('txtTargetFrame').value ) ; |
else |
SetAttribute( oLink, 'target', null ) ; |
// Advances Attributes |
SetAttribute( oLink, 'id' , GetE('txtAttId').value ) ; |
SetAttribute( oLink, 'name' , GetE('txtAttName').value ) ; // No IE. Set but doesnt't update the outerHTML. |
SetAttribute( oLink, 'dir' , GetE('cmbAttLangDir').value ) ; |
SetAttribute( oLink, 'lang' , GetE('txtAttLangCode').value ) ; |
SetAttribute( oLink, 'accesskey', GetE('txtAttAccessKey').value ) ; |
SetAttribute( oLink, 'tabindex' , ( GetE('txtAttTabIndex').value > 0 ? GetE('txtAttTabIndex').value : null ) ) ; |
SetAttribute( oLink, 'title' , GetE('txtAttTitle').value ) ; |
SetAttribute( oLink, 'type' , GetE('txtAttContentType').value ) ; |
SetAttribute( oLink, 'charset' , GetE('txtAttCharSet').value ) ; |
if ( oEditor.FCKBrowserInfo.IsIE ) |
{ |
SetAttribute( oLink, 'className', GetE('txtAttClasses').value ) ; |
oLink.style.cssText = GetE('txtAttStyle').value ; |
} |
else |
{ |
SetAttribute( oLink, 'class', GetE('txtAttClasses').value ) ; |
SetAttribute( oLink, 'style', GetE('txtAttStyle').value ) ; |
} |
// Select the link. |
oEditor.FCKSelection.SelectNode(oLink); |
return true ; |
} |
function BrowseServer() |
{ |
OpenFileBrowser( FCKConfig.LinkBrowserURL, FCKConfig.LinkBrowserWindowWidth, FCKConfig.LinkBrowserWindowHeight ) ; |
} |
function SetUrl( url ) |
{ |
document.getElementById('txtUrl').value = url ; |
OnUrlChange() ; |
window.parent.SetSelectedTab( 'Info' ) ; |
} |
function OnUploadCompleted( errorNumber, fileUrl, fileName, customMsg ) |
{ |
switch ( errorNumber ) |
{ |
case 0 : // No errors |
alert( 'Your file has been successfully uploaded' ) ; |
break ; |
case 1 : // Custom error |
alert( customMsg ) ; |
return ; |
case 101 : // Custom warning |
alert( customMsg ) ; |
break ; |
case 201 : |
alert( 'A file with the same name is already available. The uploaded file has been renamed to "' + fileName + '"' ) ; |
break ; |
case 202 : |
alert( 'Invalid file type' ) ; |
return ; |
case 203 : |
alert( "Security error. You probably don't have enough permissions to upload. Please check your server." ) ; |
return ; |
default : |
alert( 'Error on file upload. Error number: ' + errorNumber ) ; |
return ; |
} |
SetUrl( fileUrl ) ; |
GetE('frmUpload').reset() ; |
} |
var oUploadAllowedExtRegex = new RegExp( FCKConfig.LinkUploadAllowedExtensions, 'i' ) ; |
var oUploadDeniedExtRegex = new RegExp( FCKConfig.LinkUploadDeniedExtensions, 'i' ) ; |
function CheckUpload() |
{ |
var sFile = GetE('txtUploadFile').value ; |
if ( sFile.length == 0 ) |
{ |
alert( 'Please select a file to upload' ) ; |
return false ; |
} |
if ( ( FCKConfig.LinkUploadAllowedExtensions.length > 0 && !oUploadAllowedExtRegex.test( sFile ) ) || |
( FCKConfig.LinkUploadDeniedExtensions.length > 0 && oUploadDeniedExtRegex.test( sFile ) ) ) |
{ |
OnUploadCompleted( 202 ) ; |
return false ; |
} |
return true ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_radiobutton.html |
---|
New file |
0,0 → 1,103 |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > |
<!-- |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fck_radiobutton.html |
* Radio Button dialog window. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
--> |
<html> |
<head> |
<title>Radio Button Properties</title> |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> |
<meta content="noindex, nofollow" name="robots"> |
<script src="common/fck_dialog_common.js" type="text/javascript"></script> |
<script type="text/javascript"> |
var oEditor = window.parent.InnerDialogLoaded() ; |
// Gets the document DOM |
var oDOM = oEditor.FCK.EditorDocument ; |
var oActiveEl = oEditor.FCKSelection.GetSelectedElement() ; |
window.onload = function() |
{ |
// First of all, translate the dialog box texts |
oEditor.FCKLanguageManager.TranslatePage(document) ; |
if ( oActiveEl && oActiveEl.tagName.toUpperCase() == 'INPUT' && oActiveEl.type == 'radio' ) |
{ |
GetE('txtName').value = oActiveEl.name ; |
GetE('txtValue').value = oEditor.FCKBrowserInfo.IsIE ? oActiveEl.value : GetAttribute( oActiveEl, 'value' ) ; |
GetE('txtSelected').checked = oActiveEl.checked ; |
} |
else |
oActiveEl = null ; |
window.parent.SetOkButton( true ) ; |
} |
function Ok() |
{ |
if ( !oActiveEl ) |
{ |
oActiveEl = oEditor.FCK.EditorDocument.createElement( 'INPUT' ) ; |
oActiveEl.type = 'radio' ; |
oActiveEl = oEditor.FCK.InsertElementAndGetIt( oActiveEl ) ; |
} |
if ( GetE('txtName').value.length > 0 ) |
oActiveEl.name = GetE('txtName').value ; |
if ( oEditor.FCKBrowserInfo.IsIE ) |
oActiveEl.value = GetE('txtValue').value ; |
else |
SetAttribute( oActiveEl, 'value', GetE('txtValue').value ) ; |
var bIsChecked = GetE('txtSelected').checked ; |
SetAttribute( oActiveEl, 'checked', bIsChecked ? 'checked' : null ) ; // For Firefox |
oActiveEl.checked = bIsChecked ; |
return true ; |
} |
</script> |
</head> |
<body style="OVERFLOW: hidden" scroll="no"> |
<table height="100%" width="100%"> |
<tr> |
<td align="center"> |
<table border="0" cellpadding="0" cellspacing="0" width="80%"> |
<tr> |
<td> |
<span fckLang="DlgCheckboxName">Name</span><br> |
<input type="text" size="20" id="txtName" style="WIDTH: 100%"> |
</td> |
</tr> |
<tr> |
<td> |
<span fckLang="DlgCheckboxValue">Value</span><br> |
<input type="text" size="20" id="txtValue" style="WIDTH: 100%"> |
</td> |
</tr> |
<tr> |
<td><input type="checkbox" id="txtSelected"><label for="txtSelected" fckLang="DlgCheckboxSelected">Checked</label></td> |
</tr> |
</table> |
</td> |
</tr> |
</table> |
</body> |
</html> |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_flash/fck_flash_preview.html |
---|
New file |
0,0 → 1,42 |
<!-- |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fck_flash_preview.html |
* Preview page for the Flash dialog window. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
--> |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> |
<html> |
<head> |
<title></title> |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> |
<meta name="robots" content="noindex, nofollow"> |
<link href="../common/fck_dialog_common.css" rel="stylesheet" type="text/css" /> |
<script language="javascript"> |
// Sets the Skin CSS |
document.write( '<link href="' + window.parent.FCKConfig.SkinPath + 'fck_dialog.css" type="text/css" rel="stylesheet">' ) ; |
if ( window.parent.FCKConfig.BaseHref.length > 0 ) |
document.write( '<base href="' + window.parent.FCKConfig.BaseHref + '">' ) ; |
window.onload = function() |
{ |
window.parent.SetPreviewElement( document.body ) ; |
} |
</script> |
</head> |
<body style="COLOR: #000000; BACKGROUND-COLOR: #ffffff"></body> |
</html> |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_flash/fck_flash.js |
---|
New file |
0,0 → 1,284 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fck_flash.js |
* Scripts related to the Flash dialog window (see fck_flash.html). |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
var oEditor = window.parent.InnerDialogLoaded() ; |
var FCK = oEditor.FCK ; |
var FCKLang = oEditor.FCKLang ; |
var FCKConfig = oEditor.FCKConfig ; |
//#### Dialog Tabs |
// Set the dialog tabs. |
window.parent.AddTab( 'Info', oEditor.FCKLang.DlgInfoTab ) ; |
if ( FCKConfig.FlashUpload ) |
window.parent.AddTab( 'Upload', FCKLang.DlgLnkUpload ) ; |
if ( !FCKConfig.FlashDlgHideAdvanced ) |
window.parent.AddTab( 'Advanced', oEditor.FCKLang.DlgAdvancedTag ) ; |
// Function called when a dialog tag is selected. |
function OnDialogTabChange( tabCode ) |
{ |
ShowE('divInfo' , ( tabCode == 'Info' ) ) ; |
ShowE('divUpload' , ( tabCode == 'Upload' ) ) ; |
ShowE('divAdvanced' , ( tabCode == 'Advanced' ) ) ; |
} |
// Get the selected flash embed (if available). |
var oFakeImage = FCK.Selection.GetSelectedElement() ; |
var oEmbed ; |
if ( oFakeImage ) |
{ |
if ( oFakeImage.tagName == 'IMG' && oFakeImage.getAttribute('_fckflash') ) |
oEmbed = FCK.GetRealElement( oFakeImage ) ; |
else |
oFakeImage = null ; |
} |
window.onload = function() |
{ |
// Translate the dialog box texts. |
oEditor.FCKLanguageManager.TranslatePage(document) ; |
// Load the selected element information (if any). |
LoadSelection() ; |
// Show/Hide the "Browse Server" button. |
GetE('tdBrowse').style.display = FCKConfig.FlashBrowser ? '' : 'none' ; |
// Set the actual uploader URL. |
if ( FCKConfig.FlashUpload ) |
GetE('frmUpload').action = FCKConfig.FlashUploadURL ; |
window.parent.SetAutoSize( true ) ; |
// Activate the "OK" button. |
window.parent.SetOkButton( true ) ; |
} |
function LoadSelection() |
{ |
if ( ! oEmbed ) return ; |
var sUrl = GetAttribute( oEmbed, 'src', '' ) ; |
GetE('txtUrl').value = GetAttribute( oEmbed, 'src', '' ) ; |
GetE('txtWidth').value = GetAttribute( oEmbed, 'width', '' ) ; |
GetE('txtHeight').value = GetAttribute( oEmbed, 'height', '' ) ; |
// Get Advances Attributes |
GetE('txtAttId').value = oEmbed.id ; |
GetE('chkAutoPlay').checked = GetAttribute( oEmbed, 'play', 'true' ) == 'true' ; |
GetE('chkLoop').checked = GetAttribute( oEmbed, 'loop', 'true' ) == 'true' ; |
GetE('chkMenu').checked = GetAttribute( oEmbed, 'menu', 'true' ) == 'true' ; |
GetE('cmbScale').value = GetAttribute( oEmbed, 'scale', '' ).toLowerCase() ; |
GetE('txtAttTitle').value = oEmbed.title ; |
if ( oEditor.FCKBrowserInfo.IsIE ) |
{ |
GetE('txtAttClasses').value = oEmbed.getAttribute('className') || '' ; |
GetE('txtAttStyle').value = oEmbed.style.cssText ; |
} |
else |
{ |
GetE('txtAttClasses').value = oEmbed.getAttribute('class',2) || '' ; |
GetE('txtAttStyle').value = oEmbed.getAttribute('style',2) ; |
} |
UpdatePreview() ; |
} |
//#### The OK button was hit. |
function Ok() |
{ |
if ( GetE('txtUrl').value.length == 0 ) |
{ |
window.parent.SetSelectedTab( 'Info' ) ; |
GetE('txtUrl').focus() ; |
alert( oEditor.FCKLang.DlgAlertUrl ) ; |
return false ; |
} |
if ( !oEmbed ) |
{ |
oEmbed = FCK.EditorDocument.createElement( 'EMBED' ) ; |
oFakeImage = null ; |
} |
UpdateEmbed( oEmbed ) ; |
if ( !oFakeImage ) |
{ |
oFakeImage = oEditor.FCKDocumentProcessor_CreateFakeImage( 'FCK__Flash', oEmbed ) ; |
oFakeImage.setAttribute( '_fckflash', 'true', 0 ) ; |
oFakeImage = FCK.InsertElementAndGetIt( oFakeImage ) ; |
} |
else |
oEditor.FCKUndo.SaveUndoStep() ; |
oEditor.FCKFlashProcessor.RefreshView( oFakeImage, oEmbed ) ; |
return true ; |
} |
function UpdateEmbed( e ) |
{ |
SetAttribute( e, 'type' , 'application/x-shockwave-flash' ) ; |
SetAttribute( e, 'pluginspage' , 'http://www.macromedia.com/go/getflashplayer' ) ; |
e.src = GetE('txtUrl').value ; |
SetAttribute( e, "width" , GetE('txtWidth').value ) ; |
SetAttribute( e, "height", GetE('txtHeight').value ) ; |
// Advances Attributes |
SetAttribute( e, 'id' , GetE('txtAttId').value ) ; |
SetAttribute( e, 'scale', GetE('cmbScale').value ) ; |
SetAttribute( e, 'play', GetE('chkAutoPlay').checked ? 'true' : 'false' ) ; |
SetAttribute( e, 'loop', GetE('chkLoop').checked ? 'true' : 'false' ) ; |
SetAttribute( e, 'menu', GetE('chkMenu').checked ? 'true' : 'false' ) ; |
SetAttribute( e, 'title' , GetE('txtAttTitle').value ) ; |
if ( oEditor.FCKBrowserInfo.IsIE ) |
{ |
SetAttribute( e, 'className', GetE('txtAttClasses').value ) ; |
e.style.cssText = GetE('txtAttStyle').value ; |
} |
else |
{ |
SetAttribute( e, 'class', GetE('txtAttClasses').value ) ; |
SetAttribute( e, 'style', GetE('txtAttStyle').value ) ; |
} |
} |
var ePreview ; |
function SetPreviewElement( previewEl ) |
{ |
ePreview = previewEl ; |
if ( GetE('txtUrl').value.length > 0 ) |
UpdatePreview() ; |
} |
function UpdatePreview() |
{ |
if ( !ePreview ) |
return ; |
while ( ePreview.firstChild ) |
ePreview.removeChild( ePreview.firstChild ) ; |
if ( GetE('txtUrl').value.length == 0 ) |
ePreview.innerHTML = ' ' ; |
else |
{ |
var oDoc = ePreview.ownerDocument || ePreview.document ; |
var e = oDoc.createElement( 'EMBED' ) ; |
e.src = GetE('txtUrl').value ; |
e.type = 'application/x-shockwave-flash' ; |
e.width = '100%' ; |
e.height = '100%' ; |
ePreview.appendChild( e ) ; |
} |
} |
// <embed id="ePreview" src="fck_flash/claims.swf" width="100%" height="100%" style="visibility:hidden" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"> |
function BrowseServer() |
{ |
OpenFileBrowser( FCKConfig.FlashBrowserURL, FCKConfig.FlashBrowserWindowWidth, FCKConfig.FlashBrowserWindowHeight ) ; |
} |
function SetUrl( url, width, height ) |
{ |
GetE('txtUrl').value = url ; |
if ( width ) |
GetE('txtWidth').value = width ; |
if ( height ) |
GetE('txtHeight').value = height ; |
UpdatePreview() ; |
window.parent.SetSelectedTab( 'Info' ) ; |
} |
function OnUploadCompleted( errorNumber, fileUrl, fileName, customMsg ) |
{ |
switch ( errorNumber ) |
{ |
case 0 : // No errors |
alert( 'Your file has been successfully uploaded' ) ; |
break ; |
case 1 : // Custom error |
alert( customMsg ) ; |
return ; |
case 101 : // Custom warning |
alert( customMsg ) ; |
break ; |
case 201 : |
alert( 'A file with the same name is already available. The uploaded file has been renamed to "' + fileName + '"' ) ; |
break ; |
case 202 : |
alert( 'Invalid file type' ) ; |
return ; |
case 203 : |
alert( "Security error. You probably don't have enough permissions to upload. Please check your server." ) ; |
return ; |
default : |
alert( 'Error on file upload. Error number: ' + errorNumber ) ; |
return ; |
} |
SetUrl( fileUrl ) ; |
GetE('frmUpload').reset() ; |
} |
var oUploadAllowedExtRegex = new RegExp( FCKConfig.FlashUploadAllowedExtensions, 'i' ) ; |
var oUploadDeniedExtRegex = new RegExp( FCKConfig.FlashUploadDeniedExtensions, 'i' ) ; |
function CheckUpload() |
{ |
var sFile = GetE('txtUploadFile').value ; |
if ( sFile.length == 0 ) |
{ |
alert( 'Please select a file to upload' ) ; |
return false ; |
} |
if ( ( FCKConfig.FlashUploadAllowedExtensions.length > 0 && !oUploadAllowedExtRegex.test( sFile ) ) || |
( FCKConfig.FlashUploadDeniedExtensions.length > 0 && oUploadDeniedExtRegex.test( sFile ) ) ) |
{ |
OnUploadCompleted( 202 ) ; |
return false ; |
} |
return true ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_link.html |
---|
New file |
0,0 → 1,289 |
<!-- |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fck_link.html |
* Link dialog window. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
--> |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> |
<html> |
<head> |
<title>Link Properties</title> |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
<meta name="robots" content="noindex, nofollow" /> |
<script src="common/fck_dialog_common.js" type="text/javascript"></script> |
<script src="fck_link/fck_link.js" type="text/javascript"></script> |
</head> |
<body scroll="no" style="OVERFLOW: hidden"> |
<div id="divInfo" style="DISPLAY: none"> |
<span fckLang="DlgLnkType">Link Type</span><br /> |
<select id="cmbLinkType" onchange="SetLinkType(this.value);"> |
<option value="url" fckLang="DlgLnkTypeURL" selected="selected">URL</option> |
<option value="anchor" fckLang="DlgLnkTypeAnchor">Anchor in this page</option> |
<option value="email" fckLang="DlgLnkTypeEMail">E-Mail</option> |
</select> |
<br /> |
<br /> |
<div id="divLinkTypeUrl"> |
<table cellspacing="0" cellpadding="0" width="100%" border="0" dir="ltr"> |
<tr> |
<td nowrap="nowrap"> |
<span fckLang="DlgLnkProto">Protocol</span><br /> |
<select id="cmbLinkProtocol"> |
<option value="http://" selected="selected">http://</option> |
<option value="https://">https://</option> |
<option value="ftp://">ftp://</option> |
<option value="news://">news://</option> |
<option value="" fckLang="DlgLnkProtoOther"><other></option> |
</select> |
</td> |
<td nowrap="nowrap"> </td> |
<td nowrap="nowrap" width="100%"> |
<span fckLang="DlgLnkURL">URL</span><br /> |
<input id="txtUrl" style="WIDTH: 100%" type="text" onkeyup="OnUrlChange();" onchange="OnUrlChange();" /> |
</td> |
</tr> |
</table> |
<br /> |
<div id="divBrowseServer"> |
<input type="button" value="Browse Server" fckLang="DlgBtnBrowseServer" onclick="BrowseServer();" /> |
</div> |
</div> |
<div id="divLinkTypeAnchor" style="DISPLAY: none" align="center"> |
<div id="divSelAnchor" style="DISPLAY: none"> |
<table cellspacing="0" cellpadding="0" border="0" width="70%"> |
<tr> |
<td colspan="3"> |
<span fckLang="DlgLnkAnchorSel">Select an Anchor</span> |
</td> |
</tr> |
<tr> |
<td width="50%"> |
<span fckLang="DlgLnkAnchorByName">By Anchor Name</span><br /> |
<select id="cmbAnchorName" onchange="GetE('cmbAnchorId').value='';" style="WIDTH: 100%"> |
<option value="" selected="selected"></option> |
</select> |
</td> |
<td> </td> |
<td width="50%"> |
<span fckLang="DlgLnkAnchorById">By Element Id</span><br /> |
<select id="cmbAnchorId" onchange="GetE('cmbAnchorName').value='';" style="WIDTH: 100%"> |
<option value="" selected="selected"></option> |
</select> |
</td> |
</tr> |
</table> |
</div> |
<div id="divNoAnchor" style="DISPLAY: none"> |
<span fckLang="DlgLnkNoAnchors"><No anchors available in the document></span> |
</div> |
</div> |
<div id="divLinkTypeEMail" style="DISPLAY: none"> |
<span fckLang="DlgLnkEMail">E-Mail Address</span><br /> |
<input id="txtEMailAddress" style="WIDTH: 100%" type="text" /><br /> |
<span fckLang="DlgLnkEMailSubject">Message Subject</span><br /> |
<input id="txtEMailSubject" style="WIDTH: 100%" type="text" /><br /> |
<span fckLang="DlgLnkEMailBody">Message Body</span><br /> |
<textarea id="txtEMailBody" style="WIDTH: 100%" rows="3" cols="20"></textarea> |
</div> |
</div> |
<div id="divUpload" style="DISPLAY: none"> |
<form id="frmUpload" method="post" target="UploadWindow" enctype="multipart/form-data" action="" onsubmit="return CheckUpload();"> |
<span fckLang="DlgLnkUpload">Upload</span><br /> |
<input id="txtUploadFile" style="WIDTH: 100%" type="file" size="40" name="NewFile" /><br /> |
<br /> |
<input id="btnUpload" type="submit" value="Send it to the Server" fckLang="DlgLnkBtnUpload" /> |
<iframe name="UploadWindow" style="DISPLAY: none" src="../fckblank.html"></iframe> |
</form> |
</div> |
<div id="divTarget" style="DISPLAY: none"> |
<table cellspacing="0" cellpadding="0" width="100%" border="0"> |
<tr> |
<td nowrap="nowrap"> |
<span fckLang="DlgLnkTarget">Target</span><br /> |
<select id="cmbTarget" onchange="SetTarget(this.value);"> |
<option value="" fckLang="DlgGenNotSet" selected="selected"><not set></option> |
<option value="frame" fckLang="DlgLnkTargetFrame"><frame></option> |
<option value="popup" fckLang="DlgLnkTargetPopup"><popup window></option> |
<option value="_blank" fckLang="DlgLnkTargetBlank">New Window (_blank)</option> |
<option value="_top" fckLang="DlgLnkTargetTop">Topmost Window (_top)</option> |
<option value="_self" fckLang="DlgLnkTargetSelf">Same Window (_self)</option> |
<option value="_parent" fckLang="DlgLnkTargetParent">Parent Window (_parent)</option> |
</select> |
</td> |
<td> </td> |
<td id="tdTargetFrame" nowrap="nowrap" width="100%"> |
<span fckLang="DlgLnkTargetFrameName">Target Frame Name</span><br /> |
<input id="txtTargetFrame" style="WIDTH: 100%" type="text" onkeyup="OnTargetNameChange();" |
onchange="OnTargetNameChange();" /> |
</td> |
<td id="tdPopupName" style="DISPLAY: none" nowrap="nowrap" width="100%"> |
<span fckLang="DlgLnkPopWinName">Popup Window Name</span><br /> |
<input id="txtPopupName" style="WIDTH: 100%" type="text" /> |
</td> |
</tr> |
</table> |
<br /> |
<table id="tablePopupFeatures" style="DISPLAY: none" cellspacing="0" cellpadding="0" align="center" |
border="0"> |
<tr> |
<td> |
<span fckLang="DlgLnkPopWinFeat">Popup Window Features</span><br /> |
<table cellspacing="0" cellpadding="0" border="0"> |
<tr> |
<td valign="top" nowrap="nowrap" width="50%"> |
<input id="chkPopupResizable" name="chkFeature" value="resizable" type="checkbox" /><label for="chkPopupResizable" fckLang="DlgLnkPopResize">Resizable</label><br /> |
<input id="chkPopupLocationBar" name="chkFeature" value="location" type="checkbox" /><label for="chkPopupLocationBar" fckLang="DlgLnkPopLocation">Location |
Bar</label><br /> |
<input id="chkPopupManuBar" name="chkFeature" value="menubar" type="checkbox" /><label for="chkPopupManuBar" fckLang="DlgLnkPopMenu">Menu |
Bar</label><br /> |
<input id="chkPopupScrollBars" name="chkFeature" value="scrollbars" type="checkbox" /><label for="chkPopupScrollBars" fckLang="DlgLnkPopScroll">Scroll |
Bars</label> |
</td> |
<td></td> |
<td valign="top" nowrap="nowrap" width="50%"> |
<input id="chkPopupStatusBar" name="chkFeature" value="status" type="checkbox" /><label for="chkPopupStatusBar" fckLang="DlgLnkPopStatus">Status |
Bar</label><br /> |
<input id="chkPopupToolbar" name="chkFeature" value="toolbar" type="checkbox" /><label for="chkPopupToolbar" fckLang="DlgLnkPopToolbar">Toolbar</label><br /> |
<input id="chkPopupFullScreen" name="chkFeature" value="fullscreen" type="checkbox" /><label for="chkPopupFullScreen" fckLang="DlgLnkPopFullScrn">Full |
Screen (IE)</label><br /> |
<input id="chkPopupDependent" name="chkFeature" value="dependent" type="checkbox" /><label for="chkPopupDependent" fckLang="DlgLnkPopDependent">Dependent |
(Netscape)</label> |
</td> |
</tr> |
<tr> |
<td valign="top" nowrap="nowrap" width="50%"> </td> |
<td></td> |
<td valign="top" nowrap="nowrap" width="50%"></td> |
</tr> |
<tr> |
<td valign="top"> |
<table cellspacing="0" cellpadding="0" border="0"> |
<tr> |
<td nowrap="nowrap"><span fckLang="DlgLnkPopWidth">Width</span></td> |
<td> <input id="txtPopupWidth" type="text" maxlength="4" size="4" /></td> |
</tr> |
<tr> |
<td nowrap="nowrap"><span fckLang="DlgLnkPopHeight">Height</span></td> |
<td> <input id="txtPopupHeight" type="text" maxlength="4" size="4" /></td> |
</tr> |
</table> |
</td> |
<td> </td> |
<td valign="top"> |
<table cellspacing="0" cellpadding="0" border="0"> |
<tr> |
<td nowrap="nowrap"><span fckLang="DlgLnkPopLeft">Left Position</span></td> |
<td> <input id="txtPopupLeft" type="text" maxlength="4" size="4" /></td> |
</tr> |
<tr> |
<td nowrap="nowrap"><span fckLang="DlgLnkPopTop">Top Position</span></td> |
<td> <input id="txtPopupTop" type="text" maxlength="4" size="4" /></td> |
</tr> |
</table> |
</td> |
</tr> |
</table> |
</td> |
</tr> |
</table> |
</div> |
<div id="divAttribs" style="DISPLAY: none"> |
<table cellspacing="0" cellpadding="0" width="100%" align="center" border="0"> |
<tr> |
<td valign="top" width="50%"> |
<span fckLang="DlgGenId">Id</span><br /> |
<input id="txtAttId" style="WIDTH: 100%" type="text" /> |
</td> |
<td width="1"></td> |
<td valign="top"> |
<table cellspacing="0" cellpadding="0" width="100%" align="center" border="0"> |
<tr> |
<td width="60%"> |
<span fckLang="DlgGenLangDir">Language Direction</span><br /> |
<select id="cmbAttLangDir" style="WIDTH: 100%"> |
<option value="" fckLang="DlgGenNotSet" selected><not set></option> |
<option value="ltr" fckLang="DlgGenLangDirLtr">Left to Right (LTR)</option> |
<option value="rtl" fckLang="DlgGenLangDirRtl">Right to Left (RTL)</option> |
</select> |
</td> |
<td width="1%"> </td> |
<td nowrap="nowrap"><span fckLang="DlgGenAccessKey">Access Key</span><br /> |
<input id="txtAttAccessKey" style="WIDTH: 100%" type="text" maxlength="1" size="1" /> |
</td> |
</tr> |
</table> |
</td> |
</tr> |
<tr> |
<td valign="top" width="50%"> |
<span fckLang="DlgGenName">Name</span><br /> |
<input id="txtAttName" style="WIDTH: 100%" type="text" /> |
</td> |
<td width="1"></td> |
<td valign="top"> |
<table cellspacing="0" cellpadding="0" width="100%" align="center" border="0"> |
<tr> |
<td width="60%"> |
<span fckLang="DlgGenLangCode">Language Code</span><br /> |
<input id="txtAttLangCode" style="WIDTH: 100%" type="text" /> |
</td> |
<td width="1%"> </td> |
<td nowrap="nowrap"> |
<span fckLang="DlgGenTabIndex">Tab Index</span><br /> |
<input id="txtAttTabIndex" style="WIDTH: 100%" type="text" maxlength="5" size="5" /> |
</td> |
</tr> |
</table> |
</td> |
</tr> |
<tr> |
<td valign="top" width="50%"> </td> |
<td width="1"></td> |
<td valign="top"></td> |
</tr> |
<tr> |
<td valign="top" width="50%"> |
<span fckLang="DlgGenTitle">Advisory Title</span><br /> |
<input id="txtAttTitle" style="WIDTH: 100%" type="text" /> |
</td> |
<td width="1"> </td> |
<td valign="top"> |
<span fckLang="DlgGenContType">Advisory Content Type</span><br /> |
<input id="txtAttContentType" style="WIDTH: 100%" type="text" /> |
</td> |
</tr> |
<tr> |
<td valign="top"> |
<span fckLang="DlgGenClass">Stylesheet Classes</span><br /> |
<input id="txtAttClasses" style="WIDTH: 100%" type="text" /> |
</td> |
<td></td> |
<td valign="top"> |
<span fckLang="DlgGenLinkCharset">Linked Resource Charset</span><br /> |
<input id="txtAttCharSet" style="WIDTH: 100%" type="text" /> |
</td> |
</tr> |
</table> |
<table cellspacing="0" cellpadding="0" width="100%" align="center" border="0"> |
<tr> |
<td> |
<span fckLang="DlgGenStyle">Style</span><br /> |
<input id="txtAttStyle" style="WIDTH: 100%" type="text" /> |
</td> |
</tr> |
</table> |
</div> |
</body> |
</html> |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_flash.html |
---|
New file |
0,0 → 1,142 |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> |
<!-- |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fck_flash.html |
* Flash Properties dialog window. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
--> |
<html> |
<head> |
<title>Flash Properties</title> |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> |
<meta content="noindex, nofollow" name="robots"> |
<script src="common/fck_dialog_common.js" type="text/javascript"></script> |
<script src="fck_flash/fck_flash.js" type="text/javascript"></script> |
<link href="common/fck_dialog_common.css" type="text/css" rel="stylesheet"> |
</head> |
<body scroll="no" style="OVERFLOW: hidden"> |
<div id="divInfo"> |
<table cellSpacing="1" cellPadding="1" width="100%" border="0"> |
<tr> |
<td> |
<table cellSpacing="0" cellPadding="0" width="100%" border="0"> |
<tr> |
<td width="100%"><span fckLang="DlgImgURL">URL</span> |
</td> |
<td id="tdBrowse" style="DISPLAY: none" noWrap rowSpan="2"> <input id="btnBrowse" onclick="BrowseServer();" type="button" value="Browse Server" fckLang="DlgBtnBrowseServer"> |
</td> |
</tr> |
<tr> |
<td vAlign="top"><input id="txtUrl" onblur="UpdatePreview();" style="WIDTH: 100%" type="text"> |
</td> |
</tr> |
</table> |
</td> |
</tr> |
<TR> |
<TD> |
<table cellSpacing="0" cellPadding="0" border="0"> |
<TR> |
<TD nowrap> |
<span fckLang="DlgImgWidth">Width</span><br> |
<input id="txtWidth" class="FCK__FieldNumeric" type="text" size="3"> |
</TD> |
<TD> </TD> |
<TD> |
<span fckLang="DlgImgHeight">Height</span><br> |
<input id="txtHeight" class="FCK__FieldNumeric" type="text" size="3"> |
</TD> |
</TR> |
</table> |
</TD> |
</TR> |
<tr> |
<td vAlign="top"> |
<table cellSpacing="0" cellPadding="0" width="100%" border="0"> |
<tr> |
<td valign="top" width="100%"> |
<table cellSpacing="0" cellPadding="0" width="100%"> |
<tr> |
<td><span fckLang="DlgImgPreview">Preview</span></td> |
</tr> |
<tr> |
<td id="ePreviewCell" valign="top" class="FlashPreviewArea"><iframe src="fck_flash/fck_flash_preview.html" frameborder="0" marginheight="0" marginwidth="0"></iframe></td> |
</tr> |
</table> |
</td> |
</tr> |
</table> |
</td> |
</tr> |
</table> |
</div> |
<div id="divUpload" style="DISPLAY: none"> |
<form id="frmUpload" method="post" target="UploadWindow" enctype="multipart/form-data" action="" onsubmit="return CheckUpload();"> |
<span fckLang="DlgLnkUpload">Upload</span><br /> |
<input id="txtUploadFile" style="WIDTH: 100%" type="file" size="40" name="NewFile" /><br /> |
<br /> |
<input id="btnUpload" type="submit" value="Send it to the Server" fckLang="DlgLnkBtnUpload" /> |
<iframe name="UploadWindow" style="DISPLAY: none" src="../fckblank.html"></iframe> |
</form> |
</div> |
<div id="divAdvanced" style="DISPLAY: none"> |
<TABLE cellSpacing="0" cellPadding="0" border="0"> |
<TR> |
<TD nowrap> |
<span fckLang="DlgFlashScale">Scale</span><BR> |
<select id="cmbScale"> |
<option value="" selected></option> |
<option value="showall" fckLang="DlgFlashScaleAll">Show all</option> |
<option value="noborder" fckLang="DlgFlashScaleNoBorder">No Border</option> |
<option value="exactfit" fckLang="DlgFlashScaleFit">Exact Fit</option> |
</select></TD> |
<TD> |
</TD> |
<td valign="bottom"> |
<table> |
<tr> |
<td><input id="chkAutoPlay" type="checkbox" checked></td> |
<td><label for="chkAutoPlay" nowrap fckLang="DlgFlashChkPlay">Auto Play</label> </td> |
<td><input id="chkLoop" type="checkbox" checked></td> |
<td><label for="chkLoop" nowrap fckLang="DlgFlashChkLoop">Loop</label> </td> |
<td><input id="chkMenu" type="checkbox" checked></td> |
<td><label for="chkMenu" nowrap fckLang="DlgFlashChkMenu">Enable Flash Menu</label></td> |
</tr> |
</table> |
</td> |
</TR> |
</TABLE> |
<br> |
|
<table cellSpacing="0" cellPadding="0" width="100%" align="center" border="0"> |
<tr> |
<td vAlign="top" width="50%"><span fckLang="DlgGenId">Id</span><br> |
<input id="txtAttId" style="WIDTH: 100%" type="text"> |
</td> |
<td> </td> |
<td vAlign="top" nowrap><span fckLang="DlgGenClass">Stylesheet Classes</span><br> |
<input id="txtAttClasses" style="WIDTH: 100%" type="text"> |
</td> |
<td> </td> |
<td vAlign="top" nowrap width="50%"> <span fckLang="DlgGenTitle">Advisory Title</span><br> |
<input id="txtAttTitle" style="WIDTH: 100%" type="text"> |
</td> |
</tr> |
</table> |
<span fckLang="DlgGenStyle">Style</span><br> |
<input id="txtAttStyle" style="WIDTH: 100%" type="text"> |
</div> |
</body> |
</html> |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_hiddenfield.html |
---|
New file |
0,0 → 1,91 |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > |
<!-- |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fck_hiddenfield.html |
* Hidden Field dialog window. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
--> |
<html> |
<head> |
<title>Hidden Field Properties</title> |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> |
<meta content="noindex, nofollow" name="robots"> |
<script src="common/fck_dialog_common.js" type="text/javascript"></script> |
<script type="text/javascript"> |
var oEditor = window.parent.InnerDialogLoaded() ; |
// Gets the document DOM |
var oDOM = oEditor.FCK.EditorDocument ; |
var oActiveEl = oEditor.FCKSelection.GetSelectedElement() ; |
window.onload = function() |
{ |
// First of all, translate the dialog box texts |
oEditor.FCKLanguageManager.TranslatePage(document) ; |
if ( oActiveEl && oActiveEl.tagName == 'INPUT' && oActiveEl.type == 'hidden' ) |
{ |
GetE('txtName').value = oActiveEl.name ; |
GetE('txtValue').value = oActiveEl.value ; |
} |
else |
oActiveEl = null ; |
window.parent.SetOkButton( true ) ; |
} |
function Ok() |
{ |
if ( !oActiveEl ) |
{ |
oActiveEl = oEditor.FCK.EditorDocument.createElement( 'INPUT' ) ; |
oActiveEl.type = 'hidden' ; |
oActiveEl = oEditor.FCK.InsertElementAndGetIt( oActiveEl ) ; |
} |
oActiveEl.name = GetE('txtName').value ; |
SetAttribute( oActiveEl, 'value', GetE('txtValue').value ) ; |
return true ; |
} |
</script> |
</head> |
<body style="OVERFLOW: hidden" scroll="no"> |
<table height="100%" width="100%"> |
<tr> |
<td align="center"> |
<table border="0" class="inhoud" cellpadding="0" cellspacing="0" width="80%"> |
<tr> |
<td> |
<span fckLang="DlgHiddenName">Name</span><br> |
<input type="text" size="20" id="txtName" style="WIDTH: 100%"> |
</td> |
</tr> |
<tr> |
<td> |
<span fckLang="DlgHiddenValue">Value</span><br> |
<input type="text" size="30" id="txtValue" style="WIDTH: 100%"> |
</td> |
</tr> |
</table> |
</td> |
</tr> |
</table> |
</body> |
</html> |
/branches/v1.0-menes/api/fckeditor/editor/dialog/common/moz-bindings.xml |
---|
New file |
0,0 → 1,30 |
<?xml version="1.0" encoding="utf-8" ?> |
<bindings xmlns="http://www.mozilla.org/xbl"> |
<binding id="numericfield"> |
<implementation> |
<constructor> |
this.keypress = CheckIsDigit ; |
</constructor> |
<method name="CheckIsDigit"> |
<body> |
<![CDATA[ |
var iCode = keyCode ; |
var bAccepted = |
( |
( iCode >= 48 && iCode <= 57 ) // Numbers |
|| (iCode >= 37 && iCode <= 40) // Arrows |
|| iCode == 8 // Backspace |
|| iCode == 46 // Delete |
) ; |
return bAccepted ; |
]]> |
</body> |
</method> |
</implementation> |
<events> |
<event type="keypress" value="CheckIsDigit()" /> |
</events> |
</binding> |
</bindings> |
/branches/v1.0-menes/api/fckeditor/editor/dialog/common/fck_dialog_common.css |
---|
New file |
0,0 → 1,79 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fck_dialog_common.css |
* This is the CSS file used for interface details in some dialog |
* windows. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
.ImagePreviewArea |
{ |
border: #000000 1px solid; |
overflow: auto; |
width: 100%; |
height: 170px; |
background-color: #ffffff; |
} |
.FlashPreviewArea |
{ |
border: #000000 1px solid; |
padding: 5px; |
overflow: auto; |
width: 100%; |
height: 170px; |
background-color: #ffffff; |
} |
.BtnReset |
{ |
float: left; |
background-position: center center; |
background-image: url(images/reset.gif); |
width: 16px; |
height: 16px; |
background-repeat: no-repeat; |
border: 1px none; |
font-size: 1px ; |
} |
.BtnLocked, .BtnUnlocked |
{ |
float: left; |
background-position: center center; |
background-image: url(images/locked.gif); |
width: 16px; |
height: 16px; |
background-repeat: no-repeat; |
border: none 1px; |
font-size: 1px ; |
} |
.BtnUnlocked |
{ |
background-image: url(images/unlocked.gif); |
} |
.BtnOver |
{ |
border: outset 1px; |
cursor: pointer; |
cursor: hand; |
} |
.FCK__FieldNumeric |
{ |
behavior: url(common/fcknumericfield.htc) ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/dialog/common/fck_dialog_common.js |
---|
New file |
0,0 → 1,148 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fck_dialog_common.js |
* Useful functions used by almost all dialog window pages. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
// Gets a element by its Id. Used for shorter coding. |
function GetE( elementId ) |
{ |
return document.getElementById( elementId ) ; |
} |
function ShowE( element, isVisible ) |
{ |
if ( typeof( element ) == 'string' ) |
element = GetE( element ) ; |
element.style.display = isVisible ? '' : 'none' ; |
} |
function SetAttribute( element, attName, attValue ) |
{ |
if ( attValue == null || attValue.length == 0 ) |
element.removeAttribute( attName, 0 ) ; // 0 : Case Insensitive |
else |
element.setAttribute( attName, attValue, 0 ) ; // 0 : Case Insensitive |
} |
function GetAttribute( element, attName, valueIfNull ) |
{ |
var oAtt = element.attributes[attName] ; |
if ( oAtt == null || !oAtt.specified ) |
return valueIfNull ? valueIfNull : '' ; |
var oValue ; |
if ( !( oValue = element.getAttribute( attName, 2 ) ) ) |
oValue = oAtt.nodeValue ; |
return ( oValue == null ? valueIfNull : oValue ) ; |
} |
// Functions used by text fiels to accept numbers only. |
function IsDigit( e ) |
{ |
if ( !e ) |
e = event ; |
var iCode = ( e.keyCode || e.charCode ) ; |
return ( |
( iCode >= 48 && iCode <= 57 ) // Numbers |
|| (iCode >= 37 && iCode <= 40) // Arrows |
|| iCode == 8 // Backspace |
|| iCode == 46 // Delete |
) ; |
} |
String.prototype.trim = function() |
{ |
return this.replace( /(^\s*)|(\s*$)/g, '' ) ; |
} |
String.prototype.startsWith = function( value ) |
{ |
return ( this.substr( 0, value.length ) == value ) ; |
} |
String.prototype.remove = function( start, length ) |
{ |
var s = '' ; |
if ( start > 0 ) |
s = this.substring( 0, start ) ; |
if ( start + length < this.length ) |
s += this.substring( start + length , this.length ) ; |
return s ; |
} |
String.prototype.ReplaceAll = function( searchArray, replaceArray ) |
{ |
var replaced = this ; |
for ( var i = 0 ; i < searchArray.length ; i++ ) |
{ |
replaced = replaced.replace( searchArray[i], replaceArray[i] ) ; |
} |
return replaced ; |
} |
function OpenFileBrowser( url, width, height ) |
{ |
// oEditor must be defined. |
var iLeft = ( oEditor.FCKConfig.ScreenWidth - width ) / 2 ; |
var iTop = ( oEditor.FCKConfig.ScreenHeight - height ) / 2 ; |
var sOptions = "toolbar=no,status=no,resizable=yes,dependent=yes,scrollbars=yes" ; |
sOptions += ",width=" + width ; |
sOptions += ",height=" + height ; |
sOptions += ",left=" + iLeft ; |
sOptions += ",top=" + iTop ; |
// The "PreserveSessionOnFileBrowser" because the above code could be |
// blocked by popup blockers. |
if ( oEditor.FCKConfig.PreserveSessionOnFileBrowser && oEditor.FCKBrowserInfo.IsIE ) |
{ |
// The following change has been made otherwise IE will open the file |
// browser on a different server session (on some cases): |
// http://support.microsoft.com/default.aspx?scid=kb;en-us;831678 |
// by Simone Chiaretta. |
var oWindow = oEditor.window.open( url, 'FCKBrowseWindow', sOptions ) ; |
if ( oWindow ) |
{ |
// Detect Yahoo popup blocker. |
try |
{ |
var sTest = oWindow.name ; // Yahoo returns "something", but we can't access it, so detect that and avoid strange errors for the user. |
oWindow.opener = window ; |
} |
catch(e) |
{ |
alert( oEditor.FCKLang.BrowseServerBlocked ) ; |
} |
} |
else |
alert( oEditor.FCKLang.BrowseServerBlocked ) ; |
} |
else |
window.open( url, 'FCKBrowseWindow', sOptions ) ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/dialog/common/images/locked.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/dialog/common/images/locked.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/dialog/common/images/reset.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/dialog/common/images/reset.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/dialog/common/images/unlocked.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/dialog/common/images/unlocked.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/dialog/common/fcknumericfield.htc |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/dialog/common/fcknumericfield.htc |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_form.html |
---|
New file |
0,0 → 1,101 |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > |
<!-- |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fck_form.html |
* Form dialog window. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
--> |
<html xmlns="http://www.w3.org/1999/xhtml"> |
<head> |
<title></title> |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
<meta content="noindex, nofollow" name="robots" /> |
<script src="common/fck_dialog_common.js" type="text/javascript"></script> |
<script type="text/javascript"> |
var oEditor = window.parent.InnerDialogLoaded() ; |
// Gets the document DOM |
var oDOM = oEditor.FCK.EditorDocument ; |
var oActiveEl = oEditor.FCKSelection.MoveToAncestorNode( 'FORM' ) ; |
window.onload = function() |
{ |
// First of all, translate the dialog box texts |
oEditor.FCKLanguageManager.TranslatePage(document) ; |
if ( oActiveEl ) |
{ |
GetE('txtName').value = oActiveEl.name ; |
GetE('txtAction').value = oActiveEl.getAttribute( 'action', 2 ) ; |
GetE('txtMethod').value = oActiveEl.method ; |
} |
else |
oActiveEl = null ; |
window.parent.SetOkButton( true ) ; |
} |
function Ok() |
{ |
if ( !oActiveEl ) |
{ |
oActiveEl = oEditor.FCK.EditorDocument.createElement( 'FORM' ) ; |
oActiveEl = oEditor.FCK.InsertElementAndGetIt( oActiveEl ) ; |
oActiveEl.innerHTML = ' ' ; |
} |
oActiveEl.name = GetE('txtName').value ; |
SetAttribute( oActiveEl, 'action' , GetE('txtAction').value ) ; |
oActiveEl.method = GetE('txtMethod').value ; |
return true ; |
} |
</script> |
</head> |
<body style="overflow: hidden"> |
<table width="100%" style="height: 100%"> |
<tr> |
<td align="center"> |
<table cellspacing="0" cellpadding="0" width="80%" border="0"> |
<tr> |
<td> |
<span fcklang="DlgFormName">Name</span><br /> |
<input style="width: 100%" type="text" id="txtName" /> |
</td> |
</tr> |
<tr> |
<td> |
<span fcklang="DlgFormAction">Action</span><br /> |
<input style="width: 100%" type="text" id="txtAction" /> |
</td> |
</tr> |
<tr> |
<td> |
<span fcklang="DlgFormMethod">Method</span><br /> |
<select id="txtMethod"> |
<option value="get" selected="selected">GET</option> |
<option value="post">POST</option> |
</select> |
</td> |
</tr> |
</table> |
</td> |
</tr> |
</table> |
</body> |
</html> |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_about/logo_fckeditor.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_about/logo_fckeditor.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_about/lgpl.html |
---|
New file |
0,0 → 1,434 |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> |
<html> |
<head> |
<title>GNU Lesser General Public License</title> |
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5"> |
<STYLE> |
BODY { FONT-SIZE: 12px } |
</STYLE> |
</head> |
<body> |
<H3>GNU Lesser General Public License</H3> |
<TT> |
<P>Version 2.1, February 1999</P> |
<BLOCKQUOTE> |
<P>Copyright (C) 1991, 1999 Free Software Foundation, Inc. 59 Temple Place, Suite |
330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute |
verbatim copies of this license document, but changing it is not allowed.</P> |
<P>[This is the first released version of the Lesser GPL. It also counts as the |
successor of the GNU Library Public License, version 2, hence the version |
number 2.1.]</P> |
</BLOCKQUOTE> |
<H4>Preamble</H4> |
<P>The licenses for most software are designed to take away your freedom to share |
and change it. By contrast, the GNU General Public Licenses are intended to |
guarantee your freedom to share and change free software--to make sure the |
software is free for all its users. |
</P> |
<P>This license, the Lesser General Public License, applies to some specially |
designated software packages--typically libraries--of the Free Software |
Foundation and other authors who decide to use it. You can use it too, but we |
suggest you first think carefully about whether this license or the ordinary |
General Public License is the better strategy to use in any particular case, |
based on the explanations below. |
</P> |
<P>When we speak of free software, we are referring to freedom of use, not price. |
Our General Public Licenses are designed to make sure that you have the freedom |
to distribute copies of free software (and charge for this service if you |
wish); that you receive source code or can get it if you want it; that you can |
change the software and use pieces of it in new free programs; and that you are |
informed that you can do these things.</P> |
<P>To protect your rights, we need to make restrictions that forbid distributors to |
deny you these rights or to ask you to surrender these rights. These |
restrictions translate to certain responsibilities for you if you distribute |
copies of the library or if you modify it. |
</P> |
<P>For example, if you distribute copies of the library, whether gratis or for a |
fee, you must give the recipients all the rights that we gave you. You must |
make sure that they, too, receive or can get the source code. If you link other |
code with the library, you must provide complete object files to the |
recipients, so that they can relink them with the library after making changes |
to the library and recompiling it. And you must show them these terms so they |
know their rights. |
</P> |
<P>We protect your rights with a two-step method: (1) we copyright the library, and |
(2) we offer you this license, which gives you legal permission to copy, |
distribute and/or modify the library. |
</P> |
<P>To protect each distributor, we want to make it very clear that there is no |
warranty for the free library. Also, if the library is modified by someone else |
and passed on, the recipients should know that what they have is not the |
original version, so that the original author's reputation will not be affected |
by problems that might be introduced by others. |
</P> |
<P>Finally, software patents pose a constant threat to the existence of any free |
program. We wish to make sure that a company cannot effectively restrict the |
users of a free program by obtaining a restrictive license from a patent |
holder. Therefore, we insist that any patent license obtained for a version of |
the library must be consistent with the full freedom of use specified in this |
license. |
</P> |
<P>Most GNU software, including some libraries, is covered by the ordinary GNU |
General Public License. This license, the GNU Lesser General Public License, |
applies to certain designated libraries, and is quite different from the |
ordinary General Public License. We use this license for certain libraries in |
order to permit linking those libraries into non-free programs. |
</P> |
<P>When a program is linked with a library, whether statically or using a shared |
library, the combination of the two is legally speaking a combined work, a |
derivative of the original library. The ordinary General Public License |
therefore permits such linking only if the entire combination fits its criteria |
of freedom. The Lesser General Public License permits more lax criteria for |
linking other code with the library. |
</P> |
<P>We call this license the "Lesser" General Public License because it does Less to |
protect the user's freedom than the ordinary General Public License. It also |
provides other free software developers Less of an advantage over competing |
non-free programs. These disadvantages are the reason we use the ordinary |
General Public License for many libraries. However, the Lesser license provides |
advantages in certain special circumstances. |
</P> |
<P>For example, on rare occasions, there may be a special need to encourage the |
widest possible use of a certain library, so that it becomes a de-facto |
standard. To achieve this, non-free programs must be allowed to use the |
library. A more frequent case is that a free library does the same job as |
widely used non-free libraries. In this case, there is little to gain by |
limiting the free library to free software only, so we use the Lesser General |
Public License. |
</P> |
<P>In other cases, permission to use a particular library in non-free programs |
enables a greater number of people to use a large body of free software. For |
example, permission to use the GNU C Library in non-free programs enables many |
more people to use the whole GNU operating system, as well as its variant, the |
GNU/Linux operating system. |
</P> |
<P>Although the Lesser General Public License is Less protective of the users' |
freedom, it does ensure that the user of a program that is linked with the |
Library has the freedom and the wherewithal to run that program using a |
modified version of the Library. |
</P> |
<P>The precise terms and conditions for copying, distribution and modification |
follow. Pay close attention to the difference between a "work based on the |
library" and a "work that uses the library". The former contains code derived |
from the library, whereas the latter must be combined with the library in order |
to run. |
</P> |
<H4>TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</H4> |
<P><STRONG>0.</STRONG> This License Agreement applies to any software library or |
other program which contains a notice placed by the copyright holder or other |
authorized party saying it may be distributed under the terms of this Lesser |
General Public License (also called "this License"). Each licensee is addressed |
as "you".</P> |
<P>A "library" means a collection of software functions and/or data prepared so as |
to be conveniently linked with application programs (which use some of those |
functions and data) to form executables. |
</P> |
<P>The "Library", below, refers to any such software library or work which has been |
distributed under these terms. A "work based on the Library" means either the |
Library or any derivative work under copyright law: that is to say, a work |
containing the Library or a portion of it, either verbatim or with |
modifications and/or translated straightforwardly into another language. |
(Hereinafter, translation is included without limitation in the term |
"modification".) |
</P> |
<P>"Source code" for a work means the preferred form of the work for making |
modifications to it. For a library, complete source code means all the source |
code for all modules it contains, plus any associated interface definition |
files, plus the scripts used to control compilation and installation of the |
library.</P> |
<P>Activities other than copying, distribution and modification are not covered by |
this License; they are outside its scope. The act of running a program using |
the Library is not restricted, and output from such a program is covered only |
if its contents constitute a work based on the Library (independent of the use |
of the Library in a tool for writing it). Whether that is true depends on what |
the Library does and what the program that uses the Library does. |
</P> |
<P><STRONG>1.</STRONG> You may copy and distribute verbatim copies of the Library's |
complete source code as you receive it, in any medium, provided that you |
conspicuously and appropriately publish on each copy an appropriate copyright |
notice and disclaimer of warranty; keep intact all the notices that refer to |
this License and to the absence of any warranty; and distribute a copy of this |
License along with the Library. |
</P> |
<P>You may charge a fee for the physical act of transferring a copy, and you may at |
your option offer warranty protection in exchange for a fee. |
</P> |
<P><STRONG>2.</STRONG> You may modify your copy or copies of the Library or any |
portion of it, thus forming a work based on the Library, and copy and |
distribute such modifications or work under the terms of Section 1 above, |
provided that you also meet all of these conditions: |
</P> |
<BLOCKQUOTE> |
<P>a) The modified work must itself be a software library. |
</P> |
<P>b) You must cause the files modified to carry prominent notices stating that you |
changed the files and the date of any change.</P> |
<P>c) You must cause the whole of the work to be licensed at no charge to all third |
parties under the terms of this License. |
</P> |
<P>d) If a facility in the modified Library refers to a function or a table of data |
to be supplied by an application program that uses the facility, other than as |
an argument passed when the facility is invoked, then you must make a good |
faith effort to ensure that, in the event an application does not supply such |
function or table, the facility still operates, and performs whatever part of |
its purpose remains meaningful. |
</P> |
<P>(For example, a function in a library to compute square roots has a purpose that |
is entirely well-defined independent of the application. Therefore, Subsection |
2d requires that any application-supplied function or table used by this |
function must be optional: if the application does not supply it, the square |
root function must still compute square roots.) |
</P> |
<P>These requirements apply to the modified work as a whole. If identifiable |
sections of that work are not derived from the Library, and can be reasonably |
considered independent and separate works in themselves, then this License, and |
its terms, do not apply to those sections when you distribute them as separate |
works. But when you distribute the same sections as part of a whole which is a |
work based on the Library, the distribution of the whole must be on the terms |
of this License, whose permissions for other licensees extend to the entire |
whole, and thus to each and every part regardless of who wrote it. |
</P> |
<P>Thus, it is not the intent of this section to claim rights or contest your |
rights to work written entirely by you; rather, the intent is to exercise the |
right to control the distribution of derivative or collective works based on |
the Library. |
</P> |
<P>In addition, mere aggregation of another work not based on the Library with the |
Library (or with a work based on the Library) on a volume of a storage or |
distribution medium does not bring the other work under the scope of this |
License. |
</P> |
</BLOCKQUOTE> |
<P><STRONG>3.</STRONG> You may opt to apply the terms of the ordinary GNU General |
Public License instead of this License to a given copy of the Library. To do |
this, you must alter all the notices that refer to this License, so that they |
refer to the ordinary GNU General Public License, version 2, instead of to this |
License. (If a newer version than version 2 of the ordinary GNU General Public |
License has appeared, then you can specify that version instead if you wish.) |
Do not make any other change in these notices. |
</P> |
<P>Once this change is made in a given copy, it is irreversible for that copy, so |
the ordinary GNU General Public License applies to all subsequent copies and |
derivative works made from that copy. |
</P> |
<P>This option is useful when you wish to copy part of the code of the Library into |
a program that is not a library. |
</P> |
<P><STRONG>4.</STRONG> You may copy and distribute the Library (or a portion or |
derivative of it, under Section 2) in object code or executable form under the |
terms of Sections 1 and 2 above provided that you accompany it with the |
complete corresponding machine-readable source code, which must be distributed |
under the terms of Sections 1 and 2 above on a medium customarily used for |
software interchange. |
</P> |
<P>If distribution of object code is made by offering access to copy from a |
designated place, then offering equivalent access to copy the source code from |
the same place satisfies the requirement to distribute the source code, even |
though third parties are not compelled to copy the source along with the object |
code.</P> |
<P><STRONG>5.</STRONG> A program that contains no derivative of any portion of the |
Library, but is designed to work with the Library by being compiled or linked |
with it, is called a "work that uses the Library". Such a work, in isolation, |
is not a derivative work of the Library, and therefore falls outside the scope |
of this License. |
</P> |
<P>However, linking a "work that uses the Library" with the Library creates an |
executable that is a derivative of the Library (because it contains portions of |
the Library), rather than a "work that uses the library". The executable is |
therefore covered by this License. Section 6 states terms for distribution of |
such executables. |
</P> |
<P>When a "work that uses the Library" uses material from a header file that is |
part of the Library, the object code for the work may be a derivative work of |
the Library even though the source code is not. Whether this is true is |
especially significant if the work can be linked without the Library, or if the |
work is itself a library. The threshold for this to be true is not precisely |
defined by law. |
</P> |
<P>If such an object file uses only numerical parameters, data structure layouts |
and accessors, and small macros and small inline functions (ten lines or less |
in length), then the use of the object file is unrestricted, regardless of |
whether it is legally a derivative work. (Executables containing this object |
code plus portions of the Library will still fall under Section 6.) |
</P> |
<P>Otherwise, if the work is a derivative of the Library, you may distribute the |
object code for the work under the terms of Section 6. Any executables |
containing that work also fall under Section 6, whether or not they are linked |
directly with the Library itself. |
</P> |
<P><STRONG>6.</STRONG> As an exception to the Sections above, you may also combine |
or link a "work that uses the Library" with the Library to produce a work |
containing portions of the Library, and distribute that work under terms of |
your choice, provided that the terms permit modification of the work for the |
customer's own use and reverse engineering for debugging such modifications. |
</P> |
<P>You must give prominent notice with each copy of the work that the Library is |
used in it and that the Library and its use are covered by this License. You |
must supply a copy of this License. If the work during execution displays |
copyright notices, you must include the copyright notice for the Library among |
them, as well as a reference directing the user to the copy of this License. |
Also, you must do one of these things: |
</P> |
<BLOCKQUOTE> |
<P>a) Accompany the work with the complete corresponding machine-readable source |
code for the Library including whatever changes were used in the work (which |
must be distributed under Sections 1 and 2 above); and, if the work is an |
executable linked with the Library, with the complete machine-readable "work |
that uses the Library", as object code and/or source code, so that the user can |
modify the Library and then relink to produce a modified executable containing |
the modified Library. (It is understood that the user who changes the contents |
of definitions files in the Library will not necessarily be able to recompile |
the application to use the modified definitions.) |
</P> |
<P>b) Use a suitable shared library mechanism for linking with the Library. A |
suitable mechanism is one that (1) uses at run time a copy of the library |
already present on the user's computer system, rather than copying library |
functions into the executable, and (2) will operate properly with a modified |
version of the library, if the user installs one, as long as the modified |
version is interface-compatible with the version that the work was made with. |
</P> |
<P>c) Accompany the work with a written offer, valid for at least three years, to |
give the same user the materials specified in Subsection 6a, above, for a |
charge no more than the cost of performing this distribution. |
</P> |
<P>d) If distribution of the work is made by offering access to copy from a |
designated place, offer equivalent access to copy the above specified materials |
from the same place. |
</P> |
<P>e) Verify that the user has already received a copy of these materials or that |
you have already sent this user a copy.</P> |
</BLOCKQUOTE> |
<P>For an executable, the required form of the "work that uses the Library" must |
include any data and utility programs needed for reproducing the executable |
from it. However, as a special exception, the materials to be distributed need |
not include anything that is normally distributed (in either source or binary |
form) with the major components (compiler, kernel, and so on) of the operating |
system on which the executable runs, unless that component itself accompanies |
the executable. |
</P> |
<P>It may happen that this requirement contradicts the license restrictions of |
other proprietary libraries that do not normally accompany the operating |
system. Such a contradiction means you cannot use both them and the Library |
together in an executable that you distribute. |
</P> |
<P><STRONG>7.</STRONG> You may place library facilities that are a work based on |
the Library side-by-side in a single library together with other library |
facilities not covered by this License, and distribute such a combined library, |
provided that the separate distribution of the work based on the Library and of |
the other library facilities is otherwise permitted, and provided that you do |
these two things: |
</P> |
<BLOCKQUOTE> |
<P>a) Accompany the combined library with a copy of the same work based on the |
Library, uncombined with any other library facilities. This must be distributed |
under the terms of the Sections above. |
</P> |
<P>b) Give prominent notice with the combined library of the fact that part of it |
is a work based on the Library, and explaining where to find the accompanying |
uncombined form of the same work.</P> |
</BLOCKQUOTE> |
<P><STRONG>8.</STRONG> You may not copy, modify, sublicense, link with, or |
distribute the Library except as expressly provided under this License. Any |
attempt otherwise to copy, modify, sublicense, link with, or distribute the |
Library is void, and will automatically terminate your rights under this |
License. However, parties who have received copies, or rights, from you under |
this License will not have their licenses terminated so long as such parties |
remain in full compliance. |
</P> |
<P><STRONG>9.</STRONG> You are not required to accept this License, since you have |
not signed it. However, nothing else grants you permission to modify or |
distribute the Library or its derivative works. These actions are prohibited by |
law if you do not accept this License. Therefore, by modifying or distributing |
the Library (or any work based on the Library), you indicate your acceptance of |
this License to do so, and all its terms and conditions for copying, |
distributing or modifying the Library or works based on it. |
</P> |
<P><STRONG>10.</STRONG> Each time you redistribute the Library (or any work based |
on the Library), the recipient automatically receives a license from the |
original licensor to copy, distribute, link with or modify the Library subject |
to these terms and conditions. You may not impose any further restrictions on |
the recipients' exercise of the rights granted herein. You are not responsible |
for enforcing compliance by third parties with this License. |
</P> |
<P><STRONG>11.</STRONG> If, as a consequence of a court judgment or allegation of |
patent infringement or for any other reason (not limited to patent issues), |
conditions are imposed on you (whether by court order, agreement or otherwise) |
that contradict the conditions of this License, they do not excuse you from the |
conditions of this License. If you cannot distribute so as to satisfy |
simultaneously your obligations under this License and any other pertinent |
obligations, then as a consequence you may not distribute the Library at all. |
For example, if a patent license would not permit royalty-free redistribution |
of the Library by all those who receive copies directly or indirectly through |
you, then the only way you could satisfy both it and this License would be to |
refrain entirely from distribution of the Library. |
</P> |
<P>If any portion of this section is held invalid or unenforceable under any |
particular circumstance, the balance of the section is intended to apply, and |
the section as a whole is intended to apply in other circumstances. |
</P> |
<P>It is not the purpose of this section to induce you to infringe any patents or |
other property right claims or to contest validity of any such claims; this |
section has the sole purpose of protecting the integrity of the free software |
distribution system which is implemented by public license practices. Many |
people have made generous contributions to the wide range of software |
distributed through that system in reliance on consistent application of that |
system; it is up to the author/donor to decide if he or she is willing to |
distribute software through any other system and a licensee cannot impose that |
choice. |
</P> |
<P>This section is intended to make thoroughly clear what is believed to be a |
consequence of the rest of this License. |
</P> |
<P><STRONG>12.</STRONG> If the distribution and/or use of the Library is restricted |
in certain countries either by patents or by copyrighted interfaces, the |
original copyright holder who places the Library under this License may add an |
explicit geographical distribution limitation excluding those countries, so |
that distribution is permitted only in or among countries not thus excluded. In |
such case, this License incorporates the limitation as if written in the body |
of this License. |
</P> |
<P><STRONG>13.</STRONG> The Free Software Foundation may publish revised and/or new |
versions of the Lesser General Public License from time to time. Such new |
versions will be similar in spirit to the present version, but may differ in |
detail to address new problems or concerns.</P> |
<P>Each version is given a distinguishing version number. If the Library specifies |
a version number of this License which applies to it and "any later version", |
you have the option of following the terms and conditions either of that |
version or of any later version published by the Free Software Foundation. If |
the Library does not specify a license version number, you may choose any |
version ever published by the Free Software Foundation. |
</P> |
<P><STRONG>14.</STRONG> If you wish to incorporate parts of the Library into other |
free programs whose distribution conditions are incompatible with these, write |
to the author to ask for permission. For software which is copyrighted by the |
Free Software Foundation, write to the Free Software Foundation; we sometimes |
make exceptions for this. Our decision will be guided by the two goals of |
preserving the free status of all derivatives of our free software and of |
promoting the sharing and reuse of software generally. |
</P> |
<P>NO WARRANTY |
</P> |
<P><STRONG>15. </STRONG>BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO |
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT |
WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES |
PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR |
IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF |
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE |
QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE |
DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR |
CORRECTION. |
</P> |
<P><STRONG>16.</STRONG> IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO |
IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR |
REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, |
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT |
OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS |
OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD |
PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN |
IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH |
DAMAGES. |
</P> |
<H4><STRONG>END OF TERMS AND CONDITIONS</STRONG></H4> |
</TT> |
</body> |
</html> |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_about/logo_fredck.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_about/logo_fredck.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_template/images/template1.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_template/images/template1.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_template/images/template2.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_template/images/template2.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_template/images/template3.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_template/images/template3.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_anchor.html |
---|
New file |
0,0 → 1,98 |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > |
<!-- |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fck_anchor.html |
* Anchor dialog window. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
--> |
<html> |
<head> |
<title>Anchor Properties</title> |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> |
<meta content="noindex, nofollow" name="robots"> |
<script src="common/fck_dialog_common.js" type="text/javascript"></script> |
<script type="text/javascript"> |
var oEditor = window.parent.InnerDialogLoaded() ; |
var FCK = oEditor.FCK ; |
// Gets the document DOM |
var oDOM = oEditor.FCK.EditorDocument ; |
var oFakeImage = FCK.Selection.GetSelectedElement() ; |
var oAnchor ; |
if ( oFakeImage ) |
{ |
if ( oFakeImage.tagName == 'IMG' && oFakeImage.getAttribute('_fckanchor') ) |
oAnchor = FCK.GetRealElement( oFakeImage ) ; |
else |
oFakeImage = null ; |
} |
window.onload = function() |
{ |
// First of all, translate the dialog box texts |
oEditor.FCKLanguageManager.TranslatePage(document) ; |
if ( oAnchor ) |
GetE('txtName').value = oAnchor.name ; |
else |
oAnchor = null ; |
window.parent.SetOkButton( true ) ; |
} |
function Ok() |
{ |
if ( GetE('txtName').value.length == 0 ) |
{ |
alert( oEditor.FCKLang.DlgAnchorErrorName ) ; |
return false ; |
} |
oEditor.FCKUndo.SaveUndoStep() ; |
oAnchor = FCK.EditorDocument.createElement( 'DIV' ) ; |
oAnchor.innerHTML = '<a name="' + GetE('txtName').value + '"><\/a>' ; |
oAnchor = oAnchor.firstChild ; |
oFakeImage = oEditor.FCKDocumentProcessor_CreateFakeImage( 'FCK__Anchor', oAnchor ) ; |
oFakeImage.setAttribute( '_fckanchor', 'true', 0 ) ; |
oFakeImage = FCK.InsertElementAndGetIt( oFakeImage ) ; |
// oEditor.FCK.InsertHtml( '<a name="' + GetE('txtName').value + '"><\/a>' ) ; |
return true ; |
} |
</script> |
</head> |
<body style="OVERFLOW: hidden" scroll="no"> |
<table height="100%" width="100%"> |
<tr> |
<td align="center"> |
<table border="0" cellpadding="0" cellspacing="0" width="80%"> |
<tr> |
<td> |
<span fckLang="DlgAnchorName">Anchor Name</span><BR> |
<input id="txtName" style="WIDTH: 100%" type="text"> |
</td> |
</tr> |
</table> |
</td> |
</tr> |
</table> |
</body> |
</html> |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_template.html |
---|
New file |
0,0 → 1,236 |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> |
<!-- |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fck_template.html |
* Template selection dialog window. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
--> |
<html xmlns="http://www.w3.org/1999/xhtml"> |
<head> |
<title></title> |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
<meta name="robots" content="noindex, nofollow" /> |
<style type="text/css"> |
.TplList |
{ |
border: #dcdcdc 2px solid; |
background-color: #ffffff; |
overflow: auto; |
width: 90%; |
} |
.TplItem |
{ |
margin: 5px; |
padding: 7px; |
border: #eeeeee 1px solid; |
} |
.TplItem TABLE |
{ |
display: inline; |
} |
.TplTitle |
{ |
font-weight: bold; |
} |
</style> |
<script src="common/fck_dialog_common.js" type="text/javascript"></script> |
<script type="text/javascript"> |
var oEditor = window.parent.InnerDialogLoaded() ; |
var FCK = oEditor.FCK ; |
var FCKLang = oEditor.FCKLang ; |
var FCKConfig = oEditor.FCKConfig ; |
window.onload = function() |
{ |
// Set the right box height (browser dependent). |
GetE('eList').style.height = document.all ? '100%' : '295px' ; |
// Translate the dialog box texts. |
oEditor.FCKLanguageManager.TranslatePage(document) ; |
GetE('xChkReplaceAll').checked = ( FCKConfig.TemplateReplaceAll !== false ) ; |
if ( FCKConfig.TemplateReplaceCheckbox !== false ) |
GetE('xReplaceBlock').style.display = '' ; |
window.parent.SetAutoSize( true ) ; |
LoadTemplatesXml() ; |
} |
function LoadTemplatesXml() |
{ |
if ( !FCK._Templates ) |
{ |
GetE('eLoading').style.display = '' ; |
// Create the Templates array. |
FCK._Templates = new Array() ; |
// Load the XML file. |
var oXml = new oEditor.FCKXml() ; |
oXml.LoadUrl( FCKConfig.TemplatesXmlPath ) ; |
// Get the Images Base Path. |
var oAtt = oXml.SelectSingleNode( 'Templates/@imagesBasePath' ) ; |
var sImagesBasePath = oAtt ? oAtt.value : '' ; |
// Get the "Template" nodes defined in the XML file. |
var aTplNodes = oXml.SelectNodes( 'Templates/Template' ) ; |
for ( var i = 0 ; i < aTplNodes.length ; i++ ) |
{ |
var oNode = aTplNodes[i] |
var oTemplate = new Object() ; |
var oPart ; |
// Get the Template Title. |
if ( oPart = oNode.attributes.getNamedItem('title') ) |
oTemplate.Title = oPart.value ; |
else |
oTemplate.Title = 'Template ' + ( i + 1 ) ; |
// Get the Template Description. |
if ( oPart = oXml.SelectSingleNode( 'Description', oNode ) ) |
oTemplate.Description = oPart.text ? oPart.text : oPart.textContent ; |
// Get the Template Image. |
if ( oPart = oNode.attributes.getNamedItem('image') ) |
oTemplate.Image = sImagesBasePath + oPart.value ; |
// Get the Template HTML. |
if ( oPart = oXml.SelectSingleNode( 'Html', oNode ) ) |
oTemplate.Html = oPart.text ? oPart.text : oPart.textContent ; |
else |
{ |
alert( 'No HTML defined for template index ' + i + '. Please review the "' + FCKConfig.TemplatesXmlPath + '" file.' ) ; |
continue ; |
} |
FCK._Templates[ FCK._Templates.length ] = oTemplate ; |
} |
GetE('eLoading').style.display = 'none' ; |
} |
if ( FCK._Templates.length == 0 ) |
GetE('eEmpty').style.display = '' ; |
else |
{ |
for ( var i = 0 ; i < FCK._Templates.length ; i++ ) |
{ |
var oTemplate = FCK._Templates[i] ; |
var oItemDiv = GetE('eList').appendChild( document.createElement( 'DIV' ) ) ; |
oItemDiv.TplIndex = i ; |
oItemDiv.className = 'TplItem' ; |
// Build the inner HTML of our new item DIV. |
var sInner = '<table><tr>' ; |
if ( oTemplate.Image ) |
sInner += '<td valign="top"><img src="' + oTemplate.Image + '"><\/td>' ; |
sInner += '<td valign="top"><div class="TplTitle">' + oTemplate.Title + '<\/div>' ; |
if ( oTemplate.Description ) |
sInner += '<div>' + oTemplate.Description + '<\/div>' ; |
sInner += '<\/td><\/tr><\/table>' ; |
oItemDiv.innerHTML = sInner ; |
oItemDiv.onmouseover = ItemDiv_OnMouseOver ; |
oItemDiv.onmouseout = ItemDiv_OnMouseOut ; |
oItemDiv.onclick = ItemDiv_OnClick ; |
} |
} |
} |
function ItemDiv_OnMouseOver() |
{ |
this.className += ' PopupSelectionBox' ; |
} |
function ItemDiv_OnMouseOut() |
{ |
this.className = this.className.replace( /\s*PopupSelectionBox\s*/, '' ) ; |
} |
function ItemDiv_OnClick() |
{ |
SelectTemplate( this.TplIndex ) ; |
} |
function SelectTemplate( index ) |
{ |
oEditor.FCKUndo.SaveUndoStep() ; |
if ( GetE('xChkReplaceAll').checked ) |
FCK.SetHTML( FCK._Templates[index].Html ) ; |
else |
FCK.InsertHtml( FCK._Templates[index].Html ) ; |
window.parent.Cancel( true ) ; |
} |
</script> |
</head> |
<body style="overflow: hidden"> |
<table width="100%" style="height: 100%"> |
<tr> |
<td align="center"> |
<span fcklang="DlgTemplatesSelMsg">Please select the template to open in the editor<br /> |
(the actual contents will be lost):</span> |
</td> |
</tr> |
<tr> |
<td height="100%" align="center"> |
<div id="eList" align="left" class="TplList"> |
<div id="eLoading" align="center" style="display: none"> |
<br /> |
<span fcklang="DlgTemplatesLoading">Loading templates list. Please wait...</span> |
</div> |
<div id="eEmpty" align="center" style="display: none"> |
<br /> |
<span fcklang="DlgTemplatesNoTpl">(No templates defined)</span> |
</div> |
</div> |
</td> |
</tr> |
<tr id="xReplaceBlock" style="display: none"> |
<td> |
<table cellpadding="0" cellspacing="0"> |
<tr> |
<td> |
<input id="xChkReplaceAll" type="checkbox" /></td> |
<td> |
</td> |
<td> |
<label for="xChkReplaceAll" fcklang="DlgTemplatesReplace"> |
Replace actual contents</label></td> |
</tr> |
</table> |
</td> |
</tr> |
</table> |
</body> |
</html> |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_button.html |
---|
New file |
0,0 → 1,103 |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > |
<!-- |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fck_button.html |
* Button dialog window. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
--> |
<html xmlns="http://www.w3.org/1999/xhtml"> |
<head> |
<title>Button Properties</title> |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
<meta content="noindex, nofollow" name="robots" /> |
<script src="common/fck_dialog_common.js" type="text/javascript"></script> |
<script type="text/javascript"> |
var oEditor = window.parent.InnerDialogLoaded() ; |
// Gets the document DOM |
var oDOM = oEditor.FCK.EditorDocument ; |
var oActiveEl = oEditor.FCKSelection.GetSelectedElement() ; |
window.onload = function() |
{ |
// First of all, translate the dialog box texts |
oEditor.FCKLanguageManager.TranslatePage(document) ; |
if ( oActiveEl && oActiveEl.tagName.toUpperCase() == "INPUT" && ( oActiveEl.type == "button" || oActiveEl.type == "submit" || oActiveEl.type == "reset" ) ) |
{ |
GetE('txtName').value = oActiveEl.name ; |
GetE('txtValue').value = oActiveEl.value ; |
GetE('txtType').value = oActiveEl.type ; |
GetE('txtType').disabled = true ; |
} |
else |
oActiveEl = null ; |
window.parent.SetOkButton( true ) ; |
} |
function Ok() |
{ |
if ( !oActiveEl ) |
{ |
oActiveEl = oEditor.FCK.EditorDocument.createElement( 'INPUT' ) ; |
oActiveEl.type = GetE('txtType').value ; |
oActiveEl = oEditor.FCK.InsertElementAndGetIt( oActiveEl ) ; |
} |
oActiveEl.name = GetE('txtName').value ; |
SetAttribute( oActiveEl, 'value', GetE('txtValue').value ) ; |
return true ; |
} |
</script> |
</head> |
<body style="overflow: hidden"> |
<table width="100%" style="height: 100%"> |
<tr> |
<td align="center"> |
<table border="0" cellpadding="0" cellspacing="0" width="80%"> |
<tr> |
<td colspan=""> |
<span fcklang="DlgCheckboxName">Name</span><br /> |
<input type="text" size="20" id="txtName" style="width: 100%" /> |
</td> |
</tr> |
<tr> |
<td> |
<span fcklang="DlgButtonText">Text (Value)</span><br /> |
<input type="text" id="txtValue" style="width: 100%" /> |
</td> |
</tr> |
<tr> |
<td> |
<span fcklang="DlgButtonType">Type</span><br /> |
<select id="txtType"> |
<option fcklang="DlgButtonTypeBtn" value="button" selected="selected">Button</option> |
<option fcklang="DlgButtonTypeSbm" value="submit">Submit</option> |
<option fcklang="DlgButtonTypeRst" value="reset">Reset</option> |
</select> |
</td> |
</tr> |
</table> |
</td> |
</tr> |
</table> |
</body> |
</html> |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_select/fck_select.js |
---|
New file |
0,0 → 1,165 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fck_select.js |
* Scripts for the fck_select.html page. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
function Select( combo ) |
{ |
var iIndex = combo.selectedIndex ; |
oListText.selectedIndex = iIndex ; |
oListValue.selectedIndex = iIndex ; |
var oTxtText = document.getElementById( "txtText" ) ; |
var oTxtValue = document.getElementById( "txtValue" ) ; |
oTxtText.value = oListText.value ; |
oTxtValue.value = oListValue.value ; |
} |
function Add() |
{ |
var oTxtText = document.getElementById( "txtText" ) ; |
var oTxtValue = document.getElementById( "txtValue" ) ; |
AddComboOption( oListText, oTxtText.value, oTxtText.value ) ; |
AddComboOption( oListValue, oTxtValue.value, oTxtValue.value ) ; |
oListText.selectedIndex = oListText.options.length - 1 ; |
oListValue.selectedIndex = oListValue.options.length - 1 ; |
oTxtText.value = '' ; |
oTxtValue.value = '' ; |
oTxtText.focus() ; |
} |
function Modify() |
{ |
var iIndex = oListText.selectedIndex ; |
if ( iIndex < 0 ) return ; |
var oTxtText = document.getElementById( "txtText" ) ; |
var oTxtValue = document.getElementById( "txtValue" ) ; |
oListText.options[ iIndex ].innerHTML = oTxtText.value ; |
oListText.options[ iIndex ].value = oTxtText.value ; |
oListValue.options[ iIndex ].innerHTML = oTxtValue.value ; |
oListValue.options[ iIndex ].value = oTxtValue.value ; |
oTxtText.value = '' ; |
oTxtValue.value = '' ; |
oTxtText.focus() ; |
} |
function Move( steps ) |
{ |
ChangeOptionPosition( oListText, steps ) ; |
ChangeOptionPosition( oListValue, steps ) ; |
} |
function Delete() |
{ |
RemoveSelectedOptions( oListText ) ; |
RemoveSelectedOptions( oListValue ) ; |
} |
function SetSelectedValue() |
{ |
var iIndex = oListValue.selectedIndex ; |
if ( iIndex < 0 ) return ; |
var oTxtValue = document.getElementById( "txtSelValue" ) ; |
oTxtValue.value = oListValue.options[ iIndex ].value ; |
} |
// Moves the selected option by a number of steps (also negative) |
function ChangeOptionPosition( combo, steps ) |
{ |
var iActualIndex = combo.selectedIndex ; |
if ( iActualIndex < 0 ) |
return ; |
var iFinalIndex = iActualIndex + steps ; |
if ( iFinalIndex < 0 ) |
iFinalIndex = 0 ; |
if ( iFinalIndex > ( combo.options.length - 1 ) ) |
iFinalIndex = combo.options.length - 1 ; |
if ( iActualIndex == iFinalIndex ) |
return ; |
var oOption = combo.options[ iActualIndex ] ; |
var sText = oOption.innerHTML ; |
var sValue = oOption.value ; |
combo.remove( iActualIndex ) ; |
oOption = AddComboOption( combo, sText, sValue, null, iFinalIndex ) ; |
oOption.selected = true ; |
} |
// Remove all selected options from a SELECT object |
function RemoveSelectedOptions(combo) |
{ |
// Save the selected index |
var iSelectedIndex = combo.selectedIndex ; |
var oOptions = combo.options ; |
// Remove all selected options |
for ( var i = oOptions.length - 1 ; i >= 0 ; i-- ) |
{ |
if (oOptions[i].selected) combo.remove(i) ; |
} |
// Reset the selection based on the original selected index |
if ( combo.options.length > 0 ) |
{ |
if ( iSelectedIndex >= combo.options.length ) iSelectedIndex = combo.options.length - 1 ; |
combo.selectedIndex = iSelectedIndex ; |
} |
} |
// Add a new option to a SELECT object (combo or list) |
function AddComboOption( combo, optionText, optionValue, documentObject, index ) |
{ |
var oOption ; |
if ( documentObject ) |
oOption = documentObject.createElement("OPTION") ; |
else |
oOption = document.createElement("OPTION") ; |
if ( index != null ) |
combo.options.add( oOption, index ) ; |
else |
combo.options.add( oOption ) ; |
oOption.innerHTML = optionText.length > 0 ? optionText : ' ' ; |
oOption.value = optionValue ; |
return oOption ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_universalkey/fck_universalkey.css |
---|
New file |
0,0 → 1,62 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fck_universalkey.css |
* CSS styles for the Universal Keyboard. |
* |
* File Authors: |
* Michel Staelens (michel.staelens@wanadoo.fr) |
* Bernadette Cierzniak |
* Abdul-Aziz Al-Oraij (top7up@hotmail.com) |
*/ |
BODY, TEXTAREA, INPUT, TD, SELECT |
{ |
font-family: Tahoma,verdana,arial,sans-serif; |
} |
DIV |
{ |
position: absolute; |
} |
.simple |
{ |
font-size: 11pt; |
} |
.double |
{ |
font-size: 9pt; |
} |
.simpledia |
{ |
color: red; |
font-size: 11pt; |
} |
.doubledia |
{ |
color: red; |
font-size: 9pt; |
} |
.action |
{ |
color: white; |
font-size: 7pt; |
} |
.clavier |
{ |
color: blue; |
font-size: 7pt; |
} |
.sign |
{ |
color: gray; |
font-size: 7pt; |
} |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_universalkey/multihexa.js |
---|
New file |
0,0 → 1,309 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: multihexa.js |
* Scripts for the fck_universalkey.html page. |
* Definition des 104 caracteres en hexa unicode. |
* |
* File Authors: |
* Michel Staelens (michel.staelens@wanadoo.fr) |
* Bernadette Cierzniak |
* Abdul-Aziz Al-Oraij (top7up@hotmail.com) |
*/ |
var caps=0, lock=0, hexchars="0123456789ABCDEF", accent="0000", keydeb=0 |
var key=new Array();j=0;for (i in Maj){key[j]=i;j++} |
var ns6=((!document.all)&&(document.getElementById)) |
var ie=document.all |
var langue=getCk(); |
if (langue==""){ |
langue=key[keydeb] |
} |
CarMaj=Maj[langue].split("|");CarMin=Min[langue].split("|") |
/*unikey*/ |
var posUniKeyLeft=0, posUniKeyTop=0 |
if (ns6){posUniKeyLeft=0;posUniKeyTop=60} |
else if (ie){posUniKeyLeft=0;posUniKeyTop=60} |
tracer("fond",posUniKeyLeft,posUniKeyTop,'<img src="fck_universalkey/keyboard_layout.gif" width=404 height=152 border="0"><br />',"sign") |
/*touches*/ |
var posX=new Array(0,28,56,84,112,140,168,196,224,252,280,308,336,42,70,98,126,154,182,210,238,266,294,322,350,50,78,106,134,162,190,218,246,274,302,330,64,92,120,148,176,204,232,260,288,316,28,56,84,294,322,350) |
var posY=new Array(14,14,14,14,14,14,14,14,14,14,14,14,14,42,42,42,42,42,42,42,42,42,42,42,42,70,70,70,70,70,70,70,70,70,70,70,98,98,98,98,98,98,98,98,98,98,126,126,126,126,126,126) |
var nbTouches=52 |
for (i=0;i<nbTouches;i++){ |
CarMaj[i]=((CarMaj[i]!="0000")?(fromhexby4tocar(CarMaj[i])):"") |
CarMin[i]=((CarMin[i]!="0000")?(fromhexby4tocar(CarMin[i])):"") |
if (CarMaj[i]==CarMin[i].toUpperCase()){ |
cecar=((lock==0)&&(caps==0)?CarMin[i]:CarMaj[i]) |
tracer("car"+i,posUniKeyLeft+6+posX[i],posUniKeyTop+3+posY[i],cecar,((dia[hexa(cecar)]!=null)?"simpledia":"simple")) |
tracer("majus"+i,posUniKeyLeft+15+posX[i],posUniKeyTop+1+posY[i]," ","double") |
tracer("minus"+i,posUniKeyLeft+3+posX[i],posUniKeyTop+9+posY[i]," ","double") |
} |
else{ |
tracer("car"+i,posUniKeyLeft+6+posX[i],posUniKeyTop+3+posY[i]," ","simple") |
cecar=CarMin[i] |
tracer("minus"+i,posUniKeyLeft+3+posX[i],posUniKeyTop+9+posY[i],cecar,((dia[hexa(cecar)]!=null)?"doubledia":"double")) |
cecar=CarMaj[i] |
tracer("majus"+i,posUniKeyLeft+15+posX[i],posUniKeyTop+1+posY[i],cecar,((dia[hexa(cecar)]!=null)?"doubledia":"double")) |
} |
} |
/*touches de fonctions*/ |
var actC1=new Array(0,371,364,0,378,0,358,0,344,0,112,378) |
var actC2=new Array(0,0,14,42,42,70,70,98,98,126,126,126) |
var actC3=new Array(32,403,403,39,403,47,403,61,403,25,291,403) |
var actC4=new Array(11,11,39,67,67,95,95,123,123,151,151,151) |
var act =new Array(" « KB"," KB » ","Delete","Clear","Back","Caps<br> Lock","Enter","Shift","Shift","<|<","Space",">|>") |
var effet=new Array("keyscroll(-3)","keyscroll(3)","faire(\"del\")","RAZ()","faire(\"bck\")","bloq()","faire(\"\\n\")","haut()","haut()","faire(\"ar\")","faire(\" \")","faire(\"av\")") |
var nbActions=12 |
for (i=0;i<nbActions;i++){ |
tracer("act"+i,posUniKeyLeft+1+actC1[i],posUniKeyTop-1+actC2[i],act[i],"action") |
} |
/*navigation*/ |
var keyC1=new Array(35,119,203,287) |
var keyC2=new Array(0,0,0,0) |
var keyC3=new Array(116,200,284,368) |
var keyC4=new Array(11,11,11,11) |
for (i=0;i<4;i++){ |
tracer("key"+i,posUniKeyLeft+5+keyC1[i],posUniKeyTop-1+keyC2[i],key[i],"unikey") |
} |
/*zones reactives*/ |
tracer("masque",posUniKeyLeft,posUniKeyTop,'<img src="fck_universalkey/00.gif" width=404 height=152 border="0" usemap="#unikey">') |
document.write('<map name="unikey">') |
for (i=0;i<nbTouches;i++){ |
document.write('<area coords="'+posX[i]+','+posY[i]+','+(posX[i]+25)+','+(posY[i]+25)+'" href=# onClick=\'javascript:ecrire('+i+')\'>') |
} |
for (i=0;i<nbActions;i++){ |
document.write('<area coords="'+actC1[i]+','+actC2[i]+','+actC3[i]+','+actC4[i]+'" href=# onClick=\'javascript:'+effet[i]+'\'>') |
} |
for (i=0;i<4;i++){ |
document.write('<area coords="'+keyC1[i]+','+keyC2[i]+','+keyC3[i]+','+keyC4[i]+'" onclick=\'javascript:charger('+i+')\'>') |
} |
document.write('</map>') |
/*fonctions*/ |
function ecrire(i){ |
txt=rechercher()+"|";subtxt=txt.split("|") |
ceci=(lock==1)?CarMaj[i]:((caps==1)?CarMaj[i]:CarMin[i]) |
if (test(ceci)){subtxt[0]+=cardia(ceci);distinguer(false)} |
else if(dia[accent]!=null&&dia[hexa(ceci)]!=null){distinguer(false);accent=hexa(ceci);distinguer(true)} |
else if(dia[accent]!=null){subtxt[0]+=fromhexby4tocar(accent)+ceci;distinguer(false)} |
else if(dia[hexa(ceci)]!=null){accent=hexa(ceci);distinguer(true)} |
else {subtxt[0]+=ceci} |
txt=subtxt[0]+"|"+subtxt[1] |
afficher(txt) |
if (caps==1){caps=0;MinusMajus()} |
} |
function faire(ceci){ |
txt=rechercher()+"|";subtxt=txt.split("|") |
l0=subtxt[0].length |
l1=subtxt[1].length |
c1=subtxt[0].substring(0,(l0-2)) |
c2=subtxt[0].substring(0,(l0-1)) |
c3=subtxt[1].substring(0,1) |
c4=subtxt[1].substring(0,2) |
c5=subtxt[0].substring((l0-2),l0) |
c6=subtxt[0].substring((l0-1),l0) |
c7=subtxt[1].substring(1,l1) |
c8=subtxt[1].substring(2,l1) |
if(dia[accent]!=null){if(ceci==" "){ceci=fromhexby4tocar(accent)}distinguer(false)} |
switch (ceci){ |
case("av") :if(escape(c4)!="%0D%0A"){txt=subtxt[0]+c3+"|"+c7}else{txt=subtxt[0]+c4+"|"+c8}break |
case("ar") :if(escape(c5)!="%0D%0A"){txt=c2+"|"+c6+subtxt[1]}else{txt=c1+"|"+c5+subtxt[1]}break |
case("bck"):if(escape(c5)!="%0D%0A"){txt=c2+"|"+subtxt[1]}else{txt=c1+"|"+subtxt[1]}break |
case("del"):if(escape(c4)!="%0D%0A"){txt=subtxt[0]+"|"+c7}else{txt=subtxt[0]+"|"+c8}break |
default:txt=subtxt[0]+ceci+"|"+subtxt[1];break |
} |
afficher(txt) |
} |
function RAZ(){txt="";if(dia[accent]!=null){distinguer(false)}afficher(txt)} |
function haut(){caps=1;MinusMajus()} |
function bloq(){lock=(lock==1)?0:1;MinusMajus()} |
/*fonctions de traitement du unikey*/ |
function tracer(nom,gauche,haut,ceci,classe){ceci="<span class="+classe+">"+ceci+"</span>";document.write('<div id="'+nom+'" >'+ceci+'</div>');if (ns6){document.getElementById(nom).style.left=gauche+"px";document.getElementById(nom).style.top=haut+"px";}else if (ie){document.all(nom).style.left=gauche;document.all(nom).style.top=haut}} |
function retracer(nom,ceci,classe){ceci="<span class="+classe+">"+ceci+"</span>";if (ns6){document.getElementById(nom).innerHTML=ceci}else if (ie){doc=document.all(nom);doc.innerHTML=ceci}} |
function keyscroll(n){ |
keydeb+=n |
if (keydeb<0){ |
keydeb=0 |
} |
if (keydeb>key.length-4){ |
keydeb=key.length-4 |
} |
for (i=keydeb;i<keydeb+4;i++){ |
retracer("key"+(i-keydeb),key[i],"unikey") |
} |
if (keydeb==0){ |
retracer("act0"," ","action") |
}else { |
retracer("act0",act[0],"action") |
} |
if (keydeb==key.length-4){ |
retracer("act1"," ","action") |
}else { |
retracer("act1",act[1],"action") |
} |
} |
function charger(i){ |
langue=key[i+keydeb];setCk(langue);accent="0000" |
CarMaj=Maj[langue].split("|");CarMin=Min[langue].split("|") |
for (i=0;i<nbTouches;i++){ |
CarMaj[i]=((CarMaj[i]!="0000")?(fromhexby4tocar(CarMaj[i])):"") |
CarMin[i]=((CarMin[i]!="0000")?(fromhexby4tocar(CarMin[i])):"") |
if (CarMaj[i]==CarMin[i].toUpperCase()){ |
cecar=((lock==0)&&(caps==0)?CarMin[i]:CarMaj[i]) |
retracer("car"+i,cecar,((dia[hexa(cecar)]!=null)?"simpledia":"simple")) |
retracer("minus"+i," ") |
retracer("majus"+i," ") |
} |
else{ |
retracer("car"+i," ") |
cecar=CarMin[i] |
retracer("minus"+i,cecar,((dia[hexa(cecar)]!=null)?"doubledia":"double")) |
cecar=CarMaj[i] |
retracer("majus"+i,cecar,((dia[hexa(cecar)]!=null)?"doubledia":"double")) |
} |
} |
} |
function distinguer(oui){ |
for (i=0;i<nbTouches;i++){ |
if (CarMaj[i]==CarMin[i].toUpperCase()){ |
cecar=((lock==0)&&(caps==0)?CarMin[i]:CarMaj[i]) |
if(test(cecar)){retracer("car"+i,oui?(cardia(cecar)):cecar,oui?"simpledia":"simple")} |
} |
else{ |
cecar=CarMin[i] |
if(test(cecar)){retracer("minus"+i,oui?(cardia(cecar)):cecar,oui?"doubledia":"double")} |
cecar=CarMaj[i] |
if(test(cecar)){retracer("majus"+i,oui?(cardia(cecar)):cecar,oui?"doubledia":"double")} |
} |
} |
if (!oui){accent="0000"} |
} |
function MinusMajus(){ |
for (i=0;i<nbTouches;i++){ |
if (CarMaj[i]==CarMin[i].toUpperCase()){ |
cecar=((lock==0)&&(caps==0)?CarMin[i]:CarMaj[i]) |
retracer("car"+i,(test(cecar)?cardia(cecar):cecar),((dia[hexa(cecar)]!=null||test(cecar))?"simpledia":"simple")) |
} |
} |
} |
function test(cecar){return(dia[accent]!=null&&dia[accent][hexa(cecar)]!=null)} |
function cardia(cecar){return(fromhexby4tocar(dia[accent][hexa(cecar)]))} |
function fromhex(inval){out=0;for (a=inval.length-1;a>=0;a--){out+=Math.pow(16,inval.length-a-1)*hexchars.indexOf(inval.charAt(a))}return out} |
function fromhexby4tocar(ceci){out4=new String();for (l=0;l<ceci.length;l+=4){out4+=String.fromCharCode(fromhex(ceci.substring(l,l+4)))}return out4} |
function tohex(inval){return hexchars.charAt(inval/16)+hexchars.charAt(inval%16)} |
function tohex2(inval){return tohex(inval/256)+tohex(inval%256)} |
function hexa(ceci){out="";for (k=0;k<ceci.length;k++){out+=(tohex2(ceci.charCodeAt(k)))}return out} |
function getCk(){ |
fromN=document.cookie.indexOf("langue=")+0; |
if((fromN)!=-1){ |
fromN+=7; |
toN=document.cookie.indexOf(";",fromN)+0; |
if(toN==-1){ |
toN=document.cookie.length |
} |
return unescape(document.cookie.substring(fromN,toN)) |
} |
return "" |
} |
function setCk(inval){ |
if(inval!=null){ |
exp=new Date(); |
time=365*60*60*24*1000; |
exp.setTime(exp.getTime()+time); |
document.cookie=escape("langue")+"="+escape(inval)+"; "+"expires="+exp.toGMTString() |
} |
} |
// Arabic Keystroke Translator |
function arkey(e) { |
if ((document.layers)|(navigator.userAgent.indexOf("MSIE 4")>-1)|(langue!="Arabic")) return true; |
if (!e) var e = window.event; |
if (e.keyCode) keyCode = e.keyCode; |
else if (e.which) keyCode = e.which; |
var character = String.fromCharCode(keyCode); |
entry = true; |
cont=e.srcElement || e.currentTarget || e.target; |
if (keyCode>64 && keyCode<91) { |
entry=false; |
source='ش لاؤ ي ث ب ل ا ه ت ن م ة ى خ ح ض ق س ف ع ر ص ء غ ئ '; |
shsource='Ù ÙØ¢} ] Ù [ Ùأأ ÷ Ù Ø / Ø¢ × Ø Ù Ù Ù ÙØ¥ { ٠٠إ ~'; |
if (e.shiftKey) cont.value += shsource.substr((keyCode-64)*2-2,2); |
else |
cont.value += source.substr((keyCode-64)*2-2,2); |
if (cont.value.substr(cont.value.length-1,1)==' ') cont.value=cont.value.substr(0,cont.value.length-1); |
} |
if (e.shiftKey) { |
if (keyCode==186) {cont.value += ':';entry=false;} |
if (keyCode==188) {cont.value += ',';entry=false;} |
if (keyCode==190) {cont.value += '.';entry=false;} |
if (keyCode==191) {cont.value += '؟';entry=false;} |
if (keyCode==192) {cont.value += 'ّ';entry=false;} |
if (keyCode==219) {cont.value += '<';entry=false;} |
if (keyCode==221) {cont.value += '>';entry=false;} |
} else { |
if (keyCode==186||keyCode==59) {cont.value += 'ك';entry=false;} |
if (keyCode==188) {cont.value += 'و';entry=false;} |
if (keyCode==190) {cont.value += 'ز';entry=false;} |
if (keyCode==191) {cont.value += 'ظ';entry=false;} |
if (keyCode==192) {cont.value += 'ذ';entry=false;} |
if (keyCode==219) {cont.value += 'ج';entry=false;} |
if (keyCode==221) {cont.value += 'د';entry=false;} |
if (keyCode==222) {cont.value += 'ط';entry=false;} |
} |
return entry; |
} |
function hold_it(e){ |
if ((document.layers)|(navigator.userAgent.indexOf("MSIE 4")>-1)|(langue!="Arabic")) return true; |
var keyCode; |
if (!e) var e = window.event; |
if (e.keyCode) keyCode = e.keyCode; |
else if (e.which) keyCode = e.which; |
var character = String.fromCharCode(keyCode); |
switch(keyCode){ |
case 186: |
case 188: |
case 190: |
case 191: |
case 192: |
case 219: |
case 221: |
case 222: |
case 116: |
case 59: |
case 47: |
case 46: |
case 44: |
case 39: |
return false; |
case 92: |
return true; |
} |
if (keyCode<63) return true; |
return false; |
} |
var obj = document.getElementById( 'uni_area' ); |
if ( obj && langue=="Arabic"){ |
with (navigator) { |
if (appName=="Netscape") |
obj.onkeypress = hold_it; |
} |
obj.onkeydown = arkey; |
} |
// Arabic Keystroke Translator End |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_universalkey/keyboard_layout.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_universalkey/keyboard_layout.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_universalkey/00.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_universalkey/00.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_universalkey/data.js |
---|
New file |
0,0 → 1,73 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: data.js |
* Scripts for the fck_universalkey.html page. |
* Definition des 104 caracteres en hexa unicode. |
* |
* File Authors: |
* Michel Staelens (michel.staelens@wanadoo.fr) |
* Abdul-Aziz Al-Oraij (top7up@hotmail.com) |
* Bo Brandt (bbr@dynamicweb.dk) |
*/ |
var Maj = new Array() ; |
var Min = new Array() ; |
Maj["Arabic"] ="0651|0021|0040|0023|0024|0025|005E|0026|002A|0029|0028|005F|002B|064E|064B|064F|064C|0625|0625|2018|00F7|00D7|061B|003C|003E|0650|064D|005D|005B|0623|0623|0640|060C|002F|003A|0022|007E|0652|007D|007B|0622|0622|2019|002C|002E|061F|007C|0020|0020|0020|0020|0020" ; |
Min["Arabic"] ="0630|0031|0032|0033|0034|0035|0036|0037|0038|0039|0030|002D|003D|0636|0635|062B|0642|0641|063A|0639|0647|062E|062D|062C|062F|0634|0633|064A|0628|0644|0627|062A|0646|0645|0643|0637|0626|0621|0624|0631|0644|0627|0649|0629|0648|0632|0638|005C|0020|0020|0020|0020" ; |
Maj["Belarusian (C)"] ="0401|0021|0022|2116|003B|0025|003A|003F|002A|0028|0029|005F|002B|0419|0426|0423|041A|0415|041D|0413|0428|040E|0417|0425|0027|0424|042B|0412|0410|041F|0420|041E|041B|0414|0416|042D|042F|0427|0421|041C|0406|0422|042C|0411|042E|002C|0020|0020|0020|0020|0020|0020" ; |
Min["Belarusian (C)"] ="0451|0031|0032|0033|0034|0035|0036|0037|0038|0039|0030|002D|003D|0439|0446|0443|043A|0435|043D|0433|0448|045E|0437|0445|0027|0444|044B|0432|0430|043F|0440|043E|043B|0434|0436|044D|044F|0447|0441|043C|0456|0442|044C|0431|044E|002E|0020|0020|0020|0020|0020|0020" ; |
Maj["Bulgarian (C)"] ="007E|0021|003F|002B|0022|0025|003D|003A|002F|005F|2116|0406|0056|044B|0423|0415|0418|0428|0429|041A|0421|0414|0417|0426|00A7|042C|042F|0410|041E|0416|0413|0422|041D|0412|041C|0427|042E|0419|042A|042D|0424|0425|041F|0420|041B|0411|0029|0020|0020|0020|0020|0020" ; |
Min["Bulgarian (C)"] ="0060|0031|0032|0033|0034|0035|0036|0037|0038|0039|0030|002D|002E|002C|0443|0435|0438|0448|0449|043A|0441|0434|0437|0446|003B|044C|044F|0430|043E|0436|0433|0442|043D|0432|043C|0447|044E|0439|044A|044D|0444|0445|043F|0440|043B|0431|0028|0020|0020|0020|0020|0020" ; |
Maj["Croatian (L)"] ="00B8|0021|0022|0023|0024|0025|0026|002F|0028|0029|003D|003F|00A8|0051|0057|0045|0052|0054|005A|0055|0049|004F|0050|0160|0110|0041|0053|0044|0046|0047|0048|004A|004B|004C|010C|0106|0059|0058|0043|0056|0042|004E|004D|017D|003B|003A|003C|003E|005F|002D|002A|002B" ; |
Min["Croatian (L)"] ="00B8|0031|0032|0033|0034|0035|0036|0037|0038|0039|0030|0027|00A8|0071|0077|0065|0072|0074|007A|0075|0069|006F|0070|0161|0111|0061|0073|0064|0066|0067|0068|006A|006B|006C|010D|0107|0079|0078|0063|0076|0062|006E|006D|017E|002C|002E|003C|003E|005F|002D|002A|002B" ; |
Maj["Czech (L)"] ="00B0|0031|0032|0033|0034|0035|0036|0037|0038|0039|0030|0025|02C7|0051|0057|0045|0052|0054|005A|0055|0049|004F|0050|002F|0028|0041|0053|0044|0046|0047|0048|004A|004B|004C|0022|0027|0059|0058|0043|0056|0042|004E|004D|003F|003A|005F|005B|007B|0021|0020|0148|010F" ; |
Min["Czech (L)"] ="003B|002B|011B|0161|010D|0159|017E|00FD|00E1|00ED|00E9|003D|00B4|0071|0077|0065|0072|0074|007A|0075|0069|006F|0070|00FA|0029|0061|0073|0064|0066|0067|0068|006A|006B|006C|016F|00A7|0079|0078|0063|0076|0062|006E|006D|002C|002E|002D|005D|007D|00A8|0040|00F3|0165" ; |
Maj["Danish (L)"] ="00A7|0021|0022|0023|00A4|0025|0026|002F|0028|0029|003D|003F|0060|0051|0057|0045|0052|0054|0059|0055|0049|004F|0050|00C5|005E|0041|0053|0044|0046|0047|0048|004A|004B|004C|00C6|00D8|003E|005A|0058|0043|0056|0042|004E|004D|003B|003A|002A|005F|007B|007D|005C|007E" ; |
Min["Danish (L)"] ="00BD|0031|0032|0033|0034|0035|0036|0037|0038|0039|0030|002B|00B4|0071|0077|0065|0072|0074|0079|0075|0069|006F|0070|00E5|00A8|0061|0073|0064|0066|0067|0068|006A|006B|006C|00E6|00F8|003C|007A|0078|0063|0076|0062|006E|006D|002C|002E|0027|002D|005B|005D|007C|0040" ; |
Maj["Diacritical (L)"] ="0060|00B4|005E|00A8|007E|00B0|00B7|00B8|00AF|02D9|02DB|02C7|02D8|0051|0057|0045|0052|0054|005A|0055|0049|004F|0050|00C6|02DD|0041|0053|0044|0046|0047|0048|004A|004B|004C|0141|0152|0059|0058|0043|0056|0042|004E|004D|01A0|01AF|00D8|0126|0110|0132|00DE|00D0|00DF" ; |
Min["Diacritical (L)"] ="0060|00B4|005E|00A8|007E|00B0|00B7|00B8|00AF|02D9|02DB|02C7|02D8|0071|0077|0065|0072|0074|007A|0075|0069|006F|0070|00E6|02DD|0061|0073|0064|0066|0067|0068|006A|006B|006C|0142|0153|0079|0078|0063|0076|0062|006E|006D|01A1|01B0|00F8|0127|0111|0133|00FE|00F0|00DF" ; |
Maj["Finnish (L)"] ="00A7|0021|0022|0023|00A4|0025|0026|002F|0028|0029|003D|003F|0060|0051|0057|0045|0052|0054|0059|0055|0049|004F|0050|00C5|005E|0041|0053|0044|0046|0047|0048|004A|004B|004C|00D6|00C4|003E|005A|0058|0043|0056|0042|004E|004D|003B|003A|002A|005F|007B|007D|005C|007E" ; |
Min["Finnish (L)"] ="00BD|0031|0032|0033|0034|0035|0036|0037|0038|0039|0030|002B|00B4|0071|0077|0065|0072|0074|0079|0075|0069|006F|0070|00E5|00A8|0061|0073|0064|0066|0067|0068|006A|006B|006C|00F6|00E4|003C|007A|0078|0063|0076|0062|006E|006D|002C|002E|0027|002D|005B|005D|007C|0040" ; |
Maj["French (L)"] ="0031|0032|0033|0034|0035|0036|0037|0038|0039|0030|00B0|002B|0023|0041|005A|0045|0052|0054|0059|0055|0049|004F|0050|00A8|0025|0051|0053|0044|0046|0047|0048|004A|004B|004C|004D|00B5|0057|0058|0043|0056|0042|004E|003F|002E|002F|00A7|003C|005B|007B|00A3|007E|0020" ; |
Min["French (L)"] ="0026|00E9|0022|0027|0028|002D|00E8|005F|00E7|00E0|0029|003D|0040|0061|007A|0065|0072|0074|0079|0075|0069|006F|0070|005E|00F9|0071|0073|0064|0066|0067|0068|006A|006B|006C|006D|002A|0077|0078|0063|0076|0062|006E|002C|003B|003A|0021|003E|005D|007D|0024|007E|0020" ; |
Maj["Greek"] ="007E|0021|0040|0023|0024|0025|0390|0026|03B0|0028|0029|005F|002B|003A|03A3|0395|03A1|03A4|03A5|0398|0399|039F|03A0|0386|038F|0391|03A3|0394|03A6|0393|0397|039E|039A|039B|038C|0022|0396|03A7|03A8|03A9|0392|039D|039C|003C|003E|003F|0388|0389|038A|03AA|03AB|038E" ; |
Min["Greek"] ="0060|0031|0032|0033|0034|0035|0036|0037|0038|0039|0030|002D|003D|003B|03C2|03B5|03C1|03C4|03C5|03B8|03B9|03BF|03C0|03AC|03CE|03B1|03C3|03B4|03C6|03B3|03B7|03BE|03BA|03BB|03CC|0027|03B6|03C7|03C8|03C9|03B2|03BD|03BC|002C|002E|002F|03AD|03AE|03AF|03CA|03CB|03CD" ; |
Maj["Hebrew"] ="007E|0021|0040|0023|0024|0025|005E|0026|002A|0028|0029|005F|002B|0051|0057|0045|0052|0054|0059|0055|0049|004F|0050|007B|007D|0041|0053|0044|0046|0047|0048|004A|004B|004C|003A|0022|005A|0058|0043|0056|0042|004E|004D|003C|003E|003F|0020|0020|0020|0020|0020|0020" ; |
Min["Hebrew"] ="0060|0031|0032|0033|0034|0035|0036|0037|0038|0039|0030|002D|003D|002F|0027|05E7|05E8|05D0|05D8|05D5|05DF|05DD|05E4|005B|005D|05E9|05D3|05D2|05DB|05E2|05D9|05D7|05DC|05DA|05E3|002C|05D6|05E1|05D1|05D4|05E0|05DE|05E6|05EA|05E5|002E|0020|0020|0020|0020|0020|0020" ; |
Maj["Hungarian (L)"] ="00A7|0027|0022|002B|0021|0025|002F|003D|0028|0029|00ED|00DC|00D3|0051|0057|0045|0052|0054|005A|0055|0049|004F|0050|0150|00DA|0041|0053|0044|0046|0047|0048|004A|004B|004C|00C9|00C1|0170|00CD|0059|0058|0043|0056|0042|004E|004D|003F|002E|003A|002D|005F|007B|007D" ; |
Min["Hungarian (L)"] ="0030|0031|0032|0033|0034|0035|0036|0037|0038|0039|00F6|00FC|00F3|0071|0077|0065|0072|0074|007A|0075|0069|006F|0070|0151|00FA|0061|0073|0064|0066|0067|0068|006A|006B|006C|00E9|00E1|0171|00ED|0079|0078|0063|0076|0062|006E|006D|002C|002E|003A|002D|005F|007B|007D" ; |
Maj["Macedonian (C)"] ="007E|0021|201E|201C|2019|0025|2018|0026|002A|0028|0029|005F|002B|0409|040A|0415|0420|0422|0405|0423|0418|041E|041F|0428|0403|0410|0421|0414|0424|0413|0425|0408|041A|041B|0427|040C|0401|0417|040F|0426|0412|0411|041D|041C|0416|003B|003A|003F|002A|005F|007B|007D" ; |
Min["Macedonian (C)"] ="0060|0031|0032|0033|0034|0035|0036|0037|0038|0039|0030|002D|003D|0459|045A|0435|0440|0442|0455|0443|0438|043E|043F|0448|0453|0430|0441|0434|0444|0433|0445|0458|043A|043B|0447|045C|0451|0437|045F|0446|0432|0431|043D|043C|0436|002C|002E|002F|0027|002D|005B|005D" ; |
Maj["Norwegian (L)"] ="00A7|0021|0022|0023|00A4|0025|0026|002F|0028|0029|003D|003F|0060|0051|0057|0045|0052|0054|0059|0055|0049|004F|0050|00C5|005E|0041|0053|0044|0046|0047|0048|004A|004B|00D8|00C6|00C4|003E|005A|0058|0043|0056|0042|004E|004D|003B|003A|002A|005F|007B|007D|005C|007E" ; |
Min["Norwegian (L)"] ="00BD|0031|0032|0033|0034|0035|0036|0037|0038|0039|0030|002B|00B4|0071|0077|0065|0072|0074|0079|0075|0069|006F|0070|00E5|00A8|0061|0073|0064|0066|0067|0068|006A|006B|00F8|00E6|00E4|003C|007A|0078|0063|0076|0062|006E|006D|002C|002E|0027|002D|005B|005D|007C|0040" ; |
Maj["Persian"] ="200D|0021|066C|066B|FDFC|066A|00D7|060C|002A|0029|0028|0640|002B|0652|064C|064D|064B|064F|0650|064E|0651|005D|005B|007D|007B|0624|0626|064A|0625|0623|0622|0629|00BB|00AB|003A|061B|0643|0020|0698|0670|200C|0654|0621|003E|003C|061F|007C|0020|0020|0020|0020|0020" ; |
Min["Persian"] ="200D|06F1|06F2|06F3|06F4|06F5|06F6|06F7|06F8|06F9|06F0|002D|003D|0636|0635|062B|0642|0641|063A|0639|0647|062E|062D|062C|0686|0634|0633|06CC|0628|0644|0627|062A|0646|0645|06A9|06AF|0638|0637|0632|0631|0630|062F|067E|0648|002E|002F|005C|0020|0020|0020|0020|0020" ; |
Maj["Polish (L)"] ="002A|0021|0022|0023|00A4|0025|0026|002F|0028|0029|003D|003F|017A|0051|0057|0045|0052|0054|005A|0055|0049|004F|0050|0144|0107|0041|0053|0044|0046|0047|0048|004A|004B|004C|0141|0119|0059|0058|0043|0056|0042|004E|004D|003B|003A|005F|003C|005B|007B|02D9|00B4|02DB" ; |
Min["Polish (L)"] ="0027|0031|0032|0033|0034|0035|0036|0037|0038|0039|0030|002B|00F3|0071|0077|0065|0072|0074|007A|0075|0069|006F|0070|017C|015B|0061|0073|0064|0066|0067|0068|006A|006B|006C|0142|0105|0079|0078|0063|0076|0062|006E|006D|002C|002E|002D|003E|005D|007D|02D9|00B4|02DB" ; |
Maj["Portuguese (L)"] ="007C|0021|0022|0023|0024|0025|0026|002F|0028|0029|003D|003F|00BB|0051|0057|0045|0052|0054|0059|0055|0049|004F|0050|002A|0060|0041|0053|0044|0046|0047|0048|004A|004B|004C|00C7|00AA|003E|005A|0058|0043|0056|0042|004E|004D|003B|003A|005E|007B|007D|00A7|20AC|005F" ; |
Min["Portuguese (L)"] ="005C|0031|0032|0033|0034|0035|0036|0037|0038|0039|0030|0027|00AB|0071|0077|0065|0072|0074|0079|0075|0069|006F|0070|002B|00B4|0061|0073|0064|0066|0067|0068|006A|006B|006C|00E7|00BA|003C|007A|0078|0063|0076|0062|006E|006D|002C|002E|007E|005B|005D|00A8|0040|002D" ; |
Maj["Russian (C)"] ="0401|0021|0040|0023|2116|0025|005E|0026|002A|0028|0029|005F|002B|0419|0426|0423|041A|0415|041D|0413|0428|0429|0417|0425|042A|0424|042B|0412|0410|041F|0420|041E|041B|0414|0416|042D|042F|0427|0421|041C|0418|0422|042C|0411|042E|003E|002E|003A|0022|005B|005D|003F" ; |
Min["Russian (C)"] ="0451|0031|0032|0033|0034|0035|0036|0037|0038|0039|0030|002D|003D|0439|0446|0443|043A|0435|043D|0433|0448|0449|0437|0445|044A|0444|044B|0432|0430|043F|0440|043E|043B|0434|0436|044D|044F|0447|0441|043C|0438|0442|044C|0431|044E|003C|002C|003B|0027|007B|007D|002F" ; |
Maj["Serbian (C)"] ="007E|0021|0022|0023|0024|0025|0026|002F|0028|0029|003D|003F|002A|0409|040A|0415|0420|0422|0417|0423|0418|041E|041F|0428|0402|0410|0421|0414|0424|0413|0425|0408|041A|041B|0427|040B|003E|0405|040F|0426|0412|0411|041D|041C|0416|003A|005F|002E|003A|0022|005B|005D" ; |
Min["Serbian (C)"] ="0060|0031|0032|0033|0034|0035|0036|0037|0038|0039|0030|0027|002B|0459|045A|0435|0440|0442|0437|0443|0438|043E|043F|0448|0452|0430|0441|0434|0444|0433|0445|0458|043A|043B|0447|045B|003C|0455|045F|0446|0432|0431|043D|043C|0436|002E|002D|002C|003B|0027|007B|007D" ; |
Maj["Serbian (L)"] ="007E|0021|0022|0023|0024|0025|0026|002F|0028|0029|003D|003F|002A|0051|0057|0045|0052|0054|005A|0055|0049|004F|0050|0160|0110|0041|0053|0044|0046|0047|0048|004A|004B|004C|010C|0106|003E|0059|0058|0043|0056|0042|004E|004D|017D|003A|005F|002E|003A|0022|005B|005D" ; |
Min["Serbian (L)"] ="201A|0031|0032|0033|0034|0035|0036|0037|0038|0039|0030|0027|002B|0071|0077|0065|0072|0074|007A|0075|0069|006F|0070|0161|0111|0061|0073|0064|0066|0067|0068|006A|006B|006C|010D|0107|003C|0079|0078|0063|0076|0062|006E|006D|017E|002E|002D|002C|003B|0027|007B|007D" ; |
Maj["Slovak (L)"] ="00B0|0031|0032|0033|0034|0035|0036|0037|0038|0039|0030|0025|02C7|0051|0057|0045|0052|0054|005A|0055|0049|004F|0050|002F|0028|0041|0053|0044|0046|0047|0048|004A|004B|004C|0022|0021|0059|0058|0043|0056|0042|004E|004D|003F|003A|005F|003C|005B|010F|0029|002A|0020" ; |
Min["Slovak (L)"] ="003B|002B|013E|0161|010D|0165|017E|00FD|00E1|00ED|00E9|003D|00B4|0071|0077|0065|0072|0074|007A|0075|0069|006F|0070|00FA|00E4|0061|0073|0064|0066|0067|0068|006A|006B|006C|00F4|00A7|0079|0078|0063|0076|0062|006E|006D|002C|002E|002D|003E|005D|00F3|0148|0026|0020" ; |
Maj["Spanish (L)"] ="00AA|0021|0022|00B7|0024|0025|0026|002F|0028|0029|003D|003F|00BF|0051|0057|0045|0052|0054|0059|0055|0049|004F|0050|005E|00A8|0041|0053|0044|0046|0047|0048|004A|004B|004C|00D1|00C7|005A|0058|0043|0056|0042|004E|004D|003B|003A|005F|003E|007C|0040|0023|007E|002A" ; |
Min["Spanish (L)"] ="00BA|0031|0032|0033|0034|0035|0036|0037|0038|0039|0030|0027|00A1|0071|0077|0065|0072|0074|0079|0075|0069|006F|0070|0060|00B4|0061|0073|0064|0066|0067|0068|006A|006B|006C|00F1|00E7|007A|0078|0063|0076|0062|006E|006D|002C|002E|002D|003C|005C|0040|0023|007E|002B" ; |
Maj["Ukrainian (C)"] ="0401|0021|0040|0023|2116|0025|005E|0026|002A|0028|0029|005F|002B|0419|0426|0423|041A|0415|041D|0413|0428|0429|0417|0425|0407|0424|0406|0412|0410|041F|0420|041E|041B|0414|0416|0404|0490|042F|0427|0421|041C|0418|0422|042C|0411|042E|002E|003A|0022|003C|003E|003F" ; |
Min["Ukrainian (C)"] ="0451|0031|0032|0033|0034|0035|0036|0037|0038|0039|0030|002D|003D|0439|0446|0443|043A|0435|043D|0433|0448|0449|0437|0445|0457|0444|0456|0432|0430|043F|0440|043E|043B|0434|0436|0454|0491|044F|0447|0441|043C|0438|0442|044C|0431|044E|002C|003B|0027|007B|007D|002F" ; |
Maj["Vietnamese (L)"] ="007E|0021|0040|0023|0024|0025|005E|0026|002A|0028|0029|005F|002B|0051|0057|0045|0052|0054|0059|0055|0049|004F|0050|01AF|01A0|0041|0053|0044|0046|0047|0048|004A|004B|004C|0102|00C2|005A|0058|0043|0056|0042|004E|004D|00CA|00D4|0110|003C|003E|003F|007D|003A|0022" ; |
Min["Vietnamese (L)"] ="20AB|0031|0032|0033|0034|0035|0036|0037|0038|0039|0030|002D|003D|0071|0077|0065|0072|0074|0079|0075|0069|006F|0070|01B0|01A1|0061|0073|0064|0066|0067|0068|006A|006B|006C|0103|00E2|007A|0078|0063|0076|0062|006E|006D|00EA|00F4|0111|002C|002E|002F|007B|003B|0027" ; |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_universalkey/dialogue.js |
---|
New file |
0,0 → 1,31 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: dialogue.js |
* Scripts for the fck_universalkey.html page. |
* |
* File Authors: |
* Michel Staelens (michel.staelens@wanadoo.fr) |
* Bernadette Cierzniak |
* Abdul-Aziz Al-Oraij (top7up@hotmail.com) |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
function afficher(txt) |
{ |
document.getElementById( 'uni_area' ).value = txt ; |
} |
function rechercher() |
{ |
return document.getElementById( 'uni_area' ).value ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_universalkey/diacritic.js |
---|
New file |
0,0 → 1,65 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: diacritic.js |
* Scripts for the fck_universalkey.html page. |
* |
* File Authors: |
* Michel Staelens (michel.staelens@wanadoo.fr) |
* Abdul-Aziz Al-Oraij (top7up@hotmail.com) |
*/ |
var dia = new Array() |
dia["0060"]=new Array();dia["00B4"]=new Array();dia["005E"]=new Array();dia["00A8"]=new Array();dia["007E"]=new Array();dia["00B0"]=new Array();dia["00B7"]=new Array();dia["00B8"]=new Array();dia["00AF"]=new Array();dia["02D9"]=new Array();dia["02DB"]=new Array();dia["02C7"]=new Array();dia["02D8"]=new Array();dia["02DD"]=new Array();dia["031B"]=new Array(); |
dia["0060"]["0061"]="00E0";dia["00B4"]["0061"]="00E1";dia["005E"]["0061"]="00E2";dia["00A8"]["0061"]="00E4";dia["007E"]["0061"]="00E3";dia["00B0"]["0061"]="00E5";dia["00AF"]["0061"]="0101";dia["02DB"]["0061"]="0105";dia["02D8"]["0061"]="0103"; |
dia["00B4"]["0063"]="0107";dia["005E"]["0063"]="0109";dia["00B8"]["0063"]="00E7";dia["02D9"]["0063"]="010B";dia["02C7"]["0063"]="010D"; |
dia["02C7"]["0064"]="010F"; |
dia["0060"]["0065"]="00E8";dia["00B4"]["0065"]="00E9";dia["005E"]["0065"]="00EA";dia["00A8"]["0065"]="00EB";dia["00AF"]["0065"]="0113";dia["02D9"]["0065"]="0117";dia["02DB"]["0065"]="0119";dia["02C7"]["0065"]="011B";dia["02D8"]["0065"]="0115"; |
dia["005E"]["0067"]="011D";dia["00B8"]["0067"]="0123";dia["02D9"]["0067"]="0121";dia["02D8"]["0067"]="011F"; |
dia["005E"]["0068"]="0125"; |
dia["0060"]["0069"]="00EC";dia["00B4"]["0069"]="00ED";dia["005E"]["0069"]="00EE";dia["00A8"]["0069"]="00EF";dia["007E"]["0069"]="0129";dia["00AF"]["0069"]="012B";dia["02DB"]["0069"]="012F";dia["02D8"]["0069"]="012D"; |
dia["005E"]["006A"]="0135"; |
dia["00B8"]["006B"]="0137"; |
dia["00B4"]["006C"]="013A";dia["00B7"]["006C"]="0140";dia["00B8"]["006C"]="013C";dia["02C7"]["006C"]="013E"; |
dia["00B4"]["006E"]="0144";dia["007E"]["006E"]="00F1";dia["00B8"]["006E"]="0146";dia["02D8"]["006E"]="0148"; |
dia["0060"]["006F"]="00F2";dia["00B4"]["006F"]="00F3";dia["005E"]["006F"]="00F4";dia["00A8"]["006F"]="00F6";dia["007E"]["006F"]="00F5";dia["00AF"]["006F"]="014D";dia["02D8"]["006F"]="014F";dia["02DD"]["006F"]="0151";dia["031B"]["006F"]="01A1"; |
dia["00B4"]["0072"]="0155";dia["00B8"]["0072"]="0157";dia["02C7"]["0072"]="0159"; |
dia["00B4"]["0073"]="015B";dia["005E"]["0073"]="015D";dia["00B8"]["0073"]="015F";dia["02C7"]["0073"]="0161"; |
dia["00B8"]["0074"]="0163";dia["02C7"]["0074"]="0165"; |
dia["0060"]["0075"]="00F9";dia["00B4"]["0075"]="00FA";dia["005E"]["0075"]="00FB";dia["00A8"]["0075"]="00FC";dia["007E"]["0075"]="0169";dia["00B0"]["0075"]="016F";dia["00AF"]["0075"]="016B";dia["02DB"]["0075"]="0173";dia["02D8"]["0075"]="016D";dia["02DD"]["0075"]="0171";dia["031B"]["0075"]="01B0"; |
dia["005E"]["0077"]="0175"; |
dia["00B4"]["0079"]="00FD";dia["005E"]["0079"]="0177";dia["00A8"]["0079"]="00FF"; |
dia["00B4"]["007A"]="017A";dia["02D9"]["007A"]="017C";dia["02C7"]["007A"]="017E"; |
dia["00B4"]["00E6"]="01FD"; |
dia["00B4"]["00F8"]="01FF"; |
dia["0060"]["0041"]="00C0";dia["00B4"]["0041"]="00C1";dia["005E"]["0041"]="00C2";dia["00A8"]["0041"]="00C4";dia["007E"]["0041"]="00C3";dia["00B0"]["0041"]="00C5";dia["00AF"]["0041"]="0100";dia["02DB"]["0041"]="0104";dia["02D8"]["0041"]="0102"; |
dia["00B4"]["0043"]="0106";dia["005E"]["0043"]="0108";dia["00B8"]["0043"]="00C7";dia["02D9"]["0043"]="010A";dia["02C7"]["0043"]="010C"; |
dia["02C7"]["0044"]="010E"; |
dia["0060"]["0045"]="00C8";dia["00B4"]["0045"]="00C9";dia["005E"]["0045"]="00CA";dia["00A8"]["0045"]="00CB";dia["00AF"]["0045"]="0112";dia["02D9"]["0045"]="0116";dia["02DB"]["0045"]="0118";dia["02C7"]["0045"]="011A";dia["02D8"]["0045"]="0114"; |
dia["005E"]["0047"]="011C";dia["00B8"]["0047"]="0122";dia["02D9"]["0047"]="0120";dia["02D8"]["0047"]="011E"; |
dia["005E"]["0048"]="0124"; |
dia["0060"]["0049"]="00CC";dia["00B4"]["0049"]="00CD";dia["005E"]["0049"]="00CE";dia["00A8"]["0049"]="00CF";dia["007E"]["0049"]="0128";dia["00AF"]["0049"]="012A";dia["02D9"]["0049"]="0130";dia["02DB"]["0049"]="012E";dia["02D8"]["0049"]="012C"; |
dia["005E"]["004A"]="0134"; |
dia["00B8"]["004B"]="0136"; |
dia["00B4"]["004C"]="0139";dia["00B7"]["004C"]="013F";dia["00B8"]["004C"]="013B";dia["02C7"]["004C"]="013D"; |
dia["00B4"]["004E"]="0143";dia["007E"]["004E"]="00D1";dia["00B8"]["004E"]="0145";dia["02D8"]["004E"]="0147"; |
dia["0060"]["004F"]="00D2";dia["00B4"]["004F"]="00D3";dia["005E"]["004F"]="00D4";dia["00A8"]["004F"]="00D6";dia["007E"]["004F"]="00D5";dia["00AF"]["004F"]="014C";dia["02D8"]["004F"]="014E";dia["02DD"]["004F"]="0150";dia["031B"]["004F"]="01A0"; |
dia["00B4"]["0052"]="0154";dia["00B8"]["0052"]="0156";dia["02C7"]["0052"]="0158"; |
dia["00B4"]["0053"]="015A";dia["005E"]["0053"]="015C";dia["00B8"]["0053"]="015E";dia["02C7"]["0053"]="0160"; |
dia["00B8"]["0054"]="0162";dia["02C7"]["0054"]="0164"; |
dia["0060"]["0055"]="00D9";dia["00B4"]["0055"]="00DA";dia["005E"]["0055"]="00DB";dia["00A8"]["0055"]="00DC";dia["007E"]["0055"]="0168";dia["00B0"]["0055"]="016E";dia["00AF"]["0055"]="016A";dia["02DB"]["0055"]="0172";dia["02D8"]["0055"]="016C";dia["02DD"]["0055"]="0170";dia["031B"]["0055"]="01AF"; |
dia["005E"]["0057"]="0174"; |
dia["00B4"]["0059"]="00DD";dia["005E"]["0059"]="0176";dia["00A8"]["0059"]="0178"; |
dia["00B4"]["005A"]="0179";dia["02D9"]["005A"]="017B";dia["02C7"]["005A"]="017D"; |
dia["00B4"]["00C6"]="01FC"; |
dia["00B4"]["00D8"]="01FE"; |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_image/fck_image.js |
---|
New file |
0,0 → 1,477 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fck_image.js |
* Scripts related to the Image dialog window (see fck_image.html). |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
var oEditor = window.parent.InnerDialogLoaded() ; |
var FCK = oEditor.FCK ; |
var FCKLang = oEditor.FCKLang ; |
var FCKConfig = oEditor.FCKConfig ; |
var FCKDebug = oEditor.FCKDebug ; |
var bImageButton = ( document.location.search.length > 0 && document.location.search.substr(1) == 'ImageButton' ) ; |
//#### Dialog Tabs |
// Set the dialog tabs. |
window.parent.AddTab( 'Info', FCKLang.DlgImgInfoTab ) ; |
if ( !bImageButton && !FCKConfig.ImageDlgHideLink ) |
window.parent.AddTab( 'Link', FCKLang.DlgImgLinkTab ) ; |
if ( FCKConfig.ImageUpload ) |
window.parent.AddTab( 'Upload', FCKLang.DlgLnkUpload ) ; |
if ( !FCKConfig.ImageDlgHideAdvanced ) |
window.parent.AddTab( 'Advanced', FCKLang.DlgAdvancedTag ) ; |
// Function called when a dialog tag is selected. |
function OnDialogTabChange( tabCode ) |
{ |
ShowE('divInfo' , ( tabCode == 'Info' ) ) ; |
ShowE('divLink' , ( tabCode == 'Link' ) ) ; |
ShowE('divUpload' , ( tabCode == 'Upload' ) ) ; |
ShowE('divAdvanced' , ( tabCode == 'Advanced' ) ) ; |
} |
// Get the selected image (if available). |
var oImage = FCK.Selection.GetSelectedElement() ; |
if ( oImage && oImage.tagName != 'IMG' && !( oImage.tagName == 'INPUT' && oImage.type == 'image' ) ) |
oImage = null ; |
// Get the active link. |
var oLink = FCK.Selection.MoveToAncestorNode( 'A' ) ; |
var oImageOriginal ; |
function UpdateOriginal( resetSize ) |
{ |
if ( !eImgPreview ) |
return ; |
if ( GetE('txtUrl').value.length == 0 ) |
{ |
oImageOriginal = null ; |
return ; |
} |
oImageOriginal = document.createElement( 'IMG' ) ; // new Image() ; |
if ( resetSize ) |
{ |
oImageOriginal.onload = function() |
{ |
this.onload = null ; |
ResetSizes() ; |
} |
} |
oImageOriginal.src = eImgPreview.src ; |
} |
var bPreviewInitialized ; |
window.onload = function() |
{ |
// Translate the dialog box texts. |
oEditor.FCKLanguageManager.TranslatePage(document) ; |
GetE('btnLockSizes').title = FCKLang.DlgImgLockRatio ; |
GetE('btnResetSize').title = FCKLang.DlgBtnResetSize ; |
// Load the selected element information (if any). |
LoadSelection() ; |
// Show/Hide the "Browse Server" button. |
GetE('tdBrowse').style.display = FCKConfig.ImageBrowser ? '' : 'none' ; |
GetE('divLnkBrowseServer').style.display = FCKConfig.LinkBrowser ? '' : 'none' ; |
UpdateOriginal() ; |
// Set the actual uploader URL. |
if ( FCKConfig.ImageUpload ) |
GetE('frmUpload').action = FCKConfig.ImageUploadURL ; |
window.parent.SetAutoSize( true ) ; |
// Activate the "OK" button. |
window.parent.SetOkButton( true ) ; |
} |
function LoadSelection() |
{ |
if ( ! oImage ) return ; |
var sUrl = oImage.getAttribute( '_fcksavedurl' ) ; |
if ( sUrl == null ) |
sUrl = GetAttribute( oImage, 'src', '' ) ; |
GetE('txtUrl').value = sUrl ; |
GetE('txtAlt').value = GetAttribute( oImage, 'alt', '' ) ; |
GetE('txtVSpace').value = GetAttribute( oImage, 'vspace', '' ) ; |
GetE('txtHSpace').value = GetAttribute( oImage, 'hspace', '' ) ; |
GetE('txtBorder').value = GetAttribute( oImage, 'border', '' ) ; |
GetE('cmbAlign').value = GetAttribute( oImage, 'align', '' ) ; |
var iWidth, iHeight ; |
var regexSize = /^\s*(\d+)px\s*$/i ; |
if ( oImage.style.width ) |
{ |
var aMatch = oImage.style.width.match( regexSize ) ; |
if ( aMatch ) |
{ |
iWidth = aMatch[1] ; |
oImage.style.width = '' ; |
} |
} |
if ( oImage.style.height ) |
{ |
var aMatch = oImage.style.height.match( regexSize ) ; |
if ( aMatch ) |
{ |
iHeight = aMatch[1] ; |
oImage.style.height = '' ; |
} |
} |
GetE('txtWidth').value = iWidth ? iWidth : GetAttribute( oImage, "width", '' ) ; |
GetE('txtHeight').value = iHeight ? iHeight : GetAttribute( oImage, "height", '' ) ; |
// Get Advances Attributes |
GetE('txtAttId').value = oImage.id ; |
GetE('cmbAttLangDir').value = oImage.dir ; |
GetE('txtAttLangCode').value = oImage.lang ; |
GetE('txtAttTitle').value = oImage.title ; |
GetE('txtAttClasses').value = oImage.getAttribute('class',2) || '' ; |
GetE('txtLongDesc').value = oImage.longDesc ; |
if ( oEditor.FCKBrowserInfo.IsIE ) |
GetE('txtAttStyle').value = oImage.style.cssText ; |
else |
GetE('txtAttStyle').value = oImage.getAttribute('style',2) ; |
if ( oLink ) |
{ |
var sUrl = oLink.getAttribute( '_fcksavedurl' ) ; |
if ( sUrl == null ) |
sUrl = oLink.getAttribute('href',2) ; |
GetE('txtLnkUrl').value = sUrl ; |
GetE('cmbLnkTarget').value = oLink.target ; |
} |
UpdatePreview() ; |
} |
//#### The OK button was hit. |
function Ok() |
{ |
if ( GetE('txtUrl').value.length == 0 ) |
{ |
window.parent.SetSelectedTab( 'Info' ) ; |
GetE('txtUrl').focus() ; |
alert( FCKLang.DlgImgAlertUrl ) ; |
return false ; |
} |
var bHasImage = ( oImage != null ) ; |
if ( bHasImage && bImageButton && oImage.tagName == 'IMG' ) |
{ |
if ( confirm( 'Do you want to transform the selected image on a image button?' ) ) |
oImage = null ; |
} |
else if ( bHasImage && !bImageButton && oImage.tagName == 'INPUT' ) |
{ |
if ( confirm( 'Do you want to transform the selected image button on a simple image?' ) ) |
oImage = null ; |
} |
if ( !bHasImage ) |
{ |
if ( bImageButton ) |
{ |
oImage = FCK.EditorDocument.createElement( 'INPUT' ) ; |
oImage.type = 'image' ; |
oImage = FCK.InsertElementAndGetIt( oImage ) ; |
} |
else |
oImage = FCK.CreateElement( 'IMG' ) ; |
} |
else |
oEditor.FCKUndo.SaveUndoStep() ; |
UpdateImage( oImage ) ; |
var sLnkUrl = GetE('txtLnkUrl').value.trim() ; |
if ( sLnkUrl.length == 0 ) |
{ |
if ( oLink ) |
FCK.ExecuteNamedCommand( 'Unlink' ) ; |
} |
else |
{ |
if ( oLink ) // Modifying an existent link. |
oLink.href = sLnkUrl ; |
else // Creating a new link. |
{ |
if ( !bHasImage ) |
oEditor.FCKSelection.SelectNode( oImage ) ; |
oLink = oEditor.FCK.CreateLink( sLnkUrl ) ; |
if ( !bHasImage ) |
{ |
oEditor.FCKSelection.SelectNode( oLink ) ; |
oEditor.FCKSelection.Collapse( false ) ; |
} |
} |
SetAttribute( oLink, '_fcksavedurl', sLnkUrl ) ; |
SetAttribute( oLink, 'target', GetE('cmbLnkTarget').value ) ; |
} |
return true ; |
} |
function UpdateImage( e, skipId ) |
{ |
e.src = GetE('txtUrl').value ; |
SetAttribute( e, "_fcksavedurl", GetE('txtUrl').value ) ; |
SetAttribute( e, "alt" , GetE('txtAlt').value ) ; |
SetAttribute( e, "width" , GetE('txtWidth').value ) ; |
SetAttribute( e, "height", GetE('txtHeight').value ) ; |
SetAttribute( e, "vspace", GetE('txtVSpace').value ) ; |
SetAttribute( e, "hspace", GetE('txtHSpace').value ) ; |
SetAttribute( e, "border", GetE('txtBorder').value ) ; |
SetAttribute( e, "align" , GetE('cmbAlign').value ) ; |
// Advances Attributes |
if ( ! skipId ) |
SetAttribute( e, 'id', GetE('txtAttId').value ) ; |
SetAttribute( e, 'dir' , GetE('cmbAttLangDir').value ) ; |
SetAttribute( e, 'lang' , GetE('txtAttLangCode').value ) ; |
SetAttribute( e, 'title' , GetE('txtAttTitle').value ) ; |
SetAttribute( e, 'class' , GetE('txtAttClasses').value ) ; |
SetAttribute( e, 'longDesc' , GetE('txtLongDesc').value ) ; |
if ( oEditor.FCKBrowserInfo.IsIE ) |
e.style.cssText = GetE('txtAttStyle').value ; |
else |
SetAttribute( e, 'style', GetE('txtAttStyle').value ) ; |
} |
var eImgPreview ; |
var eImgPreviewLink ; |
function SetPreviewElements( imageElement, linkElement ) |
{ |
eImgPreview = imageElement ; |
eImgPreviewLink = linkElement ; |
UpdatePreview() ; |
UpdateOriginal() ; |
bPreviewInitialized = true ; |
} |
function UpdatePreview() |
{ |
if ( !eImgPreview || !eImgPreviewLink ) |
return ; |
if ( GetE('txtUrl').value.length == 0 ) |
eImgPreviewLink.style.display = 'none' ; |
else |
{ |
UpdateImage( eImgPreview, true ) ; |
if ( GetE('txtLnkUrl').value.trim().length > 0 ) |
eImgPreviewLink.href = 'javascript:void(null);' ; |
else |
SetAttribute( eImgPreviewLink, 'href', '' ) ; |
eImgPreviewLink.style.display = '' ; |
} |
} |
var bLockRatio = true ; |
function SwitchLock( lockButton ) |
{ |
bLockRatio = !bLockRatio ; |
lockButton.className = bLockRatio ? 'BtnLocked' : 'BtnUnlocked' ; |
lockButton.title = bLockRatio ? 'Lock sizes' : 'Unlock sizes' ; |
if ( bLockRatio ) |
{ |
if ( GetE('txtWidth').value.length > 0 ) |
OnSizeChanged( 'Width', GetE('txtWidth').value ) ; |
else |
OnSizeChanged( 'Height', GetE('txtHeight').value ) ; |
} |
} |
// Fired when the width or height input texts change |
function OnSizeChanged( dimension, value ) |
{ |
// Verifies if the aspect ration has to be mantained |
if ( oImageOriginal && bLockRatio ) |
{ |
var e = dimension == 'Width' ? GetE('txtHeight') : GetE('txtWidth') ; |
if ( value.length == 0 || isNaN( value ) ) |
{ |
e.value = '' ; |
return ; |
} |
if ( dimension == 'Width' ) |
value = value == 0 ? 0 : Math.round( oImageOriginal.height * ( value / oImageOriginal.width ) ) ; |
else |
value = value == 0 ? 0 : Math.round( oImageOriginal.width * ( value / oImageOriginal.height ) ) ; |
if ( !isNaN( value ) ) |
e.value = value ; |
} |
UpdatePreview() ; |
} |
// Fired when the Reset Size button is clicked |
function ResetSizes() |
{ |
if ( ! oImageOriginal ) return ; |
GetE('txtWidth').value = oImageOriginal.width ; |
GetE('txtHeight').value = oImageOriginal.height ; |
UpdatePreview() ; |
} |
function BrowseServer() |
{ |
OpenServerBrowser( |
'Image', |
FCKConfig.ImageBrowserURL, |
FCKConfig.ImageBrowserWindowWidth, |
FCKConfig.ImageBrowserWindowHeight ) ; |
} |
function LnkBrowseServer() |
{ |
OpenServerBrowser( |
'Link', |
FCKConfig.LinkBrowserURL, |
FCKConfig.LinkBrowserWindowWidth, |
FCKConfig.LinkBrowserWindowHeight ) ; |
} |
function OpenServerBrowser( type, url, width, height ) |
{ |
sActualBrowser = type ; |
OpenFileBrowser( url, width, height ) ; |
} |
var sActualBrowser ; |
function SetUrl( url, width, height, alt ) |
{ |
if ( sActualBrowser == 'Link' ) |
{ |
GetE('txtLnkUrl').value = url ; |
UpdatePreview() ; |
} |
else |
{ |
GetE('txtUrl').value = url ; |
GetE('txtWidth').value = width ? width : '' ; |
GetE('txtHeight').value = height ? height : '' ; |
if ( alt ) |
GetE('txtAlt').value = alt; |
UpdatePreview() ; |
UpdateOriginal( true ) ; |
} |
window.parent.SetSelectedTab( 'Info' ) ; |
} |
function OnUploadCompleted( errorNumber, fileUrl, fileName, customMsg ) |
{ |
switch ( errorNumber ) |
{ |
case 0 : // No errors |
alert( 'Your file has been successfully uploaded' ) ; |
break ; |
case 1 : // Custom error |
alert( customMsg ) ; |
return ; |
case 101 : // Custom warning |
alert( customMsg ) ; |
break ; |
case 201 : |
alert( 'A file with the same name is already available. The uploaded file has been renamed to "' + fileName + '"' ) ; |
break ; |
case 202 : |
alert( 'Invalid file type' ) ; |
return ; |
case 203 : |
alert( "Security error. You probably don't have enough permissions to upload. Please check your server." ) ; |
return ; |
default : |
alert( 'Error on file upload. Error number: ' + errorNumber ) ; |
return ; |
} |
sActualBrowser = '' |
SetUrl( fileUrl ) ; |
GetE('frmUpload').reset() ; |
} |
var oUploadAllowedExtRegex = new RegExp( FCKConfig.ImageUploadAllowedExtensions, 'i' ) ; |
var oUploadDeniedExtRegex = new RegExp( FCKConfig.ImageUploadDeniedExtensions, 'i' ) ; |
function CheckUpload() |
{ |
var sFile = GetE('txtUploadFile').value ; |
if ( sFile.length == 0 ) |
{ |
alert( 'Please select a file to upload' ) ; |
return false ; |
} |
if ( ( FCKConfig.ImageUploadAllowedExtensions.length > 0 && !oUploadAllowedExtRegex.test( sFile ) ) || |
( FCKConfig.ImageUploadDeniedExtensions.length > 0 && oUploadDeniedExtRegex.test( sFile ) ) ) |
{ |
OnUploadCompleted( 202 ) ; |
return false ; |
} |
return true ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_image/fck_image_preview.html |
---|
New file |
0,0 → 1,61 |
<!-- |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fck_image_preview.html |
* Preview page for the Image dialog window. |
* Curiosity: http://en.wikipedia.org/wiki/Lorem_ipsum |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
--> |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> |
<html xmlns="http://www.w3.org/1999/xhtml"> |
<head> |
<title></title> |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
<meta name="robots" content="noindex, nofollow" /> |
<link href="../common/fck_dialog_common.css" rel="stylesheet" type="text/css" /> |
<script type="text/javascript"> |
// Sets the Skin CSS |
document.write( '<link href="' + window.parent.FCKConfig.SkinPath + 'fck_dialog.css" type="text/css" rel="stylesheet">' ) ; |
if ( window.parent.FCKConfig.BaseHref.length > 0 ) |
document.write( '<base href="' + window.parent.FCKConfig.BaseHref + '">' ) ; |
window.onload = function() |
{ |
window.parent.SetPreviewElements( |
document.getElementById( 'imgPreview' ), |
document.getElementById( 'lnkPreview' ) ) ; |
} |
</script> |
</head> |
<body style="color: #000000; background-color: #ffffff"> |
<a id="lnkPreview" onclick="return false;" style="cursor: default"> |
<img id="imgPreview" onload="window.parent.UpdateOriginal();" style="display: none" /></a>Lorem |
ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas feugiat consequat diam. |
Maecenas metus. Vivamus diam purus, cursus a, commodo non, facilisis vitae, nulla. |
Aenean dictum lacinia tortor. Nunc iaculis, nibh non iaculis aliquam, orci felis |
euismod neque, sed ornare massa mauris sed velit. Nulla pretium mi et risus. Fusce |
mi pede, tempor id, cursus ac, ullamcorper nec, enim. Sed tortor. Curabitur molestie. |
Duis velit augue, condimentum at, ultrices a, luctus ut, orci. Donec pellentesque |
egestas eros. Integer cursus, augue in cursus faucibus, eros pede bibendum sem, |
in tempus tellus justo quis ligula. Etiam eget tortor. Vestibulum rutrum, est ut |
placerat elementum, lectus nisl aliquam velit, tempor aliquam eros nunc nonummy |
metus. In eros metus, gravida a, gravida sed, lobortis id, turpis. Ut ultrices, |
ipsum at venenatis fringilla, sem nulla lacinia tellus, eget aliquet turpis mauris |
non enim. Nam turpis. Suspendisse lacinia. Curabitur ac tortor ut ipsum egestas |
elementum. Nunc imperdiet gravida mauris. |
</body> |
</html> |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_select.html |
---|
New file |
0,0 → 1,172 |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > |
<!-- |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fck_select.html |
* Select dialog window. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
--> |
<html> |
<head> |
<title>Select Properties</title> |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> |
<meta content="noindex, nofollow" name="robots"> |
<script src="common/fck_dialog_common.js" type="text/javascript"></script> |
<script type="text/javascript" src="fck_select/fck_select.js"></script> |
<script type="text/javascript"> |
var oEditor = window.parent.InnerDialogLoaded() ; |
// Gets the document DOM |
var oDOM = oEditor.FCK.EditorDocument ; |
var oActiveEl = oEditor.FCKSelection.GetSelectedElement() ; |
var oListText ; |
var oListValue ; |
window.onload = function() |
{ |
// First of all, translate the dialog box texts |
oEditor.FCKLanguageManager.TranslatePage(document) ; |
oListText = document.getElementById( 'cmbText' ) ; |
oListValue = document.getElementById( 'cmbValue' ) ; |
if ( oActiveEl && oActiveEl.tagName == 'SELECT' ) |
{ |
GetE('txtName').value = oActiveEl.name ; |
GetE('txtSelValue').value = oActiveEl.value ; |
GetE('txtLines').value = GetAttribute( oActiveEl, 'size' ) ; |
GetE('chkMultiple').checked = oActiveEl.multiple ; |
// Load the actual options |
for ( var i = 0 ; i < oActiveEl.options.length ; i++ ) |
{ |
var sText = oActiveEl.options[i].innerHTML ; |
var sValue = oActiveEl.options[i].value ; |
AddComboOption( oListText, sText, sText ) ; |
AddComboOption( oListValue, sValue, sValue ) ; |
} |
} |
else |
oActiveEl = null ; |
window.parent.SetOkButton( true ) ; |
} |
function Ok() |
{ |
var sSize = GetE('txtLines').value ; |
if ( sSize == null || isNaN( sSize ) || sSize <= 1 ) |
sSize = '' ; |
if ( !oActiveEl ) |
{ |
oActiveEl = oEditor.FCK.EditorDocument.createElement( 'SELECT' ) ; |
oActiveEl = oEditor.FCK.InsertElementAndGetIt( oActiveEl ) ; |
} |
SetAttribute( oActiveEl, 'name' , GetE('txtName').value ) ; |
SetAttribute( oActiveEl, 'size' , sSize ) ; |
oActiveEl.multiple = ( sSize.length > 0 && GetE('chkMultiple').checked ) ; |
// Remove all options. |
while ( oActiveEl.options.length > 0 ) |
oActiveEl.remove(0) ; |
// Add all available options. |
for ( var i = 0 ; i < oListText.options.length ; i++ ) |
{ |
var sText = oListText.options[i].value ; |
var sValue = oListValue.options[i].value ; |
if ( sValue.length == 0 ) sValue = sText ; |
var oOption = AddComboOption( oActiveEl, sText, sValue, oDOM ) ; |
if ( sValue == GetE('txtSelValue').value ) |
{ |
SetAttribute( oOption, 'selected', 'selected' ) ; |
oOption.selected = true ; |
} |
} |
return true ; |
} |
</script> |
</head> |
<body style='OVERFLOW: hidden' scroll='no'> |
<table width="100%" height="100%"> |
<tr> |
<td> |
<table width="100%"> |
<tr> |
<td nowrap><span fckLang="DlgSelectName">Name</span> </td> |
<td width="100%" colSpan="2"><input id="txtName" style="WIDTH: 100%" type="text"></td> |
</tr> |
<tr> |
<td nowrap><span fckLang="DlgSelectValue">Value</span> </td> |
<td width="100%" colSpan="2"><input id="txtSelValue" style="WIDTH: 100%; BACKGROUND-COLOR: buttonface" type="text" readonly></td> |
</tr> |
<tr> |
<td nowrap><span fckLang="DlgSelectSize">Size</span> </td> |
<td nowrap><input id="txtLines" type="text" size="2" value=""> <span fckLang="DlgSelectLines">lines</span></td> |
<td nowrap align="right"><input id="chkMultiple" name="chkMultiple" type="checkbox"><label for="chkMultiple" fckLang="DlgSelectChkMulti">Allow |
multiple selections</label></td> |
</tr> |
</table> |
<br> |
<hr style="POSITION: absolute"> |
<span style="LEFT: 10px; POSITION: relative; TOP: -7px" class="BackColor"> <span fckLang="DlgSelectOpAvail">Available |
Options</span> </span> |
<table width="100%"> |
<tr> |
<td width="50%"><span fckLang="DlgSelectOpText">Text</span><br> |
<input id="txtText" style="WIDTH: 100%" type="text" name="txtText"> |
</td> |
<td width="50%"><span fckLang="DlgSelectOpValue">Value</span><br> |
<input id="txtValue" style="WIDTH: 100%" type="text" name="txtValue"> |
</td> |
<td vAlign="bottom"><input onclick="Add();" type="button" fckLang="DlgSelectBtnAdd" value="Add"></td> |
<td vAlign="bottom"><input onclick="Modify();" type="button" fckLang="DlgSelectBtnModify" value="Modify"></td> |
</tr> |
<tr> |
<td rowSpan="2"><select id="cmbText" style="WIDTH: 100%" onchange="GetE('cmbValue').selectedIndex = this.selectedIndex;Select(this);" |
size="5" name="cmbText"></select> |
</td> |
<td rowSpan="2"><select id="cmbValue" style="WIDTH: 100%" onchange="GetE('cmbText').selectedIndex = this.selectedIndex;Select(this);" |
size="5" name="cmbValue"></select> |
</td> |
<td vAlign="top" colSpan="2"> |
</td> |
</tr> |
<tr> |
<td vAlign="bottom" colSpan="2"><input style="WIDTH: 100%" onclick="Move(-1);" type="button" fckLang="DlgSelectBtnUp" value="Up"> |
<br> |
<input style="WIDTH: 100%" onclick="Move(1);" type="button" fckLang="DlgSelectBtnDown" |
value="Down"> |
</td> |
</tr> |
<TR> |
<TD vAlign="bottom" colSpan="4"><INPUT onclick="SetSelectedValue();" type="button" fckLang="DlgSelectBtnSetValue" value="Set as selected value"> |
<input onclick="Delete();" type="button" fckLang="DlgSelectBtnDelete" value="Delete"></TD> |
</TR> |
</table> |
</td> |
</tr> |
</table> |
</body> |
</html> |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_find.html |
---|
New file |
0,0 → 1,167 |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> |
<!-- |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fck_find.html |
* "Find" dialog window. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
--> |
<html xmlns="http://www.w3.org/1999/xhtml"> |
<head> |
<title></title> |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
<meta content="noindex, nofollow" name="robots" /> |
<script type="text/javascript"> |
var oEditor = window.parent.InnerDialogLoaded() ; |
function OnLoad() |
{ |
// Whole word is available on IE only. |
if ( oEditor.FCKBrowserInfo.IsIE ) |
document.getElementById('divWord').style.display = '' ; |
// First of all, translate the dialog box texts. |
oEditor.FCKLanguageManager.TranslatePage( document ) ; |
window.parent.SetAutoSize( true ) ; |
} |
function btnStat(frm) |
{ |
document.getElementById('btnFind').disabled = |
( document.getElementById('txtFind').value.length == 0 ) ; |
} |
function ReplaceTextNodes( parentNode, regex, replaceValue, replaceAll ) |
{ |
for ( var i = 0 ; i < parentNode.childNodes.length ; i++ ) |
{ |
var oNode = parentNode.childNodes[i] ; |
if ( oNode.nodeType == 3 ) |
{ |
var sReplaced = oNode.nodeValue.replace( regex, replaceValue ) ; |
if ( oNode.nodeValue != sReplaced ) |
{ |
oNode.nodeValue = sReplaced ; |
if ( ! replaceAll ) |
return true ; |
} |
} |
else |
{ |
if ( ReplaceTextNodes( oNode, regex, replaceValue ) ) |
return true ; |
} |
} |
return false ; |
} |
function GetRegexExpr() |
{ |
if ( document.getElementById('chkWord').checked ) |
var sExpr = '\\b' + document.getElementById('txtFind').value + '\\b' ; |
else |
var sExpr = document.getElementById('txtFind').value ; |
return sExpr ; |
} |
function GetCase() |
{ |
return ( document.getElementById('chkCase').checked ? '' : 'i' ) ; |
} |
function Ok() |
{ |
if ( document.getElementById('txtFind').value.length == 0 ) |
return ; |
if ( oEditor.FCKBrowserInfo.IsIE ) |
FindIE() ; |
else |
FindGecko() ; |
} |
var oRange ; |
if ( oEditor.FCKBrowserInfo.IsIE ) |
oRange = oEditor.FCK.EditorDocument.body.createTextRange() ; |
function FindIE() |
{ |
var iFlags = 0 ; |
if ( chkCase.checked ) |
iFlags = iFlags | 4 ; |
if ( chkWord.checked ) |
iFlags = iFlags | 2 ; |
var bFound = oRange.findText( document.getElementById('txtFind').value, 1, iFlags ) ; |
if ( bFound ) |
{ |
oRange.scrollIntoView() ; |
oRange.select() ; |
oRange.collapse(false) ; |
oLastRangeFound = oRange ; |
} |
else |
{ |
oRange = oEditor.FCK.EditorDocument.body.createTextRange() ; |
alert( oEditor.FCKLang.DlgFindNotFoundMsg ) ; |
} |
} |
function FindGecko() |
{ |
var bCase = document.getElementById('chkCase').checked ; |
var bWord = document.getElementById('chkWord').checked ; |
// window.find( searchString, caseSensitive, backwards, wrapAround, wholeWord, searchInFrames, showDialog ) ; |
if ( !oEditor.FCK.EditorWindow.find( document.getElementById('txtFind').value, bCase, false, false, bWord, false, false ) ) |
alert( oEditor.FCKLang.DlgFindNotFoundMsg ) ; |
} |
</script> |
</head> |
<body onload="OnLoad()" style="overflow: hidden"> |
<table cellspacing="3" cellpadding="2" width="100%" border="0"> |
<tr> |
<td nowrap="nowrap"> |
<label for="txtFind" fcklang="DlgReplaceFindLbl"> |
Find what:</label> |
</td> |
<td width="100%"> |
<input id="txtFind" style="width: 100%" tabindex="1" type="text" /> |
</td> |
<td> |
<input id="btnFind" style="padding-right: 5px; padding-left: 5px" onclick="Ok();" |
type="button" value="Find" fcklang="DlgFindFindBtn" /> |
</td> |
</tr> |
<tr> |
<td valign="bottom" colspan="3"> |
<input id="chkCase" tabindex="3" type="checkbox" /><label for="chkCase" fcklang="DlgReplaceCaseChk">Match |
case</label> |
<br /> |
<div id="divWord" style="display: none"> |
<input id="chkWord" tabindex="4" type="checkbox" /><label for="chkWord" fcklang="DlgReplaceWordChk">Match |
whole word</label> |
</div> |
</td> |
</tr> |
</table> |
</body> |
</html> |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_universalkey.html |
---|
New file |
0,0 → 1,63 |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > |
<!-- |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fck_universalkey.html |
* Unicode Keyboard dialog window. |
* |
* File Authors: |
* Abdul-Aziz Al-Oraij (top7up@hotmail.com) |
* Michel Staelens |
* Bernadette Cierzniak |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
--> |
<html> |
<head> |
<title>Universal Keyboard</title> |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> |
<meta content="noindex, nofollow" name="robots"> |
<link rel="stylesheet" type="text/css" href="fck_universalkey/fck_universalkey.css" /> |
<script type="text/javascript"> |
var oEditor = window.parent.InnerDialogLoaded() ; |
window.onload = function() |
{ |
document.body.style.padding = '0px' ; |
// First of all, translate the dialog box texts |
oEditor.FCKLanguageManager.TranslatePage(document) ; |
window.parent.SetOkButton( true ) ; |
window.parent.SetAutoSize( true ) ; |
} |
function Ok() |
{ |
var oArea = document.getElementById( 'uni_area' ) ; |
if ( oArea.value.length > 0 ) |
oEditor.FCK.InsertHtml( oArea.value ) ; |
return true ; |
} |
</script> |
</head> |
<body style="OVERFLOW: hidden" scroll="no"> |
<textarea id="uni_area" cols="40" rows="4" style="width:100%;height:60px;"></textarea> |
<script type="text/javascript" src="fck_universalkey/data.js"></script> |
<script type="text/javascript" src="fck_universalkey/diacritic.js"></script> |
<script type="text/javascript" src="fck_universalkey/dialogue.js"></script> |
<script type="text/javascript" src="fck_universalkey/multihexa.js"></script> |
</body> |
</html> |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_spellerpages/spellerpages/blank.html |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.pl |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.cfm |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.cfm |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.php |
---|
New file |
0,0 → 1,193 |
<?php |
header('Content-type: text/html; charset=utf-8'); |
//$spellercss = '/speller/spellerStyle.css'; // by FredCK |
$spellercss = '../spellerStyle.css'; // by FredCK |
//$word_win_src = '/speller/wordWindow.js'; // by FredCK |
$word_win_src = '../wordWindow.js'; // by FredCK |
$textinputs = $_POST['textinputs']; # array |
//$aspell_prog = 'aspell'; // by FredCK (for Linux) |
$aspell_prog = '"C:\Program Files\Aspell\bin\aspell.exe"'; // by FredCK (for Windows) |
$lang = 'en_US'; |
//$aspell_opts = "-a --lang=$lang --encoding=utf-8"; // by FredCK |
$aspell_opts = "-a --lang=$lang --encoding=utf-8 -H"; // by FredCK |
$tempfiledir = "./"; |
$input_separator = "A"; |
# set the JavaScript variable to the submitted text. |
# textinputs is an array, each element corresponding to the (url-encoded) |
# value of the text control submitted for spell-checking |
function print_textinputs_var() { |
global $textinputs; |
foreach( $textinputs as $key=>$val ) { |
# $val = str_replace( "'", "%27", $val ); |
echo "textinputs[$key] = decodeURIComponent(\"" . $val . "\");\n"; |
} |
} |
# make declarations for the text input index |
function print_textindex_decl( $text_input_idx ) { |
echo "words[$text_input_idx] = [];\n"; |
echo "suggs[$text_input_idx] = [];\n"; |
} |
# set an element of the JavaScript 'words' array to a misspelled word |
function print_words_elem( $word, $index, $text_input_idx ) { |
echo "words[$text_input_idx][$index] = '" . escape_quote( $word ) . "';\n"; |
} |
# set an element of the JavaScript 'suggs' array to a list of suggestions |
function print_suggs_elem( $suggs, $index, $text_input_idx ) { |
echo "suggs[$text_input_idx][$index] = ["; |
foreach( $suggs as $key=>$val ) { |
if( $val ) { |
echo "'" . escape_quote( $val ) . "'"; |
if ( $key+1 < count( $suggs )) { |
echo ", "; |
} |
} |
} |
echo "];\n"; |
} |
# escape single quote |
function escape_quote( $str ) { |
return preg_replace ( "/'/", "\\'", $str ); |
} |
# handle a server-side error. |
function error_handler( $err ) { |
echo "error = '" . escape_quote( $err ) . "';\n"; |
} |
## get the list of misspelled words. Put the results in the javascript words array |
## for each misspelled word, get suggestions and put in the javascript suggs array |
function print_checker_results() { |
global $aspell_prog; |
global $aspell_opts; |
global $tempfiledir; |
global $textinputs; |
global $input_separator; |
$aspell_err = ""; |
# create temp file |
$tempfile = tempnam( $tempfiledir, 'aspell_data_' ); |
# open temp file, add the submitted text. |
if( $fh = fopen( $tempfile, 'w' )) { |
for( $i = 0; $i < count( $textinputs ); $i++ ) { |
$text = urldecode( $textinputs[$i] ); |
$lines = explode( "\n", $text ); |
fwrite ( $fh, "%\n" ); # exit terse mode |
fwrite ( $fh, "^$input_separator\n" ); |
fwrite ( $fh, "!\n" ); # enter terse mode |
foreach( $lines as $key=>$value ) { |
# use carat on each line to escape possible aspell commands |
fwrite( $fh, "^$value\n" ); |
} |
} |
fclose( $fh ); |
# exec aspell command - redirect STDERR to STDOUT |
$cmd = "$aspell_prog $aspell_opts < $tempfile 2>&1"; |
if( $aspellret = shell_exec( $cmd )) { |
$linesout = explode( "\n", $aspellret ); |
$index = 0; |
$text_input_index = -1; |
# parse each line of aspell return |
foreach( $linesout as $key=>$val ) { |
$chardesc = substr( $val, 0, 1 ); |
# if '&', then not in dictionary but has suggestions |
# if '#', then not in dictionary and no suggestions |
# if '*', then it is a delimiter between text inputs |
# if '@' then version info |
if( $chardesc == '&' || $chardesc == '#' ) { |
$line = explode( " ", $val, 5 ); |
print_words_elem( $line[1], $index, $text_input_index ); |
if( isset( $line[4] )) { |
$suggs = explode( ", ", $line[4] ); |
} else { |
$suggs = array(); |
} |
print_suggs_elem( $suggs, $index, $text_input_index ); |
$index++; |
} elseif( $chardesc == '*' ) { |
$text_input_index++; |
print_textindex_decl( $text_input_index ); |
$index = 0; |
} elseif( $chardesc != '@' && $chardesc != "" ) { |
# assume this is error output |
$aspell_err .= $val; |
} |
} |
if( $aspell_err ) { |
$aspell_err = "Error executing `$cmd`\\n$aspell_err"; |
error_handler( $aspell_err ); |
} |
} else { |
error_handler( "System error: Aspell program execution failed (`$cmd`)" ); |
} |
} else { |
error_handler( "System error: Could not open file '$tempfile' for writing" ); |
} |
# close temp file, delete file |
unlink( $tempfile ); |
} |
?> |
<html> |
<head> |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> |
<link rel="stylesheet" type="text/css" href="<?php echo $spellercss ?>" /> |
<script language="javascript" src="<?php echo $word_win_src ?>"></script> |
<script language="javascript"> |
var suggs = new Array(); |
var words = new Array(); |
var textinputs = new Array(); |
var error; |
<?php |
print_textinputs_var(); |
print_checker_results(); |
?> |
var wordWindowObj = new wordWindow(); |
wordWindowObj.originalSpellings = words; |
wordWindowObj.suggestions = suggs; |
wordWindowObj.textInputs = textinputs; |
function init_spell() { |
// check if any error occured during server-side processing |
if( error ) { |
alert( error ); |
} else { |
// call the init_spell() function in the parent frameset |
if (parent.frames.length) { |
parent.init_spell( wordWindowObj ); |
} else { |
alert('This page was loaded outside of a frameset. It might not display properly'); |
} |
} |
} |
</script> |
</head> |
<!-- <body onLoad="init_spell();"> by FredCK --> |
<body onLoad="init_spell();" bgcolor="#ffffff"> |
<script type="text/javascript"> |
wordWindowObj.writeBody(); |
</script> |
</body> |
</html> |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellerStyle.css |
---|
New file |
0,0 → 1,49 |
.blend { |
font-family: courier new; |
font-size: 10pt; |
border: 0; |
margin-bottom:-1; |
} |
.normalLabel { |
font-size:8pt; |
} |
.normalText { |
font-family:arial, helvetica, sans-serif; |
font-size:10pt; |
color:000000; |
background-color:FFFFFF; |
} |
.plainText { |
font-family: courier new, courier, monospace; |
font-size: 10pt; |
color:000000; |
background-color:FFFFFF; |
} |
.controlWindowBody { |
font-family:arial, helvetica, sans-serif; |
font-size:8pt; |
padding: 7px ; /* by FredCK */ |
margin: 0px ; /* by FredCK */ |
/* color:000000; by FredCK */ |
/* background-color:DADADA; by FredCK */ |
} |
.readonlyInput { |
background-color:DADADA; |
color:000000; |
font-size:8pt; |
width:392px; |
} |
.textDefault { |
font-size:8pt; |
width: 200px; |
} |
.buttonDefault { |
width:90px; |
height:22px; |
font-size:8pt; |
} |
.suggSlct { |
width:200px; |
margin-top:2; |
font-size:8pt; |
} |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_spellerpages/spellerpages/wordWindow.js |
---|
New file |
0,0 → 1,271 |
//////////////////////////////////////////////////// |
// wordWindow object |
//////////////////////////////////////////////////// |
function wordWindow() { |
// private properties |
this._forms = []; |
// private methods |
this._getWordObject = _getWordObject; |
//this._getSpellerObject = _getSpellerObject; |
this._wordInputStr = _wordInputStr; |
this._adjustIndexes = _adjustIndexes; |
this._isWordChar = _isWordChar; |
this._lastPos = _lastPos; |
// public properties |
this.wordChar = /[a-zA-Z]/; |
this.windowType = "wordWindow"; |
this.originalSpellings = new Array(); |
this.suggestions = new Array(); |
this.checkWordBgColor = "pink"; |
this.normWordBgColor = "white"; |
this.text = ""; |
this.textInputs = new Array(); |
this.indexes = new Array(); |
//this.speller = this._getSpellerObject(); |
// public methods |
this.resetForm = resetForm; |
this.totalMisspellings = totalMisspellings; |
this.totalWords = totalWords; |
this.totalPreviousWords = totalPreviousWords; |
//this.getTextObjectArray = getTextObjectArray; |
this.getTextVal = getTextVal; |
this.setFocus = setFocus; |
this.removeFocus = removeFocus; |
this.setText = setText; |
//this.getTotalWords = getTotalWords; |
this.writeBody = writeBody; |
this.printForHtml = printForHtml; |
} |
function resetForm() { |
if( this._forms ) { |
for( var i = 0; i < this._forms.length; i++ ) { |
this._forms[i].reset(); |
} |
} |
return true; |
} |
function totalMisspellings() { |
var total_words = 0; |
for( var i = 0; i < this.textInputs.length; i++ ) { |
total_words += this.totalWords( i ); |
} |
return total_words; |
} |
function totalWords( textIndex ) { |
return this.originalSpellings[textIndex].length; |
} |
function totalPreviousWords( textIndex, wordIndex ) { |
var total_words = 0; |
for( var i = 0; i <= textIndex; i++ ) { |
for( var j = 0; j < this.totalWords( i ); j++ ) { |
if( i == textIndex && j == wordIndex ) { |
break; |
} else { |
total_words++; |
} |
} |
} |
return total_words; |
} |
//function getTextObjectArray() { |
// return this._form.elements; |
//} |
function getTextVal( textIndex, wordIndex ) { |
var word = this._getWordObject( textIndex, wordIndex ); |
if( word ) { |
return word.value; |
} |
} |
function setFocus( textIndex, wordIndex ) { |
var word = this._getWordObject( textIndex, wordIndex ); |
if( word ) { |
if( word.type == "text" ) { |
word.focus(); |
word.style.backgroundColor = this.checkWordBgColor; |
} |
} |
} |
function removeFocus( textIndex, wordIndex ) { |
var word = this._getWordObject( textIndex, wordIndex ); |
if( word ) { |
if( word.type == "text" ) { |
word.blur(); |
word.style.backgroundColor = this.normWordBgColor; |
} |
} |
} |
function setText( textIndex, wordIndex, newText ) { |
var word = this._getWordObject( textIndex, wordIndex ); |
var beginStr; |
var endStr; |
if( word ) { |
var pos = this.indexes[textIndex][wordIndex]; |
var oldText = word.value; |
// update the text given the index of the string |
beginStr = this.textInputs[textIndex].substring( 0, pos ); |
endStr = this.textInputs[textIndex].substring( |
pos + oldText.length, |
this.textInputs[textIndex].length |
); |
this.textInputs[textIndex] = beginStr + newText + endStr; |
// adjust the indexes on the stack given the differences in |
// length between the new word and old word. |
var lengthDiff = newText.length - oldText.length; |
this._adjustIndexes( textIndex, wordIndex, lengthDiff ); |
word.size = newText.length; |
word.value = newText; |
this.removeFocus( textIndex, wordIndex ); |
} |
} |
function writeBody() { |
var d = window.document; |
var is_html = false; |
d.open(); |
// iterate through each text input. |
for( var txtid = 0; txtid < this.textInputs.length; txtid++ ) { |
var end_idx = 0; |
var begin_idx = 0; |
d.writeln( '<form name="textInput'+txtid+'">' ); |
var wordtxt = this.textInputs[txtid]; |
this.indexes[txtid] = []; |
if( wordtxt ) { |
var orig = this.originalSpellings[txtid]; |
if( !orig ) break; |
//!!! plain text, or HTML mode? |
d.writeln( '<div class="plainText">' ); |
// iterate through each occurrence of a misspelled word. |
for( var i = 0; i < orig.length; i++ ) { |
// find the position of the current misspelled word, |
// starting at the last misspelled word. |
// and keep looking if it's a substring of another word |
do { |
begin_idx = wordtxt.indexOf( orig[i], end_idx ); |
end_idx = begin_idx + orig[i].length; |
// word not found? messed up! |
if( begin_idx == -1 ) break; |
// look at the characters immediately before and after |
// the word. If they are word characters we'll keep looking. |
var before_char = wordtxt.charAt( begin_idx - 1 ); |
var after_char = wordtxt.charAt( end_idx ); |
} while ( |
this._isWordChar( before_char ) |
|| this._isWordChar( after_char ) |
); |
// keep track of its position in the original text. |
this.indexes[txtid][i] = begin_idx; |
// write out the characters before the current misspelled word |
for( var j = this._lastPos( txtid, i ); j < begin_idx; j++ ) { |
// !!! html mode? make it html compatible |
d.write( this.printForHtml( wordtxt.charAt( j ))); |
} |
// write out the misspelled word. |
d.write( this._wordInputStr( orig[i] )); |
// if it's the last word, write out the rest of the text |
if( i == orig.length-1 ){ |
d.write( printForHtml( wordtxt.substr( end_idx ))); |
} |
} |
d.writeln( '</div>' ); |
} |
d.writeln( '</form>' ); |
} |
//for ( var j = 0; j < d.forms.length; j++ ) { |
// alert( d.forms[j].name ); |
// for( var k = 0; k < d.forms[j].elements.length; k++ ) { |
// alert( d.forms[j].elements[k].name + ": " + d.forms[j].elements[k].value ); |
// } |
//} |
// set the _forms property |
this._forms = d.forms; |
d.close(); |
} |
// return the character index in the full text after the last word we evaluated |
function _lastPos( txtid, idx ) { |
if( idx > 0 ) |
return this.indexes[txtid][idx-1] + this.originalSpellings[txtid][idx-1].length; |
else |
return 0; |
} |
function printForHtml( n ) { |
return n ; // by FredCK |
var htmlstr = n; |
if( htmlstr.length == 1 ) { |
// do simple case statement if it's just one character |
switch ( n ) { |
case "\n": |
htmlstr = '<br/>'; |
break; |
case "<": |
htmlstr = '<'; |
break; |
case ">": |
htmlstr = '>'; |
break; |
} |
return htmlstr; |
} else { |
htmlstr = htmlstr.replace( /</g, '<' ); |
htmlstr = htmlstr.replace( />/g, '>' ); |
htmlstr = htmlstr.replace( /\n/g, '<br/>' ); |
return htmlstr; |
} |
} |
function _isWordChar( letter ) { |
if( letter.search( this.wordChar ) == -1 ) { |
return false; |
} else { |
return true; |
} |
} |
function _getWordObject( textIndex, wordIndex ) { |
if( this._forms[textIndex] ) { |
if( this._forms[textIndex].elements[wordIndex] ) { |
return this._forms[textIndex].elements[wordIndex]; |
} |
} |
return null; |
} |
function _wordInputStr( word ) { |
var str = '<input readonly '; |
str += 'class="blend" type="text" value="' + word + '" size="' + word.length + '">'; |
return str; |
} |
function _adjustIndexes( textIndex, wordIndex, lengthDiff ) { |
for( var i = wordIndex + 1; i < this.originalSpellings[textIndex].length; i++ ) { |
this.indexes[textIndex][i] = this.indexes[textIndex][i] + lengthDiff; |
} |
} |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellChecker.js |
---|
New file |
0,0 → 1,458 |
//////////////////////////////////////////////////// |
// spellChecker.js |
// |
// spellChecker object |
// |
// This file is sourced on web pages that have a textarea object to evaluate |
// for spelling. It includes the implementation for the spellCheckObject. |
// |
//////////////////////////////////////////////////// |
// constructor |
function spellChecker( textObject ) { |
// public properties - configurable |
// this.popUpUrl = '/speller/spellchecker.html'; // by FredCK |
this.popUpUrl = 'fck_spellerpages/spellerpages/spellchecker.html'; // by FredCK |
this.popUpName = 'spellchecker'; |
// this.popUpProps = "menu=no,width=440,height=350,top=70,left=120,resizable=yes,status=yes"; // by FredCK |
this.popUpProps = null ; // by FredCK |
// this.spellCheckScript = '/speller/server-scripts/spellchecker.php'; // by FredCK |
this.spellCheckScript = 'server-scripts/spellchecker.php'; // by FredCK |
//this.spellCheckScript = '/cgi-bin/spellchecker.pl'; |
// values used to keep track of what happened to a word |
this.replWordFlag = "R"; // single replace |
this.ignrWordFlag = "I"; // single ignore |
this.replAllFlag = "RA"; // replace all occurances |
this.ignrAllFlag = "IA"; // ignore all occurances |
this.fromReplAll = "~RA"; // an occurance of a "replace all" word |
this.fromIgnrAll = "~IA"; // an occurance of a "ignore all" word |
// properties set at run time |
this.wordFlags = new Array(); |
this.currentTextIndex = 0; |
this.currentWordIndex = 0; |
this.spellCheckerWin = null; |
this.controlWin = null; |
this.wordWin = null; |
this.textArea = textObject; // deprecated |
this.textInputs = arguments; |
// private methods |
this._spellcheck = _spellcheck; |
this._getSuggestions = _getSuggestions; |
this._setAsIgnored = _setAsIgnored; |
this._getTotalReplaced = _getTotalReplaced; |
this._setWordText = _setWordText; |
this._getFormInputs = _getFormInputs; |
// public methods |
this.openChecker = openChecker; |
this.startCheck = startCheck; |
this.checkTextBoxes = checkTextBoxes; |
this.checkTextAreas = checkTextAreas; |
this.spellCheckAll = spellCheckAll; |
this.ignoreWord = ignoreWord; |
this.ignoreAll = ignoreAll; |
this.replaceWord = replaceWord; |
this.replaceAll = replaceAll; |
this.terminateSpell = terminateSpell; |
this.undo = undo; |
// set the current window's "speller" property to the instance of this class. |
// this object can now be referenced by child windows/frames. |
window.speller = this; |
} |
// call this method to check all text boxes (and only text boxes) in the HTML document |
function checkTextBoxes() { |
this.textInputs = this._getFormInputs( "^text$" ); |
this.openChecker(); |
} |
// call this method to check all textareas (and only textareas ) in the HTML document |
function checkTextAreas() { |
this.textInputs = this._getFormInputs( "^textarea$" ); |
this.openChecker(); |
} |
// call this method to check all text boxes and textareas in the HTML document |
function spellCheckAll() { |
this.textInputs = this._getFormInputs( "^text(area)?$" ); |
this.openChecker(); |
} |
// call this method to check text boxe(s) and/or textarea(s) that were passed in to the |
// object's constructor or to the textInputs property |
function openChecker() { |
this.spellCheckerWin = window.open( this.popUpUrl, this.popUpName, this.popUpProps ); |
if( !this.spellCheckerWin.opener ) { |
this.spellCheckerWin.opener = window; |
} |
} |
function startCheck( wordWindowObj, controlWindowObj ) { |
// set properties from args |
this.wordWin = wordWindowObj; |
this.controlWin = controlWindowObj; |
// reset properties |
this.wordWin.resetForm(); |
this.controlWin.resetForm(); |
this.currentTextIndex = 0; |
this.currentWordIndex = 0; |
// initialize the flags to an array - one element for each text input |
this.wordFlags = new Array( this.wordWin.textInputs.length ); |
// each element will be an array that keeps track of each word in the text |
for( var i=0; i<this.wordFlags.length; i++ ) { |
this.wordFlags[i] = []; |
} |
// start |
this._spellcheck(); |
return true; |
} |
function ignoreWord() { |
var wi = this.currentWordIndex; |
var ti = this.currentTextIndex; |
if( !this.wordWin ) { |
alert( 'Error: Word frame not available.' ); |
return false; |
} |
if( !this.wordWin.getTextVal( ti, wi )) { |
alert( 'Error: "Not in dictionary" text is missing.' ); |
return false; |
} |
// set as ignored |
if( this._setAsIgnored( ti, wi, this.ignrWordFlag )) { |
this.currentWordIndex++; |
this._spellcheck(); |
} |
} |
function ignoreAll() { |
var wi = this.currentWordIndex; |
var ti = this.currentTextIndex; |
if( !this.wordWin ) { |
alert( 'Error: Word frame not available.' ); |
return false; |
} |
// get the word that is currently being evaluated. |
var s_word_to_repl = this.wordWin.getTextVal( ti, wi ); |
if( !s_word_to_repl ) { |
alert( 'Error: "Not in dictionary" text is missing' ); |
return false; |
} |
// set this word as an "ignore all" word. |
this._setAsIgnored( ti, wi, this.ignrAllFlag ); |
// loop through all the words after this word |
for( var i = ti; i < this.wordWin.textInputs.length; i++ ) { |
for( var j = 0; j < this.wordWin.totalWords( i ); j++ ) { |
if(( i == ti && j > wi ) || i > ti ) { |
// future word: set as "from ignore all" if |
// 1) do not already have a flag and |
// 2) have the same value as current word |
if(( this.wordWin.getTextVal( i, j ) == s_word_to_repl ) |
&& ( !this.wordFlags[i][j] )) { |
this._setAsIgnored( i, j, this.fromIgnrAll ); |
} |
} |
} |
} |
// finally, move on |
this.currentWordIndex++; |
this._spellcheck(); |
} |
function replaceWord() { |
var wi = this.currentWordIndex; |
var ti = this.currentTextIndex; |
if( !this.wordWin ) { |
alert( 'Error: Word frame not available.' ); |
return false; |
} |
if( !this.wordWin.getTextVal( ti, wi )) { |
alert( 'Error: "Not in dictionary" text is missing' ); |
return false; |
} |
if( !this.controlWin.replacementText ) { |
return; |
} |
var txt = this.controlWin.replacementText; |
if( txt.value ) { |
var newspell = new String( txt.value ); |
if( this._setWordText( ti, wi, newspell, this.replWordFlag )) { |
this.currentWordIndex++; |
this._spellcheck(); |
} |
} |
} |
function replaceAll() { |
var ti = this.currentTextIndex; |
var wi = this.currentWordIndex; |
if( !this.wordWin ) { |
alert( 'Error: Word frame not available.' ); |
return false; |
} |
var s_word_to_repl = this.wordWin.getTextVal( ti, wi ); |
if( !s_word_to_repl ) { |
alert( 'Error: "Not in dictionary" text is missing' ); |
return false; |
} |
var txt = this.controlWin.replacementText; |
if( !txt.value ) return; |
var newspell = new String( txt.value ); |
// set this word as a "replace all" word. |
this._setWordText( ti, wi, newspell, this.replAllFlag ); |
// loop through all the words after this word |
for( var i = ti; i < this.wordWin.textInputs.length; i++ ) { |
for( var j = 0; j < this.wordWin.totalWords( i ); j++ ) { |
if(( i == ti && j > wi ) || i > ti ) { |
// future word: set word text to s_word_to_repl if |
// 1) do not already have a flag and |
// 2) have the same value as s_word_to_repl |
if(( this.wordWin.getTextVal( i, j ) == s_word_to_repl ) |
&& ( !this.wordFlags[i][j] )) { |
this._setWordText( i, j, newspell, this.fromReplAll ); |
} |
} |
} |
} |
// finally, move on |
this.currentWordIndex++; |
this._spellcheck(); |
} |
function terminateSpell() { |
// called when we have reached the end of the spell checking. |
var msg = ""; // by FredCK |
var numrepl = this._getTotalReplaced(); |
if( numrepl == 0 ) { |
// see if there were no misspellings to begin with |
if( !this.wordWin ) { |
msg = ""; |
} else { |
if( this.wordWin.totalMisspellings() ) { |
// msg += "No words changed."; // by FredCK |
msg += FCKLang.DlgSpellNoChanges ; // by FredCK |
} else { |
// msg += "No misspellings found."; // by FredCK |
msg += FCKLang.DlgSpellNoMispell ; // by FredCK |
} |
} |
} else if( numrepl == 1 ) { |
// msg += "One word changed."; // by FredCK |
msg += FCKLang.DlgSpellOneChange ; // by FredCK |
} else { |
// msg += numrepl + " words changed."; // by FredCK |
msg += FCKLang.DlgSpellManyChanges.replace( /%1/g, numrepl ) ; |
} |
if( msg ) { |
// msg += "\n"; // by FredCK |
alert( msg ); |
} |
if( numrepl > 0 ) { |
// update the text field(s) on the opener window |
for( var i = 0; i < this.textInputs.length; i++ ) { |
// this.textArea.value = this.wordWin.text; |
if( this.wordWin ) { |
if( this.wordWin.textInputs[i] ) { |
this.textInputs[i].value = this.wordWin.textInputs[i]; |
} |
} |
} |
} |
// return back to the calling window |
// this.spellCheckerWin.close(); // by FredCK |
if ( typeof( this.OnFinished ) == 'function' ) // by FredCK |
this.OnFinished(numrepl) ; // by FredCK |
return true; |
} |
function undo() { |
// skip if this is the first word! |
var ti = this.currentTextIndex; |
var wi = this.currentWordIndex |
if( this.wordWin.totalPreviousWords( ti, wi ) > 0 ) { |
this.wordWin.removeFocus( ti, wi ); |
// go back to the last word index that was acted upon |
do { |
// if the current word index is zero then reset the seed |
if( this.currentWordIndex == 0 && this.currentTextIndex > 0 ) { |
this.currentTextIndex--; |
this.currentWordIndex = this.wordWin.totalWords( this.currentTextIndex )-1; |
if( this.currentWordIndex < 0 ) this.currentWordIndex = 0; |
} else { |
if( this.currentWordIndex > 0 ) { |
this.currentWordIndex--; |
} |
} |
} while ( |
this.wordWin.totalWords( this.currentTextIndex ) == 0 |
|| this.wordFlags[this.currentTextIndex][this.currentWordIndex] == this.fromIgnrAll |
|| this.wordFlags[this.currentTextIndex][this.currentWordIndex] == this.fromReplAll |
); |
var text_idx = this.currentTextIndex; |
var idx = this.currentWordIndex; |
var preReplSpell = this.wordWin.originalSpellings[text_idx][idx]; |
// if we got back to the first word then set the Undo button back to disabled |
if( this.wordWin.totalPreviousWords( text_idx, idx ) == 0 ) { |
this.controlWin.disableUndo(); |
} |
// examine what happened to this current word. |
switch( this.wordFlags[text_idx][idx] ) { |
// replace all: go through this and all the future occurances of the word |
// and revert them all to the original spelling and clear their flags |
case this.replAllFlag : |
for( var i = text_idx; i < this.wordWin.textInputs.length; i++ ) { |
for( var j = 0; j < this.wordWin.totalWords( i ); j++ ) { |
if(( i == text_idx && j >= idx ) || i > text_idx ) { |
var origSpell = this.wordWin.originalSpellings[i][j]; |
if( origSpell == preReplSpell ) { |
this._setWordText ( i, j, origSpell, undefined ); |
} |
} |
} |
} |
break; |
// ignore all: go through all the future occurances of the word |
// and clear their flags |
case this.ignrAllFlag : |
for( var i = text_idx; i < this.wordWin.textInputs.length; i++ ) { |
for( var j = 0; j < this.wordWin.totalWords( i ); j++ ) { |
if(( i == text_idx && j >= idx ) || i > text_idx ) { |
var origSpell = this.wordWin.originalSpellings[i][j]; |
if( origSpell == preReplSpell ) { |
this.wordFlags[i][j] = undefined; |
} |
} |
} |
} |
break; |
// replace: revert the word to its original spelling |
case this.replWordFlag : |
this._setWordText ( text_idx, idx, preReplSpell, undefined ); |
break; |
} |
// For all four cases, clear the wordFlag of this word. re-start the process |
this.wordFlags[text_idx][idx] = undefined; |
this._spellcheck(); |
} |
} |
function _spellcheck() { |
var ww = this.wordWin; |
// check if this is the last word in the current text element |
if( this.currentWordIndex == ww.totalWords( this.currentTextIndex) ) { |
this.currentTextIndex++; |
this.currentWordIndex = 0; |
// keep going if we're not yet past the last text element |
if( this.currentTextIndex < this.wordWin.textInputs.length ) { |
this._spellcheck(); |
return; |
} else { |
this.terminateSpell(); |
return; |
} |
} |
// if this is after the first one make sure the Undo button is enabled |
if( this.currentWordIndex > 0 ) { |
this.controlWin.enableUndo(); |
} |
// skip the current word if it has already been worked on |
if( this.wordFlags[this.currentTextIndex][this.currentWordIndex] ) { |
// increment the global current word index and move on. |
this.currentWordIndex++; |
this._spellcheck(); |
} else { |
var evalText = ww.getTextVal( this.currentTextIndex, this.currentWordIndex ); |
if( evalText ) { |
this.controlWin.evaluatedText.value = evalText; |
ww.setFocus( this.currentTextIndex, this.currentWordIndex ); |
this._getSuggestions( this.currentTextIndex, this.currentWordIndex ); |
} |
} |
} |
function _getSuggestions( text_num, word_num ) { |
this.controlWin.clearSuggestions(); |
// add suggestion in list for each suggested word. |
// get the array of suggested words out of the |
// three-dimensional array containing all suggestions. |
var a_suggests = this.wordWin.suggestions[text_num][word_num]; |
if( a_suggests ) { |
// got an array of suggestions. |
for( var ii = 0; ii < a_suggests.length; ii++ ) { |
this.controlWin.addSuggestion( a_suggests[ii] ); |
} |
} |
this.controlWin.selectDefaultSuggestion(); |
} |
function _setAsIgnored( text_num, word_num, flag ) { |
// set the UI |
this.wordWin.removeFocus( text_num, word_num ); |
// do the bookkeeping |
this.wordFlags[text_num][word_num] = flag; |
return true; |
} |
function _getTotalReplaced() { |
var i_replaced = 0; |
for( var i = 0; i < this.wordFlags.length; i++ ) { |
for( var j = 0; j < this.wordFlags[i].length; j++ ) { |
if(( this.wordFlags[i][j] == this.replWordFlag ) |
|| ( this.wordFlags[i][j] == this.replAllFlag ) |
|| ( this.wordFlags[i][j] == this.fromReplAll )) { |
i_replaced++; |
} |
} |
} |
return i_replaced; |
} |
function _setWordText( text_num, word_num, newText, flag ) { |
// set the UI and form inputs |
this.wordWin.setText( text_num, word_num, newText ); |
// keep track of what happened to this word: |
this.wordFlags[text_num][word_num] = flag; |
return true; |
} |
function _getFormInputs( inputPattern ) { |
var inputs = new Array(); |
for( var i = 0; i < document.forms.length; i++ ) { |
for( var j = 0; j < document.forms[i].elements.length; j++ ) { |
if( document.forms[i].elements[j].type.match( inputPattern )) { |
inputs[inputs.length] = document.forms[i].elements[j]; |
} |
} |
} |
return inputs; |
} |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_spellerpages/spellerpages/controlWindow.js |
---|
New file |
0,0 → 1,87 |
//////////////////////////////////////////////////// |
// controlWindow object |
//////////////////////////////////////////////////// |
function controlWindow( controlForm ) { |
// private properties |
this._form = controlForm; |
// public properties |
this.windowType = "controlWindow"; |
// this.noSuggestionSelection = "- No suggestions -"; // by FredCK |
this.noSuggestionSelection = FCKLang.DlgSpellNoSuggestions ; |
// set up the properties for elements of the given control form |
this.suggestionList = this._form.sugg; |
this.evaluatedText = this._form.misword; |
this.replacementText = this._form.txtsugg; |
this.undoButton = this._form.btnUndo; |
// public methods |
this.addSuggestion = addSuggestion; |
this.clearSuggestions = clearSuggestions; |
this.selectDefaultSuggestion = selectDefaultSuggestion; |
this.resetForm = resetForm; |
this.setSuggestedText = setSuggestedText; |
this.enableUndo = enableUndo; |
this.disableUndo = disableUndo; |
} |
function resetForm() { |
if( this._form ) { |
this._form.reset(); |
} |
} |
function setSuggestedText() { |
var slct = this.suggestionList; |
var txt = this.replacementText; |
var str = ""; |
if( (slct.options[0].text) && slct.options[0].text != this.noSuggestionSelection ) { |
str = slct.options[slct.selectedIndex].text; |
} |
txt.value = str; |
} |
function selectDefaultSuggestion() { |
var slct = this.suggestionList; |
var txt = this.replacementText; |
if( slct.options.length == 0 ) { |
this.addSuggestion( this.noSuggestionSelection ); |
} else { |
slct.options[0].selected = true; |
} |
this.setSuggestedText(); |
} |
function addSuggestion( sugg_text ) { |
var slct = this.suggestionList; |
if( sugg_text ) { |
var i = slct.options.length; |
var newOption = new Option( sugg_text, 'sugg_text'+i ); |
slct.options[i] = newOption; |
} |
} |
function clearSuggestions() { |
var slct = this.suggestionList; |
for( var j = slct.length - 1; j > -1; j-- ) { |
if( slct.options[j] ) { |
slct.options[j] = null; |
} |
} |
} |
function enableUndo() { |
if( this.undoButton ) { |
if( this.undoButton.disabled == true ) { |
this.undoButton.disabled = false; |
} |
} |
} |
function disableUndo() { |
if( this.undoButton ) { |
if( this.undoButton.disabled == false ) { |
this.undoButton.disabled = true; |
} |
} |
} |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_spellerpages/spellerpages/controls.html |
---|
New file |
0,0 → 1,153 |
<html> |
<head> |
<link rel="stylesheet" type="text/css" href="spellerStyle.css" /> |
<script src="controlWindow.js"></script> |
<script> |
var spellerObject; |
var controlWindowObj; |
if( parent.opener ) { |
spellerObject = parent.opener.speller; |
} |
function ignore_word() { |
if( spellerObject ) { |
spellerObject.ignoreWord(); |
} |
} |
function ignore_all() { |
if( spellerObject ) { |
spellerObject.ignoreAll(); |
} |
} |
function replace_word() { |
if( spellerObject ) { |
spellerObject.replaceWord(); |
} |
} |
function replace_all() { |
if( spellerObject ) { |
spellerObject.replaceAll(); |
} |
} |
function end_spell() { |
if( spellerObject ) { |
spellerObject.terminateSpell(); |
} |
} |
function undo() { |
if( spellerObject ) { |
spellerObject.undo(); |
} |
} |
function suggText() { |
if( controlWindowObj ) { |
controlWindowObj.setSuggestedText(); |
} |
} |
var FCKLang = window.parent.parent.FCKLang ; // by FredCK |
function init_spell() { |
// By FredCK (fckLang attributes have been added to the HTML source of this page) |
window.parent.parent.OnSpellerControlsLoad( this ) ; |
var controlForm = document.spellcheck; |
// create a new controlWindow object |
controlWindowObj = new controlWindow( controlForm ); |
// call the init_spell() function in the parent frameset |
if( parent.frames.length ) { |
parent.init_spell( controlWindowObj ); |
} else { |
alert( 'This page was loaded outside of a frameset. It might not display properly' ); |
} |
} |
</script> |
</head> |
<body class="controlWindowBody" onLoad="init_spell();" style="OVERFLOW: hidden" scroll="no"> <!-- by FredCK --> |
<form name="spellcheck"> |
<table border="0" cellpadding="0" cellspacing="0" border="0" align="center"> |
<tr> |
<td colspan="3" class="normalLabel"><span fckLang="DlgSpellNotInDic">Not in dictionary:</span></td> |
</tr> |
<tr> |
<td colspan="3"><input class="readonlyInput" type="text" name="misword" readonly /></td> |
</tr> |
<tr> |
<td colspan="3" height="5"></td> |
</tr> |
<tr> |
<td class="normalLabel"><span fckLang="DlgSpellChangeTo">Change to:</span></td> |
</tr> |
<tr valign="top"> |
<td> |
<table border="0" cellpadding="0" cellspacing="0" border="0"> |
<tr> |
<td class="normalLabel"> |
<input class="textDefault" type="text" name="txtsugg" /> |
</td> |
</tr> |
<tr> |
<td> |
<select class="suggSlct" name="sugg" size="7" onChange="suggText();" onDblClick="replace_word();"> |
<option></option> |
</select> |
</td> |
</tr> |
</table> |
</td> |
<td> </td> |
<td> |
<table border="0" cellpadding="0" cellspacing="0" border="0"> |
<tr> |
<td> |
<input class="buttonDefault" type="button" fckLang="DlgSpellBtnIgnore" value="Ignore" onClick="ignore_word();"> |
</td> |
<td> </td> |
<td> |
<input class="buttonDefault" type="button" fckLang="DlgSpellBtnIgnoreAll" value="Ignore All" onClick="ignore_all();"> |
</td> |
</tr> |
<tr> |
<td colspan="3" height="5"></td> |
</tr> |
<tr> |
<td> |
<input class="buttonDefault" type="button" fckLang="DlgSpellBtnReplace" value="Replace" onClick="replace_word();"> |
</td> |
<td> </td> |
<td> |
<input class="buttonDefault" type="button" fckLang="DlgSpellBtnReplaceAll" value="Replace All" onClick="replace_all();"> |
</td> |
</tr> |
<tr> |
<td colspan="3" height="5"></td> |
</tr> |
<tr> |
<td> |
<input class="buttonDefault" type="button" name="btnUndo" fckLang="DlgSpellBtnUndo" value="Undo" onClick="undo();" |
disabled> |
</td> |
<td> </td> |
<td> |
<!-- by FredCK |
<input class="buttonDefault" type="button" value="Close" onClick="end_spell();"> |
--> |
</td> |
</tr> |
</table> |
</td> |
</tr> |
</table> |
</form> |
</body> |
</html> |
/branches/v1.0-menes/api/fckeditor/editor/dialog/fck_spellerpages/spellerpages/spellchecker.html |
---|
New file |
0,0 → 1,71 |
<script> |
var wordWindow = null; |
var controlWindow = null; |
function init_spell( spellerWindow ) { |
if( spellerWindow ) { |
if( spellerWindow.windowType == "wordWindow" ) { |
wordWindow = spellerWindow; |
} else if ( spellerWindow.windowType == "controlWindow" ) { |
controlWindow = spellerWindow; |
} |
} |
if( controlWindow && wordWindow ) { |
// populate the speller object and start it off! |
var speller = opener.speller; |
wordWindow.speller = speller; |
speller.startCheck( wordWindow, controlWindow ); |
} |
} |
// encodeForPost |
function encodeForPost( str ) { |
var s = new String( str ); |
s = encodeURIComponent( s ); |
// additionally encode single quotes to evade any PHP |
// magic_quotes_gpc setting (it inserts escape characters and |
// therefore skews the btye positions of misspelled words) |
return s.replace( /\'/g, '%27' ); |
} |
// post the text area data to the script that populates the speller |
function postWords() { |
var bodyDoc = window.frames[0].document; |
bodyDoc.open(); |
bodyDoc.write('<html>'); |
bodyDoc.write('<meta http-equiv="Content-Type" content="text/html; charset=utf-8">'); |
bodyDoc.write('<link rel="stylesheet" type="text/css" href="spellerStyle.css"/>'); |
if (opener) { |
var speller = opener.speller; |
bodyDoc.write('<body class="normalText" onLoad="document.forms[0].submit();">'); |
bodyDoc.write('<p>' + window.parent.FCKLang.DlgSpellProgress + '<\/p>'); // by FredCK |
bodyDoc.write('<form action="'+speller.spellCheckScript+'" method="post">'); |
for( var i = 0; i < speller.textInputs.length; i++ ) { |
bodyDoc.write('<input type="hidden" name="textinputs[]" value="'+encodeForPost(speller.textInputs[i].value)+'">'); |
} |
bodyDoc.write('<\/form>'); |
bodyDoc.write('<\/body>'); |
} else { |
bodyDoc.write('<body class="normalText">'); |
bodyDoc.write('<p><b>This page cannot be displayed<\/b><\/p><p>The window was not opened from another window.<\/p>'); |
bodyDoc.write('<\/body>'); |
} |
bodyDoc.write('<\/html>'); |
bodyDoc.close(); |
} |
</script> |
<html> |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> |
<head> |
<title>Speller Pages</title> |
</head> |
<frameset rows="*,201" onLoad="postWords();"> |
<frame src="blank.html"> |
<frame src="controls.html"> |
</frameset> |
</html> |
/branches/v1.0-menes/api/fckeditor/editor/fckeditor.original.html |
---|
New file |
0,0 → 1,292 |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> |
<!-- |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckeditor.original.html |
* Main page that holds the editor. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
--> |
<html xmlns="http://www.w3.org/1999/xhtml"> |
<head> |
<title>FCKeditor</title> |
<meta name="robots" content="noindex, nofollow" /> |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
<!-- @Packager.RemoveLine |
<meta http-equiv="Cache-Control" content="public" /> |
@Packager.RemoveLine --> |
<script type="text/javascript"> |
// Instead of loading scripts and CSSs using inline tags, all scripts are |
// loaded by code. In this way we can guarantee the correct processing order, |
// otherwise external scripts and inline scripts could be executed in an |
// unwanted order (IE). |
function LoadScript( url ) |
{ |
document.write( '<script type="text/javascript" src="' + url + '" onerror="alert(\'Error loading \' + this.src);"><\/script>' ) ; |
} |
function LoadCss( url ) |
{ |
document.write( '<link href="' + url + '" type="text/css" rel="stylesheet" onerror="alert(\'Error loading \' + this.src);" />' ) ; |
} |
// Main editor scripts. |
var sSuffix = /msie/.test( navigator.userAgent.toLowerCase() ) ? 'ie' : 'gecko' ; |
/* @Packager.RemoveLine |
LoadScript( 'js/fckeditorcode_' + sSuffix + '.js' ) ; |
@Packager.RemoveLine */ |
// @Packager.Remove.Start |
LoadScript( '_source/fckconstants.js' ) ; |
LoadScript( '_source/fckjscoreextensions.js' ) ; |
if ( sSuffix == 'ie' ) |
LoadScript( '_source/classes/fckiecleanup.js' ) ; |
LoadScript( '_source/internals/fckbrowserinfo.js' ) ; |
LoadScript( '_source/internals/fckurlparams.js' ) ; |
LoadScript( '_source/internals/fck.js' ) ; |
LoadScript( '_source/internals/fckconfig.js' ) ; |
LoadScript( '_source/internals/fckdebug.js' ) ; |
LoadScript( '_source/internals/fcktools.js' ) ; |
LoadScript( '_source/internals/fcktools_' + sSuffix + '.js' ) ; |
LoadScript( '_source/fckeditorapi.js' ) ; |
LoadScript( '_source/internals/fckregexlib.js' ) ; |
LoadScript( '_source/internals/fcklanguagemanager.js' ) ; |
LoadScript( '_source/classes/fckevents.js' ) ; |
LoadScript( '_source/internals/fckxhtmlentities.js' ) ; |
LoadScript( '_source/internals/fckxhtml.js' ) ; |
LoadScript( '_source/internals/fckxhtml_' + sSuffix + '.js' ) ; |
LoadScript( '_source/internals/fckcodeformatter.js' ) ; |
LoadScript( '_source/internals/fckundo_' + sSuffix + '.js' ) ; |
LoadScript( '_source/classes/fckeditingarea.js' ) ; |
LoadScript( '_source/internals/fckdocumentprocessor.js' ) ; |
LoadScript( '_source/internals/fck_1.js' ) ; |
LoadScript( '_source/internals/fck_1_' + sSuffix + '.js' ) ; |
LoadScript( '_source/internals/fck_2.js' ) ; |
LoadScript( '_source/internals/fck_2_' + sSuffix + '.js' ) ; |
LoadScript( '_source/internals/fckselection.js' ) ; |
LoadScript( '_source/internals/fckselection_' + sSuffix + '.js' ) ; |
LoadScript( '_source/internals/fcktablehandler.js' ) ; |
LoadScript( '_source/internals/fcktablehandler_' + sSuffix + '.js' ) ; |
LoadScript( '_source/classes/fckxml_' + sSuffix + '.js' ) ; |
LoadScript( '_source/classes/fckstyledef.js' ) ; |
LoadScript( '_source/classes/fckstyledef_' + sSuffix + '.js' ) ; |
LoadScript( '_source/classes/fckstylesloader.js' ) ; |
LoadScript( '_source/commandclasses/fcknamedcommand.js' ) ; |
LoadScript( '_source/commandclasses/fck_othercommands.js' ) ; |
LoadScript( '_source/commandclasses/fckspellcheckcommand_' + sSuffix + '.js' ) ; |
LoadScript( '_source/commandclasses/fcktextcolorcommand.js' ) ; |
LoadScript( '_source/commandclasses/fckpasteplaintextcommand.js' ) ; |
LoadScript( '_source/commandclasses/fckpastewordcommand.js' ) ; |
LoadScript( '_source/commandclasses/fcktablecommand.js' ) ; |
LoadScript( '_source/commandclasses/fckstylecommand.js' ) ; |
LoadScript( '_source/commandclasses/fckfitwindow.js' ) ; |
LoadScript( '_source/internals/fckcommands.js' ) ; |
LoadScript( '_source/classes/fckpanel.js' ) ; |
LoadScript( '_source/classes/fckicon.js' ) ; |
LoadScript( '_source/classes/fcktoolbarbuttonui.js' ) ; |
LoadScript( '_source/classes/fcktoolbarbutton.js' ) ; |
LoadScript( '_source/classes/fckspecialcombo.js' ) ; |
LoadScript( '_source/classes/fcktoolbarspecialcombo.js' ) ; |
LoadScript( '_source/classes/fcktoolbarfontscombo.js' ) ; |
LoadScript( '_source/classes/fcktoolbarfontsizecombo.js' ) ; |
LoadScript( '_source/classes/fcktoolbarfontformatcombo.js' ) ; |
LoadScript( '_source/classes/fcktoolbarstylecombo.js' ) ; |
LoadScript( '_source/classes/fcktoolbarpanelbutton.js' ) ; |
LoadScript( '_source/internals/fcktoolbaritems.js' ) ; |
LoadScript( '_source/classes/fcktoolbar.js' ) ; |
LoadScript( '_source/classes/fcktoolbarbreak_' + sSuffix + '.js' ) ; |
LoadScript( '_source/internals/fcktoolbarset.js' ) ; |
LoadScript( '_source/internals/fckdialog.js' ) ; |
LoadScript( '_source/internals/fckdialog_' + sSuffix + '.js' ) ; |
LoadScript( '_source/classes/fckmenuitem.js' ) ; |
LoadScript( '_source/classes/fckmenublock.js' ) ; |
LoadScript( '_source/classes/fckmenublockpanel.js' ) ; |
LoadScript( '_source/classes/fckcontextmenu.js' ) ; |
LoadScript( '_source/internals/fck_contextmenu.js' ) ; |
LoadScript( '_source/classes/fckplugin.js' ) ; |
LoadScript( '_source/internals/fckplugins.js' ) ; |
// @Packager.Remove.End |
// Base configuration file. |
LoadScript( '../fckconfig.js' ) ; |
</script> |
<script type="text/javascript"> |
// Create the default cleanup object used by the editor. |
if ( FCKBrowserInfo.IsIE ) |
{ |
FCK.IECleanup = new FCKIECleanup( window ) ; |
FCK.IECleanup.AddItem( FCKTempBin, FCKTempBin.Reset ) ; |
FCK.IECleanup.AddItem( FCK, FCK_Cleanup ) ; |
} |
// The config hidden field is processed immediately, because |
// CustomConfigurationsPath may be set in the page. |
FCKConfig.ProcessHiddenField() ; |
// Load the custom configurations file (if defined). |
if ( FCKConfig.CustomConfigurationsPath.length > 0 ) |
LoadScript( FCKConfig.CustomConfigurationsPath ) ; |
</script> |
<script type="text/javascript"> |
// Load configurations defined at page level. |
FCKConfig_LoadPageConfig() ; |
FCKConfig_PreProcess() ; |
// Load the active skin CSS. |
LoadCss( FCKConfig.SkinPath + 'fck_editor.css' ) ; |
// Load the language file. |
FCKLanguageManager.Initialize() ; |
LoadScript( 'lang/' + FCKLanguageManager.ActiveLanguage.Code + '.js' ) ; |
</script> |
<script type="text/javascript"> |
// Initialize the editing area context menu. |
FCK_ContextMenu_Init() ; |
FCKPlugins.Load() ; |
</script> |
<script type="text/javascript"> |
// Set the editor interface direction. |
window.document.dir = FCKLang.Dir ; |
// Activate pasting operations. |
if ( FCKConfig.ForcePasteAsPlainText || FCKConfig.AutoDetectPasteFromWord ) |
FCK.Events.AttachEvent( "OnPaste", FCK.Paste ) ; |
</script> |
<script type="text/javascript"> |
window.onload = function() |
{ |
InitializeAPI() ; |
if ( FCKBrowserInfo.IsIE ) |
FCK_PreloadImages() ; |
else |
LoadToolbarSetup() ; |
} |
function LoadToolbarSetup() |
{ |
FCKeditorAPI._FunctionQueue.Add( LoadToolbar ) ; |
} |
function LoadToolbar() |
{ |
var oToolbarSet = FCK.ToolbarSet = FCKToolbarSet_Create() ; |
if ( oToolbarSet.IsLoaded ) |
StartEditor() ; |
else |
{ |
oToolbarSet.OnLoad = StartEditor ; |
oToolbarSet.Load( FCKURLParams['Toolbar'] || 'Default' ) ; |
} |
} |
function StartEditor() |
{ |
// Remove the onload listener. |
FCK.ToolbarSet.OnLoad = null ; |
FCKeditorAPI._FunctionQueue.Remove( LoadToolbar ) ; |
FCK.Events.AttachEvent( 'OnStatusChange', WaitForActive ) ; |
// Start the editor. |
FCK.StartEditor() ; |
} |
function WaitForActive( editorInstance, newStatus ) |
{ |
if ( newStatus == FCK_STATUS_ACTIVE ) |
{ |
if ( FCKBrowserInfo.IsGecko ) |
FCKTools.RunFunction( window.onresize ) ; |
FCK.SetStatus( FCK_STATUS_COMPLETE ) ; |
// Call the special "FCKeditor_OnComplete" function that should be present in |
// the HTML page where the editor is located. |
if ( typeof( window.parent.FCKeditor_OnComplete ) == 'function' ) |
window.parent.FCKeditor_OnComplete( FCK ) ; |
} |
} |
// Gecko browsers doens't calculate well that IFRAME size so we must |
// recalculate it every time the window size changes. |
if ( FCKBrowserInfo.IsGecko ) |
{ |
function Window_OnResize() |
{ |
if ( FCKBrowserInfo.IsOpera ) |
return ; |
var oCell = document.getElementById( 'xEditingArea' ) ; |
var eInnerElement ; |
if ( eInnerElement = oCell.firstChild ) |
{ |
eInnerElement.style.height = 0 ; |
eInnerElement.style.height = oCell.scrollHeight - 2 ; |
} |
} |
window.onresize = Window_OnResize ; |
} |
</script> |
</head> |
<body> |
<table width="100%" cellpadding="0" cellspacing="0" style="height: 100%; table-layout: fixed"> |
<tr id="xToolbarRow" style="display: none"> |
<td id="xToolbarSpace" style="overflow: hidden"> |
<table width="100%" cellpadding="0" cellspacing="0"> |
<tr id="xCollapsed" style="display: none"> |
<td id="xExpandHandle" class="TB_Expand" colspan="3"> |
<img class="TB_ExpandImg" alt="" src="images/spacer.gif" width="8" height="4" /></td> |
</tr> |
<tr id="xExpanded" style="display: none"> |
<td id="xTBLeftBorder" class="TB_SideBorder" style="width: 1px; display: none;"></td> |
<td id="xCollapseHandle" style="display: none" class="TB_Collapse" valign="bottom"> |
<img class="TB_CollapseImg" alt="" src="images/spacer.gif" width="8" height="4" /></td> |
<td id="xToolbar" class="TB_ToolbarSet"></td> |
<td class="TB_SideBorder" style="width: 1px"></td> |
</tr> |
</table> |
</td> |
</tr> |
<tr style="height: 100%"> |
<td id="xEditingArea" valign="top"></td> |
</tr> |
</table> |
</body> |
</html> |
/branches/v1.0-menes/api/fckeditor/editor/lang/sr.js |
---|
New file |
0,0 → 1,501 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: sr.js |
* Serbian (Cyrillic) language file. |
* |
* File Authors: |
* Zoran Subić (zoran@tf.zr.ac.yu) |
*/ |
var FCKLang = |
{ |
// Language direction : "ltr" (left to right) or "rtl" (right to left). |
Dir : "ltr", |
ToolbarCollapse : "Смањи линију са алаткама", |
ToolbarExpand : "Прошири линију са алаткама", |
// Toolbar Items and Context Menu |
Save : "Сачувај", |
NewPage : "Нова страница", |
Preview : "Изглед странице", |
Cut : "Исеци", |
Copy : "Копирај", |
Paste : "Залепи", |
PasteText : "Залепи као неформатиран текст", |
PasteWord : "Залепи из Worda", |
Print : "Штампа", |
SelectAll : "Означи све", |
RemoveFormat : "Уклони форматирање", |
InsertLinkLbl : "Линк", |
InsertLink : "Унеси/измени линк", |
RemoveLink : "Уклони линк", |
Anchor : "Унеси/измени сидро", |
InsertImageLbl : "Слика", |
InsertImage : "Унеси/измени слику", |
InsertFlashLbl : "Флеш елемент", |
InsertFlash : "Унеси/измени флеш", |
InsertTableLbl : "Табела", |
InsertTable : "Унеси/измени табелу", |
InsertLineLbl : "Линија", |
InsertLine : "Унеси хоризонталну линију", |
InsertSpecialCharLbl: "Специјални карактери", |
InsertSpecialChar : "Унеси специјални карактер", |
InsertSmileyLbl : "Смајли", |
InsertSmiley : "Унеси смајлија", |
About : "О ФЦКедитору", |
Bold : "Подебљано", |
Italic : "Курзив", |
Underline : "Подвучено", |
StrikeThrough : "Прецртано", |
Subscript : "Индекс", |
Superscript : "Степен", |
LeftJustify : "Лево равнање", |
CenterJustify : "Центриран текст", |
RightJustify : "Десно равнање", |
BlockJustify : "Обострано равнање", |
DecreaseIndent : "Смањи леву маргину", |
IncreaseIndent : "Увећај леву маргину", |
Undo : "Поништи акцију", |
Redo : "Понови акцију", |
NumberedListLbl : "Набројиву листу", |
NumberedList : "Унеси/уклони набројиву листу", |
BulletedListLbl : "Ненабројива листа", |
BulletedList : "Унеси/уклони ненабројиву листу", |
ShowTableBorders : "Прикажи оквир табеле", |
ShowDetails : "Прикажи детаље", |
Style : "Стил", |
FontFormat : "Формат", |
Font : "Фонт", |
FontSize : "Величина фонта", |
TextColor : "Боја текста", |
BGColor : "Боја позадине", |
Source : "Kôд", |
Find : "Претрага", |
Replace : "Замена", |
SpellCheck : "Провери спеловање", |
UniversalKeyboard : "Универзална тастатура", |
PageBreakLbl : "Page Break", //MISSING |
PageBreak : "Insert Page Break", //MISSING |
Form : "Форма", |
Checkbox : "Поље за потврду", |
RadioButton : "Радио-дугме", |
TextField : "Текстуално поље", |
Textarea : "Зона текста", |
HiddenField : "Скривено поље", |
Button : "Дугме", |
SelectionField : "Изборно поље", |
ImageButton : "Дугме са сликом", |
FitWindow : "Maximize the editor size", //MISSING |
// Context Menu |
EditLink : "Промени линк", |
CellCM : "Cell", //MISSING |
RowCM : "Row", //MISSING |
ColumnCM : "Column", //MISSING |
InsertRow : "Унеси ред", |
DeleteRows : "Обриши редове", |
InsertColumn : "Унеси колону", |
DeleteColumns : "Обриши колоне", |
InsertCell : "Унеси ћелије", |
DeleteCells : "Обриши ћелије", |
MergeCells : "Спој ћелије", |
SplitCell : "Раздвоји ћелије", |
TableDelete : "Delete Table", //MISSING |
CellProperties : "Особине ћелије", |
TableProperties : "Особине табеле", |
ImageProperties : "Особине слике", |
FlashProperties : "Особине Флеша", |
AnchorProp : "Особине сидра", |
ButtonProp : "Особине дугмета", |
CheckboxProp : "Особине поља за потврду", |
HiddenFieldProp : "Особине скривеног поља", |
RadioButtonProp : "Особине радио-дугмета", |
ImageButtonProp : "Особине дугмета са сликом", |
TextFieldProp : "Особине текстуалног поља", |
SelectionFieldProp : "Особине изборног поља", |
TextareaProp : "Особине зоне текста", |
FormProp : "Особине форме", |
FontFormats : "Normal;Formatirano;Adresa;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6", |
// Alerts and Messages |
ProcessingXHTML : "Обрађујем XHTML. Maлo стрпљења...", |
Done : "Завршио", |
PasteWordConfirm : "Текст који желите да налепите копиран је из Worda. Да ли желите да буде очишћен од формата пре лепљења?", |
NotCompatiblePaste : "Ова команда је доступна само за Интернет Екплорер од верзије 5.5. Да ли желите да налепим текст без чишћења?", |
UnknownToolbarItem : "Непозната ставка toolbara \"%1\"", |
UnknownCommand : "Непозната наредба \"%1\"", |
NotImplemented : "Наредба није имплементирана", |
UnknownToolbarSet : "Toolbar \"%1\" не постоји", |
NoActiveX : "Your browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.", //MISSING |
BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.", //MISSING |
DialogBlocked : "It was not possible to open the dialog window. Make sure all popup blockers are disabled.", //MISSING |
// Dialogs |
DlgBtnOK : "OK", |
DlgBtnCancel : "Oткажи", |
DlgBtnClose : "Затвори", |
DlgBtnBrowseServer : "Претражи сервер", |
DlgAdvancedTag : "Напредни тагови", |
DlgOpOther : "<Остали>", |
DlgInfoTab : "Инфо", |
DlgAlertUrl : "Молимо Вас, унесите УРЛ", |
// General Dialogs Labels |
DlgGenNotSet : "<није постављено>", |
DlgGenId : "Ид", |
DlgGenLangDir : "Смер језика", |
DlgGenLangDirLtr : "С лева на десно (LTR)", |
DlgGenLangDirRtl : "С десна на лево (RTL)", |
DlgGenLangCode : "Kôд Ñезика", |
DlgGenAccessKey : "Приступни тастер", |
DlgGenName : "Назив", |
DlgGenTabIndex : "Таб индекс", |
DlgGenLongDescr : "Пун опис УРЛ", |
DlgGenClass : "Stylesheet класе", |
DlgGenTitle : "Advisory наслов", |
DlgGenContType : "Advisory врста садржаја", |
DlgGenLinkCharset : "Linked Resource Charset", |
DlgGenStyle : "Стил", |
// Image Dialog |
DlgImgTitle : "Особине слика", |
DlgImgInfoTab : "Инфо слике", |
DlgImgBtnUpload : "Пошаљи на сервер", |
DlgImgURL : "УРЛ", |
DlgImgUpload : "Пошаљи", |
DlgImgAlt : "Алтернативни текст", |
DlgImgWidth : "Ширина", |
DlgImgHeight : "Висина", |
DlgImgLockRatio : "Закључај однос", |
DlgBtnResetSize : "Ресетуј величину", |
DlgImgBorder : "Оквир", |
DlgImgHSpace : "HSpace", |
DlgImgVSpace : "VSpace", |
DlgImgAlign : "Равнање", |
DlgImgAlignLeft : "Лево", |
DlgImgAlignAbsBottom: "Abs доле", |
DlgImgAlignAbsMiddle: "Abs средина", |
DlgImgAlignBaseline : "Базно", |
DlgImgAlignBottom : "Доле", |
DlgImgAlignMiddle : "Средина", |
DlgImgAlignRight : "Десно", |
DlgImgAlignTextTop : "Врх текста", |
DlgImgAlignTop : "Врх", |
DlgImgPreview : "Изглед", |
DlgImgAlertUrl : "Унесите УРЛ слике", |
DlgImgLinkTab : "Линк", |
// Flash Dialog |
DlgFlashTitle : "Особине флеша", |
DlgFlashChkPlay : "Аутоматски старт", |
DlgFlashChkLoop : "Понављај", |
DlgFlashChkMenu : "Укључи флеш мени", |
DlgFlashScale : "Скалирај", |
DlgFlashScaleAll : "Прикажи све", |
DlgFlashScaleNoBorder : "Без ивице", |
DlgFlashScaleFit : "Попуни површину", |
// Link Dialog |
DlgLnkWindowTitle : "Линк", |
DlgLnkInfoTab : "Линк инфо", |
DlgLnkTargetTab : "Мета", |
DlgLnkType : "Врста линка", |
DlgLnkTypeURL : "URL", |
DlgLnkTypeAnchor : "Сидро на овој страници", |
DlgLnkTypeEMail : "Eлектронска пошта", |
DlgLnkProto : "Протокол", |
DlgLnkProtoOther : "<друго>", |
DlgLnkURL : "УРЛ", |
DlgLnkAnchorSel : "Одабери сидро", |
DlgLnkAnchorByName : "По називу сидра", |
DlgLnkAnchorById : "Пo Ид-jу елемента", |
DlgLnkNoAnchors : "<Нема доступних сидра>", |
DlgLnkEMail : "Адреса електронске поште", |
DlgLnkEMailSubject : "Наслов", |
DlgLnkEMailBody : "Садржај поруке", |
DlgLnkUpload : "Пошаљи", |
DlgLnkBtnUpload : "Пошаљи на сервер", |
DlgLnkTarget : "Meтa", |
DlgLnkTargetFrame : "<оквир>", |
DlgLnkTargetPopup : "<искачући прозор>", |
DlgLnkTargetBlank : "Нови прозор (_blank)", |
DlgLnkTargetParent : "Родитељски прозор (_parent)", |
DlgLnkTargetSelf : "Исти прозор (_self)", |
DlgLnkTargetTop : "Прозор на врху (_top)", |
DlgLnkTargetFrameName : "Назив одредишног фрејма", |
DlgLnkPopWinName : "Назив искачућег прозора", |
DlgLnkPopWinFeat : "Могућности искачућег прозора", |
DlgLnkPopResize : "Променљива величина", |
DlgLnkPopLocation : "Локација", |
DlgLnkPopMenu : "Контекстни мени", |
DlgLnkPopScroll : "Скрол бар", |
DlgLnkPopStatus : "Статусна линија", |
DlgLnkPopToolbar : "Toolbar", |
DlgLnkPopFullScrn : "Приказ преко целог екрана (ИE)", |
DlgLnkPopDependent : "Зависно (Netscape)", |
DlgLnkPopWidth : "Ширина", |
DlgLnkPopHeight : "Висина", |
DlgLnkPopLeft : "Од леве ивице екрана (пиксела)", |
DlgLnkPopTop : "Од врха екрана (пиксела)", |
DlnLnkMsgNoUrl : "Унесите УРЛ линка", |
DlnLnkMsgNoEMail : "Откуцајте адресу електронске поште", |
DlnLnkMsgNoAnchor : "Одаберите сидро", |
DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING |
// Color Dialog |
DlgColorTitle : "Одаберите боју", |
DlgColorBtnClear : "Обриши", |
DlgColorHighlight : "Посветли", |
DlgColorSelected : "Одабери", |
// Smiley Dialog |
DlgSmileyTitle : "Унеси смајлија", |
// Special Character Dialog |
DlgSpecialCharTitle : "Одаберите специјални карактер", |
// Table Dialog |
DlgTableTitle : "Особине табеле", |
DlgTableRows : "Редова", |
DlgTableColumns : "Kолона", |
DlgTableBorder : "Величина оквира", |
DlgTableAlign : "Равнање", |
DlgTableAlignNotSet : "<није постављено>", |
DlgTableAlignLeft : "Лево", |
DlgTableAlignCenter : "Средина", |
DlgTableAlignRight : "Десно", |
DlgTableWidth : "Ширина", |
DlgTableWidthPx : "пиксела", |
DlgTableWidthPc : "процената", |
DlgTableHeight : "Висина", |
DlgTableCellSpace : "Ћелијски простор", |
DlgTableCellPad : "Размак ћелија", |
DlgTableCaption : "Наслов табеле", |
DlgTableSummary : "Summary", //MISSING |
// Table Cell Dialog |
DlgCellTitle : "Особине ћелије", |
DlgCellWidth : "Ширина", |
DlgCellWidthPx : "пиксела", |
DlgCellWidthPc : "процената", |
DlgCellHeight : "Висина", |
DlgCellWordWrap : "Дељење речи", |
DlgCellWordWrapNotSet : "<није постављено>", |
DlgCellWordWrapYes : "Да", |
DlgCellWordWrapNo : "Не", |
DlgCellHorAlign : "Водоравно равнање", |
DlgCellHorAlignNotSet : "<није постављено>", |
DlgCellHorAlignLeft : "Лево", |
DlgCellHorAlignCenter : "Средина", |
DlgCellHorAlignRight: "Десно", |
DlgCellVerAlign : "Вертикално равнање", |
DlgCellVerAlignNotSet : "<није постављено>", |
DlgCellVerAlignTop : "Горње", |
DlgCellVerAlignMiddle : "Средина", |
DlgCellVerAlignBottom : "Доње", |
DlgCellVerAlignBaseline : "Базно", |
DlgCellRowSpan : "Спајање редова", |
DlgCellCollSpan : "Спајање колона", |
DlgCellBackColor : "Боја позадине", |
DlgCellBorderColor : "Боја оквира", |
DlgCellBtnSelect : "Oдабери...", |
// Find Dialog |
DlgFindTitle : "Пронађи", |
DlgFindFindBtn : "Пронађи", |
DlgFindNotFoundMsg : "Тражени текст није пронађен.", |
// Replace Dialog |
DlgReplaceTitle : "Замени", |
DlgReplaceFindLbl : "Пронађи:", |
DlgReplaceReplaceLbl : "Замени са:", |
DlgReplaceCaseChk : "Разликуј велика и мала слова", |
DlgReplaceReplaceBtn : "Замени", |
DlgReplaceReplAllBtn : "Замени све", |
DlgReplaceWordChk : "Упореди целе речи", |
// Paste Operations / Dialog |
PasteErrorPaste : "Сигурносна подешавања Вашег претраживача не дозвољавају операције аутоматског лепљења текста. Молимо Вас да користите пречицу са тастатуре (Ctrl+V).", |
PasteErrorCut : "Сигурносна подешавања Вашег претраживача не дозвољавају операције аутоматског исецања текста. Молимо Вас да користите пречицу са тастатуре (Ctrl+X).", |
PasteErrorCopy : "Сигурносна подешавања Вашег претраживача не дозвољавају операције аутоматског копирања текста. Молимо Вас да користите пречицу са тастатуре (Ctrl+C).", |
PasteAsText : "Залепи као чист текст", |
PasteFromWord : "Залепи из Worda", |
DlgPasteMsg2 : "Молимо Вас да залепите унутар доње површине користећи тастатурну пречицу (<STRONG>Ctrl+V</STRONG>) и да притиснете <STRONG>OK</STRONG>.", |
DlgPasteIgnoreFont : "Игнориши Font Face дефиниције", |
DlgPasteRemoveStyles : "Уклони дефиниције стилова", |
DlgPasteCleanBox : "Обриши све", |
// Color Picker |
ColorAutomatic : "Аутоматски", |
ColorMoreColors : "Више боја...", |
// Document Properties |
DocProps : "Особине документа", |
// Anchor Dialog |
DlgAnchorTitle : "Особине сидра", |
DlgAnchorName : "Име сидра", |
DlgAnchorErrorName : "Молимо Вас да унесете име сидра", |
// Speller Pages Dialog |
DlgSpellNotInDic : "Није у речнику", |
DlgSpellChangeTo : "Измени", |
DlgSpellBtnIgnore : "Игнориши", |
DlgSpellBtnIgnoreAll : "Игнориши све", |
DlgSpellBtnReplace : "Замени", |
DlgSpellBtnReplaceAll : "Замени све", |
DlgSpellBtnUndo : "Врати акцију", |
DlgSpellNoSuggestions : "- Без сугестија -", |
DlgSpellProgress : "Провера спеловања у току...", |
DlgSpellNoMispell : "Провера спеловања завршена: грешке нису пронађене", |
DlgSpellNoChanges : "Провера спеловања завршена: Није измењена ниједна реч", |
DlgSpellOneChange : "Провера спеловања завршена: Измењена је једна реч", |
DlgSpellManyChanges : "Провера спеловања завршена: %1 реч(и) је измењено", |
IeSpellDownload : "Провера спеловања није инсталирана. Да ли желите да је скинете са Интернета?", |
// Button Dialog |
DlgButtonText : "Текст (вредност)", |
DlgButtonType : "Tип", |
DlgButtonTypeBtn : "Button", //MISSING |
DlgButtonTypeSbm : "Submit", //MISSING |
DlgButtonTypeRst : "Reset", //MISSING |
// Checkbox and Radio Button Dialogs |
DlgCheckboxName : "Назив", |
DlgCheckboxValue : "Вредност", |
DlgCheckboxSelected : "Означено", |
// Form Dialog |
DlgFormName : "Назив", |
DlgFormAction : "Aкција", |
DlgFormMethod : "Mетода", |
// Select Field Dialog |
DlgSelectName : "Назив", |
DlgSelectValue : "Вредност", |
DlgSelectSize : "Величина", |
DlgSelectLines : "линија", |
DlgSelectChkMulti : "Дозволи вишеструку селекцију", |
DlgSelectOpAvail : "Доступне опције", |
DlgSelectOpText : "Текст", |
DlgSelectOpValue : "Вредност", |
DlgSelectBtnAdd : "Додај", |
DlgSelectBtnModify : "Измени", |
DlgSelectBtnUp : "Горе", |
DlgSelectBtnDown : "Доле", |
DlgSelectBtnSetValue : "Подеси као означену вредност", |
DlgSelectBtnDelete : "Обриши", |
// Textarea Dialog |
DlgTextareaName : "Назив", |
DlgTextareaCols : "Број колона", |
DlgTextareaRows : "Број редова", |
// Text Field Dialog |
DlgTextName : "Назив", |
DlgTextValue : "Вредност", |
DlgTextCharWidth : "Ширина (карактера)", |
DlgTextMaxChars : "Максимално карактера", |
DlgTextType : "Тип", |
DlgTextTypeText : "Текст", |
DlgTextTypePass : "Лозинка", |
// Hidden Field Dialog |
DlgHiddenName : "Назив", |
DlgHiddenValue : "Вредност", |
// Bulleted List Dialog |
BulletedListProp : "Особине Bulleted листе", |
NumberedListProp : "Особине набројиве листе", |
DlgLstStart : "Start", //MISSING |
DlgLstType : "Тип", |
DlgLstTypeCircle : "Круг", |
DlgLstTypeDisc : "Disc", //MISSING |
DlgLstTypeSquare : "Квадрат", |
DlgLstTypeNumbers : "Бројеви (1, 2, 3)", |
DlgLstTypeLCase : "мала слова (a, b, c)", |
DlgLstTypeUCase : "ВЕЛИКА СЛОВА (A, B, C)", |
DlgLstTypeSRoman : "Мале римске цифре (i, ii, iii)", |
DlgLstTypeLRoman : "Велике римске цифре (I, II, III)", |
// Document Properties Dialog |
DlgDocGeneralTab : "Опште особине", |
DlgDocBackTab : "Позадина", |
DlgDocColorsTab : "Боје и маргине", |
DlgDocMetaTab : "Метаподаци", |
DlgDocPageTitle : "Наслов странице", |
DlgDocLangDir : "Смер језика", |
DlgDocLangDirLTR : "Слева надесно (LTR)", |
DlgDocLangDirRTL : "Здесна налево (RTL)", |
DlgDocLangCode : "Шифра језика", |
DlgDocCharSet : "Кодирање скупа карактера", |
DlgDocCharSetCE : "Central European", //MISSING |
DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING |
DlgDocCharSetCR : "Cyrillic", //MISSING |
DlgDocCharSetGR : "Greek", //MISSING |
DlgDocCharSetJP : "Japanese", //MISSING |
DlgDocCharSetKR : "Korean", //MISSING |
DlgDocCharSetTR : "Turkish", //MISSING |
DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING |
DlgDocCharSetWE : "Western European", //MISSING |
DlgDocCharSetOther : "Остала кодирања скупа карактера", |
DlgDocDocType : "Заглавље типа документа", |
DlgDocDocTypeOther : "Остала заглавља типа документа", |
DlgDocIncXHTML : "Улључи XHTML декларације", |
DlgDocBgColor : "Боја позадине", |
DlgDocBgImage : "УРЛ позадинске слике", |
DlgDocBgNoScroll : "Фиксирана позадина", |
DlgDocCText : "Текст", |
DlgDocCLink : "Линк", |
DlgDocCVisited : "Посећени линк", |
DlgDocCActive : "Активни линк", |
DlgDocMargins : "Маргине странице", |
DlgDocMaTop : "Горња", |
DlgDocMaLeft : "Лева", |
DlgDocMaRight : "Десна", |
DlgDocMaBottom : "Доња", |
DlgDocMeIndex : "Кључне речи за индексирање документа (раздвојене зарезом)", |
DlgDocMeDescr : "Опис документа", |
DlgDocMeAuthor : "Аутор", |
DlgDocMeCopy : "Ауторска права", |
DlgDocPreview : "Изглед странице", |
// Templates Dialog |
Templates : "Обрасци", |
DlgTemplatesTitle : "Обрасци за садржај", |
DlgTemplatesSelMsg : "Молимо Вас да одаберете образац који ће бити примењен на страницу (тренутни садржај ће бити обрисан):", |
DlgTemplatesLoading : "Учитавам листу образаца. Мало стрпљења...", |
DlgTemplatesNoTpl : "(Нема дефинисаних образаца)", |
DlgTemplatesReplace : "Replace actual contents", //MISSING |
// About Dialog |
DlgAboutAboutTab : "О едитору", |
DlgAboutBrowserInfoTab : "Информације о претраживачу", |
DlgAboutLicenseTab : "License", //MISSING |
DlgAboutVersion : "верзија", |
DlgAboutLicense : "Лиценцирано под условима GNU Lesser General Public License", |
DlgAboutInfo : "За више информација посетите" |
} |
/branches/v1.0-menes/api/fckeditor/editor/lang/da.js |
---|
New file |
0,0 → 1,503 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: da.js |
* Danish language file. |
* |
* File Authors: |
* Jørgen Nordstrøm (jn@FirstWeb.dk) |
* Jesper Michelsen (jm@i-deVision.dk) |
* Bo Brandt (bbr@dynamicweb.dk) |
*/ |
var FCKLang = |
{ |
// Language direction : "ltr" (left to right) or "rtl" (right to left). |
Dir : "ltr", |
ToolbarCollapse : "Skjul værktøjslinier", |
ToolbarExpand : "Vis værktøjslinier", |
// Toolbar Items and Context Menu |
Save : "Gem", |
NewPage : "Ny side", |
Preview : "Vis eksempel", |
Cut : "Klip", |
Copy : "Kopier", |
Paste : "Indsæt", |
PasteText : "Indsæt som ikke-formateret tekst", |
PasteWord : "Indsæt fra Word", |
Print : "Udskriv", |
SelectAll : "Vælg alt", |
RemoveFormat : "Fjern formatering", |
InsertLinkLbl : "Hyperlink", |
InsertLink : "Indsæt/rediger hyperlink", |
RemoveLink : "Fjern hyperlink", |
Anchor : "Indsæt/rediger bogmærke", |
InsertImageLbl : "Indsæt billede", |
InsertImage : "Indsæt/rediger billede", |
InsertFlashLbl : "Flash", |
InsertFlash : "Indsæt/rediger Flash", |
InsertTableLbl : "Table", |
InsertTable : "Indsæt/rediger tabel", |
InsertLineLbl : "Linie", |
InsertLine : "Indsæt vandret linie", |
InsertSpecialCharLbl: "Symbol", |
InsertSpecialChar : "Indsæt symbol", |
InsertSmileyLbl : "Smiley", |
InsertSmiley : "Indsæt smiley", |
About : "Om FCKeditor", |
Bold : "Fed", |
Italic : "Kursiv", |
Underline : "Understreget", |
StrikeThrough : "Overstreget", |
Subscript : "Sænket skrift", |
Superscript : "Hævet skrift", |
LeftJustify : "Venstrestillet", |
CenterJustify : "Centreret", |
RightJustify : "Højrestillet", |
BlockJustify : "Lige margener", |
DecreaseIndent : "Formindsk indrykning", |
IncreaseIndent : "Forøg indrykning", |
Undo : "Fortryd", |
Redo : "Annuller fortryd", |
NumberedListLbl : "Talopstilling", |
NumberedList : "Indsæt/fjern talopstilling", |
BulletedListLbl : "Punktopstilling", |
BulletedList : "Indsæt/fjern punktopstilling", |
ShowTableBorders : "Vis tabelkanter", |
ShowDetails : "Vis detaljer", |
Style : "Typografi", |
FontFormat : "Formatering", |
Font : "Skrifttype", |
FontSize : "Skriftstørrelse", |
TextColor : "Tekstfarve", |
BGColor : "Baggrundsfarve", |
Source : "Kilde", |
Find : "Søg", |
Replace : "Erstat", |
SpellCheck : "Stavekontrol", |
UniversalKeyboard : "Universaltastatur", |
PageBreakLbl : "Sidskift", |
PageBreak : "Indsæt sideskift", |
Form : "Indsæt formular", |
Checkbox : "Indsæt afkrydsningsfelt", |
RadioButton : "Indsæt alternativknap", |
TextField : "Indsæt tekstfelt", |
Textarea : "Indsæt tekstboks", |
HiddenField : "Indsæt skjult felt", |
Button : "Indsæt knap", |
SelectionField : "Indsæt liste", |
ImageButton : "Indsæt billedknap", |
FitWindow : "Maksimer editor vinduet", |
// Context Menu |
EditLink : "Rediger hyperlink", |
CellCM : "Celle", |
RowCM : "Række", |
ColumnCM : "Kolonne", |
InsertRow : "Indsæt række", |
DeleteRows : "Slet række", |
InsertColumn : "Indsæt kolonne", |
DeleteColumns : "Slet kolonne", |
InsertCell : "Indsæt celle", |
DeleteCells : "Slet celle", |
MergeCells : "Flet celler", |
SplitCell : "Opdel celle", |
TableDelete : "Slet tabel", |
CellProperties : "Egenskaber for celle", |
TableProperties : "Egenskaber for tabel", |
ImageProperties : "Egenskaber for billede", |
FlashProperties : "Egenskaber for Flash", |
AnchorProp : "Egenskaber for bogmærke", |
ButtonProp : "Egenskaber for knap", |
CheckboxProp : "Egenskaber for afkrydsningsfelt", |
HiddenFieldProp : "Egenskaber for skjult felt", |
RadioButtonProp : "Egenskaber for alternativknap", |
ImageButtonProp : "Egenskaber for billedknap", |
TextFieldProp : "Egenskaber for tekstfelt", |
SelectionFieldProp : "Egenskaber for liste", |
TextareaProp : "Egenskaber for tekstboks", |
FormProp : "Egenskaber for formular", |
FontFormats : "Normal;Formateret;Adresse;Overskrift 1;Overskrift 2;Overskrift 3;Overskrift 4;Overskrift 5;Overskrift 6;Normal (DIV)", |
// Alerts and Messages |
ProcessingXHTML : "Behandler XHTML...", |
Done : "Færdig", |
PasteWordConfirm : "Den tekst du forsøger at indsætte ser ud til at komme fra Word.<br>Vil du rense teksten før den indsættes?", |
NotCompatiblePaste : "Denne kommando er tilgændelig i Internet Explorer 5.5 eller senere.<br>Vil du indsætte teksten uden at rense den ?", |
UnknownToolbarItem : "Ukendt værktøjslinjeobjekt \"%1\"!", |
UnknownCommand : "Ukendt kommandonavn \"%1\"!", |
NotImplemented : "Kommandoen er ikke implementeret!", |
UnknownToolbarSet : "Værktøjslinjen \"%1\" eksisterer ikke!", |
NoActiveX : "Din browsers sikkerhedsindstillinger begrænser nogle af editorens muligheder.<br>Slå \"Kør ActiveX-objekter og plug-ins\" til, ellers vil du opleve fejl og manglende muligheder.", |
BrowseServerBlocked : "Browseren kunne ikke åbne de nødvendige ressourcer!<br>Slå pop-up blokering fra.", |
DialogBlocked : "Dialogvinduet kunne ikke åbnes!<br>Slå pop-up blokering fra.", |
// Dialogs |
DlgBtnOK : "OK", |
DlgBtnCancel : "Annuller", |
DlgBtnClose : "Luk", |
DlgBtnBrowseServer : "Gennemse...", |
DlgAdvancedTag : "Avanceret", |
DlgOpOther : "<Andet>", |
DlgInfoTab : "Generelt", |
DlgAlertUrl : "Indtast URL", |
// General Dialogs Labels |
DlgGenNotSet : "<intet valgt>", |
DlgGenId : "Id", |
DlgGenLangDir : "Tekstretning", |
DlgGenLangDirLtr : "Fra venstre mod højre (LTR)", |
DlgGenLangDirRtl : "Fra højre mod venstre (RTL)", |
DlgGenLangCode : "Sprogkode", |
DlgGenAccessKey : "Genvejstast", |
DlgGenName : "Navn", |
DlgGenTabIndex : "Tabulator indeks", |
DlgGenLongDescr : "Udvidet beskrivelse", |
DlgGenClass : "Typografiark", |
DlgGenTitle : "Titel", |
DlgGenContType : "Indholdstype", |
DlgGenLinkCharset : "Tegnsæt", |
DlgGenStyle : "Typografi", |
// Image Dialog |
DlgImgTitle : "Egenskaber for billede", |
DlgImgInfoTab : "Generelt", |
DlgImgBtnUpload : "Upload", |
DlgImgURL : "URL", |
DlgImgUpload : "Upload", |
DlgImgAlt : "Alternativ tekst", |
DlgImgWidth : "Bredde", |
DlgImgHeight : "Højde", |
DlgImgLockRatio : "Lås størrelsesforhold", |
DlgBtnResetSize : "Nulstil størrelse", |
DlgImgBorder : "Ramme", |
DlgImgHSpace : "HMargen", |
DlgImgVSpace : "VMargen", |
DlgImgAlign : "Justering", |
DlgImgAlignLeft : "Venstre", |
DlgImgAlignAbsBottom: "Absolut nederst", |
DlgImgAlignAbsMiddle: "Absolut centreret", |
DlgImgAlignBaseline : "Grundlinje", |
DlgImgAlignBottom : "Nederst", |
DlgImgAlignMiddle : "Centreret", |
DlgImgAlignRight : "Højre", |
DlgImgAlignTextTop : "Toppen af teksten", |
DlgImgAlignTop : "Øverst", |
DlgImgPreview : "Vis eksempel", |
DlgImgAlertUrl : "Indtast stien til billedet", |
DlgImgLinkTab : "Hyperlink", |
// Flash Dialog |
DlgFlashTitle : "Egenskaber for Flash", |
DlgFlashChkPlay : "Automatisk afspilning", |
DlgFlashChkLoop : "Gentagelse", |
DlgFlashChkMenu : "Vis Flash menu", |
DlgFlashScale : "Skalér", |
DlgFlashScaleAll : "Vis alt", |
DlgFlashScaleNoBorder : "Ingen ramme", |
DlgFlashScaleFit : "Tilpas størrelse", |
// Link Dialog |
DlgLnkWindowTitle : "Egenskaber for hyperlink", |
DlgLnkInfoTab : "Generelt", |
DlgLnkTargetTab : "Mål", |
DlgLnkType : "Hyperlink type", |
DlgLnkTypeURL : "URL", |
DlgLnkTypeAnchor : "Bogmærke på denne side", |
DlgLnkTypeEMail : "E-mail", |
DlgLnkProto : "Protokol", |
DlgLnkProtoOther : "<anden>", |
DlgLnkURL : "URL", |
DlgLnkAnchorSel : "Vælg et anker", |
DlgLnkAnchorByName : "Efter anker navn", |
DlgLnkAnchorById : "Efter element Id", |
DlgLnkNoAnchors : "<Ingen bogmærker dokumentet>", |
DlgLnkEMail : "E-mailadresse", |
DlgLnkEMailSubject : "Emne", |
DlgLnkEMailBody : "Brødtekst", |
DlgLnkUpload : "Upload", |
DlgLnkBtnUpload : "Upload", |
DlgLnkTarget : "Mål", |
DlgLnkTargetFrame : "<ramme>", |
DlgLnkTargetPopup : "<popup vindue>", |
DlgLnkTargetBlank : "Nyt vindue (_blank)", |
DlgLnkTargetParent : "Overordnet ramme (_parent)", |
DlgLnkTargetSelf : "Samme vindue (_self)", |
DlgLnkTargetTop : "Hele vinduet (_top)", |
DlgLnkTargetFrameName : "Destinationsvinduets navn", |
DlgLnkPopWinName : "Pop-up vinduets navn", |
DlgLnkPopWinFeat : "Egenskaber for pop-up", |
DlgLnkPopResize : "Skalering", |
DlgLnkPopLocation : "Adresselinje", |
DlgLnkPopMenu : "Menulinje", |
DlgLnkPopScroll : "Scrollbars", |
DlgLnkPopStatus : "Statuslinje", |
DlgLnkPopToolbar : "Værktøjslinje", |
DlgLnkPopFullScrn : "Fuld skærm (IE)", |
DlgLnkPopDependent : "Koblet/dependent (Netscape)", |
DlgLnkPopWidth : "Bredde", |
DlgLnkPopHeight : "Højde", |
DlgLnkPopLeft : "Position fra venstre", |
DlgLnkPopTop : "Position fra toppen", |
DlnLnkMsgNoUrl : "Indtast hyperlink URL!", |
DlnLnkMsgNoEMail : "Indtast e-mailaddresse!", |
DlnLnkMsgNoAnchor : "Vælg bogmærke!", |
DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING |
// Color Dialog |
DlgColorTitle : "Vælg farve", |
DlgColorBtnClear : "Nulstil", |
DlgColorHighlight : "Markeret", |
DlgColorSelected : "Valgt", |
// Smiley Dialog |
DlgSmileyTitle : "Vælg smiley", |
// Special Character Dialog |
DlgSpecialCharTitle : "Vælg symbol", |
// Table Dialog |
DlgTableTitle : "Egenskaber for tabel", |
DlgTableRows : "Rækker", |
DlgTableColumns : "Kolonner", |
DlgTableBorder : "Rammebredde", |
DlgTableAlign : "Justering", |
DlgTableAlignNotSet : "<intet valgt>", |
DlgTableAlignLeft : "Venstrestillet", |
DlgTableAlignCenter : "Centreret", |
DlgTableAlignRight : "Højrestillet", |
DlgTableWidth : "Bredde", |
DlgTableWidthPx : "pixels", |
DlgTableWidthPc : "procent", |
DlgTableHeight : "Højde", |
DlgTableCellSpace : "Celleafstand", |
DlgTableCellPad : "Cellemargen", |
DlgTableCaption : "Titel", |
DlgTableSummary : "Resume", |
// Table Cell Dialog |
DlgCellTitle : "Egenskaber for celle", |
DlgCellWidth : "Bredde", |
DlgCellWidthPx : "pixels", |
DlgCellWidthPc : "procent", |
DlgCellHeight : "Højde", |
DlgCellWordWrap : "Orddeling", |
DlgCellWordWrapNotSet : "<intet valgt>", |
DlgCellWordWrapYes : "Ja", |
DlgCellWordWrapNo : "Nej", |
DlgCellHorAlign : "Vandret justering", |
DlgCellHorAlignNotSet : "<intet valgt>", |
DlgCellHorAlignLeft : "Venstrestillet", |
DlgCellHorAlignCenter : "Centreret", |
DlgCellHorAlignRight: "Højrestillet", |
DlgCellVerAlign : "Lodret justering", |
DlgCellVerAlignNotSet : "<intet valgt>", |
DlgCellVerAlignTop : "Øverst", |
DlgCellVerAlignMiddle : "Centreret", |
DlgCellVerAlignBottom : "Nederst", |
DlgCellVerAlignBaseline : "Grundlinje", |
DlgCellRowSpan : "Højde i antal rækker", |
DlgCellCollSpan : "Bredde i antal kolonner", |
DlgCellBackColor : "Baggrundsfarve", |
DlgCellBorderColor : "Rammefarve", |
DlgCellBtnSelect : "Vælg...", |
// Find Dialog |
DlgFindTitle : "Find", |
DlgFindFindBtn : "Find", |
DlgFindNotFoundMsg : "Søgeteksten blev ikke fundet!", |
// Replace Dialog |
DlgReplaceTitle : "Erstat", |
DlgReplaceFindLbl : "Søg efter:", |
DlgReplaceReplaceLbl : "Erstat med:", |
DlgReplaceCaseChk : "Forskel på store og små bogstaver", |
DlgReplaceReplaceBtn : "Erstat", |
DlgReplaceReplAllBtn : "Erstat alle", |
DlgReplaceWordChk : "Kun hele ord", |
// Paste Operations / Dialog |
PasteErrorPaste : "Din browsers sikkerhedsindstillinger tillader ikke editoren at indsætte tekst automatisk!<br>Brug i stedet tastaturet til at indsætte teksten (Ctrl+V).", |
PasteErrorCut : "Din browsers sikkerhedsindstillinger tillader ikke editoren at klippe tekst automatisk!<br>Brug i stedet tastaturet til at klippe teksten (Ctrl+X).", |
PasteErrorCopy : "Din browsers sikkerhedsindstillinger tillader ikke editoren at kopiere tekst automatisk!<br>Brug i stedet tastaturet til at kopiere teksten (Ctrl+C).", |
PasteAsText : "Indsæt som ikke-formateret tekst", |
PasteFromWord : "Indsæt fra Word", |
DlgPasteMsg2 : "Indsæt i feltet herunder (<STRONG>Ctrl+V</STRONG>) og klik <STRONG>OK</STRONG>.", |
DlgPasteIgnoreFont : "Ignorer font definitioner", |
DlgPasteRemoveStyles : "Ignorer typografi", |
DlgPasteCleanBox : "Slet indhold", |
// Color Picker |
ColorAutomatic : "Automatisk", |
ColorMoreColors : "Flere farver...", |
// Document Properties |
DocProps : "Egenskaber for dokument", |
// Anchor Dialog |
DlgAnchorTitle : "Egenskaber for bogmærke", |
DlgAnchorName : "Bogmærke navn", |
DlgAnchorErrorName : "Indtast bogmærke navn!", |
// Speller Pages Dialog |
DlgSpellNotInDic : "Ikke i ordbogen", |
DlgSpellChangeTo : "Forslag", |
DlgSpellBtnIgnore : "Ignorer", |
DlgSpellBtnIgnoreAll : "Ignorer alle", |
DlgSpellBtnReplace : "Erstat", |
DlgSpellBtnReplaceAll : "Erstat alle", |
DlgSpellBtnUndo : "Tilbage", |
DlgSpellNoSuggestions : "- ingen forslag -", |
DlgSpellProgress : "Stavekontrolen arbejder...", |
DlgSpellNoMispell : "Stavekontrol færdig: Ingen fejl fundet", |
DlgSpellNoChanges : "Stavekontrol færdig: Ingen ord ændret", |
DlgSpellOneChange : "Stavekontrol færdig: Et ord ændret", |
DlgSpellManyChanges : "Stavekontrol færdig: %1 ord ændret", |
IeSpellDownload : "Stavekontrol ikke installeret.<br>Vil du hente den nu?", |
// Button Dialog |
DlgButtonText : "Tekst", |
DlgButtonType : "Type", |
DlgButtonTypeBtn : "Button", //MISSING |
DlgButtonTypeSbm : "Submit", //MISSING |
DlgButtonTypeRst : "Reset", //MISSING |
// Checkbox and Radio Button Dialogs |
DlgCheckboxName : "Navn", |
DlgCheckboxValue : "Værdi", |
DlgCheckboxSelected : "Valgt", |
// Form Dialog |
DlgFormName : "Navn", |
DlgFormAction : "Handling", |
DlgFormMethod : "Metod", |
// Select Field Dialog |
DlgSelectName : "Navn", |
DlgSelectValue : "Værdi", |
DlgSelectSize : "Størrelse", |
DlgSelectLines : "linier", |
DlgSelectChkMulti : "Tillad flere valg", |
DlgSelectOpAvail : "Valgmuligheder", |
DlgSelectOpText : "Tekst", |
DlgSelectOpValue : "Værdi", |
DlgSelectBtnAdd : "Tilføj", |
DlgSelectBtnModify : "Rediger", |
DlgSelectBtnUp : "Op", |
DlgSelectBtnDown : "Ned", |
DlgSelectBtnSetValue : "Sæt som valgt", |
DlgSelectBtnDelete : "Slet", |
// Textarea Dialog |
DlgTextareaName : "Navn", |
DlgTextareaCols : "Kolonner", |
DlgTextareaRows : "Rækker", |
// Text Field Dialog |
DlgTextName : "Navn", |
DlgTextValue : "Værdi", |
DlgTextCharWidth : "Bredde (tegn)", |
DlgTextMaxChars : "Max antal tegn", |
DlgTextType : "Type", |
DlgTextTypeText : "Tekst", |
DlgTextTypePass : "Adgangskode", |
// Hidden Field Dialog |
DlgHiddenName : "Navn", |
DlgHiddenValue : "Værdi", |
// Bulleted List Dialog |
BulletedListProp : "Egenskaber for punktopstilling", |
NumberedListProp : "Egenskaber for talopstilling", |
DlgLstStart : "Start", //MISSING |
DlgLstType : "Type", |
DlgLstTypeCircle : "Cirkel", |
DlgLstTypeDisc : "Udfyldt cirkel", |
DlgLstTypeSquare : "Firkant", |
DlgLstTypeNumbers : "Nummereret (1, 2, 3)", |
DlgLstTypeLCase : "Små bogstaver (a, b, c)", |
DlgLstTypeUCase : "Store bogstaver (A, B, C)", |
DlgLstTypeSRoman : "Små romertal (i, ii, iii)", |
DlgLstTypeLRoman : "Store romertal (I, II, III)", |
// Document Properties Dialog |
DlgDocGeneralTab : "Generelt", |
DlgDocBackTab : "Baggrund", |
DlgDocColorsTab : "Farver og margen", |
DlgDocMetaTab : "Metadata", |
DlgDocPageTitle : "Sidetitel", |
DlgDocLangDir : "Sprog", |
DlgDocLangDirLTR : "Fra venstre mod højre (LTR)", |
DlgDocLangDirRTL : "Fra højre mod venstre (RTL)", |
DlgDocLangCode : "Landekode", |
DlgDocCharSet : "Tegnsæt kode", |
DlgDocCharSetCE : "Central European", //MISSING |
DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING |
DlgDocCharSetCR : "Cyrillic", //MISSING |
DlgDocCharSetGR : "Greek", //MISSING |
DlgDocCharSetJP : "Japanese", //MISSING |
DlgDocCharSetKR : "Korean", //MISSING |
DlgDocCharSetTR : "Turkish", //MISSING |
DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING |
DlgDocCharSetWE : "Western European", //MISSING |
DlgDocCharSetOther : "Anden tegnsæt kode", |
DlgDocDocType : "Dokumenttype kategori", |
DlgDocDocTypeOther : "Anden dokumenttype kategori", |
DlgDocIncXHTML : "Inkludere XHTML deklartion", |
DlgDocBgColor : "Baggrundsfarve", |
DlgDocBgImage : "Baggrundsbillede URL", |
DlgDocBgNoScroll : "Fastlåst baggrund", |
DlgDocCText : "Tekst", |
DlgDocCLink : "Hyperlink", |
DlgDocCVisited : "Besøgt hyperlink", |
DlgDocCActive : "Aktivt hyperlink", |
DlgDocMargins : "Sidemargen", |
DlgDocMaTop : "Øverst", |
DlgDocMaLeft : "Venstre", |
DlgDocMaRight : "Højre", |
DlgDocMaBottom : "Nederst", |
DlgDocMeIndex : "Dokument index nøgleord (kommasepareret)", |
DlgDocMeDescr : "Dokument beskrivelse", |
DlgDocMeAuthor : "Forfatter", |
DlgDocMeCopy : "Copyright", |
DlgDocPreview : "Vis", |
// Templates Dialog |
Templates : "Skabeloner", |
DlgTemplatesTitle : "Indholdsskabeloner", |
DlgTemplatesSelMsg : "Vælg den skabelon, som skal åbnes i editoren.<br>(Nuværende indhold vil blive overskrevet!):", |
DlgTemplatesLoading : "Henter liste over skabeloner...", |
DlgTemplatesNoTpl : "(Der er ikke defineret nogen skabelon!)", |
DlgTemplatesReplace : "Replace actual contents", //MISSING |
// About Dialog |
DlgAboutAboutTab : "Om", |
DlgAboutBrowserInfoTab : "Generelt", |
DlgAboutLicenseTab : "Licens", |
DlgAboutVersion : "version", |
DlgAboutLicense : "Licens under vilkår for GNU Lesser General Public License", |
DlgAboutInfo : "For yderlig information gå til" |
} |
/branches/v1.0-menes/api/fckeditor/editor/lang/tr.js |
---|
New file |
0,0 → 1,501 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: tr.js |
* Turkish language file. |
* |
* File Authors: |
* Bogac Guven (bogacmx@yahoo.com) |
*/ |
var FCKLang = |
{ |
// Language direction : "ltr" (left to right) or "rtl" (right to left). |
Dir : "ltr", |
ToolbarCollapse : "Araç Çubugunu Kapat", |
ToolbarExpand : "Araç Çubugunu Aç", |
// Toolbar Items and Context Menu |
Save : "Kaydet", |
NewPage : "Yeni Sayfa", |
Preview : "Ön Ä°zleme", |
Cut : "Kes", |
Copy : "Kopyala", |
Paste : "Yapıştır", |
PasteText : "Düzyazı Olarak YapıÅtır", |
PasteWord : "Word'den Yapıştır", |
Print : "Yazdır", |
SelectAll : "Tümünü Seç", |
RemoveFormat : "Biçimi Kaldır", |
InsertLinkLbl : "Köprü", |
InsertLink : "Köprü Ekle/Düzenle", |
RemoveLink : "Köprü Kaldır", |
Anchor : "Çapa Ekle/Düzenle", |
InsertImageLbl : "Resim", |
InsertImage : "Resim Ekle/Düzenle", |
InsertFlashLbl : "Flash", |
InsertFlash : "Flash Ekle/Düzenle", |
InsertTableLbl : "Tablo", |
InsertTable : "Tablo Ekle/Düzenle", |
InsertLineLbl : "Satır", |
InsertLine : "Yatay Satır Ekle", |
InsertSpecialCharLbl: "Özel Karakter", |
InsertSpecialChar : "Özel Karakter Ekle", |
InsertSmileyLbl : "İfade", |
InsertSmiley : "İfade Ekle", |
About : "FCKeditor Hakkında", |
Bold : "Kalın", |
Italic : "İtalik", |
Underline : "Altı Çizgili", |
StrikeThrough : "Üstü Çizgili", |
Subscript : "Alt Simge", |
Superscript : "Üst Simge", |
LeftJustify : "Sola Dayalı", |
CenterJustify : "Ortalanmış", |
RightJustify : "Sağa Dayalı", |
BlockJustify : "İki Kenara Yaslanmış", |
DecreaseIndent : "Sekme Azalt", |
IncreaseIndent : "Sekme Arttır", |
Undo : "Geri Al", |
Redo : "Tekrarla", |
NumberedListLbl : "Numaralı Liste", |
NumberedList : "Numaralı Liste Ekle/Kaldır", |
BulletedListLbl : "Simgeli Liste", |
BulletedList : "Simgeli Liste Ekle/Kaldır", |
ShowTableBorders : "Tablo Kenarlarını Göster", |
ShowDetails : "Detayları Göster", |
Style : "Stil", |
FontFormat : "Biçim", |
Font : "Yazı Tipi", |
FontSize : "Boyut", |
TextColor : "Yazı Rengi", |
BGColor : "Arka Renk", |
Source : "Kaynak", |
Find : "Bul", |
Replace : "Değiştir", |
SpellCheck : "Yazım Denetimi", |
UniversalKeyboard : "Evrensel Klavye", |
PageBreakLbl : "Sayfa sonu", |
PageBreak : "Sayfa Sonu Ekle", |
Form : "Form", |
Checkbox : "Onay Kutusu", |
RadioButton : "Seçenek DüÄmesi", |
TextField : "Metin Girişi", |
Textarea : "Çok Satırlı Metin", |
HiddenField : "Gizli Veri", |
Button : "DüÄme", |
SelectionField : "Seçim Mönüsü", |
ImageButton : "Resimli DüÄme", |
FitWindow : "Editör boyutunu büyüt", |
// Context Menu |
EditLink : "Köprü Düzenle", |
CellCM : "Hücre", |
RowCM : "Satır", |
ColumnCM : "Sütun", |
InsertRow : "Satır Ekle", |
DeleteRows : "Satır Sil", |
InsertColumn : "Sütun Ekle", |
DeleteColumns : "Sütun Sil", |
InsertCell : "Hücre Ekle", |
DeleteCells : "Hücre Sil", |
MergeCells : "Hücreleri BirleÅtir", |
SplitCell : "Hücre Böl", |
TableDelete : "Tabloyu Sil", |
CellProperties : "Hücre Özellikleri", |
TableProperties : "Tablo Özellikleri", |
ImageProperties : "Resim Özellikleri", |
FlashProperties : "Flash Özellikleri", |
AnchorProp : "Çapa Özellikleri", |
ButtonProp : "DüÄme Özellikleri", |
CheckboxProp : "Onay Kutusu Özellikleri", |
HiddenFieldProp : "Gizli Veri Özellikleri", |
RadioButtonProp : "Seçenek DüÄmesi Özellikleri", |
ImageButtonProp : "Resimli DüÄme Özellikleri", |
TextFieldProp : "Metin GiriÅi Özellikleri", |
SelectionFieldProp : "Seçim Mönüsü Özellikleri", |
TextareaProp : "Çok Satırlı Metin Özellikleri", |
FormProp : "Form Özellikleri", |
FontFormats : "Normal;Biçimli;Adres;BaÅlık 1;BaÅlık 2;BaÅlık 3;BaÅlık 4;BaÅlık 5;BaÅlık 6;Paragraf (DIV)", |
// Alerts and Messages |
ProcessingXHTML : "XHTML iÅleniyor. Lütfen bekleyin...", |
Done : "Bitti", |
PasteWordConfirm : "YapıÅtırdıÄınız yazı Word'den gelmiÅe benziyor. YapıÅtırmadan önce gereksiz eklentileri silmek ister misiniz?", |
NotCompatiblePaste : "Bu komut Internet Explorer 5.5 ve ileriki sürümleri için mevcuttur. Temizlenmeden yapıÅtırılmasını ister misiniz ?", |
UnknownToolbarItem : "Bilinmeyen araç çubugu öÄesi \"%1\"", |
UnknownCommand : "Bilinmeyen komut \"%1\"", |
NotImplemented : "Komut uyarlanamadı", |
UnknownToolbarSet : "\"%1\" araç çubuÄu öÄesi mevcut deÄil", |
NoActiveX : "KullandıÄınız tarayıcının güvenlik ayarları bazı özelliklerin kullanılmasını engelliyor. Bu özelliklerin çalıÅması için \"Run ActiveX controls and plug-ins (Activex ve eklentileri çalıÅtır)\" seçeneÄinin aktif yapılması gerekiyor. Kullanılamayan eklentiler ve hatalar konusunda daha fazla bilgi sahibi olun.", |
BrowseServerBlocked : "Kaynak tarayıcısı açılamadı. Tüm \"popup blocker\" programlarının devre dıÅı olduÄundan emin olun. (Yahoo toolbar, Msn toolbar, Google toolbar gibi)", |
DialogBlocked : "diyalog açmak mümkün olmadı. Tüm \"Popup Blocker\" programlarının devre dıÅı olduÄundan emin olun.", |
// Dialogs |
DlgBtnOK : "Tamam", |
DlgBtnCancel : "İptal", |
DlgBtnClose : "Kapat", |
DlgBtnBrowseServer : "Sunucuyu Gez", |
DlgAdvancedTag : "Gelişmiş", |
DlgOpOther : "<Diğer>", |
DlgInfoTab : "Bilgi", |
DlgAlertUrl : "Lütfen URL girin", |
// General Dialogs Labels |
DlgGenNotSet : "<tanımlanmamış>", |
DlgGenId : "Kimlik", |
DlgGenLangDir : "Lisan Yönü", |
DlgGenLangDirLtr : "Soldan Sağa (LTR)", |
DlgGenLangDirRtl : "Sağdan Sola (RTL)", |
DlgGenLangCode : "Lisan Kodlaması", |
DlgGenAccessKey : "Erişim Tuşu", |
DlgGenName : "İsim", |
DlgGenTabIndex : "Sekme İndeksi", |
DlgGenLongDescr : "Uzun Tanımlı URL", |
DlgGenClass : "Stil Klasları", |
DlgGenTitle : "Danışma Baslığı", |
DlgGenContType : "DanıÅma Ä°çerik Türü", |
DlgGenLinkCharset : "Bağlı Kaynak Karakter Gurubu", |
DlgGenStyle : "Stil", |
// Image Dialog |
DlgImgTitle : "Resim Özellikleri", |
DlgImgInfoTab : "Resim Bilgisi", |
DlgImgBtnUpload : "Sunucuya Yolla", |
DlgImgURL : "URL", |
DlgImgUpload : "Karsıya Yükle", |
DlgImgAlt : "Alternatif Yazı", |
DlgImgWidth : "Genişlik", |
DlgImgHeight : "Yükseklik", |
DlgImgLockRatio : "Oranı Kilitle", |
DlgBtnResetSize : "Boyutu BaÅa Döndür", |
DlgImgBorder : "Kenar", |
DlgImgHSpace : "Yatay Boşluk", |
DlgImgVSpace : "Dikey Boşluk", |
DlgImgAlign : "Hizalama", |
DlgImgAlignLeft : "Sol", |
DlgImgAlignAbsBottom: "Tam Altı", |
DlgImgAlignAbsMiddle: "Tam Ortası", |
DlgImgAlignBaseline : "Taban Çizgisi", |
DlgImgAlignBottom : "Alt", |
DlgImgAlignMiddle : "Orta", |
DlgImgAlignRight : "Sağ", |
DlgImgAlignTextTop : "Yazı Tepeye", |
DlgImgAlignTop : "Tepe", |
DlgImgPreview : "Ön Ä°zleme", |
DlgImgAlertUrl : "Lütfen resmin URL'sini yazınız", |
DlgImgLinkTab : "Köprü", |
// Flash Dialog |
DlgFlashTitle : "Flash Özellikleri", |
DlgFlashChkPlay : "Otomatik Oynat", |
DlgFlashChkLoop : "Döngü", |
DlgFlashChkMenu : "Flash Mönüsünü Kullan", |
DlgFlashScale : "Boyutlandır", |
DlgFlashScaleAll : "Hepsini Göster", |
DlgFlashScaleNoBorder : "Kenar Yok", |
DlgFlashScaleFit : "Tam Sığdır", |
// Link Dialog |
DlgLnkWindowTitle : "Köprü", |
DlgLnkInfoTab : "Köprü Bilgisi", |
DlgLnkTargetTab : "Hedef", |
DlgLnkType : "Köprü Türü", |
DlgLnkTypeURL : "URL", |
DlgLnkTypeAnchor : "Bu sayfada çapa", |
DlgLnkTypeEMail : "E-Posta", |
DlgLnkProto : "Protokol", |
DlgLnkProtoOther : "<diğer>", |
DlgLnkURL : "URL", |
DlgLnkAnchorSel : "Çapa Seç", |
DlgLnkAnchorByName : "Çapa Ä°smi ile", |
DlgLnkAnchorById : "Eleman Id ile", |
DlgLnkNoAnchors : "<Bu dokümanda hiç çapa yok>", |
DlgLnkEMail : "E-Posta Adresi", |
DlgLnkEMailSubject : "Mesaj Konusu", |
DlgLnkEMailBody : "Mesaj Vücudu", |
DlgLnkUpload : "KarÅıya Yükle", |
DlgLnkBtnUpload : "Sunucuya Gönder", |
DlgLnkTarget : "Hedef", |
DlgLnkTargetFrame : "<çerçeve>", |
DlgLnkTargetPopup : "<yeni açılan pencere>", |
DlgLnkTargetBlank : "Yeni Pencere(_blank)", |
DlgLnkTargetParent : "Anne Pencere (_parent)", |
DlgLnkTargetSelf : "Kendi Penceresi (_self)", |
DlgLnkTargetTop : "En Üst Pencere (_top)", |
DlgLnkTargetFrameName : "Hedef Çerçeve Ä°smi", |
DlgLnkPopWinName : "Yeni Açılan Pencere Ä°smi", |
DlgLnkPopWinFeat : "Yeni Açılan Pencere Özellikleri", |
DlgLnkPopResize : "Boyutlandırılabilir", |
DlgLnkPopLocation : "Yer ÇubuÄu", |
DlgLnkPopMenu : "Mönü ÇubuÄu", |
DlgLnkPopScroll : "Kaydırma Çubukları", |
DlgLnkPopStatus : "Statü ÇubuÄu", |
DlgLnkPopToolbar : "Araç ÇubuÄu", |
DlgLnkPopFullScrn : "Tam Ekran (IE)", |
DlgLnkPopDependent : "Bağlı-Dependent- (Netscape)", |
DlgLnkPopWidth : "Genişlik", |
DlgLnkPopHeight : "Yükseklik", |
DlgLnkPopLeft : "Sola Göre Pozisyon", |
DlgLnkPopTop : "Yukarıya Göre Pozisyon", |
DlnLnkMsgNoUrl : "Lütfen köprü URL'sini yazın", |
DlnLnkMsgNoEMail : "Lütfen E-posta adresini yazın", |
DlnLnkMsgNoAnchor : "Lütfen bir çapa seçin", |
DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING |
// Color Dialog |
DlgColorTitle : "Renk Seç", |
DlgColorBtnClear : "Temizle", |
DlgColorHighlight : "Belirle", |
DlgColorSelected : "SeçilmiÅ", |
// Smiley Dialog |
DlgSmileyTitle : "İfade Ekle", |
// Special Character Dialog |
DlgSpecialCharTitle : "Özel Karakter Seç", |
// Table Dialog |
DlgTableTitle : "Tablo Özellikleri", |
DlgTableRows : "Satırlar", |
DlgTableColumns : "Sütunlar", |
DlgTableBorder : "Kenar Kalınlığı", |
DlgTableAlign : "Hizalama", |
DlgTableAlignNotSet : "<Tanımlanmamış>", |
DlgTableAlignLeft : "Sol", |
DlgTableAlignCenter : "Merkez", |
DlgTableAlignRight : "Sağ", |
DlgTableWidth : "Genişlik", |
DlgTableWidthPx : "piksel", |
DlgTableWidthPc : "yüzde", |
DlgTableHeight : "Yükseklik", |
DlgTableCellSpace : "Izgara kalınlığı", |
DlgTableCellPad : "Izgara yazı arası", |
DlgTableCaption : "Başlık", |
DlgTableSummary : "Özet", |
// Table Cell Dialog |
DlgCellTitle : "Hücre Özellikleri", |
DlgCellWidth : "Genişlik", |
DlgCellWidthPx : "piksel", |
DlgCellWidthPc : "yüzde", |
DlgCellHeight : "Yükseklik", |
DlgCellWordWrap : "Sözcük Kaydır", |
DlgCellWordWrapNotSet : "<Tanımlanmamış>", |
DlgCellWordWrapYes : "Evet", |
DlgCellWordWrapNo : "Hayır", |
DlgCellHorAlign : "Yatay Hizalama", |
DlgCellHorAlignNotSet : "<Tanımlanmamış>", |
DlgCellHorAlignLeft : "Sol", |
DlgCellHorAlignCenter : "Merkez", |
DlgCellHorAlignRight: "Sağ", |
DlgCellVerAlign : "Dikey Hizalama", |
DlgCellVerAlignNotSet : "<Tanımlanmamış>", |
DlgCellVerAlignTop : "Tepe", |
DlgCellVerAlignMiddle : "Orta", |
DlgCellVerAlignBottom : "Alt", |
DlgCellVerAlignBaseline : "Taban Çizgisi", |
DlgCellRowSpan : "Satır Kapla", |
DlgCellCollSpan : "Sütun Kapla", |
DlgCellBackColor : "Arka Plan Rengi", |
DlgCellBorderColor : "Kenar Rengi", |
DlgCellBtnSelect : "Seç...", |
// Find Dialog |
DlgFindTitle : "Bul", |
DlgFindFindBtn : "Bul", |
DlgFindNotFoundMsg : "Belirtilen yazı bulunamadı.", |
// Replace Dialog |
DlgReplaceTitle : "Değiştir", |
DlgReplaceFindLbl : "Aranan:", |
DlgReplaceReplaceLbl : "Bununla değiştir:", |
DlgReplaceCaseChk : "Büyük/küçük harf duyarlı", |
DlgReplaceReplaceBtn : "Değiştir", |
DlgReplaceReplAllBtn : "Tümünü DeÄiÅtir", |
DlgReplaceWordChk : "Kelimenin tamamı uysun", |
// Paste Operations / Dialog |
PasteErrorPaste : "Gezgin yazılımınızın güvenlik ayarları editörün otomatik yapıÅtırma iÅlemine izin vermiyor. Ä°Ålem için (Ctrl+V) tuÅlarını kullanın.", |
PasteErrorCut : "Gezgin yazılımınızın güvenlik ayarları editörün otomatik kesme iÅlemine izin vermiyor. Ä°Ålem için (Ctrl+X) tuÅlarını kullanın.", |
PasteErrorCopy : "Gezgin yazılımınızın güvenlik ayarları editörün otomatik kopyalama iÅlemine izin vermiyor. Ä°Ålem için (Ctrl+C) tuÅlarını kullanın.", |
PasteAsText : "Düz Metin Olarak YapıÅtır", |
PasteFromWord : "Word'den yapıştır", |
DlgPasteMsg2 : "Lütfen aÅaÄıdaki kutunun içine yapıÅtırın. (<STRONG>Ctrl+V</STRONG>) ve <STRONG>Tamam</STRONG> butonunu tıklayın.", |
DlgPasteIgnoreFont : "Yazı Tipi tanımlarını yoksay", |
DlgPasteRemoveStyles : "Sitil Tanımlarını çıkar", |
DlgPasteCleanBox : "Temizlik Kutusu", |
// Color Picker |
ColorAutomatic : "Otomatik", |
ColorMoreColors : "Diğer renkler...", |
// Document Properties |
DocProps : "Doküman Özellikleri", |
// Anchor Dialog |
DlgAnchorTitle : "Çapa Özellikleri", |
DlgAnchorName : "Çapa Ä°smi", |
DlgAnchorErrorName : "Lütfen çapa için isim giriniz", |
// Speller Pages Dialog |
DlgSpellNotInDic : "Sözlükte Yok", |
DlgSpellChangeTo : "Şuna değiştir:", |
DlgSpellBtnIgnore : "Yoksay", |
DlgSpellBtnIgnoreAll : "Tümünü Yoksay", |
DlgSpellBtnReplace : "Değiştir", |
DlgSpellBtnReplaceAll : "Tümünü DeÄiÅtir", |
DlgSpellBtnUndo : "Geri Al", |
DlgSpellNoSuggestions : "- Öneri Yok -", |
DlgSpellProgress : "Yazım denetimi işlemde...", |
DlgSpellNoMispell : "Yazım denetimi tamamlandı: Yanlış yazıma rastlanmadı", |
DlgSpellNoChanges : "Yazım denetimi tamamlandı: Hiçbir kelime deÄiÅtirilmedi", |
DlgSpellOneChange : "Yazım denetimi tamamlandı: Bir kelime değiştirildi", |
DlgSpellManyChanges : "Yazım denetimi tamamlandı: %1 kelime değiştirildi", |
IeSpellDownload : "Yazım denetimi yüklenmemiÅ. Åimdi yüklemek ister misiniz?", |
// Button Dialog |
DlgButtonText : "Metin (Değer)", |
DlgButtonType : "Tip", |
DlgButtonTypeBtn : "Button", //MISSING |
DlgButtonTypeSbm : "Submit", //MISSING |
DlgButtonTypeRst : "Reset", //MISSING |
// Checkbox and Radio Button Dialogs |
DlgCheckboxName : "İsim", |
DlgCheckboxValue : "Değer", |
DlgCheckboxSelected : "Seçili", |
// Form Dialog |
DlgFormName : "İsim", |
DlgFormAction : "İşlem", |
DlgFormMethod : "Metod", |
// Select Field Dialog |
DlgSelectName : "İsim", |
DlgSelectValue : "Değer", |
DlgSelectSize : "Boyut", |
DlgSelectLines : "satır", |
DlgSelectChkMulti : "Çoklu seçime izin ver", |
DlgSelectOpAvail : "Mevcut Seçenekler", |
DlgSelectOpText : "Metin", |
DlgSelectOpValue : "Değer", |
DlgSelectBtnAdd : "Ekle", |
DlgSelectBtnModify : "Düzenle", |
DlgSelectBtnUp : "Yukari", |
DlgSelectBtnDown : "Aşağı", |
DlgSelectBtnSetValue : "Seçili deÄer olarak ata", |
DlgSelectBtnDelete : "Sil", |
// Textarea Dialog |
DlgTextareaName : "İsim", |
DlgTextareaCols : "Sütunlar", |
DlgTextareaRows : "Satırlar", |
// Text Field Dialog |
DlgTextName : "İsim", |
DlgTextValue : "Değer", |
DlgTextCharWidth : "Karakter Genişliği", |
DlgTextMaxChars : "En Fazla Karakter", |
DlgTextType : "Tip", |
DlgTextTypeText : "Metin", |
DlgTextTypePass : "Şifre", |
// Hidden Field Dialog |
DlgHiddenName : "İsim", |
DlgHiddenValue : "Değer", |
// Bulleted List Dialog |
BulletedListProp : "Simgeli Liste Özellikleri", |
NumberedListProp : "Numaralı Liste Özellikleri", |
DlgLstStart : "Start", //MISSING |
DlgLstType : "Tip", |
DlgLstTypeCircle : "Çember", |
DlgLstTypeDisc : "Disk", |
DlgLstTypeSquare : "Kare", |
DlgLstTypeNumbers : "Sayılar (1, 2, 3)", |
DlgLstTypeLCase : "Küçük Harfler (a, b, c)", |
DlgLstTypeUCase : "Büyük Harfler (A, B, C)", |
DlgLstTypeSRoman : "Küçük Romen Rakamları (i, ii, iii)", |
DlgLstTypeLRoman : "Büyük Romen Rakamları (I, II, III)", |
// Document Properties Dialog |
DlgDocGeneralTab : "Genel", |
DlgDocBackTab : "Arka Plan", |
DlgDocColorsTab : "Renkler ve Mesafeler", |
DlgDocMetaTab : "Tanım Bilgisi (Meta)", |
DlgDocPageTitle : "Sayfa Başlığı", |
DlgDocLangDir : "Lisan Yönü", |
DlgDocLangDirLTR : "Soldan Sağa (LTR)", |
DlgDocLangDirRTL : "Sağdan Sola (RTL)", |
DlgDocLangCode : "Lisan Kodu", |
DlgDocCharSet : "Karakter Kümesi Kodlaması", |
DlgDocCharSetCE : "Central European", //MISSING |
DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING |
DlgDocCharSetCR : "Cyrillic", //MISSING |
DlgDocCharSetGR : "Greek", //MISSING |
DlgDocCharSetJP : "Japanese", //MISSING |
DlgDocCharSetKR : "Korean", //MISSING |
DlgDocCharSetTR : "Turkish", //MISSING |
DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING |
DlgDocCharSetWE : "Western European", //MISSING |
DlgDocCharSetOther : "DiÄer Karakter Kümesi Kodlaması", |
DlgDocDocType : "Doküman Türü BaÅlıÄı", |
DlgDocDocTypeOther : "DiÄer Doküman Türü BaÅlıÄı", |
DlgDocIncXHTML : "XHTML Bildirimlerini Dahil Et", |
DlgDocBgColor : "Arka Plan Rengi", |
DlgDocBgImage : "Arka Plan Resim URLsi", |
DlgDocBgNoScroll : "Sabit Arka Plan", |
DlgDocCText : "Metin", |
DlgDocCLink : "Köprü", |
DlgDocCVisited : "Görülmüs Köprü", |
DlgDocCActive : "Aktif Köprü", |
DlgDocMargins : "Kenar Boşlukları", |
DlgDocMaTop : "Tepe", |
DlgDocMaLeft : "Sol", |
DlgDocMaRight : "Sağ", |
DlgDocMaBottom : "Alt", |
DlgDocMeIndex : "Doküman Ä°ndeksleme Anahtar Kelimeleri (virgülle ayrılmıÅ)", |
DlgDocMeDescr : "Doküman Tanımı", |
DlgDocMeAuthor : "Yazar", |
DlgDocMeCopy : "Telif", |
DlgDocPreview : "Ön Ä°zleme", |
// Templates Dialog |
Templates : "Düzenler", |
DlgTemplatesTitle : "Ä°çerik Düzenleri", |
DlgTemplatesSelMsg : "Editörde açmak için lütfen bir düzen seçin.<br>(hali hazırdaki içerik kaybolacaktır.):", |
DlgTemplatesLoading : "Düzenler listesi yüklenmekte. Lütfen bekleyiniz...", |
DlgTemplatesNoTpl : "(Belirli bir düzen seçilmedi)", |
DlgTemplatesReplace : "Replace actual contents", //MISSING |
// About Dialog |
DlgAboutAboutTab : "Hakkında", |
DlgAboutBrowserInfoTab : "Gezgin Bilgisi", |
DlgAboutLicenseTab : "Lisans", |
DlgAboutVersion : "versiyon", |
DlgAboutLicense : "GNU Kısıtlı Kamu Lisansı (LGPL) koşulları altında lisanslanmıştır", |
DlgAboutInfo : "Daha fazla bilgi için:" |
} |
/branches/v1.0-menes/api/fckeditor/editor/lang/fa.js |
---|
New file |
0,0 → 1,502 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fa.js |
* Persian language file. |
* |
* File Authors: |
* Hamed Taj-Abadi (hamed@ranginkaman.com) |
* Pooyan Mahdavi (pooyanmx -@- gmail -.- com) |
*/ |
var FCKLang = |
{ |
// Language direction : "ltr" (left to right) or "rtl" (right to left). |
Dir : "rtl", |
ToolbarCollapse : "برچیدن نوارابزار", |
ToolbarExpand : "گستردن نوارابزار", |
// Toolbar Items and Context Menu |
Save : "ذخیره", |
NewPage : "برگهٴ تازه", |
Preview : "پیشنمایش", |
Cut : "برش", |
Copy : "کپی", |
Paste : "چسباندن", |
PasteText : "چسباندن به عنوان متن ِساده", |
PasteWord : "چسباندن از Word", |
Print : "چاپ", |
SelectAll : "گزینش همه", |
RemoveFormat : "برداشتن فرمت", |
InsertLinkLbl : "پیوند", |
InsertLink : "گنجاندن/ویرایش ِپیوند", |
RemoveLink : "برداشتن پیوند", |
Anchor : "گنجاندن/ویرایش ِلنگر", |
InsertImageLbl : "تصویر", |
InsertImage : "گنجاندن/ویرایش ِتصویر", |
InsertFlashLbl : "Flash", |
InsertFlash : "گنجاندن/ویرایش ِFlash", |
InsertTableLbl : "جدول", |
InsertTable : "گنجاندن/ویرایش ِجدول", |
InsertLineLbl : "خط", |
InsertLine : "گنجاندن خط ِافقی", |
InsertSpecialCharLbl: "نویسهٴ ویژه", |
InsertSpecialChar : "گنجاندن نویسهٴ ویژه", |
InsertSmileyLbl : "خندانک", |
InsertSmiley : "گنجاندن خندانک", |
About : "دربارهٴ FCKeditor", |
Bold : "درشت", |
Italic : "خمیده", |
Underline : "خطزیردار", |
StrikeThrough : "میانخط", |
Subscript : "زیرنویس", |
Superscript : "بالانویس", |
LeftJustify : "چپچین", |
CenterJustify : "میانچین", |
RightJustify : "راستچین", |
BlockJustify : "بلوکچین", |
DecreaseIndent : "کاهش تورفتگی", |
IncreaseIndent : "افزایش تورفتگی", |
Undo : "واچیدن", |
Redo : "بازچیدن", |
NumberedListLbl : "فهرست شمارهدار", |
NumberedList : "گنجاندن/برداشتن فهرست شمارهدار", |
BulletedListLbl : "فهرست نقطهای", |
BulletedList : "گنجاندن/برداشتن فهرست نقطهای", |
ShowTableBorders : "نمایش لبهٴ جدول", |
ShowDetails : "نمایش جزئیات", |
Style : "سبک", |
FontFormat : "فرمت", |
Font : "قلم", |
FontSize : "اندازه", |
TextColor : "رنگ متن", |
BGColor : "رنگ پسزمینه", |
Source : "منبع", |
Find : "جستجو", |
Replace : "جایگزینی", |
SpellCheck : "بررسی املا", |
UniversalKeyboard : "صفحهکلید جهانی", |
PageBreakLbl : "شکستگی ِپایان ِبرگه", |
PageBreak : "گنجاندن شکستگی ِپایان ِبرگه", |
Form : "فرم", |
Checkbox : "خانهٴ گزینهای", |
RadioButton : "دکمهٴ رادیویی", |
TextField : "فیلد متنی", |
Textarea : "ناحیهٴ متنی", |
HiddenField : "فیلد پنهان", |
Button : "دکمه", |
SelectionField : "فیلد چندگزینهای", |
ImageButton : "دکمهٴ تصویری", |
FitWindow : "بیشینهسازی ِاندازهٴ ویرایشگر", |
// Context Menu |
EditLink : "ویرایش پیوند", |
CellCM : "سلول", |
RowCM : "سطر", |
ColumnCM : "ستون", |
InsertRow : "گنجاندن سطر", |
DeleteRows : "حذف سطرها", |
InsertColumn : "گنجاندن ستون", |
DeleteColumns : "حذف ستونها", |
InsertCell : "گنجاندن سلول", |
DeleteCells : "حذف سلولها", |
MergeCells : "ادغام سلولها", |
SplitCell : "جداسازی سلول", |
TableDelete : "پاککردن جدول", |
CellProperties : "ویژگیهای سلول", |
TableProperties : "ویژگیهای جدول", |
ImageProperties : "ویژگیهای تصویر", |
FlashProperties : "ویژگیهای Flash", |
AnchorProp : "ویژگیهای لنگر", |
ButtonProp : "ویژگیهای دکمه", |
CheckboxProp : "ویژگیهای خانهٴ گزینهای", |
HiddenFieldProp : "ویژگیهای فیلد پنهان", |
RadioButtonProp : "ویژگیهای دکمهٴ رادیویی", |
ImageButtonProp : "ویژگیهای دکمهٴ تصویری", |
TextFieldProp : "ویژگیهای فیلد متنی", |
SelectionFieldProp : "ویژگیهای فیلد چندگزینهای", |
TextareaProp : "ویژگیهای ناحیهٴ متنی", |
FormProp : "ویژگیهای فرم", |
FontFormats : "نرمال;فرمتشده;آدرس;سرنویس 1;سرنویس 2;سرنویس 3;سرنویس 4;سرنویس 5;سرنویس 6;بند;(DIV)", |
// Alerts and Messages |
ProcessingXHTML : "پردازش XHTML. لطفا صبر کنید...", |
Done : "انجام شد", |
PasteWordConfirm : "کپی شده است. آیا میخواهید قبل از چسباندن آن را پاکسازی کنید؟ Word متنی که میخواهید بچسبانید به نظر میرسد از", |
NotCompatiblePaste : "این فرمان برای مرورگر Internet Explorer از نگارش 5.5 یا بالاتر در دسترس است. آیا میخواهید بدون پاکسازی، متن را بچسبانید؟", |
UnknownToolbarItem : "فقرهٴ نوارابزار ناشناخته \"%1\"", |
UnknownCommand : "نام دستور ناشناخته \"%1\"", |
NotImplemented : "دستور پیادهسازینشده", |
UnknownToolbarSet : "مجموعهٴ نوارابزار \"%1\" وجود ندارد", |
NoActiveX : "تنظیمات امنیتی مرورگر شما ممکن است در بعضی از ویژگیهای مرورگر محدودیت ایجاد کند. شما باید گزینهٴ \"Run ActiveX controls and plug-ins\" را فعال کنید. ممکن است شما با خطاهایی روبرو باشید و متوجه کمبود ویژگیهایی شوید.", |
BrowseServerBlocked : "توانایی بازگشایی مرورگر منابع فراهم نیست. اطمینان حاصل کنید که تمامی برنامههای پیشگیری از نمایش popup را از کار بازداشتهاید.", |
DialogBlocked : "توانایی بازگشایی پنجرهٴ کوچک ِگفتگو فراهم نیست. اطمینان حاصل کنید که تمامی برنامههای پیشگیری از نمایش popup را از کار بازداشتهاید.", |
// Dialogs |
DlgBtnOK : "پذیرش", |
DlgBtnCancel : "انصراف", |
DlgBtnClose : "بستن", |
DlgBtnBrowseServer : "فهرستنمایی سرور", |
DlgAdvancedTag : "پیشرفته", |
DlgOpOther : "<غیره>", |
DlgInfoTab : "اطلاعات", |
DlgAlertUrl : "لطفاً URL را بنویسید", |
// General Dialogs Labels |
DlgGenNotSet : "<تعیننشده>", |
DlgGenId : "شناسه", |
DlgGenLangDir : "جهتنمای زبان", |
DlgGenLangDirLtr : "چپ به راست (LTR)", |
DlgGenLangDirRtl : "راست به چپ (RTL)", |
DlgGenLangCode : "کد زبان", |
DlgGenAccessKey : "کلید دستیابی", |
DlgGenName : "نام", |
DlgGenTabIndex : "نمایهٴ دسترسی با Tab", |
DlgGenLongDescr : "URL توصیف طولانی", |
DlgGenClass : "کلاسهای شیوهنامه(Stylesheet)", |
DlgGenTitle : "عنوان کمکی", |
DlgGenContType : "نوع محتوای کمکی", |
DlgGenLinkCharset : "نویسهگان منبع ِپیوندشده", |
DlgGenStyle : "شیوه(style)", |
// Image Dialog |
DlgImgTitle : "ویژگیهای تصویر", |
DlgImgInfoTab : "اطلاعات تصویر", |
DlgImgBtnUpload : "به سرور بفرست", |
DlgImgURL : "URL", |
DlgImgUpload : "انتقال به سرور", |
DlgImgAlt : "متن جایگزین", |
DlgImgWidth : "پهنا", |
DlgImgHeight : "درازا", |
DlgImgLockRatio : "قفلکردن ِنسبت", |
DlgBtnResetSize : "بازنشانی اندازه", |
DlgImgBorder : "لبه", |
DlgImgHSpace : "فاصلهٴ افقی", |
DlgImgVSpace : "فاصلهٴ عمودی", |
DlgImgAlign : "چینش", |
DlgImgAlignLeft : "چپ", |
DlgImgAlignAbsBottom: "پائین مطلق", |
DlgImgAlignAbsMiddle: "وسط مطلق", |
DlgImgAlignBaseline : "خطپایه", |
DlgImgAlignBottom : "پائین", |
DlgImgAlignMiddle : "وسط", |
DlgImgAlignRight : "راست", |
DlgImgAlignTextTop : "متن بالا", |
DlgImgAlignTop : "بالا", |
DlgImgPreview : "پیشنمایش", |
DlgImgAlertUrl : "لطفا URL تصویر را بنویسید", |
DlgImgLinkTab : "پیوند", |
// Flash Dialog |
DlgFlashTitle : "ویژگیهای Flash", |
DlgFlashChkPlay : "آغاز ِخودکار", |
DlgFlashChkLoop : "اجرای پیاپی", |
DlgFlashChkMenu : "دردسترسبودن منوی Flash", |
DlgFlashScale : "مقیاس", |
DlgFlashScaleAll : "نمایش همه", |
DlgFlashScaleNoBorder : "بدون کران", |
DlgFlashScaleFit : "جایگیری کامل", |
// Link Dialog |
DlgLnkWindowTitle : "پیوند", |
DlgLnkInfoTab : "اطلاعات پیوند", |
DlgLnkTargetTab : "مقصد", |
DlgLnkType : "نوع پیوند", |
DlgLnkTypeURL : "URL", |
DlgLnkTypeAnchor : "لنگر در همین صفحه", |
DlgLnkTypeEMail : "پست الکترونیکی", |
DlgLnkProto : "پروتکل", |
DlgLnkProtoOther : "<دیگر>", |
DlgLnkURL : "URL", |
DlgLnkAnchorSel : "یک لنگر برگزینید", |
DlgLnkAnchorByName : "با نام لنگر", |
DlgLnkAnchorById : "با شناسهٴ المان", |
DlgLnkNoAnchors : "<در این سند لنگری دردسترس نیست>", |
DlgLnkEMail : "نشانی پست الکترونیکی", |
DlgLnkEMailSubject : "موضوع پیام", |
DlgLnkEMailBody : "متن پیام", |
DlgLnkUpload : "انتقال به سرور", |
DlgLnkBtnUpload : "به سرور بفرست", |
DlgLnkTarget : "مقصد", |
DlgLnkTargetFrame : "<فریم>", |
DlgLnkTargetPopup : "<پنجرهٴ پاپاپ>", |
DlgLnkTargetBlank : "پنجرهٴ دیگر (_blank)", |
DlgLnkTargetParent : "پنجرهٴ والد (_parent)", |
DlgLnkTargetSelf : "همان پنجره (_self)", |
DlgLnkTargetTop : "بالاترین پنجره (_top)", |
DlgLnkTargetFrameName : "نام فریم مقصد", |
DlgLnkPopWinName : "نام پنجرهٴ پاپاپ", |
DlgLnkPopWinFeat : "ویژگیهای پنجرهٴ پاپاپ", |
DlgLnkPopResize : "قابل تغیر اندازه", |
DlgLnkPopLocation : "نوار موقعیت", |
DlgLnkPopMenu : "نوار منو", |
DlgLnkPopScroll : "میلههای پیمایش", |
DlgLnkPopStatus : "نوار وضعیت", |
DlgLnkPopToolbar : "نوارابزار", |
DlgLnkPopFullScrn : "تمامصفحه (IE)", |
DlgLnkPopDependent : "وابسته (Netscape)", |
DlgLnkPopWidth : "پهنا", |
DlgLnkPopHeight : "درازا", |
DlgLnkPopLeft : "موقعیت ِچپ", |
DlgLnkPopTop : "موقعیت ِبالا", |
DlnLnkMsgNoUrl : "لطفا URL پیوند را بنویسید", |
DlnLnkMsgNoEMail : "لطفا نشانی پست الکترونیکی را بنویسید", |
DlnLnkMsgNoAnchor : "لطفا لنگری را برگزینید", |
DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING |
// Color Dialog |
DlgColorTitle : "گزینش رنگ", |
DlgColorBtnClear : "پاککردن", |
DlgColorHighlight : "نمونه", |
DlgColorSelected : "برگزیده", |
// Smiley Dialog |
DlgSmileyTitle : "گنجاندن خندانک", |
// Special Character Dialog |
DlgSpecialCharTitle : "گزینش نویسهٴویژه", |
// Table Dialog |
DlgTableTitle : "ویژگیهای جدول", |
DlgTableRows : "سطرها", |
DlgTableColumns : "ستونها", |
DlgTableBorder : "اندازهٴ لبه", |
DlgTableAlign : "چینش", |
DlgTableAlignNotSet : "<تعیننشده>", |
DlgTableAlignLeft : "چپ", |
DlgTableAlignCenter : "وسط", |
DlgTableAlignRight : "راست", |
DlgTableWidth : "پهنا", |
DlgTableWidthPx : "پیکسل", |
DlgTableWidthPc : "درصد", |
DlgTableHeight : "درازا", |
DlgTableCellSpace : "فاصلهٴ میان سلولها", |
DlgTableCellPad : "فاصلهٴ پرشده در سلول", |
DlgTableCaption : "عنوان", |
DlgTableSummary : "خلاصه", |
// Table Cell Dialog |
DlgCellTitle : "ویژگیهای سلول", |
DlgCellWidth : "پهنا", |
DlgCellWidthPx : "پیکسل", |
DlgCellWidthPc : "درصد", |
DlgCellHeight : "درازا", |
DlgCellWordWrap : "شکستن واژهها", |
DlgCellWordWrapNotSet : "<تعیننشده>", |
DlgCellWordWrapYes : "بله", |
DlgCellWordWrapNo : "خیر", |
DlgCellHorAlign : "چینش ِافقی", |
DlgCellHorAlignNotSet : "<تعیننشده>", |
DlgCellHorAlignLeft : "چپ", |
DlgCellHorAlignCenter : "وسط", |
DlgCellHorAlignRight: "راست", |
DlgCellVerAlign : "چینش ِعمودی", |
DlgCellVerAlignNotSet : "<تعیننشده>", |
DlgCellVerAlignTop : "بالا", |
DlgCellVerAlignMiddle : "میان", |
DlgCellVerAlignBottom : "پائین", |
DlgCellVerAlignBaseline : "خطپایه", |
DlgCellRowSpan : "گستردگی سطرها", |
DlgCellCollSpan : "گستردگی ستونها", |
DlgCellBackColor : "رنگ پسزمینه", |
DlgCellBorderColor : "رنگ لبه", |
DlgCellBtnSelect : "برگزینید...", |
// Find Dialog |
DlgFindTitle : "یافتن", |
DlgFindFindBtn : "یافتن", |
DlgFindNotFoundMsg : "متن موردنظر یافت نشد.", |
// Replace Dialog |
DlgReplaceTitle : "جایگزینی", |
DlgReplaceFindLbl : "چهچیز را مییابید:", |
DlgReplaceReplaceLbl : "جایگزینی با:", |
DlgReplaceCaseChk : "همسانی در بزرگی و کوچکی نویسهها", |
DlgReplaceReplaceBtn : "جایگزینی", |
DlgReplaceReplAllBtn : "جایگزینی همهٴ یافتهها", |
DlgReplaceWordChk : "همسانی با واژهٴ کامل", |
// Paste Operations / Dialog |
PasteErrorPaste : "تنظیمات امنیتی مرورگر شما اجازه نمیدهد که ویرایشگر به طور خودکار عملکردهای چسباندن را انجام دهد. لطفا با دکمههای صفحهکلید این کار را انجام دهید (Ctrl+V).", |
PasteErrorCut : "تنظیمات امنیتی مرورگر شما اجازه نمیدهد که ویرایشگر به طور خودکار عملکردهای برش را انجام دهد. لطفا با دکمههای صفحهکلید این کار را انجام دهید (Ctrl+X).", |
PasteErrorCopy : "تنظیمات امنیتی مرورگر شما اجازه نمیدهد که ویرایشگر به طور خودکار عملکردهای کپیکردن را انجام دهد. لطفا با دکمههای صفحهکلید این کار را انجام دهید (Ctrl+C).", |
PasteAsText : "چسباندن به عنوان متن ِساده", |
PasteFromWord : "چسباندن از Word", |
DlgPasteMsg2 : "لطفا متن را با کلیدهای (<STRONG>Ctrl+V</STRONG>) در این جعبهٴ متنی بچسبانید و <STRONG>پذیرش</STRONG> را بزنید.", |
DlgPasteIgnoreFont : "چشمپوشی از تعاریف نوع قلم", |
DlgPasteRemoveStyles : "چشمپوشی از تعاریف سبک (style)", |
DlgPasteCleanBox : "پاککردن ناحیه", |
// Color Picker |
ColorAutomatic : "خودکار", |
ColorMoreColors : "رنگهای بیشتر...", |
// Document Properties |
DocProps : "ویژگیهای سند", |
// Anchor Dialog |
DlgAnchorTitle : "ویژگیهای لنگر", |
DlgAnchorName : "نام لنگر", |
DlgAnchorErrorName : "لطفا نام لنگر را بنویسید", |
// Speller Pages Dialog |
DlgSpellNotInDic : "در واژهنامه موجود نیست", |
DlgSpellChangeTo : "تغیر به", |
DlgSpellBtnIgnore : "چشمپوشی", |
DlgSpellBtnIgnoreAll : "چشمپوشی همه", |
DlgSpellBtnReplace : "جایگزینی", |
DlgSpellBtnReplaceAll : "جایگزینی همه", |
DlgSpellBtnUndo : "واچینش", |
DlgSpellNoSuggestions : "- پیشنهادی نیست -", |
DlgSpellProgress : "بررسی املا در حال انجام...", |
DlgSpellNoMispell : "بررسی املا انجام شد. هیچ غلطاملائی یافت نشد", |
DlgSpellNoChanges : "بررسی املا انجام شد. هیچ واژهای تغیر نیافت", |
DlgSpellOneChange : "بررسی املا انجام شد. یک واژه تغیر یافت", |
DlgSpellManyChanges : "بررسی املا انجام شد. %1 واژه تغیر یافت", |
IeSpellDownload : "بررسیکنندهٴ املا نصب نشده است. آیا میخواهید آن را هماکنون دریافت کنید؟", |
// Button Dialog |
DlgButtonText : "متن (مقدار)", |
DlgButtonType : "نوع", |
DlgButtonTypeBtn : "Button", //MISSING |
DlgButtonTypeSbm : "Submit", //MISSING |
DlgButtonTypeRst : "Reset", //MISSING |
// Checkbox and Radio Button Dialogs |
DlgCheckboxName : "نام", |
DlgCheckboxValue : "مقدار", |
DlgCheckboxSelected : "برگزیده", |
// Form Dialog |
DlgFormName : "نام", |
DlgFormAction : "اقدام", |
DlgFormMethod : "متد", |
// Select Field Dialog |
DlgSelectName : "نام", |
DlgSelectValue : "مقدار", |
DlgSelectSize : "اندازه", |
DlgSelectLines : "خطوط", |
DlgSelectChkMulti : "گزینش چندگانه فراهم باشد", |
DlgSelectOpAvail : "گزینههای موجود", |
DlgSelectOpText : "متن", |
DlgSelectOpValue : "مقدار", |
DlgSelectBtnAdd : "اضافه", |
DlgSelectBtnModify : "ویرایش", |
DlgSelectBtnUp : "بالا", |
DlgSelectBtnDown : "پائین", |
DlgSelectBtnSetValue : "تنظیم به عنوان مقدار ِبرگزیده", |
DlgSelectBtnDelete : "حذف", |
// Textarea Dialog |
DlgTextareaName : "نام", |
DlgTextareaCols : "ستونها", |
DlgTextareaRows : "سطرها", |
// Text Field Dialog |
DlgTextName : "نام", |
DlgTextValue : "مقدار", |
DlgTextCharWidth : "پهنای نویسه", |
DlgTextMaxChars : "بیشینهٴ نویسهها", |
DlgTextType : "نوع", |
DlgTextTypeText : "متن", |
DlgTextTypePass : "گذرواژه", |
// Hidden Field Dialog |
DlgHiddenName : "نام", |
DlgHiddenValue : "مقدار", |
// Bulleted List Dialog |
BulletedListProp : "ویژگیهای فهرست نقطهای", |
NumberedListProp : "ویژگیهای فهرست شمارهدار", |
DlgLstStart : "Start", //MISSING |
DlgLstType : "نوع", |
DlgLstTypeCircle : "دایره", |
DlgLstTypeDisc : "قرص", |
DlgLstTypeSquare : "چهارگوش", |
DlgLstTypeNumbers : "شمارهها (1، 2، 3)", |
DlgLstTypeLCase : "نویسههای کوچک (a، b، c)", |
DlgLstTypeUCase : "نویسههای بزرگ (A، B، C)", |
DlgLstTypeSRoman : "شمارگان رومی کوچک (i، ii، iii)", |
DlgLstTypeLRoman : "شمارگان رومی بزرگ (I، II، III)", |
// Document Properties Dialog |
DlgDocGeneralTab : "عمومی", |
DlgDocBackTab : "پسزمینه", |
DlgDocColorsTab : "رنگها و حاشیهها", |
DlgDocMetaTab : "فراداده", |
DlgDocPageTitle : "عنوان صفحه", |
DlgDocLangDir : "جهت زبان", |
DlgDocLangDirLTR : "چپ به راست (LTR(", |
DlgDocLangDirRTL : "راست به چپ (RTL(", |
DlgDocLangCode : "کد زبان", |
DlgDocCharSet : "رمزگذاری نویسهگان", |
DlgDocCharSetCE : "Central European", //MISSING |
DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING |
DlgDocCharSetCR : "Cyrillic", //MISSING |
DlgDocCharSetGR : "Greek", //MISSING |
DlgDocCharSetJP : "Japanese", //MISSING |
DlgDocCharSetKR : "Korean", //MISSING |
DlgDocCharSetTR : "Turkish", //MISSING |
DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING |
DlgDocCharSetWE : "Western European", //MISSING |
DlgDocCharSetOther : "رمزگذاری نویسهگان دیگر", |
DlgDocDocType : "عنوان نوع سند", |
DlgDocDocTypeOther : "عنوان نوع سند دیگر", |
DlgDocIncXHTML : "شامل تعاریف XHTML", |
DlgDocBgColor : "رنگ پسزمینه", |
DlgDocBgImage : "URL تصویر پسزمینه", |
DlgDocBgNoScroll : "پسزمینهٴ پیمایشناپذیر", |
DlgDocCText : "متن", |
DlgDocCLink : "پیوند", |
DlgDocCVisited : "پیوند مشاهدهشده", |
DlgDocCActive : "پیوند فعال", |
DlgDocMargins : "حاشیههای صفحه", |
DlgDocMaTop : "بالا", |
DlgDocMaLeft : "چپ", |
DlgDocMaRight : "راست", |
DlgDocMaBottom : "پایین", |
DlgDocMeIndex : "کلیدواژگان نمایهگذاری سند (با کاما جدا شوند)", |
DlgDocMeDescr : "توصیف سند", |
DlgDocMeAuthor : "نویسنده", |
DlgDocMeCopy : "کپیرایت", |
DlgDocPreview : "پیشنمایش", |
// Templates Dialog |
Templates : "الگوها", |
DlgTemplatesTitle : "الگوهای محتویات", |
DlgTemplatesSelMsg : "لطفا الگوی موردنظر را برای بازکردن در ویرایشگر برگزینید<br>(محتویات اصلی از دست خواهند رفت):", |
DlgTemplatesLoading : "بارگذاری فهرست الگوها. لطفا صبر کنید...", |
DlgTemplatesNoTpl : "(الگوئی تعریف نشده است)", |
DlgTemplatesReplace : "Replace actual contents", //MISSING |
// About Dialog |
DlgAboutAboutTab : "درباره", |
DlgAboutBrowserInfoTab : "اطلاعات مرورگر", |
DlgAboutLicenseTab : "گواهینامه", |
DlgAboutVersion : "نگارش", |
DlgAboutLicense : "لیسانس برپایهٴبندهای آییننامهٴ GNU Lesser General Public License", |
DlgAboutInfo : "برای آگاهی بیشتر به این نشانی بروید" |
} |
/branches/v1.0-menes/api/fckeditor/editor/lang/de.js |
---|
New file |
0,0 → 1,502 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: de.js |
* German language file. |
* |
* File Authors: |
* Maik Unruh (m.unruh@mm-concept.de) |
* Hendrik Kramer (HK@lwd.de) |
*/ |
var FCKLang = |
{ |
// Language direction : "ltr" (left to right) or "rtl" (right to left). |
Dir : "ltr", |
ToolbarCollapse : "Symbolleiste einklappen", |
ToolbarExpand : "Symbolleiste ausklappen", |
// Toolbar Items and Context Menu |
Save : "Speichern", |
NewPage : "Neue Seite", |
Preview : "Vorschau", |
Cut : "Ausschneiden", |
Copy : "Kopieren", |
Paste : "Einfügen", |
PasteText : "aus Textdatei einfügen", |
PasteWord : "aus MS-Word einfügen", |
Print : "Drucken", |
SelectAll : "Alles auswählen", |
RemoveFormat : "Formatierungen entfernen", |
InsertLinkLbl : "Link", |
InsertLink : "Link einfügen/editieren", |
RemoveLink : "Link entfernen", |
Anchor : "Anker einfügen/editieren", |
InsertImageLbl : "Bild", |
InsertImage : "Bild einfügen/editieren", |
InsertFlashLbl : "Flash", |
InsertFlash : "Flash einfügen/editieren", |
InsertTableLbl : "Tabelle", |
InsertTable : "Tabelle einfügen/editieren", |
InsertLineLbl : "Linie", |
InsertLine : "Horizontale Linie einfügen", |
InsertSpecialCharLbl: "Sonderzeichen", |
InsertSpecialChar : "Sonderzeichen einfügen/editieren", |
InsertSmileyLbl : "Smiley", |
InsertSmiley : "Smiley einfügen", |
About : "Über FCKeditor", |
Bold : "Fett", |
Italic : "Kursiv", |
Underline : "Unterstrichen", |
StrikeThrough : "Durchgestrichen", |
Subscript : "Tiefgestellt", |
Superscript : "Hochgestellt", |
LeftJustify : "Linksbündig", |
CenterJustify : "Zentriert", |
RightJustify : "Rechtsbündig", |
BlockJustify : "Blocksatz", |
DecreaseIndent : "Einzug verringern", |
IncreaseIndent : "Einzug erhöhen", |
Undo : "Rückgängig", |
Redo : "Wiederherstellen", |
NumberedListLbl : "Nummerierte Liste", |
NumberedList : "Nummerierte Liste einfügen/entfernen", |
BulletedListLbl : "Liste", |
BulletedList : "Liste einfügen/entfernen", |
ShowTableBorders : "Zeige Tabellenrahmen", |
ShowDetails : "Zeige Details", |
Style : "Style", |
FontFormat : "Format", |
Font : "Schriftart", |
FontSize : "Size", |
TextColor : "Textfarbe", |
BGColor : "Hintergrundfarbe", |
Source : "Quellcode", |
Find : "Finden", |
Replace : "Ersetzen", |
SpellCheck : "Rechtschreibprüfung", |
UniversalKeyboard : "Universal-Tastatur", |
PageBreakLbl : "Seitenumbruch", |
PageBreak : "Seitenumbruch einfügen", |
Form : "Formular", |
Checkbox : "Checkbox", |
RadioButton : "Radiobutton", |
TextField : "Textfeld einzeilig", |
Textarea : "Textfeld mehrzeilig", |
HiddenField : "verstecktes Feld", |
Button : "Klickbutton", |
SelectionField : "Auswahlfeld", |
ImageButton : "Bildbutton", |
FitWindow : "Editor maximieren", |
// Context Menu |
EditLink : "Link editieren", |
CellCM : "Zelle", |
RowCM : "Zeile", |
ColumnCM : "Spalte", |
InsertRow : "Zeile einfügen", |
DeleteRows : "Zeile entfernen", |
InsertColumn : "Spalte einfügen", |
DeleteColumns : "Spalte löschen", |
InsertCell : "Zelle einfügen", |
DeleteCells : "Zelle löschen", |
MergeCells : "Zellen vereinen", |
SplitCell : "Zelle teilen", |
TableDelete : "Tabelle löschen", |
CellProperties : "Zellen Eigenschaften", |
TableProperties : "Tabellen Eigenschaften", |
ImageProperties : "Bild Eigenschaften", |
FlashProperties : "Flash Eigenschaften", |
AnchorProp : "Anker Eigenschaften", |
ButtonProp : "Button Eigenschaften", |
CheckboxProp : "Checkbox Eigenschaften", |
HiddenFieldProp : "Verstecktes Feld Eigenschaften", |
RadioButtonProp : "Optionsfeld Eigenschaften", |
ImageButtonProp : "Bildbutton Eigenschaften", |
TextFieldProp : "Textfeld (einzeilig) Eigenschaften", |
SelectionFieldProp : "Auswahlfeld Eigenschaften", |
TextareaProp : "Textfeld (mehrzeilig) Eigenschaften", |
FormProp : "Formular Eigenschaften", |
FontFormats : "Normal;Formatiert;Addresse;Überschrift 1;Überschrift 2;Überschrift 3;Überschrift 4;Überschrift 5;Überschrift 6;Normal (DIV)", |
// Alerts and Messages |
ProcessingXHTML : "Bearbeite XHTML. Bitte warten...", |
Done : "Fertig", |
PasteWordConfirm : "Der Text, den Sie einfügen möchten, scheint aus MS-Word kopiert zu sein. Möchten Sie ihn zuvor bereinigen lassen?", |
NotCompatiblePaste : "Diese Funktion steht nur im Internet Explorer ab Version 5.5 zur Verfügung. Möchten Sie den Text unbereinigt einfügen?", |
UnknownToolbarItem : "Unbekanntes Menüleisten-Objekt \"%1\"", |
UnknownCommand : "Unbekannter Befehl \"%1\"", |
NotImplemented : "Befehl nicht implementiert", |
UnknownToolbarSet : "Menüleiste \"%1\" existiert nicht", |
NoActiveX : "Die Sicherheitseinstellungen Ihres Browsers beschränken evtl. einige Funktionen des Editors. Aktivieren Sie die Option \"ActiveX-Steuerelemente und Plugins ausführen\" in den Sicherheitseinstellungen, um diese Funktionen nutzen zu können", |
BrowseServerBlocked : "Ein Auswahlfenster konnte nicht geöffnet werden. Stellen Sie sicher, das alle Popup-Blocker ausgeschaltet sind.", |
DialogBlocked : "Das Dialog-Fenster konnte nicht geöffnet werden. Stellen Sie sicher, das alle Popup-Blocker ausgeschaltet sind.", |
// Dialogs |
DlgBtnOK : "OK", |
DlgBtnCancel : "Abbrechen", |
DlgBtnClose : "Schließen", |
DlgBtnBrowseServer : "Server durchsuchen", |
DlgAdvancedTag : "Erweitert", |
DlgOpOther : "<andere>", |
DlgInfoTab : "Info", |
DlgAlertUrl : "Bitte tragen Sie die URL ein", |
// General Dialogs Labels |
DlgGenNotSet : "< nichts >", |
DlgGenId : "ID", |
DlgGenLangDir : "Schreibrichtung", |
DlgGenLangDirLtr : "Links nach Rechts (LTR)", |
DlgGenLangDirRtl : "Rechts nach Links (RTL)", |
DlgGenLangCode : "Sprachenkürzel", |
DlgGenAccessKey : "Schlüssel", |
DlgGenName : "Name", |
DlgGenTabIndex : "Tab Index", |
DlgGenLongDescr : "Langform URL", |
DlgGenClass : "Stylesheet Klasse", |
DlgGenTitle : "Titel Beschreibung", |
DlgGenContType : "Content Beschreibung", |
DlgGenLinkCharset : "Ziel-Zeichensatz", |
DlgGenStyle : "Style", |
// Image Dialog |
DlgImgTitle : "Bild Eigenschaften", |
DlgImgInfoTab : "Bild-Info", |
DlgImgBtnUpload : "Zum Server senden", |
DlgImgURL : "Bildauswahl", |
DlgImgUpload : "Upload", |
DlgImgAlt : "Alternativer Text", |
DlgImgWidth : "Breite", |
DlgImgHeight : "Höhe", |
DlgImgLockRatio : "Größenverhältniss beibehalten", |
DlgBtnResetSize : "Größe zurücksetzen", |
DlgImgBorder : "Rahmen", |
DlgImgHSpace : "H-Abstand", |
DlgImgVSpace : "V-Abstand", |
DlgImgAlign : "Ausrichtung", |
DlgImgAlignLeft : "Links", |
DlgImgAlignAbsBottom: "Abs Unten", |
DlgImgAlignAbsMiddle: "Abs Mitte", |
DlgImgAlignBaseline : "Baseline", |
DlgImgAlignBottom : "Unten", |
DlgImgAlignMiddle : "Mitte", |
DlgImgAlignRight : "Rechts", |
DlgImgAlignTextTop : "Text Oben", |
DlgImgAlignTop : "Oben", |
DlgImgPreview : "Vorschau", |
DlgImgAlertUrl : "Bitte geben Sie die Bild-URL an", |
DlgImgLinkTab : "Link", |
// Flash Dialog |
DlgFlashTitle : "Flash Eigenschaften", |
DlgFlashChkPlay : "autom. Abspielen", |
DlgFlashChkLoop : "Endlosschleife", |
DlgFlashChkMenu : "Flash-Menü aktivieren", |
DlgFlashScale : "Skalierung", |
DlgFlashScaleAll : "Alles anzeigen", |
DlgFlashScaleNoBorder : "ohne Rand", |
DlgFlashScaleFit : "Passgenau", |
// Link Dialog |
DlgLnkWindowTitle : "Link", |
DlgLnkInfoTab : "Link Info", |
DlgLnkTargetTab : "Zielseite", |
DlgLnkType : "Link-Typ", |
DlgLnkTypeURL : "URL", |
DlgLnkTypeAnchor : "Anker in dieser Seite", |
DlgLnkTypeEMail : "E-Mail", |
DlgLnkProto : "Protokoll", |
DlgLnkProtoOther : "<anderes>", |
DlgLnkURL : "URL", |
DlgLnkAnchorSel : "Anker auswählen", |
DlgLnkAnchorByName : "nach Anker Name", |
DlgLnkAnchorById : "nach Element Id", |
DlgLnkNoAnchors : "<keine Anker im Dokument vorhanden>", |
DlgLnkEMail : "E-Mail Addresse", |
DlgLnkEMailSubject : "Betreffzeile", |
DlgLnkEMailBody : "Nachrichtentext", |
DlgLnkUpload : "Upload", |
DlgLnkBtnUpload : "Zum Server senden", |
DlgLnkTarget : "Zielseite", |
DlgLnkTargetFrame : "<Frame>", |
DlgLnkTargetPopup : "<Pop-up Fenster>", |
DlgLnkTargetBlank : "Neues Fenster (_blank)", |
DlgLnkTargetParent : "Oberes Fenster (_parent)", |
DlgLnkTargetSelf : "Gleiches Fenster (_self)", |
DlgLnkTargetTop : "Oberstes Fenster (_top)", |
DlgLnkTargetFrameName : "Ziel-Fenster Name", |
DlgLnkPopWinName : "Pop-up Fenster Name", |
DlgLnkPopWinFeat : "Pop-up Fenster Eigenschaften", |
DlgLnkPopResize : "Vergrößerbar", |
DlgLnkPopLocation : "Adress-Leiste", |
DlgLnkPopMenu : "Menü-Leiste", |
DlgLnkPopScroll : "Rollbalken", |
DlgLnkPopStatus : "Statusleiste", |
DlgLnkPopToolbar : "Werkzeugleiste", |
DlgLnkPopFullScrn : "Vollbild (IE)", |
DlgLnkPopDependent : "Abhängig (Netscape)", |
DlgLnkPopWidth : "Breite", |
DlgLnkPopHeight : "Höhe", |
DlgLnkPopLeft : "Linke Position", |
DlgLnkPopTop : "Obere Position", |
DlnLnkMsgNoUrl : "Bitte geben Sie die Link-URL an", |
DlnLnkMsgNoEMail : "Bitte geben Sie e-Mail Adresse an", |
DlnLnkMsgNoAnchor : "Bitte wählen Sie einen Anker aus", |
DlnLnkMsgInvPopName : "Der Name des Popups muss mit einem Buchstaben beginnen und darf keine Leerzeichen enthalten", |
// Color Dialog |
DlgColorTitle : "Farbauswahl", |
DlgColorBtnClear : "Keine Farbe", |
DlgColorHighlight : "Vorschau", |
DlgColorSelected : "Ausgewählt", |
// Smiley Dialog |
DlgSmileyTitle : "Smiley auswählen", |
// Special Character Dialog |
DlgSpecialCharTitle : "Sonderzeichen auswählen", |
// Table Dialog |
DlgTableTitle : "Tabellen Eigenschaften", |
DlgTableRows : "Zeile", |
DlgTableColumns : "Spalte", |
DlgTableBorder : "Rahmen", |
DlgTableAlign : "Ausrichtung", |
DlgTableAlignNotSet : "<nichts>", |
DlgTableAlignLeft : "Links", |
DlgTableAlignCenter : "Zentriert", |
DlgTableAlignRight : "Rechts", |
DlgTableWidth : "Breite", |
DlgTableWidthPx : "Pixel", |
DlgTableWidthPc : "%", |
DlgTableHeight : "Höhe", |
DlgTableCellSpace : "Zellenabstand außen", |
DlgTableCellPad : "Zellenabstand innen", |
DlgTableCaption : "Überschrift", |
DlgTableSummary : "Inhaltsübersicht", |
// Table Cell Dialog |
DlgCellTitle : "Zellen-Eigenschaften", |
DlgCellWidth : "Breite", |
DlgCellWidthPx : "Pixel", |
DlgCellWidthPc : "%", |
DlgCellHeight : "Höhe", |
DlgCellWordWrap : "Umbruch", |
DlgCellWordWrapNotSet : "<nichts>", |
DlgCellWordWrapYes : "Ja", |
DlgCellWordWrapNo : "Nein", |
DlgCellHorAlign : "Horizontale Ausrichtung", |
DlgCellHorAlignNotSet : "<nichts>", |
DlgCellHorAlignLeft : "Links", |
DlgCellHorAlignCenter : "Zentriert", |
DlgCellHorAlignRight: "Rechts", |
DlgCellVerAlign : "Vertikale Ausrichtung", |
DlgCellVerAlignNotSet : "<nichts>", |
DlgCellVerAlignTop : "Oben", |
DlgCellVerAlignMiddle : "Mitte", |
DlgCellVerAlignBottom : "Unten", |
DlgCellVerAlignBaseline : "Grundlinie", |
DlgCellRowSpan : "Zeilen zusammenfassen", |
DlgCellCollSpan : "Spalten zusammenfassen", |
DlgCellBackColor : "Hintergrundfarbe", |
DlgCellBorderColor : "Rahmenfarbe", |
DlgCellBtnSelect : "Auswahl...", |
// Find Dialog |
DlgFindTitle : "Finden", |
DlgFindFindBtn : "Finden", |
DlgFindNotFoundMsg : "Der gesuchte Text wurde nicht gefunden.", |
// Replace Dialog |
DlgReplaceTitle : "Ersetzen", |
DlgReplaceFindLbl : "Suche nach:", |
DlgReplaceReplaceLbl : "Ersetze mit:", |
DlgReplaceCaseChk : "Groß-Kleinschreibung beachten", |
DlgReplaceReplaceBtn : "Ersetzen", |
DlgReplaceReplAllBtn : "Alle Ersetzen", |
DlgReplaceWordChk : "Nur ganze Worte suchen", |
// Paste Operations / Dialog |
PasteErrorPaste : "Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch einzufügen. Bitte benutzen Sie die System-Zwischenablage über STRG-C (kopieren) und STRG-V (einfügen).", |
PasteErrorCut : "Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch auszuschneiden. Bitte benutzen Sie die System-Zwischenablage über STRG-X (ausschneiden) und STRG-V (einfügen).", |
PasteErrorCopy : "Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch kopieren. Bitte benutzen Sie die System-Zwischenablage über STRG-C (kopieren).", |
PasteAsText : "Als Text einfügen", |
PasteFromWord : "Aus Word einfügen", |
DlgPasteMsg2 : "Bitte fügen Sie den Text in der folgenden Box über die Tastatur (mit <STRONG>Ctrl+V</STRONG>) ein und bestätigen Sie mit <STRONG>OK</STRONG>.", |
DlgPasteIgnoreFont : "Ignoriere Schriftart-Definitionen", |
DlgPasteRemoveStyles : "Entferne Style-Definitionen", |
DlgPasteCleanBox : "Inhalt aufräumen", |
// Color Picker |
ColorAutomatic : "Automatisch", |
ColorMoreColors : "Weitere Farben...", |
// Document Properties |
DocProps : "Dokument Eigenschaften", |
// Anchor Dialog |
DlgAnchorTitle : "Anker Eigenschaften", |
DlgAnchorName : "Anker Name", |
DlgAnchorErrorName : "Bitte geben Sie den Namen des Ankers ein", |
// Speller Pages Dialog |
DlgSpellNotInDic : "Nicht im Wörterbuch", |
DlgSpellChangeTo : "Ändern in", |
DlgSpellBtnIgnore : "Ignorieren", |
DlgSpellBtnIgnoreAll : "Alle Ignorieren", |
DlgSpellBtnReplace : "Ersetzen", |
DlgSpellBtnReplaceAll : "Alle Ersetzen", |
DlgSpellBtnUndo : "Rückgängig", |
DlgSpellNoSuggestions : " - keine Vorschläge - ", |
DlgSpellProgress : "Rechtschreibprüfung läuft...", |
DlgSpellNoMispell : "Rechtschreibprüfung abgeschlossen - keine Fehler gefunden", |
DlgSpellNoChanges : "Rechtschreibprüfung abgeschlossen - keine Worte geändert", |
DlgSpellOneChange : "Rechtschreibprüfung abgeschlossen - ein Wort geändert", |
DlgSpellManyChanges : "Rechtschreibprüfung abgeschlossen - %1 Wörter geändert", |
IeSpellDownload : "Rechtschreibprüfung nicht installiert. Möchten Sie sie jetzt herunterladen?", |
// Button Dialog |
DlgButtonText : "Text (Wert)", |
DlgButtonType : "Typ", |
DlgButtonTypeBtn : "Button", |
DlgButtonTypeSbm : "Absenden", |
DlgButtonTypeRst : "Zurücksetzen", |
// Checkbox and Radio Button Dialogs |
DlgCheckboxName : "Name", |
DlgCheckboxValue : "Wert", |
DlgCheckboxSelected : "ausgewählt", |
// Form Dialog |
DlgFormName : "Name", |
DlgFormAction : "Action", |
DlgFormMethod : "Method", |
// Select Field Dialog |
DlgSelectName : "Name", |
DlgSelectValue : "Wert", |
DlgSelectSize : "Größe", |
DlgSelectLines : "Linien", |
DlgSelectChkMulti : "Erlaube Mehrfachauswahl", |
DlgSelectOpAvail : "Mögliche Optionen", |
DlgSelectOpText : "Text", |
DlgSelectOpValue : "Wert", |
DlgSelectBtnAdd : "Hinzufügen", |
DlgSelectBtnModify : "Ändern", |
DlgSelectBtnUp : "Hoch", |
DlgSelectBtnDown : "Runter", |
DlgSelectBtnSetValue : "Setze als Standardwert", |
DlgSelectBtnDelete : "Entfernen", |
// Textarea Dialog |
DlgTextareaName : "Name", |
DlgTextareaCols : "Spalten", |
DlgTextareaRows : "Reihen", |
// Text Field Dialog |
DlgTextName : "Name", |
DlgTextValue : "Wert", |
DlgTextCharWidth : "Zeichenbreite", |
DlgTextMaxChars : "Max. Zeichen", |
DlgTextType : "Typ", |
DlgTextTypeText : "Text", |
DlgTextTypePass : "Passwort", |
// Hidden Field Dialog |
DlgHiddenName : "Name", |
DlgHiddenValue : "Wert", |
// Bulleted List Dialog |
BulletedListProp : "Listen-Eigenschaften", |
NumberedListProp : "Nummerierte Listen-Eigenschaften", |
DlgLstStart : "Start", |
DlgLstType : "Typ", |
DlgLstTypeCircle : "Ring", |
DlgLstTypeDisc : "Kreis", |
DlgLstTypeSquare : "Quadrat", |
DlgLstTypeNumbers : "Nummern (1, 2, 3)", |
DlgLstTypeLCase : "Kleinbuchstaben (a, b, c)", |
DlgLstTypeUCase : "Großbuchstaben (A, B, C)", |
DlgLstTypeSRoman : "Kleine römische Zahlen (i, ii, iii)", |
DlgLstTypeLRoman : "Große römische Zahlen (I, II, III)", |
// Document Properties Dialog |
DlgDocGeneralTab : "Allgemein", |
DlgDocBackTab : "Hintergrund", |
DlgDocColorsTab : "Farben und Abstände", |
DlgDocMetaTab : "Metadaten", |
DlgDocPageTitle : "Seitentitel", |
DlgDocLangDir : "Schriftrichtung", |
DlgDocLangDirLTR : "Links nach Rechts", |
DlgDocLangDirRTL : "rechts nach Links", |
DlgDocLangCode : "Sprachkürzel", |
DlgDocCharSet : "Zeichenkodierung", |
DlgDocCharSetCE : "Zentraleuropäisch", |
DlgDocCharSetCT : "traditionell Chinesisch (Big5)", |
DlgDocCharSetCR : "Kyrillisch", |
DlgDocCharSetGR : "Griechisch", |
DlgDocCharSetJP : "Japanisch", |
DlgDocCharSetKR : "Koreanisch", |
DlgDocCharSetTR : "Türkisch", |
DlgDocCharSetUN : "Unicode (UTF-8)", |
DlgDocCharSetWE : "Westeuropäisch", |
DlgDocCharSetOther : "Andere Zeichenkodierung", |
DlgDocDocType : "Dokumententyp", |
DlgDocDocTypeOther : "Anderer Dokumententyp", |
DlgDocIncXHTML : "Beziehe XHTML Deklarationen ein", |
DlgDocBgColor : "Hintergrundfarbe", |
DlgDocBgImage : "Hintergrundbild URL", |
DlgDocBgNoScroll : "feststehender Hintergrund", |
DlgDocCText : "Text", |
DlgDocCLink : "Link", |
DlgDocCVisited : "Besuchter Link", |
DlgDocCActive : "Aktiver Link", |
DlgDocMargins : "Seitenränder", |
DlgDocMaTop : "Oben", |
DlgDocMaLeft : "Links", |
DlgDocMaRight : "Rechts", |
DlgDocMaBottom : "Unten", |
DlgDocMeIndex : "Schlüsselwörter (durch Komma getrennt)", |
DlgDocMeDescr : "Dokument-Beschreibung", |
DlgDocMeAuthor : "Autor", |
DlgDocMeCopy : "Copyright", |
DlgDocPreview : "Vorschau", |
// Templates Dialog |
Templates : "Vorlagen", |
DlgTemplatesTitle : "Vorlagen", |
DlgTemplatesSelMsg : "Klicken Sie auf eine Vorlage, um sie im Editor zu öffnen (der aktuelle Inhalt wird dabei gelöscht!):", |
DlgTemplatesLoading : "Liste der Vorlagen wird geladen. Bitte warten...", |
DlgTemplatesNoTpl : "(keine Vorlagen definiert)", |
DlgTemplatesReplace : "Aktuellen Inhalt ersetzen", |
// About Dialog |
DlgAboutAboutTab : "Über", |
DlgAboutBrowserInfoTab : "Browser-Info", |
DlgAboutLicenseTab : "Lizenz", |
DlgAboutVersion : "Version", |
DlgAboutLicense : "Lizensiert unter den Richtlinien der GNU Lesser General Public License", |
DlgAboutInfo : "Für weitere Informationen siehe" |
} |
/branches/v1.0-menes/api/fckeditor/editor/lang/bg.js |
---|
New file |
0,0 → 1,501 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: bg.js |
* Bulgarian language file. |
* |
* File Authors: |
* Miroslav Ivanov (miro@primal-chaos.net) |
*/ |
var FCKLang = |
{ |
// Language direction : "ltr" (left to right) or "rtl" (right to left). |
Dir : "ltr", |
ToolbarCollapse : "Скрий панела с инструментите", |
ToolbarExpand : "Покажи панела с инструментите", |
// Toolbar Items and Context Menu |
Save : "Запази", |
NewPage : "Нова страница", |
Preview : "Предварителен изглед", |
Cut : "Изрежи", |
Copy : "Запамети", |
Paste : "Вмъкни", |
PasteText : "Вмъкни само текст", |
PasteWord : "Вмъкни от MS Word", |
Print : "Печат", |
SelectAll : "Селектирай всичко", |
RemoveFormat : "Изтрий форматирането", |
InsertLinkLbl : "Връзка", |
InsertLink : "Добави/Редактирай връзка", |
RemoveLink : "Изтрий връзка", |
Anchor : "Добави/Редактирай котва", |
InsertImageLbl : "Изображение", |
InsertImage : "Добави/Редактирай изображение", |
InsertFlashLbl : "Flash", |
InsertFlash : "Добави/Редактиай Flash обект", |
InsertTableLbl : "Таблица", |
InsertTable : "Добави/Редактирай таблица", |
InsertLineLbl : "Линия", |
InsertLine : "Вмъкни хоризонтална линия", |
InsertSpecialCharLbl: "Специален символ", |
InsertSpecialChar : "Вмъкни специален символ", |
InsertSmileyLbl : "Усмивка", |
InsertSmiley : "Добави усмивка", |
About : "За FCKeditor", |
Bold : "Удебелен", |
Italic : "Курсив", |
Underline : "Подчертан", |
StrikeThrough : "Зачертан", |
Subscript : "Индекс за база", |
Superscript : "Индекс за степен", |
LeftJustify : "Подравняване в ляво", |
CenterJustify : "Подравнявне в средата", |
RightJustify : "Подравняване в дясно", |
BlockJustify : "Двустранно подравняване", |
DecreaseIndent : "Намали отстъпа", |
IncreaseIndent : "Увеличи отстъпа", |
Undo : "Отмени", |
Redo : "Повтори", |
NumberedListLbl : "Нумериран списък", |
NumberedList : "Добави/Изтрий нумериран списък", |
BulletedListLbl : "Ненумериран списък", |
BulletedList : "Добави/Изтрий ненумериран списък", |
ShowTableBorders : "Покажи рамките на таблицата", |
ShowDetails : "Покажи подробности", |
Style : "Стил", |
FontFormat : "Формат", |
Font : "Шрифт", |
FontSize : "Размер", |
TextColor : "Цвят на текста", |
BGColor : "Цвят на фона", |
Source : "Код", |
Find : "Търси", |
Replace : "Замести", |
SpellCheck : "Провери правописа", |
UniversalKeyboard : "Универсална клавиатура", |
PageBreakLbl : "Нов ред", |
PageBreak : "Вмъкни нов ред", |
Form : "Формуляр", |
Checkbox : "Поле за отметка", |
RadioButton : "Поле за опция", |
TextField : "Текстово поле", |
Textarea : "Текстова област", |
HiddenField : "Скрито поле", |
Button : "Бутон", |
SelectionField : "Падащо меню с опции", |
ImageButton : "Бутон-изображение", |
FitWindow : "Maximize the editor size", //MISSING |
// Context Menu |
EditLink : "Редактирай връзка", |
CellCM : "Cell", //MISSING |
RowCM : "Row", //MISSING |
ColumnCM : "Column", //MISSING |
InsertRow : "Добави ред", |
DeleteRows : "Изтрий редовете", |
InsertColumn : "Добави колона", |
DeleteColumns : "Изтрий колоните", |
InsertCell : "Добави клетка", |
DeleteCells : "Изтрий клетките", |
MergeCells : "Обедини клетките", |
SplitCell : "Раздели клетката", |
TableDelete : "Изтрий таблицата", |
CellProperties : "Параметри на клетката", |
TableProperties : "Параметри на таблицата", |
ImageProperties : "Параметри на изображението", |
FlashProperties : "Параметри на Flash обекта", |
AnchorProp : "Параметри на котвата", |
ButtonProp : "Параметри на бутона", |
CheckboxProp : "Параметри на полето за отметка", |
HiddenFieldProp : "Параметри на скритото поле", |
RadioButtonProp : "Параметри на полето за опция", |
ImageButtonProp : "Параметри на бутона-изображение", |
TextFieldProp : "Параметри на текстовото-поле", |
SelectionFieldProp : "Параметри на падащото меню с опции", |
TextareaProp : "Параметри на текстовата област", |
FormProp : "Параметри на формуляра", |
FontFormats : "Нормален;Форматиран;Адрес;Заглавие 1;Заглавие 2;Заглавие 3;Заглавие 4;Заглавие 5;Заглавие 6;Параграф (DIV)", |
// Alerts and Messages |
ProcessingXHTML : "Обработка на XHTML. Моля изчакайте...", |
Done : "Готово", |
PasteWordConfirm : "Текстът, който искате да вмъкнете е копиран от MS Word. Желаете ли да бъде изчистен преди вмъкването?", |
NotCompatiblePaste : "Тази операция изисква MS Internet Explorer версия 5.5 или по-висока. Желаете ли да вмъкнете запаметеното без изчистване?", |
UnknownToolbarItem : "Непознат инструмент \"%1\"", |
UnknownCommand : "Непозната команда \"%1\"", |
NotImplemented : "Командата не е имплементирана", |
UnknownToolbarSet : "Панелът \"%1\" не съществува", |
NoActiveX : "Your browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.", //MISSING |
BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.", //MISSING |
DialogBlocked : "It was not possible to open the dialog window. Make sure all popup blockers are disabled.", //MISSING |
// Dialogs |
DlgBtnOK : "ОК", |
DlgBtnCancel : "Отказ", |
DlgBtnClose : "Затвори", |
DlgBtnBrowseServer : "Разгледай сървъра", |
DlgAdvancedTag : "Подробности...", |
DlgOpOther : "<Друго>", |
DlgInfoTab : "Информация", |
DlgAlertUrl : "Моля, въведете пълния път (URL)", |
// General Dialogs Labels |
DlgGenNotSet : "<не е настроен>", |
DlgGenId : "Идентификатор", |
DlgGenLangDir : "посока на речта", |
DlgGenLangDirLtr : "От ляво на дясно", |
DlgGenLangDirRtl : "От дясно на ляво", |
DlgGenLangCode : "Код на езика", |
DlgGenAccessKey : "Бърз клавиш", |
DlgGenName : "Име", |
DlgGenTabIndex : "Ред на достъп", |
DlgGenLongDescr : "Описание на връзката", |
DlgGenClass : "Клас от стиловите таблици", |
DlgGenTitle : "Препоръчително заглавие", |
DlgGenContType : "Препоръчителен тип на съдържанието", |
DlgGenLinkCharset : "Тип на свързания ресурс", |
DlgGenStyle : "Стил", |
// Image Dialog |
DlgImgTitle : "Параметри на изображението", |
DlgImgInfoTab : "Информация за изображението", |
DlgImgBtnUpload : "Прати към сървъра", |
DlgImgURL : "Пълен път (URL)", |
DlgImgUpload : "Качи", |
DlgImgAlt : "Алтернативен текст", |
DlgImgWidth : "Ширина", |
DlgImgHeight : "Височина", |
DlgImgLockRatio : "Запази пропорцията", |
DlgBtnResetSize : "Възстанови размера", |
DlgImgBorder : "Рамка", |
DlgImgHSpace : "Хоризонтален отстъп", |
DlgImgVSpace : "Вертикален отстъп", |
DlgImgAlign : "Подравняване", |
DlgImgAlignLeft : "Ляво", |
DlgImgAlignAbsBottom: "Най-долу", |
DlgImgAlignAbsMiddle: "Точно по средата", |
DlgImgAlignBaseline : "По базовата линия", |
DlgImgAlignBottom : "Долу", |
DlgImgAlignMiddle : "По средата", |
DlgImgAlignRight : "Дясно", |
DlgImgAlignTextTop : "Върху текста", |
DlgImgAlignTop : "Отгоре", |
DlgImgPreview : "Изглед", |
DlgImgAlertUrl : "Моля, въведете пълния път до изображението", |
DlgImgLinkTab : "Връзка", |
// Flash Dialog |
DlgFlashTitle : "Параметри на Flash обекта", |
DlgFlashChkPlay : "Автоматично стартиране", |
DlgFlashChkLoop : "Ново стартиране след завършването", |
DlgFlashChkMenu : "Разрешено Flash меню", |
DlgFlashScale : "Оразмеряване", |
DlgFlashScaleAll : "Покажи целия обект", |
DlgFlashScaleNoBorder : "Без рамка", |
DlgFlashScaleFit : "Според мястото", |
// Link Dialog |
DlgLnkWindowTitle : "Връзка", |
DlgLnkInfoTab : "Информация за връзката", |
DlgLnkTargetTab : "Цел", |
DlgLnkType : "Вид на връзката", |
DlgLnkTypeURL : "Пълен път (URL)", |
DlgLnkTypeAnchor : "Котва в текущата страница", |
DlgLnkTypeEMail : "Е-поща", |
DlgLnkProto : "Протокол", |
DlgLnkProtoOther : "<друго>", |
DlgLnkURL : "Пълен път (URL)", |
DlgLnkAnchorSel : "Изберете котва", |
DlgLnkAnchorByName : "По име на котвата", |
DlgLnkAnchorById : "По идентификатор на елемент", |
DlgLnkNoAnchors : "<Няма котви в текущия документ>", |
DlgLnkEMail : "Адрес за е-поща", |
DlgLnkEMailSubject : "Тема на писмото", |
DlgLnkEMailBody : "Текст на писмото", |
DlgLnkUpload : "Качи", |
DlgLnkBtnUpload : "Прати на сървъра", |
DlgLnkTarget : "Цел", |
DlgLnkTargetFrame : "<рамка>", |
DlgLnkTargetPopup : "<дъщерен прозорец>", |
DlgLnkTargetBlank : "Нов прозорец (_blank)", |
DlgLnkTargetParent : "Родителски прозорец (_parent)", |
DlgLnkTargetSelf : "Активния прозорец (_self)", |
DlgLnkTargetTop : "Целия прозорец (_top)", |
DlgLnkTargetFrameName : "Име на целевия прозорец", |
DlgLnkPopWinName : "Име на дъщерния прозорец", |
DlgLnkPopWinFeat : "Параметри на дъщерния прозорец", |
DlgLnkPopResize : "С променливи размери", |
DlgLnkPopLocation : "Поле за адрес", |
DlgLnkPopMenu : "Меню", |
DlgLnkPopScroll : "Плъзгач", |
DlgLnkPopStatus : "Поле за статус", |
DlgLnkPopToolbar : "Панел с бутони", |
DlgLnkPopFullScrn : "Голям екран (MS IE)", |
DlgLnkPopDependent : "Зависим (Netscape)", |
DlgLnkPopWidth : "Ширина", |
DlgLnkPopHeight : "Височина", |
DlgLnkPopLeft : "Координати - X", |
DlgLnkPopTop : "Координати - Y", |
DlnLnkMsgNoUrl : "Моля, напишете пълния път (URL)", |
DlnLnkMsgNoEMail : "Моля, напишете адреса за е-поща", |
DlnLnkMsgNoAnchor : "Моля, изберете котва", |
DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING |
// Color Dialog |
DlgColorTitle : "Изберете цвят", |
DlgColorBtnClear : "Изчисти", |
DlgColorHighlight : "Текущ", |
DlgColorSelected : "Избран", |
// Smiley Dialog |
DlgSmileyTitle : "Добави усмивка", |
// Special Character Dialog |
DlgSpecialCharTitle : "Изберете специален символ", |
// Table Dialog |
DlgTableTitle : "Параметри на таблицата", |
DlgTableRows : "Редове", |
DlgTableColumns : "Колони", |
DlgTableBorder : "Размер на рамката", |
DlgTableAlign : "Подравняване", |
DlgTableAlignNotSet : "<Не е избрано>", |
DlgTableAlignLeft : "Ляво", |
DlgTableAlignCenter : "Център", |
DlgTableAlignRight : "Дясно", |
DlgTableWidth : "Ширина", |
DlgTableWidthPx : "пиксели", |
DlgTableWidthPc : "проценти", |
DlgTableHeight : "Височина", |
DlgTableCellSpace : "Разстояние между клетките", |
DlgTableCellPad : "Отстъп на съдържанието в клетките", |
DlgTableCaption : "Заглавие", |
DlgTableSummary : "Резюме", |
// Table Cell Dialog |
DlgCellTitle : "Параметри на клетката", |
DlgCellWidth : "Ширина", |
DlgCellWidthPx : "пиксели", |
DlgCellWidthPc : "проценти", |
DlgCellHeight : "Височина", |
DlgCellWordWrap : "пренасяне на нов ред", |
DlgCellWordWrapNotSet : "<Не е настроено>", |
DlgCellWordWrapYes : "Да", |
DlgCellWordWrapNo : "не", |
DlgCellHorAlign : "Хоризонтално подравняване", |
DlgCellHorAlignNotSet : "<Не е настроено>", |
DlgCellHorAlignLeft : "Ляво", |
DlgCellHorAlignCenter : "Център", |
DlgCellHorAlignRight: "Дясно", |
DlgCellVerAlign : "Вертикално подравняване", |
DlgCellVerAlignNotSet : "<Не е настроено>", |
DlgCellVerAlignTop : "Горе", |
DlgCellVerAlignMiddle : "По средата", |
DlgCellVerAlignBottom : "Долу", |
DlgCellVerAlignBaseline : "По базовата линия", |
DlgCellRowSpan : "повече от един ред", |
DlgCellCollSpan : "повече от една колона", |
DlgCellBackColor : "фонов цвят", |
DlgCellBorderColor : "цвят на рамката", |
DlgCellBtnSelect : "Изберете...", |
// Find Dialog |
DlgFindTitle : "Търси", |
DlgFindFindBtn : "Търси", |
DlgFindNotFoundMsg : "Указания текст не беше намерен.", |
// Replace Dialog |
DlgReplaceTitle : "Замести", |
DlgReplaceFindLbl : "Търси:", |
DlgReplaceReplaceLbl : "Замести с:", |
DlgReplaceCaseChk : "Със същия регистър", |
DlgReplaceReplaceBtn : "Замести", |
DlgReplaceReplAllBtn : "Замести всички", |
DlgReplaceWordChk : "Търси същата дума", |
// Paste Operations / Dialog |
PasteErrorPaste : "Настройките за сигурност на вашия бразуър не разрешават на редактора да изпълни вмъкването. За целта използвайте клавиатурата (Ctrl+V).", |
PasteErrorCut : "Настройките за сигурност на вашия бразуър не разрешават на редактора да изпълни изрязването. За целта използвайте клавиатурата (Ctrl+X).", |
PasteErrorCopy : "Настройките за сигурност на вашия бразуър не разрешават на редактора да изпълни запаметяването. За целта използвайте клавиатурата (Ctrl+C).", |
PasteAsText : "Вмъкни като чист текст", |
PasteFromWord : "Вмъкни от MS Word", |
DlgPasteMsg2 : "Вмъкнете тук съдъжанието с клавиатуарата (<STRONG>Ctrl+V</STRONG>) и натиснете <STRONG>OK</STRONG>.", |
DlgPasteIgnoreFont : "Игнорирай шрифтовите дефиниции", |
DlgPasteRemoveStyles : "Изтрий стиловите дефиниции", |
DlgPasteCleanBox : "Изчисти", |
// Color Picker |
ColorAutomatic : "По подразбиране", |
ColorMoreColors : "Други цветове...", |
// Document Properties |
DocProps : "Параметри на документа", |
// Anchor Dialog |
DlgAnchorTitle : "Параметри на котвата", |
DlgAnchorName : "Име на котвата", |
DlgAnchorErrorName : "Моля, въведете име на котвата", |
// Speller Pages Dialog |
DlgSpellNotInDic : "Липсва в речника", |
DlgSpellChangeTo : "Промени на", |
DlgSpellBtnIgnore : "Игнорирай", |
DlgSpellBtnIgnoreAll : "Игнорирай всички", |
DlgSpellBtnReplace : "Замести", |
DlgSpellBtnReplaceAll : "Замести всички", |
DlgSpellBtnUndo : "Отмени", |
DlgSpellNoSuggestions : "- Няма предложения -", |
DlgSpellProgress : "Извършване на проверката за правопис...", |
DlgSpellNoMispell : "Проверката за правопис завършена: не са открити правописни грешки", |
DlgSpellNoChanges : "Проверката за правопис завършена: няма променени думи", |
DlgSpellOneChange : "Проверката за правопис завършена: една дума е променена", |
DlgSpellManyChanges : "Проверката за правопис завършена: %1 думи са променени", |
IeSpellDownload : "Инструментът за проверка на правопис не е инсталиран. Желаете ли да го инсталирате ?", |
// Button Dialog |
DlgButtonText : "Текст (Стойност)", |
DlgButtonType : "Тип", |
DlgButtonTypeBtn : "Button", //MISSING |
DlgButtonTypeSbm : "Submit", //MISSING |
DlgButtonTypeRst : "Reset", //MISSING |
// Checkbox and Radio Button Dialogs |
DlgCheckboxName : "Име", |
DlgCheckboxValue : "Стойност", |
DlgCheckboxSelected : "Отметнато", |
// Form Dialog |
DlgFormName : "Име", |
DlgFormAction : "Действие", |
DlgFormMethod : "Метод", |
// Select Field Dialog |
DlgSelectName : "Име", |
DlgSelectValue : "Стойност", |
DlgSelectSize : "Размер", |
DlgSelectLines : "линии", |
DlgSelectChkMulti : "Разрешено множествено селектиране", |
DlgSelectOpAvail : "Възможни опции", |
DlgSelectOpText : "Текст", |
DlgSelectOpValue : "Стойност", |
DlgSelectBtnAdd : "Добави", |
DlgSelectBtnModify : "Промени", |
DlgSelectBtnUp : "Нагоре", |
DlgSelectBtnDown : "Надолу", |
DlgSelectBtnSetValue : "Настрой като избрана стойност", |
DlgSelectBtnDelete : "Изтрий", |
// Textarea Dialog |
DlgTextareaName : "Име", |
DlgTextareaCols : "Колони", |
DlgTextareaRows : "Редове", |
// Text Field Dialog |
DlgTextName : "Име", |
DlgTextValue : "Стойност", |
DlgTextCharWidth : "Ширина на символите", |
DlgTextMaxChars : "Максимум символи", |
DlgTextType : "Тип", |
DlgTextTypeText : "Текст", |
DlgTextTypePass : "Парола", |
// Hidden Field Dialog |
DlgHiddenName : "Име", |
DlgHiddenValue : "Стойност", |
// Bulleted List Dialog |
BulletedListProp : "Параметри на ненумерирания списък", |
NumberedListProp : "Параметри на нумерирания списък", |
DlgLstStart : "Start", //MISSING |
DlgLstType : "Тип", |
DlgLstTypeCircle : "Окръжност", |
DlgLstTypeDisc : "Кръг", |
DlgLstTypeSquare : "Квадрат", |
DlgLstTypeNumbers : "Числа (1, 2, 3)", |
DlgLstTypeLCase : "Малки букви (a, b, c)", |
DlgLstTypeUCase : "Големи букви (A, B, C)", |
DlgLstTypeSRoman : "Малки римски числа (i, ii, iii)", |
DlgLstTypeLRoman : "Големи римски числа (I, II, III)", |
// Document Properties Dialog |
DlgDocGeneralTab : "Общи", |
DlgDocBackTab : "Фон", |
DlgDocColorsTab : "Цветове и отстъпи", |
DlgDocMetaTab : "Мета данни", |
DlgDocPageTitle : "Заглавие на страницата", |
DlgDocLangDir : "Посока на речта", |
DlgDocLangDirLTR : "От ляво на дясно", |
DlgDocLangDirRTL : "От дясно на ляво", |
DlgDocLangCode : "Код на езика", |
DlgDocCharSet : "Кодиране на символите", |
DlgDocCharSetCE : "Central European", //MISSING |
DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING |
DlgDocCharSetCR : "Cyrillic", //MISSING |
DlgDocCharSetGR : "Greek", //MISSING |
DlgDocCharSetJP : "Japanese", //MISSING |
DlgDocCharSetKR : "Korean", //MISSING |
DlgDocCharSetTR : "Turkish", //MISSING |
DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING |
DlgDocCharSetWE : "Western European", //MISSING |
DlgDocCharSetOther : "Друго кодиране на символите", |
DlgDocDocType : "Тип на документа", |
DlgDocDocTypeOther : "Друг тип на документа", |
DlgDocIncXHTML : "Включи XHTML декларация", |
DlgDocBgColor : "Цвят на фона", |
DlgDocBgImage : "Пълен път до фоновото изображение", |
DlgDocBgNoScroll : "Не-повтарящо се фоново изображение", |
DlgDocCText : "Текст", |
DlgDocCLink : "Връзка", |
DlgDocCVisited : "Посетена връзка", |
DlgDocCActive : "Активна връзка", |
DlgDocMargins : "Отстъпи на страницата", |
DlgDocMaTop : "Горе", |
DlgDocMaLeft : "Ляво", |
DlgDocMaRight : "Дясно", |
DlgDocMaBottom : "Долу", |
DlgDocMeIndex : "Ключови думи за документа (разделени със запетаи)", |
DlgDocMeDescr : "Описание на документа", |
DlgDocMeAuthor : "Автор", |
DlgDocMeCopy : "Авторски права", |
DlgDocPreview : "Изглед", |
// Templates Dialog |
Templates : "Шаблони", |
DlgTemplatesTitle : "Шаблони", |
DlgTemplatesSelMsg : "Изберете шаблон <br>(текущото съдържание на редактора ще бъде загубено):", |
DlgTemplatesLoading : "Зареждане на списъка с шаблоните. Моля изчакайте...", |
DlgTemplatesNoTpl : "(Няма дефинирани шаблони)", |
DlgTemplatesReplace : "Replace actual contents", //MISSING |
// About Dialog |
DlgAboutAboutTab : "За", |
DlgAboutBrowserInfoTab : "Информация за браузъра", |
DlgAboutLicenseTab : "License", //MISSING |
DlgAboutVersion : "версия", |
DlgAboutLicense : "Лиценз по условията на GNU Lesser General Public License", |
DlgAboutInfo : "За повече информация посетете" |
} |
/branches/v1.0-menes/api/fckeditor/editor/lang/sv.js |
---|
New file |
0,0 → 1,501 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: sv.js |
* Swedish language file. |
* |
* File Authors: |
* Kristoffer Malvefors (kristoffer@intema.ws) |
*/ |
var FCKLang = |
{ |
// Language direction : "ltr" (left to right) or "rtl" (right to left). |
Dir : "ltr", |
ToolbarCollapse : "Dölj verktygsfält", |
ToolbarExpand : "Visa verktygsfält", |
// Toolbar Items and Context Menu |
Save : "Spara", |
NewPage : "Ny sida", |
Preview : "Förhandsgranska", |
Cut : "Klipp ut", |
Copy : "Kopiera", |
Paste : "Klistra in", |
PasteText : "Klistra in som text", |
PasteWord : "Klistra in från Word", |
Print : "Skriv ut", |
SelectAll : "Markera allt", |
RemoveFormat : "Radera formatering", |
InsertLinkLbl : "Länk", |
InsertLink : "Infoga/Redigera länk", |
RemoveLink : "Radera länk", |
Anchor : "Infoga/Redigera ankarlänk", |
InsertImageLbl : "Bild", |
InsertImage : "Infoga/Redigera bild", |
InsertFlashLbl : "Flash", |
InsertFlash : "Infoga/Redigera Flash", |
InsertTableLbl : "Tabell", |
InsertTable : "Infoga/Redigera tabell", |
InsertLineLbl : "Linje", |
InsertLine : "Infoga horisontal linje", |
InsertSpecialCharLbl: "Utökade tecken", |
InsertSpecialChar : "Klistra in utökat tecken", |
InsertSmileyLbl : "Smiley", |
InsertSmiley : "Infoga Smiley", |
About : "Om FCKeditor", |
Bold : "Fet", |
Italic : "Kursiv", |
Underline : "Understruken", |
StrikeThrough : "Genomstruken", |
Subscript : "Nedsänkta tecken", |
Superscript : "Upphöjda tecken", |
LeftJustify : "Vänsterjustera", |
CenterJustify : "Centrera", |
RightJustify : "Högerjustera", |
BlockJustify : "Justera till marginaler", |
DecreaseIndent : "Minska indrag", |
IncreaseIndent : "Öka indrag", |
Undo : "Ångra", |
Redo : "Gör om", |
NumberedListLbl : "Numrerad lista", |
NumberedList : "Infoga/Radera numrerad lista", |
BulletedListLbl : "Punktlista", |
BulletedList : "Infoga/Radera punktlista", |
ShowTableBorders : "Visa tabellkant", |
ShowDetails : "Visa radbrytningar", |
Style : "Anpassad stil", |
FontFormat : "Teckenformat", |
Font : "Typsnitt", |
FontSize : "Storlek", |
TextColor : "Textfärg", |
BGColor : "Bakgrundsfärg", |
Source : "Källa", |
Find : "Sök", |
Replace : "Ersätt", |
SpellCheck : "Stavningskontroll", |
UniversalKeyboard : "Universellt tangentbord", |
PageBreakLbl : "Sidbrytning", |
PageBreak : "Infoga sidbrytning", |
Form : "Formulär", |
Checkbox : "Kryssruta", |
RadioButton : "Alternativknapp", |
TextField : "Textfält", |
Textarea : "Textruta", |
HiddenField : "Dolt fält", |
Button : "Knapp", |
SelectionField : "Flervalslista", |
ImageButton : "Bildknapp", |
FitWindow : "Maximize the editor size", //MISSING |
// Context Menu |
EditLink : "Redigera länk", |
CellCM : "Cell", //MISSING |
RowCM : "Row", //MISSING |
ColumnCM : "Column", //MISSING |
InsertRow : "Infoga rad", |
DeleteRows : "Radera rad", |
InsertColumn : "Infoga kolumn", |
DeleteColumns : "Radera kolumn", |
InsertCell : "Infoga cell", |
DeleteCells : "Radera celler", |
MergeCells : "Sammanfoga celler", |
SplitCell : "Separera celler", |
TableDelete : "Radera tabell", |
CellProperties : "Cellegenskaper", |
TableProperties : "Tabellegenskaper", |
ImageProperties : "Bildegenskaper", |
FlashProperties : "Flashegenskaper", |
AnchorProp : "Egenskaper för ankarlänk", |
ButtonProp : "Egenskaper för knapp", |
CheckboxProp : "Egenskaper för kryssruta", |
HiddenFieldProp : "Egenskaper för dolt fält", |
RadioButtonProp : "Egenskaper för alternativknapp", |
ImageButtonProp : "Egenskaper för bildknapp", |
TextFieldProp : "Egenskaper för textfält", |
SelectionFieldProp : "Egenskaper för flervalslista", |
TextareaProp : "Egenskaper för textruta", |
FormProp : "Egenskaper för formulär", |
FontFormats : "Normal;Formaterad;Adress;Rubrik 1;Rubrik 2;Rubrik 3;Rubrik 4;Rubrik 5;Rubrik 6", |
// Alerts and Messages |
ProcessingXHTML : "Bearbetar XHTML. Var god vänta...", |
Done : "Klar", |
PasteWordConfirm : "Texten du vill klistra in verkar vara kopierad från Word. Vill du rensa innan du klistar in?", |
NotCompatiblePaste : "Denna åtgärd är inte tillgängligt för Internet Explorer version 5.5 eller högre. Vill du klistra in utan att rensa?", |
UnknownToolbarItem : "Okänt verktygsfält \"%1\"", |
UnknownCommand : "Okänt kommando \"%1\"", |
NotImplemented : "Kommandot finns ej", |
UnknownToolbarSet : "Verktygsfält \"%1\" finns ej", |
NoActiveX : "Din webläsares säkerhetsinställningar kan begränsa funktionaliteten. Du bör aktivera \"Kör ActiveX kontroller och plug-ins\". Fel och avsaknad av funktioner kan annars uppstå.", |
BrowseServerBlocked : "Kunde Ej öppna resursfönstret. Var god och avaktivera alla popup-blockerare.", |
DialogBlocked : "Kunde Ej öppna dialogfönstret. Var god och avaktivera alla popup-blockerare.", |
// Dialogs |
DlgBtnOK : "OK", |
DlgBtnCancel : "Avbryt", |
DlgBtnClose : "Stäng", |
DlgBtnBrowseServer : "Bläddra på server", |
DlgAdvancedTag : "Avancerad", |
DlgOpOther : "Övrigt", |
DlgInfoTab : "Information", |
DlgAlertUrl : "Var god och ange en URL", |
// General Dialogs Labels |
DlgGenNotSet : "<ej angivet>", |
DlgGenId : "Id", |
DlgGenLangDir : "Språkriktning", |
DlgGenLangDirLtr : "Vänster till Höger (VTH)", |
DlgGenLangDirRtl : "Höger till Vänster (HTV)", |
DlgGenLangCode : "Språkkod", |
DlgGenAccessKey : "Behörighetsnyckel", |
DlgGenName : "Namn", |
DlgGenTabIndex : "Tabindex", |
DlgGenLongDescr : "URL-beskrivning", |
DlgGenClass : "Stylesheet class", |
DlgGenTitle : "Titel", |
DlgGenContType : "Innehållstyp", |
DlgGenLinkCharset : "Teckenuppställning", |
DlgGenStyle : "Style", |
// Image Dialog |
DlgImgTitle : "Bildegenskaper", |
DlgImgInfoTab : "Bildinformation", |
DlgImgBtnUpload : "Skicka till server", |
DlgImgURL : "URL", |
DlgImgUpload : "Ladda upp", |
DlgImgAlt : "Alternativ text", |
DlgImgWidth : "Bredd", |
DlgImgHeight : "Höjd", |
DlgImgLockRatio : "Lås höjd/bredd förhållanden", |
DlgBtnResetSize : "Återställ storlek", |
DlgImgBorder : "Kant", |
DlgImgHSpace : "Horis. marginal", |
DlgImgVSpace : "Vert. marginal", |
DlgImgAlign : "Justering", |
DlgImgAlignLeft : "Vänster", |
DlgImgAlignAbsBottom: "Absolut nederkant", |
DlgImgAlignAbsMiddle: "Absolut centrering", |
DlgImgAlignBaseline : "Baslinje", |
DlgImgAlignBottom : "Nederkant", |
DlgImgAlignMiddle : "Mitten", |
DlgImgAlignRight : "Höger", |
DlgImgAlignTextTop : "Text överkant", |
DlgImgAlignTop : "Överkant", |
DlgImgPreview : "Förhandsgranska", |
DlgImgAlertUrl : "Var god och ange bildens URL", |
DlgImgLinkTab : "Länk", |
// Flash Dialog |
DlgFlashTitle : "Flashegenskaper", |
DlgFlashChkPlay : "Automatisk uppspelning", |
DlgFlashChkLoop : "Upprepa/Loopa", |
DlgFlashChkMenu : "Aktivera Flashmeny", |
DlgFlashScale : "Skala", |
DlgFlashScaleAll : "Visa allt", |
DlgFlashScaleNoBorder : "Ingen ram", |
DlgFlashScaleFit : "Exakt passning", |
// Link Dialog |
DlgLnkWindowTitle : "Länk", |
DlgLnkInfoTab : "Länkinformation", |
DlgLnkTargetTab : "Mål", |
DlgLnkType : "Länktyp", |
DlgLnkTypeURL : "URL", |
DlgLnkTypeAnchor : "Ankare i sidan", |
DlgLnkTypeEMail : "E-post", |
DlgLnkProto : "Protokoll", |
DlgLnkProtoOther : "<övrigt>", |
DlgLnkURL : "URL", |
DlgLnkAnchorSel : "Välj ett ankare", |
DlgLnkAnchorByName : "efter ankarnamn", |
DlgLnkAnchorById : "efter objektid", |
DlgLnkNoAnchors : "<Inga ankare kunde hittas>", |
DlgLnkEMail : "E-postadress", |
DlgLnkEMailSubject : "Ämne", |
DlgLnkEMailBody : "Innehåll", |
DlgLnkUpload : "Ladda upp", |
DlgLnkBtnUpload : "Skicka till servern", |
DlgLnkTarget : "Mål", |
DlgLnkTargetFrame : "<ram>", |
DlgLnkTargetPopup : "<popup-fönster>", |
DlgLnkTargetBlank : "Nytt fönster (_blank)", |
DlgLnkTargetParent : "Föregående Window (_parent)", |
DlgLnkTargetSelf : "Detta fönstret (_self)", |
DlgLnkTargetTop : "Översta fönstret (_top)", |
DlgLnkTargetFrameName : "Målets ramnamn", |
DlgLnkPopWinName : "Popup-fönstrets namn", |
DlgLnkPopWinFeat : "Popup-fönstrets egenskaper", |
DlgLnkPopResize : "Kan ändra storlek", |
DlgLnkPopLocation : "Adressfält", |
DlgLnkPopMenu : "Menyfält", |
DlgLnkPopScroll : "Scrolllista", |
DlgLnkPopStatus : "Statusfält", |
DlgLnkPopToolbar : "Verktygsfält", |
DlgLnkPopFullScrn : "Helskärm (endast IE)", |
DlgLnkPopDependent : "Beroende (endest Netscape)", |
DlgLnkPopWidth : "Bredd", |
DlgLnkPopHeight : "Höjd", |
DlgLnkPopLeft : "Position från vänster", |
DlgLnkPopTop : "Position från sidans topp", |
DlnLnkMsgNoUrl : "Var god ange länkens URL", |
DlnLnkMsgNoEMail : "Var god ange E-postadress", |
DlnLnkMsgNoAnchor : "Var god ange ett ankare", |
DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING |
// Color Dialog |
DlgColorTitle : "Välj färg", |
DlgColorBtnClear : "Rensa", |
DlgColorHighlight : "Markera", |
DlgColorSelected : "Vald", |
// Smiley Dialog |
DlgSmileyTitle : "Infoga smiley", |
// Special Character Dialog |
DlgSpecialCharTitle : "Välj utökat tecken", |
// Table Dialog |
DlgTableTitle : "Tabellegenskaper", |
DlgTableRows : "Rader", |
DlgTableColumns : "Kolumner", |
DlgTableBorder : "Kantstorlek", |
DlgTableAlign : "Justering", |
DlgTableAlignNotSet : "<ej angivet>", |
DlgTableAlignLeft : "Vänster", |
DlgTableAlignCenter : "Centrerad", |
DlgTableAlignRight : "Höger", |
DlgTableWidth : "Bredd", |
DlgTableWidthPx : "pixlar", |
DlgTableWidthPc : "procent", |
DlgTableHeight : "Höjd", |
DlgTableCellSpace : "Cellavstånd", |
DlgTableCellPad : "Cellutfyllnad", |
DlgTableCaption : "Rubrik", |
DlgTableSummary : "Sammanfattning", |
// Table Cell Dialog |
DlgCellTitle : "Cellegenskaper", |
DlgCellWidth : "Bredd", |
DlgCellWidthPx : "pixlar", |
DlgCellWidthPc : "procent", |
DlgCellHeight : "Höjd", |
DlgCellWordWrap : "Automatisk radbrytning", |
DlgCellWordWrapNotSet : "<Ej angivet>", |
DlgCellWordWrapYes : "Ja", |
DlgCellWordWrapNo : "Nej", |
DlgCellHorAlign : "Horisontal justering", |
DlgCellHorAlignNotSet : "<Ej angivet>", |
DlgCellHorAlignLeft : "Vänster", |
DlgCellHorAlignCenter : "Centrerad", |
DlgCellHorAlignRight: "Höger", |
DlgCellVerAlign : "Vertikal justering", |
DlgCellVerAlignNotSet : "<Ej angivet>", |
DlgCellVerAlignTop : "Topp", |
DlgCellVerAlignMiddle : "Mitten", |
DlgCellVerAlignBottom : "Nederkant", |
DlgCellVerAlignBaseline : "Underst", |
DlgCellRowSpan : "Radomfång", |
DlgCellCollSpan : "Kolumnomfång", |
DlgCellBackColor : "Bakgrundsfärg", |
DlgCellBorderColor : "Kantfärg", |
DlgCellBtnSelect : "Välj...", |
// Find Dialog |
DlgFindTitle : "Sök", |
DlgFindFindBtn : "Sök", |
DlgFindNotFoundMsg : "Angiven text kunde ej hittas.", |
// Replace Dialog |
DlgReplaceTitle : "Ersätt", |
DlgReplaceFindLbl : "Sök efter:", |
DlgReplaceReplaceLbl : "Ersätt med:", |
DlgReplaceCaseChk : "Skiftläge", |
DlgReplaceReplaceBtn : "Ersätt", |
DlgReplaceReplAllBtn : "Ersätt alla", |
DlgReplaceWordChk : "Inkludera hela ord", |
// Paste Operations / Dialog |
PasteErrorPaste : "Säkerhetsinställningar i Er webläsare tillåter inte åtgården Klistra in. Använd (Ctrl+V) istället.", |
PasteErrorCut : "Säkerhetsinställningar i Er webläsare tillåter inte åtgården Klipp ut. Använd (Ctrl+X) istället.", |
PasteErrorCopy : "Säkerhetsinställningar i Er webläsare tillåter inte åtgården Kopiera. Använd (Ctrl+C) istället", |
PasteAsText : "Klistra in som vanlig text", |
PasteFromWord : "Klistra in från Word", |
DlgPasteMsg2 : "Var god och klistra in Er text i rutan nedan genom att använda (<STRONG>Ctrl+V</STRONG>) klicka sen på <STRONG>OK</STRONG>.", |
DlgPasteIgnoreFont : "Ignorera typsnittsdefinitioner", |
DlgPasteRemoveStyles : "Radera Stildefinitioner", |
DlgPasteCleanBox : "Töm rutans innehåll", |
// Color Picker |
ColorAutomatic : "Automatisk", |
ColorMoreColors : "Fler färger...", |
// Document Properties |
DocProps : "Dokumentegenskaper", |
// Anchor Dialog |
DlgAnchorTitle : "Ankaregenskaper", |
DlgAnchorName : "Ankarnamn", |
DlgAnchorErrorName : "Var god ange ett ankarnamn", |
// Speller Pages Dialog |
DlgSpellNotInDic : "Saknas i ordlistan", |
DlgSpellChangeTo : "Ändra till", |
DlgSpellBtnIgnore : "Ignorera", |
DlgSpellBtnIgnoreAll : "Ignorera alla", |
DlgSpellBtnReplace : "Ersätt", |
DlgSpellBtnReplaceAll : "Ersätt alla", |
DlgSpellBtnUndo : "Ångra", |
DlgSpellNoSuggestions : "- Förslag saknas -", |
DlgSpellProgress : "Stavningskontroll pågår...", |
DlgSpellNoMispell : "Stavningskontroll slutförd: Inga stavfel påträffades.", |
DlgSpellNoChanges : "Stavningskontroll slutförd: Inga ord rättades.", |
DlgSpellOneChange : "Stavningskontroll slutförd: Ett ord rättades.", |
DlgSpellManyChanges : "Stavningskontroll slutförd: %1 ord rättades.", |
IeSpellDownload : "Stavningskontrollen är ej installerad. Vill du göra det nu?", |
// Button Dialog |
DlgButtonText : "Text (Värde)", |
DlgButtonType : "Typ", |
DlgButtonTypeBtn : "Button", //MISSING |
DlgButtonTypeSbm : "Submit", //MISSING |
DlgButtonTypeRst : "Reset", //MISSING |
// Checkbox and Radio Button Dialogs |
DlgCheckboxName : "Namn", |
DlgCheckboxValue : "Värde", |
DlgCheckboxSelected : "Vald", |
// Form Dialog |
DlgFormName : "Namn", |
DlgFormAction : "Funktion", |
DlgFormMethod : "Metod", |
// Select Field Dialog |
DlgSelectName : "Namn", |
DlgSelectValue : "Värde", |
DlgSelectSize : "Storlek", |
DlgSelectLines : "Linjer", |
DlgSelectChkMulti : "Tillåt flerval", |
DlgSelectOpAvail : "Befintliga val", |
DlgSelectOpText : "Text", |
DlgSelectOpValue : "Värde", |
DlgSelectBtnAdd : "Lägg till", |
DlgSelectBtnModify : "Redigera", |
DlgSelectBtnUp : "Upp", |
DlgSelectBtnDown : "Ner", |
DlgSelectBtnSetValue : "Markera som valt värde", |
DlgSelectBtnDelete : "Radera", |
// Textarea Dialog |
DlgTextareaName : "Namn", |
DlgTextareaCols : "Kolumner", |
DlgTextareaRows : "Rader", |
// Text Field Dialog |
DlgTextName : "Namn", |
DlgTextValue : "Värde", |
DlgTextCharWidth : "Teckenbredd", |
DlgTextMaxChars : "Max antal tecken", |
DlgTextType : "Typ", |
DlgTextTypeText : "Text", |
DlgTextTypePass : "Lösenord", |
// Hidden Field Dialog |
DlgHiddenName : "Namn", |
DlgHiddenValue : "Värde", |
// Bulleted List Dialog |
BulletedListProp : "Egenskaper för punktlista", |
NumberedListProp : "Egenskaper för numrerad lista", |
DlgLstStart : "Start", //MISSING |
DlgLstType : "Typ", |
DlgLstTypeCircle : "Cirkel", |
DlgLstTypeDisc : "Punkt", |
DlgLstTypeSquare : "Ruta", |
DlgLstTypeNumbers : "Nummer (1, 2, 3)", |
DlgLstTypeLCase : "Gemener (a, b, c)", |
DlgLstTypeUCase : "Versaler (A, B, C)", |
DlgLstTypeSRoman : "Små romerska siffror (i, ii, iii)", |
DlgLstTypeLRoman : "Stora romerska siffror (I, II, III)", |
// Document Properties Dialog |
DlgDocGeneralTab : "Allmän", |
DlgDocBackTab : "Bakgrund", |
DlgDocColorsTab : "Färg och marginal", |
DlgDocMetaTab : "Metadata", |
DlgDocPageTitle : "Sidtitel", |
DlgDocLangDir : "Språkriktning", |
DlgDocLangDirLTR : "Vänster till Höger", |
DlgDocLangDirRTL : "Höger till Vänster", |
DlgDocLangCode : "Språkkod", |
DlgDocCharSet : "Teckenuppsättningar", |
DlgDocCharSetCE : "Central European", //MISSING |
DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING |
DlgDocCharSetCR : "Cyrillic", //MISSING |
DlgDocCharSetGR : "Greek", //MISSING |
DlgDocCharSetJP : "Japanese", //MISSING |
DlgDocCharSetKR : "Korean", //MISSING |
DlgDocCharSetTR : "Turkish", //MISSING |
DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING |
DlgDocCharSetWE : "Western European", //MISSING |
DlgDocCharSetOther : "Övriga teckenuppsättningar", |
DlgDocDocType : "Sidhuvud", |
DlgDocDocTypeOther : "Övriga sidhuvuden", |
DlgDocIncXHTML : "Inkludera XHTML deklaration", |
DlgDocBgColor : "Bakgrundsfärg", |
DlgDocBgImage : "Bakgrundsbildens URL", |
DlgDocBgNoScroll : "Fast bakgrund", |
DlgDocCText : "Text", |
DlgDocCLink : "Länk", |
DlgDocCVisited : "Besökt länk", |
DlgDocCActive : "Aktiv länk", |
DlgDocMargins : "Sidmarginal", |
DlgDocMaTop : "Topp", |
DlgDocMaLeft : "Vänster", |
DlgDocMaRight : "Höger", |
DlgDocMaBottom : "Botten", |
DlgDocMeIndex : "Sidans nyckelord", |
DlgDocMeDescr : "Sidans beskrivning", |
DlgDocMeAuthor : "Författare", |
DlgDocMeCopy : "Upphovsrätt", |
DlgDocPreview : "Förhandsgranska", |
// Templates Dialog |
Templates : "Sidmallar", |
DlgTemplatesTitle : "Sidmallar", |
DlgTemplatesSelMsg : "Var god välj en mall att använda med editorn<br>(allt nuvarande innehåll raderas):", |
DlgTemplatesLoading : "Laddar mallar. Var god vänta...", |
DlgTemplatesNoTpl : "(Ingen mall är vald)", |
DlgTemplatesReplace : "Replace actual contents", //MISSING |
// About Dialog |
DlgAboutAboutTab : "Om", |
DlgAboutBrowserInfoTab : "Webläsare", |
DlgAboutLicenseTab : "License", //MISSING |
DlgAboutVersion : "version", |
DlgAboutLicense : "Licensierad under villkoren av GNU Lesser General Public License", |
DlgAboutInfo : "För mer information se" |
} |
/branches/v1.0-menes/api/fckeditor/editor/lang/ja.js |
---|
New file |
0,0 → 1,501 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: ja.js |
* Japanese language file. |
* |
* File Authors: |
* Takashi Yamaguchi (jack@omakase.net) |
*/ |
var FCKLang = |
{ |
// Language direction : "ltr" (left to right) or "rtl" (right to left). |
Dir : "ltr", |
ToolbarCollapse : "ツールバーを隠す", |
ToolbarExpand : "ツールバーを表示", |
// Toolbar Items and Context Menu |
Save : "保存", |
NewPage : "新しいページ", |
Preview : "プレビュー", |
Cut : "切り取り", |
Copy : "コピー", |
Paste : "貼り付け", |
PasteText : "プレーンテキスト貼り付け", |
PasteWord : "ワード文章から貼り付け", |
Print : "印刷", |
SelectAll : "すべて選択", |
RemoveFormat : "フォーマット削除", |
InsertLinkLbl : "リンク", |
InsertLink : "リンク挿入/編集", |
RemoveLink : "リンク削除", |
Anchor : "アンカー挿入/編集", |
InsertImageLbl : "イメージ", |
InsertImage : "イメージ挿入/編集", |
InsertFlashLbl : "Flash", |
InsertFlash : "Flash挿入/編集", |
InsertTableLbl : "テーブル", |
InsertTable : "テーブル挿入/編集", |
InsertLineLbl : "ライン", |
InsertLine : "横罫線", |
InsertSpecialCharLbl: "特殊文字", |
InsertSpecialChar : "特殊文字挿入", |
InsertSmileyLbl : "絵文字", |
InsertSmiley : "絵文字挿入", |
About : "FCKeditorヘルプ", |
Bold : "太字", |
Italic : "斜体", |
Underline : "下線", |
StrikeThrough : "打ち消し線", |
Subscript : "添え字", |
Superscript : "上付き文字", |
LeftJustify : "左揃え", |
CenterJustify : "中央揃え", |
RightJustify : "右揃え", |
BlockJustify : "両端揃え", |
DecreaseIndent : "インデント解除", |
IncreaseIndent : "インデント", |
Undo : "元に戻す", |
Redo : "やり直し", |
NumberedListLbl : "段落番号", |
NumberedList : "段落番号の追加/削除", |
BulletedListLbl : "箇条書き", |
BulletedList : "箇条書きの追加/削除", |
ShowTableBorders : "テーブルボーダー表示", |
ShowDetails : "詳細表示", |
Style : "スタイル", |
FontFormat : "フォーマット", |
Font : "フォント", |
FontSize : "サイズ", |
TextColor : "テキスト色", |
BGColor : "背景色", |
Source : "ソース", |
Find : "検索", |
Replace : "置き換え", |
SpellCheck : "スペルチェック", |
UniversalKeyboard : "ユニバーサル・キーボード", |
PageBreakLbl : "改ページ", |
PageBreak : "改ページ挿入", |
Form : "フォーム", |
Checkbox : "チェックボックス", |
RadioButton : "ラジオボタン", |
TextField : "1行テキスト", |
Textarea : "テキストエリア", |
HiddenField : "不可視フィールド", |
Button : "ボタン", |
SelectionField : "選択フィールド", |
ImageButton : "画像ボタン", |
FitWindow : "エディタサイズを最大にします", |
// Context Menu |
EditLink : "リンク編集", |
CellCM : "セル", |
RowCM : "行", |
ColumnCM : "カラム", |
InsertRow : "行挿入", |
DeleteRows : "行削除", |
InsertColumn : "列挿入", |
DeleteColumns : "列削除", |
InsertCell : "セル挿入", |
DeleteCells : "セル削除", |
MergeCells : "セル結合", |
SplitCell : "セル分割", |
TableDelete : "テーブル削除", |
CellProperties : "セル プロパティ", |
TableProperties : "テーブル プロパティ", |
ImageProperties : "イメージ プロパティ", |
FlashProperties : "Flash プロパティ", |
AnchorProp : "アンカー プロパティ", |
ButtonProp : "ボタン プロパティ", |
CheckboxProp : "チェックボックス プロパティ", |
HiddenFieldProp : "不可視フィールド プロパティ", |
RadioButtonProp : "ラジオボタン プロパティ", |
ImageButtonProp : "画像ボタン プロパティ", |
TextFieldProp : "1行テキスト プロパティ", |
SelectionFieldProp : "選択フィールド プロパティ", |
TextareaProp : "テキストエリア プロパティ", |
FormProp : "フォーム プロパティ", |
FontFormats : "標準;書式付き;アドレス;見出し 1;見出し 2;見出し 3;見出し 4;見出し 5;見出し 6;標準 (DIV)", |
// Alerts and Messages |
ProcessingXHTML : "XHTML処理中. しばらくお待ちください...", |
Done : "完了", |
PasteWordConfirm : "貼り付けを行うテキストは、ワード文章からコピーされようとしています。貼り付ける前にクリーニングを行いますか?", |
NotCompatiblePaste : "このコマンドはインターネット・エクスプローラーバージョン5.5以上で利用可能です。クリーニングしないで貼り付けを行いますか?", |
UnknownToolbarItem : "未知のツールバー項目 \"%1\"", |
UnknownCommand : "未知のコマンド名 \"%1\"", |
NotImplemented : "コマンドはインプリメントされませんでした。", |
UnknownToolbarSet : "ツールバー設定 \"%1\" 存在しません。", |
NoActiveX : "エラー、警告メッセージなどが発生した場合、ブラウザーのセキュリティ設定によりエディタのいくつかの機能が制限されている可能性があります。セキュリティ設定のオプションで\"ActiveXコントロールとプラグインの実行\"を有効にするにしてください。", |
BrowseServerBlocked : "サーバーブラウザーを開くことができませんでした。ポップアップ・ブロック機能が無効になっているか確認してください。", |
DialogBlocked : "ダイアログウィンドウを開くことができませんでした。ポップアップ・ブロック機能が無効になっているか確認してください。", |
// Dialogs |
DlgBtnOK : "OK", |
DlgBtnCancel : "キャンセル", |
DlgBtnClose : "閉じる", |
DlgBtnBrowseServer : "サーバーブラウザー", |
DlgAdvancedTag : "高度な設定", |
DlgOpOther : "<その他>", |
DlgInfoTab : "情報", |
DlgAlertUrl : "URLを挿入してください", |
// General Dialogs Labels |
DlgGenNotSet : "<なし>", |
DlgGenId : "Id", |
DlgGenLangDir : "文字表記の方向", |
DlgGenLangDirLtr : "左から右 (LTR)", |
DlgGenLangDirRtl : "右から左 (RTL)", |
DlgGenLangCode : "言語コード", |
DlgGenAccessKey : "アクセスキー", |
DlgGenName : "Name属性", |
DlgGenTabIndex : "タブインデックス", |
DlgGenLongDescr : "longdesc属性(長文説明)", |
DlgGenClass : "スタイルシートクラス", |
DlgGenTitle : "Title属性", |
DlgGenContType : "Content Type属性", |
DlgGenLinkCharset : "リンクcharset属性", |
DlgGenStyle : "スタイルシート", |
// Image Dialog |
DlgImgTitle : "イメージ プロパティ", |
DlgImgInfoTab : "イメージ 情報", |
DlgImgBtnUpload : "サーバーに送信", |
DlgImgURL : "URL", |
DlgImgUpload : "アップロード", |
DlgImgAlt : "代替テキスト", |
DlgImgWidth : "幅", |
DlgImgHeight : "高さ", |
DlgImgLockRatio : "ロック比率", |
DlgBtnResetSize : "サイズリセット", |
DlgImgBorder : "ボーダー", |
DlgImgHSpace : "横間隔", |
DlgImgVSpace : "縦間隔", |
DlgImgAlign : "行揃え", |
DlgImgAlignLeft : "左", |
DlgImgAlignAbsBottom: "下部(絶対的)", |
DlgImgAlignAbsMiddle: "中央(絶対的)", |
DlgImgAlignBaseline : "ベースライン", |
DlgImgAlignBottom : "下", |
DlgImgAlignMiddle : "中央", |
DlgImgAlignRight : "右", |
DlgImgAlignTextTop : "テキスト上部", |
DlgImgAlignTop : "上", |
DlgImgPreview : "プレビュー", |
DlgImgAlertUrl : "イメージのURLを入力してください。", |
DlgImgLinkTab : "リンク", |
// Flash Dialog |
DlgFlashTitle : "Flash プロパティ", |
DlgFlashChkPlay : "再生", |
DlgFlashChkLoop : "ループ再生", |
DlgFlashChkMenu : "Flashメニュー可能", |
DlgFlashScale : "拡大縮小設定", |
DlgFlashScaleAll : "すべて表示", |
DlgFlashScaleNoBorder : "外が見えない様に拡大", |
DlgFlashScaleFit : "上下左右にフィット", |
// Link Dialog |
DlgLnkWindowTitle : "ハイパーリンク", |
DlgLnkInfoTab : "ハイパーリンク 情報", |
DlgLnkTargetTab : "ターゲット", |
DlgLnkType : "リンクタイプ", |
DlgLnkTypeURL : "URL", |
DlgLnkTypeAnchor : "このページのアンカー", |
DlgLnkTypeEMail : "E-Mail", |
DlgLnkProto : "プロトコル", |
DlgLnkProtoOther : "<その他>", |
DlgLnkURL : "URL", |
DlgLnkAnchorSel : "アンカーを選択", |
DlgLnkAnchorByName : "アンカー名", |
DlgLnkAnchorById : "エレメントID", |
DlgLnkNoAnchors : "<ドキュメントにおいて利用可能なアンカーはありません。>", |
DlgLnkEMail : "E-Mail アドレス", |
DlgLnkEMailSubject : "件名", |
DlgLnkEMailBody : "本文", |
DlgLnkUpload : "アップロード", |
DlgLnkBtnUpload : "サーバーに送信", |
DlgLnkTarget : "ターゲット", |
DlgLnkTargetFrame : "<フレーム>", |
DlgLnkTargetPopup : "<ポップアップウィンドウ>", |
DlgLnkTargetBlank : "新しいウィンドウ (_blank)", |
DlgLnkTargetParent : "親ウィンドウ (_parent)", |
DlgLnkTargetSelf : "同じウィンドウ (_self)", |
DlgLnkTargetTop : "最上位ウィンドウ (_top)", |
DlgLnkTargetFrameName : "目的のフレーム名", |
DlgLnkPopWinName : "ポップアップウィンドウ名", |
DlgLnkPopWinFeat : "ポップアップウィンドウ特徴", |
DlgLnkPopResize : "リサイズ可能", |
DlgLnkPopLocation : "ロケーションバー", |
DlgLnkPopMenu : "メニューバー", |
DlgLnkPopScroll : "スクロールバー", |
DlgLnkPopStatus : "ステータスバー", |
DlgLnkPopToolbar : "ツールバー", |
DlgLnkPopFullScrn : "全画面モード(IE)", |
DlgLnkPopDependent : "開いたウィンドウに連動して閉じる (Netscape)", |
DlgLnkPopWidth : "幅", |
DlgLnkPopHeight : "高さ", |
DlgLnkPopLeft : "左端からの座標で指定", |
DlgLnkPopTop : "上端からの座標で指定", |
DlnLnkMsgNoUrl : "リンクURLを入力してください。", |
DlnLnkMsgNoEMail : "メールアドレスを入力してください。", |
DlnLnkMsgNoAnchor : "アンカーを選択してください。", |
DlnLnkMsgInvPopName : "ポップ・アップ名は英字で始まる文字で指定してくだい。ポップ・アップ名にスペースは含めません", |
// Color Dialog |
DlgColorTitle : "色選択", |
DlgColorBtnClear : "クリア", |
DlgColorHighlight : "ハイライト", |
DlgColorSelected : "選択色", |
// Smiley Dialog |
DlgSmileyTitle : "顔文字挿入", |
// Special Character Dialog |
DlgSpecialCharTitle : "特殊文字選択", |
// Table Dialog |
DlgTableTitle : "テーブル プロパティ", |
DlgTableRows : "行", |
DlgTableColumns : "列", |
DlgTableBorder : "ボーダーサイズ", |
DlgTableAlign : "キャプションの整列", |
DlgTableAlignNotSet : "<なし>", |
DlgTableAlignLeft : "左", |
DlgTableAlignCenter : "中央", |
DlgTableAlignRight : "右", |
DlgTableWidth : "テーブル幅", |
DlgTableWidthPx : "ピクセル", |
DlgTableWidthPc : "パーセント", |
DlgTableHeight : "テーブル高さ", |
DlgTableCellSpace : "セル内余白", |
DlgTableCellPad : "セル内間隔", |
DlgTableCaption : "キャプション", |
DlgTableSummary : "テーブル目的/構造", |
// Table Cell Dialog |
DlgCellTitle : "セル プロパティ", |
DlgCellWidth : "幅", |
DlgCellWidthPx : "ピクセル", |
DlgCellWidthPc : "パーセント", |
DlgCellHeight : "高さ", |
DlgCellWordWrap : "折り返し", |
DlgCellWordWrapNotSet : "<なし>", |
DlgCellWordWrapYes : "Yes", |
DlgCellWordWrapNo : "No", |
DlgCellHorAlign : "セル横の整列", |
DlgCellHorAlignNotSet : "<なし>", |
DlgCellHorAlignLeft : "左", |
DlgCellHorAlignCenter : "中央", |
DlgCellHorAlignRight: "右", |
DlgCellVerAlign : "セル縦の整列", |
DlgCellVerAlignNotSet : "<なし>", |
DlgCellVerAlignTop : "上", |
DlgCellVerAlignMiddle : "中央", |
DlgCellVerAlignBottom : "下", |
DlgCellVerAlignBaseline : "ベースライン", |
DlgCellRowSpan : "縦幅(行数)", |
DlgCellCollSpan : "横幅(列数)", |
DlgCellBackColor : "背景色", |
DlgCellBorderColor : "ボーダーカラー", |
DlgCellBtnSelect : "選択...", |
// Find Dialog |
DlgFindTitle : "検索", |
DlgFindFindBtn : "検索", |
DlgFindNotFoundMsg : "指定された文字列は見つかりませんでした。", |
// Replace Dialog |
DlgReplaceTitle : "置き換え", |
DlgReplaceFindLbl : "検索する文字列:", |
DlgReplaceReplaceLbl : "置換えする文字列:", |
DlgReplaceCaseChk : "部分一致", |
DlgReplaceReplaceBtn : "置換え", |
DlgReplaceReplAllBtn : "すべて置換え", |
DlgReplaceWordChk : "単語単位で一致", |
// Paste Operations / Dialog |
PasteErrorPaste : "ブラウザーのセキュリティ設定によりエディタの貼り付け操作が自動で実行することができません。実行するには手動でキーボードの(Ctrl+V)を使用してください。", |
PasteErrorCut : "ブラウザーのセキュリティ設定によりエディタの切り取り操作が自動で実行することができません。実行するには手動でキーボードの(Ctrl+X)を使用してください。", |
PasteErrorCopy : "ブラウザーのセキュリティ設定によりエディタのコピー操作が自動で実行することができません。実行するには手動でキーボードの(Ctrl+C)を使用してください。", |
PasteAsText : "プレーンテキスト貼り付け", |
PasteFromWord : "ワード文章から貼り付け", |
DlgPasteMsg2 : "キーボード(<STRONG>Ctrl+V</STRONG>)を使用して、次の入力エリア内で貼って、<STRONG>OK</STRONG>を押してください。", |
DlgPasteIgnoreFont : "FontタグのFace属性を無視します。", |
DlgPasteRemoveStyles : "スタイル定義を削除します。", |
DlgPasteCleanBox : "入力エリアクリア", |
// Color Picker |
ColorAutomatic : "自動", |
ColorMoreColors : "その他の色...", |
// Document Properties |
DocProps : "文書 プロパティ", |
// Anchor Dialog |
DlgAnchorTitle : "アンカー プロパティ", |
DlgAnchorName : "アンカー名", |
DlgAnchorErrorName : "アンカー名を必ず入力してください。", |
// Speller Pages Dialog |
DlgSpellNotInDic : "辞書にありません", |
DlgSpellChangeTo : "変更", |
DlgSpellBtnIgnore : "無視", |
DlgSpellBtnIgnoreAll : "すべて無視", |
DlgSpellBtnReplace : "置換", |
DlgSpellBtnReplaceAll : "すべて置換", |
DlgSpellBtnUndo : "やり直し", |
DlgSpellNoSuggestions : "- 該当なし -", |
DlgSpellProgress : "スペルチェック処理中...", |
DlgSpellNoMispell : "スペルチェック完了: スペルの誤りはありませんでした", |
DlgSpellNoChanges : "スペルチェック完了: 語句は変更されませんでした", |
DlgSpellOneChange : "スペルチェック完了: 1語句変更されました", |
DlgSpellManyChanges : "スペルチェック完了: %1 語句変更されました", |
IeSpellDownload : "スペルチェッカーがインストールされていません。今すぐダウンロードしますか?", |
// Button Dialog |
DlgButtonText : "テキスト (値)", |
DlgButtonType : "タイプ", |
DlgButtonTypeBtn : "ボタン", |
DlgButtonTypeSbm : "送信", |
DlgButtonTypeRst : "リセット", |
// Checkbox and Radio Button Dialogs |
DlgCheckboxName : "名前", |
DlgCheckboxValue : "値", |
DlgCheckboxSelected : "選択済み", |
// Form Dialog |
DlgFormName : "フォーム名", |
DlgFormAction : "アクション", |
DlgFormMethod : "メソッド", |
// Select Field Dialog |
DlgSelectName : "名前", |
DlgSelectValue : "値", |
DlgSelectSize : "サイズ", |
DlgSelectLines : "行", |
DlgSelectChkMulti : "複数項目選択を許可", |
DlgSelectOpAvail : "利用可能なオプション", |
DlgSelectOpText : "選択項目名", |
DlgSelectOpValue : "選択項目値", |
DlgSelectBtnAdd : "追加", |
DlgSelectBtnModify : "編集", |
DlgSelectBtnUp : "上へ", |
DlgSelectBtnDown : "下へ", |
DlgSelectBtnSetValue : "選択した値を設定", |
DlgSelectBtnDelete : "削除", |
// Textarea Dialog |
DlgTextareaName : "名前", |
DlgTextareaCols : "列", |
DlgTextareaRows : "行", |
// Text Field Dialog |
DlgTextName : "名前", |
DlgTextValue : "値", |
DlgTextCharWidth : "サイズ", |
DlgTextMaxChars : "最大長", |
DlgTextType : "タイプ", |
DlgTextTypeText : "テキスト", |
DlgTextTypePass : "パスワード入力", |
// Hidden Field Dialog |
DlgHiddenName : "名前", |
DlgHiddenValue : "値", |
// Bulleted List Dialog |
BulletedListProp : "箇条書き プロパティ", |
NumberedListProp : "段落番号 プロパティ", |
DlgLstStart : "開始文字", |
DlgLstType : "タイプ", |
DlgLstTypeCircle : "白丸", |
DlgLstTypeDisc : "黒丸", |
DlgLstTypeSquare : "四角", |
DlgLstTypeNumbers : "アラビア数字 (1, 2, 3)", |
DlgLstTypeLCase : "英字小文字 (a, b, c)", |
DlgLstTypeUCase : "英字大文字 (A, B, C)", |
DlgLstTypeSRoman : "ローマ数字小文字 (i, ii, iii)", |
DlgLstTypeLRoman : "ローマ数字大文字 (I, II, III)", |
// Document Properties Dialog |
DlgDocGeneralTab : "全般", |
DlgDocBackTab : "背景", |
DlgDocColorsTab : "色とマージン", |
DlgDocMetaTab : "メタデータ", |
DlgDocPageTitle : "ページタイトル", |
DlgDocLangDir : "言語文字表記の方向", |
DlgDocLangDirLTR : "左から右に表記(LTR)", |
DlgDocLangDirRTL : "右から左に表記(RTL)", |
DlgDocLangCode : "言語コード", |
DlgDocCharSet : "文字セット符号化", |
DlgDocCharSetCE : "Central European", |
DlgDocCharSetCT : "Chinese Traditional (Big5)", |
DlgDocCharSetCR : "Cyrillic", |
DlgDocCharSetGR : "Greek", |
DlgDocCharSetJP : "Japanese", |
DlgDocCharSetKR : "Korean", |
DlgDocCharSetTR : "Turkish", |
DlgDocCharSetUN : "Unicode (UTF-8)", |
DlgDocCharSetWE : "Western European", |
DlgDocCharSetOther : "他の文字セット符号化", |
DlgDocDocType : "文書タイプヘッダー", |
DlgDocDocTypeOther : "その他文書タイプヘッダー", |
DlgDocIncXHTML : "XHTML宣言をインクルード", |
DlgDocBgColor : "背景色", |
DlgDocBgImage : "背景画像 URL", |
DlgDocBgNoScroll : "スクロールしない背景", |
DlgDocCText : "テキスト", |
DlgDocCLink : "リンク", |
DlgDocCVisited : "アクセス済みリンク", |
DlgDocCActive : "アクセス中リンク", |
DlgDocMargins : "ページ・マージン", |
DlgDocMaTop : "上部", |
DlgDocMaLeft : "左", |
DlgDocMaRight : "右", |
DlgDocMaBottom : "下部", |
DlgDocMeIndex : "文書のキーワード(カンマ区切り)", |
DlgDocMeDescr : "文書の概要", |
DlgDocMeAuthor : "文書の作者", |
DlgDocMeCopy : "文書の著作権", |
DlgDocPreview : "プレビュー", |
// Templates Dialog |
Templates : "テンプレート(雛形)", |
DlgTemplatesTitle : "テンプレート内容", |
DlgTemplatesSelMsg : "エディターで使用するテンプレートを選択してください。<br>(現在のエディタの内容は失われます):", |
DlgTemplatesLoading : "テンプレート一覧読み込み中. しばらくお待ちください...", |
DlgTemplatesNoTpl : "(テンプレートが定義されていません)", |
DlgTemplatesReplace : "現在のエディタの内容と置換えをします", |
// About Dialog |
DlgAboutAboutTab : "バージョン情報", |
DlgAboutBrowserInfoTab : "ブラウザ情報", |
DlgAboutLicenseTab : "ライセンス", |
DlgAboutVersion : "バージョン", |
DlgAboutLicense : "Licensed under the terms of the GNU Lesser General Public License", |
DlgAboutInfo : "より詳しい情報はこちらで" |
} |
/branches/v1.0-menes/api/fckeditor/editor/lang/he.js |
---|
New file |
0,0 → 1,502 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: he.js |
* Hebrew language file. |
* |
* File Authors: |
* Tamir Mordo (tamir@tetitu.co.il) |
* Ophir Radnitz (ophir@liqweed.net) |
*/ |
var FCKLang = |
{ |
// Language direction : "ltr" (left to right) or "rtl" (right to left). |
Dir : "rtl", |
ToolbarCollapse : "כיווץ סרגל הכלים", |
ToolbarExpand : "פתיחת סרגל הכלים", |
// Toolbar Items and Context Menu |
Save : "שמירה", |
NewPage : "דף חדש", |
Preview : "תצוגה מקדימה", |
Cut : "גזירה", |
Copy : "העתקה", |
Paste : "הדבקה", |
PasteText : "הדבקה כטקסט פשוט", |
PasteWord : "הדבקה מ-וורד", |
Print : "הדפסה", |
SelectAll : "בחירת הכל", |
RemoveFormat : "הסרת העיצוב", |
InsertLinkLbl : "קישור", |
InsertLink : "הוספת/עריכת קישור", |
RemoveLink : "הסרת הקישור", |
Anchor : "הוספת/עריכת נקודת עיגון", |
InsertImageLbl : "תמונה", |
InsertImage : "הוספת/עריכת תמונה", |
InsertFlashLbl : "פלאש", |
InsertFlash : "הוסף/ערוך פלאש", |
InsertTableLbl : "טבלה", |
InsertTable : "הוספת/עריכת טבלה", |
InsertLineLbl : "קו", |
InsertLine : "הוספת קו אופקי", |
InsertSpecialCharLbl: "תו מיוחד", |
InsertSpecialChar : "הוספת תו מיוחד", |
InsertSmileyLbl : "סמיילי", |
InsertSmiley : "הוספת סמיילי", |
About : "אודות FCKeditor", |
Bold : "מודגש", |
Italic : "נטוי", |
Underline : "קו תחתון", |
StrikeThrough : "כתיב מחוק", |
Subscript : "כתיב תחתון", |
Superscript : "כתיב עליון", |
LeftJustify : "יישור לשמאל", |
CenterJustify : "מרכוז", |
RightJustify : "יישור לימין", |
BlockJustify : "יישור לשוליים", |
DecreaseIndent : "הקטנת אינדנטציה", |
IncreaseIndent : "הגדלת אינדנטציה", |
Undo : "ביטול צעד אחרון", |
Redo : "חזרה על צעד אחרון", |
NumberedListLbl : "רשימה ממוספרת", |
NumberedList : "הוספת/הסרת רשימה ממוספרת", |
BulletedListLbl : "רשימת נקודות", |
BulletedList : "הוספת/הסרת רשימת נקודות", |
ShowTableBorders : "הצגת מסגרת הטבלה", |
ShowDetails : "הצגת פרטים", |
Style : "סגנון", |
FontFormat : "עיצוב", |
Font : "גופן", |
FontSize : "גודל", |
TextColor : "צבע טקסט", |
BGColor : "צבע רקע", |
Source : "מקור", |
Find : "חיפוש", |
Replace : "החלפה", |
SpellCheck : "בדיקת איות", |
UniversalKeyboard : "מקלדת אוניברסלית", |
PageBreakLbl : "שבירת דף", |
PageBreak : "הוסף שבירת דף", |
Form : "טופס", |
Checkbox : "תיבת סימון", |
RadioButton : "לחצן אפשרויות", |
TextField : "שדה טקסט", |
Textarea : "איזור טקסט", |
HiddenField : "שדה חבוי", |
Button : "כפתור", |
SelectionField : "שדה בחירה", |
ImageButton : "כפתור תמונה", |
FitWindow : "הגדל את גודל העורך", |
// Context Menu |
EditLink : "עריכת קישור", |
CellCM : "תא", |
RowCM : "שורה", |
ColumnCM : "עמודה", |
InsertRow : "הוספת שורה", |
DeleteRows : "מחיקת שורות", |
InsertColumn : "הוספת עמודה", |
DeleteColumns : "מחיקת עמודות", |
InsertCell : "הוספת תא", |
DeleteCells : "מחיקת תאים", |
MergeCells : "מיזוג תאים", |
SplitCell : "פיצול תאים", |
TableDelete : "מחק טבלה", |
CellProperties : "תכונות התא", |
TableProperties : "תכונות הטבלה", |
ImageProperties : "תכונות התמונה", |
FlashProperties : "מאפייני פלאש", |
AnchorProp : "מאפייני נקודת עיגון", |
ButtonProp : "מאפייני כפתור", |
CheckboxProp : "מאפייני תיבת סימון", |
HiddenFieldProp : "מאפיני שדה חבוי", |
RadioButtonProp : "מאפייני לחצן אפשרויות", |
ImageButtonProp : "מאפיני כפתור תמונה", |
TextFieldProp : "מאפייני שדה טקסט", |
SelectionFieldProp : "מאפייני שדה בחירה", |
TextareaProp : "מאפיני איזור טקסט", |
FormProp : "מאפיני טופס", |
FontFormats : "נורמלי;קוד;כתובת;כותרת;כותרת 2;כותרת 3;כותרת 4;כותרת 5;כותרת 6", |
// Alerts and Messages |
ProcessingXHTML : "מעבד XHTML, נא להמתין...", |
Done : "המשימה הושלמה", |
PasteWordConfirm : "נראה הטקסט שבכוונתך להדביק מקורו בקובץ וורד. האם ברצונך לנקות אותו טרם ההדבקה?", |
NotCompatiblePaste : "פעולה זו זמינה לדפדפן אינטרנט אקספלורר מגירסא 5.5 ומעלה. האם להמשיך בהדבקה ללא הניקוי?", |
UnknownToolbarItem : "פריט לא ידוע בסרגל הכלים \"%1\"", |
UnknownCommand : "שם פעולה לא ידוע \"%1\"", |
NotImplemented : "הפקודה לא מיושמת", |
UnknownToolbarSet : "ערכת סרגל הכלים \"%1\" לא קיימת", |
NoActiveX : "הגדרות אבטחה של הדפדפן עלולות לגביל את אפשרויות העריכה.יש לאפשר את האופציה \"הרץ פקדים פעילים ותוספות\". תוכל לחוות טעויות וחיווים של אפשרויות שחסרים.", |
BrowseServerBlocked : "לא ניתן לגשת לדפדפן משאבים.אנא וודא שחוסם חלונות הקופצים לא פעיל.", |
DialogBlocked : "לא היה ניתן לפתוח חלון דיאלוג. אנא וודא שחוסם חלונות קופצים לא פעיל.", |
// Dialogs |
DlgBtnOK : "אישור", |
DlgBtnCancel : "ביטול", |
DlgBtnClose : "סגירה", |
DlgBtnBrowseServer : "סייר השרת", |
DlgAdvancedTag : "אפשרויות מתקדמות", |
DlgOpOther : "<אחר>", |
DlgInfoTab : "מידע", |
DlgAlertUrl : "אנה הזן URL", |
// General Dialogs Labels |
DlgGenNotSet : "<לא נקבע>", |
DlgGenId : "זיהוי (Id)", |
DlgGenLangDir : "כיוון שפה", |
DlgGenLangDirLtr : "שמאל לימין (LTR)", |
DlgGenLangDirRtl : "ימין לשמאל (RTL)", |
DlgGenLangCode : "קוד שפה", |
DlgGenAccessKey : "מקש גישה", |
DlgGenName : "שם", |
DlgGenTabIndex : "מספר טאב", |
DlgGenLongDescr : "קישור לתיאור מפורט", |
DlgGenClass : "גיליונות עיצוב קבוצות", |
DlgGenTitle : "כותרת מוצעת", |
DlgGenContType : "Content Type מוצע", |
DlgGenLinkCharset : "קידוד המשאב המקושר", |
DlgGenStyle : "סגנון", |
// Image Dialog |
DlgImgTitle : "תכונות התמונה", |
DlgImgInfoTab : "מידע על התמונה", |
DlgImgBtnUpload : "שליחה לשרת", |
DlgImgURL : "כתובת (URL)", |
DlgImgUpload : "העלאה", |
DlgImgAlt : "טקסט חלופי", |
DlgImgWidth : "רוחב", |
DlgImgHeight : "גובה", |
DlgImgLockRatio : "נעילת היחס", |
DlgBtnResetSize : "איפוס הגודל", |
DlgImgBorder : "מסגרת", |
DlgImgHSpace : "מרווח אופקי", |
DlgImgVSpace : "מרווח אנכי", |
DlgImgAlign : "יישור", |
DlgImgAlignLeft : "לשמאל", |
DlgImgAlignAbsBottom: "לתחתית האבסולוטית", |
DlgImgAlignAbsMiddle: "מרכוז אבסולוטי", |
DlgImgAlignBaseline : "לקו התחתית", |
DlgImgAlignBottom : "לתחתית", |
DlgImgAlignMiddle : "לאמצע", |
DlgImgAlignRight : "לימין", |
DlgImgAlignTextTop : "לראש הטקסט", |
DlgImgAlignTop : "למעלה", |
DlgImgPreview : "תצוגה מקדימה", |
DlgImgAlertUrl : "נא להקליד את כתובת התמונה", |
DlgImgLinkTab : "קישור", |
// Flash Dialog |
DlgFlashTitle : "מאפיני פלאש", |
DlgFlashChkPlay : "נגן אוטומטי", |
DlgFlashChkLoop : "לולאה", |
DlgFlashChkMenu : "אפשר תפריט פלאש", |
DlgFlashScale : "גודל", |
DlgFlashScaleAll : "הצג הכל", |
DlgFlashScaleNoBorder : "ללא גבולות", |
DlgFlashScaleFit : "התאמה מושלמת", |
// Link Dialog |
DlgLnkWindowTitle : "קישור", |
DlgLnkInfoTab : "מידע על הקישור", |
DlgLnkTargetTab : "מטרה", |
DlgLnkType : "סוג קישור", |
DlgLnkTypeURL : "כתובת (URL)", |
DlgLnkTypeAnchor : "עוגן בעמוד זה", |
DlgLnkTypeEMail : "דוא''ל", |
DlgLnkProto : "פרוטוקול", |
DlgLnkProtoOther : "<אחר>", |
DlgLnkURL : "כתובת (URL)", |
DlgLnkAnchorSel : "בחירת עוגן", |
DlgLnkAnchorByName : "עפ''י שם העוגן", |
DlgLnkAnchorById : "עפ''י זיהוי (Id) הרכיב", |
DlgLnkNoAnchors : "<אין עוגנים זמינים בדף>", |
DlgLnkEMail : "כתובת הדוא''ל", |
DlgLnkEMailSubject : "נושא ההודעה", |
DlgLnkEMailBody : "גוף ההודעה", |
DlgLnkUpload : "העלאה", |
DlgLnkBtnUpload : "שליחה לשרת", |
DlgLnkTarget : "מטרה", |
DlgLnkTargetFrame : "<מסגרת>", |
DlgLnkTargetPopup : "<חלון קופץ>", |
DlgLnkTargetBlank : "חלון חדש (_blank)", |
DlgLnkTargetParent : "חלון האב (_parent)", |
DlgLnkTargetSelf : "באותו החלון (_self)", |
DlgLnkTargetTop : "חלון ראשי (_top)", |
DlgLnkTargetFrameName : "שם מסגרת היעד", |
DlgLnkPopWinName : "שם החלון הקופץ", |
DlgLnkPopWinFeat : "תכונות החלון הקופץ", |
DlgLnkPopResize : "בעל גודל ניתן לשינוי", |
DlgLnkPopLocation : "סרגל כתובת", |
DlgLnkPopMenu : "סרגל תפריט", |
DlgLnkPopScroll : "ניתן לגלילה", |
DlgLnkPopStatus : "סרגל חיווי", |
DlgLnkPopToolbar : "סרגל הכלים", |
DlgLnkPopFullScrn : "מסך מלא (IE)", |
DlgLnkPopDependent : "תלוי (Netscape)", |
DlgLnkPopWidth : "רוחב", |
DlgLnkPopHeight : "גובה", |
DlgLnkPopLeft : "מיקום צד שמאל", |
DlgLnkPopTop : "מיקום צד עליון", |
DlnLnkMsgNoUrl : "נא להקליד את כתובת הקישור (URL)", |
DlnLnkMsgNoEMail : "נא להקליד את כתובת הדוא''ל", |
DlnLnkMsgNoAnchor : "נא לבחור עוגן במסמך", |
DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING |
// Color Dialog |
DlgColorTitle : "בחירת צבע", |
DlgColorBtnClear : "איפוס", |
DlgColorHighlight : "נוכחי", |
DlgColorSelected : "נבחר", |
// Smiley Dialog |
DlgSmileyTitle : "הוספת סמיילי", |
// Special Character Dialog |
DlgSpecialCharTitle : "בחירת תו מיוחד", |
// Table Dialog |
DlgTableTitle : "תכונות טבלה", |
DlgTableRows : "שורות", |
DlgTableColumns : "עמודות", |
DlgTableBorder : "גודל מסגרת", |
DlgTableAlign : "יישור", |
DlgTableAlignNotSet : "<לא נקבע>", |
DlgTableAlignLeft : "שמאל", |
DlgTableAlignCenter : "מרכז", |
DlgTableAlignRight : "ימין", |
DlgTableWidth : "רוחב", |
DlgTableWidthPx : "פיקסלים", |
DlgTableWidthPc : "אחוז", |
DlgTableHeight : "גובה", |
DlgTableCellSpace : "מרווח תא", |
DlgTableCellPad : "ריפוד תא", |
DlgTableCaption : "כיתוב", |
DlgTableSummary : "סיכום", |
// Table Cell Dialog |
DlgCellTitle : "תכונות תא", |
DlgCellWidth : "רוחב", |
DlgCellWidthPx : "פיקסלים", |
DlgCellWidthPc : "אחוז", |
DlgCellHeight : "גובה", |
DlgCellWordWrap : "גלילת שורות", |
DlgCellWordWrapNotSet : "<לא נקבע>", |
DlgCellWordWrapYes : "כן", |
DlgCellWordWrapNo : "לא", |
DlgCellHorAlign : "יישור אופקי", |
DlgCellHorAlignNotSet : "<לא נקבע>", |
DlgCellHorAlignLeft : "שמאל", |
DlgCellHorAlignCenter : "מרכז", |
DlgCellHorAlignRight: "ימין", |
DlgCellVerAlign : "יישור אנכי", |
DlgCellVerAlignNotSet : "<לא נקבע>", |
DlgCellVerAlignTop : "למעלה", |
DlgCellVerAlignMiddle : "לאמצע", |
DlgCellVerAlignBottom : "לתחתית", |
DlgCellVerAlignBaseline : "קו תחתית", |
DlgCellRowSpan : "טווח שורות", |
DlgCellCollSpan : "טווח עמודות", |
DlgCellBackColor : "צבע רקע", |
DlgCellBorderColor : "צבע מסגרת", |
DlgCellBtnSelect : "בחירה...", |
// Find Dialog |
DlgFindTitle : "חיפוש", |
DlgFindFindBtn : "חיפוש", |
DlgFindNotFoundMsg : "הטקסט המבוקש לא נמצא.", |
// Replace Dialog |
DlgReplaceTitle : "החלפה", |
DlgReplaceFindLbl : "חיפוש מחרוזת:", |
DlgReplaceReplaceLbl : "החלפה במחרוזת:", |
DlgReplaceCaseChk : "התאמת סוג אותיות (Case)", |
DlgReplaceReplaceBtn : "החלפה", |
DlgReplaceReplAllBtn : "החלפה בכל העמוד", |
DlgReplaceWordChk : "התאמה למילה המלאה", |
// Paste Operations / Dialog |
PasteErrorPaste : "הגדרות האבטחה בדפדפן שלך לא מאפשרות לעורך לבצע פעולות הדבקה אוטומטיות. יש להשתמש במקלדת לשם כך (Ctrl+V).", |
PasteErrorCut : "הגדרות האבטחה בדפדפן שלך לא מאפשרות לעורך לבצע פעולות גזירה אוטומטיות. יש להשתמש במקלדת לשם כך (Ctrl+X).", |
PasteErrorCopy : "הגדרות האבטחה בדפדפן שלך לא מאפשרות לעורך לבצע פעולות העתקה אוטומטיות. יש להשתמש במקלדת לשם כך (Ctrl+C).", |
PasteAsText : "הדבקה כטקסט פשוט", |
PasteFromWord : "הדבקה מ-וורד", |
DlgPasteMsg2 : "אנא הדבק בתוך הקופסה באמצעות (<STRONG>Ctrl+V</STRONG>) ולחץ על <STRONG>אישור</STRONG>.", |
DlgPasteIgnoreFont : "התעלם מהגדרות סוג פונט", |
DlgPasteRemoveStyles : "הסר הגדרות סגנון", |
DlgPasteCleanBox : "ניקוי קופסה", |
// Color Picker |
ColorAutomatic : "אוטומטי", |
ColorMoreColors : "צבעים נוספים...", |
// Document Properties |
DocProps : "מאפיני מסמך", |
// Anchor Dialog |
DlgAnchorTitle : "מאפיני נקודת עיגון", |
DlgAnchorName : "שם לנקודת עיגון", |
DlgAnchorErrorName : "אנא הזן שם לנקודת עיגון", |
// Speller Pages Dialog |
DlgSpellNotInDic : "לא נמצא במילון", |
DlgSpellChangeTo : "שנה ל", |
DlgSpellBtnIgnore : "התעלם", |
DlgSpellBtnIgnoreAll : "התעלם מהכל", |
DlgSpellBtnReplace : "החלף", |
DlgSpellBtnReplaceAll : "החלף הכל", |
DlgSpellBtnUndo : "החזר", |
DlgSpellNoSuggestions : "- אין הצעות -", |
DlgSpellProgress : "בדיקות איות בתהליך ....", |
DlgSpellNoMispell : "בדיקות איות הסתיימה: לא נמצאו שגיעות כתיב", |
DlgSpellNoChanges : "בדיקות איות הסתיימה: לא שונתה אף מילה", |
DlgSpellOneChange : "בדיקות איות הסתיימה: שונתה מילה אחת", |
DlgSpellManyChanges : "בדיקות איות הסתיימה: %1 מילים שונו", |
IeSpellDownload : "בודק האיות לא מותקן, האם אתה מעוניין להוריד?", |
// Button Dialog |
DlgButtonText : "טקסט (ערך)", |
DlgButtonType : "סוג", |
DlgButtonTypeBtn : "Button", //MISSING |
DlgButtonTypeSbm : "Submit", //MISSING |
DlgButtonTypeRst : "Reset", //MISSING |
// Checkbox and Radio Button Dialogs |
DlgCheckboxName : "שם", |
DlgCheckboxValue : "ערך", |
DlgCheckboxSelected : "בחור", |
// Form Dialog |
DlgFormName : "שם", |
DlgFormAction : "שלח אל", |
DlgFormMethod : "סוג שליחה", |
// Select Field Dialog |
DlgSelectName : "שם", |
DlgSelectValue : "ערך", |
DlgSelectSize : "גודל", |
DlgSelectLines : "שורות", |
DlgSelectChkMulti : "אפשר בחירות מרובות", |
DlgSelectOpAvail : "אפשרויות זמינות", |
DlgSelectOpText : "טקסט", |
DlgSelectOpValue : "ערך", |
DlgSelectBtnAdd : "הוסף", |
DlgSelectBtnModify : "שנה", |
DlgSelectBtnUp : "למעלה", |
DlgSelectBtnDown : "למטה", |
DlgSelectBtnSetValue : "קבע כברירת מחדל", |
DlgSelectBtnDelete : "מחק", |
// Textarea Dialog |
DlgTextareaName : "שם", |
DlgTextareaCols : "עמודות", |
DlgTextareaRows : "שורות", |
// Text Field Dialog |
DlgTextName : "שם", |
DlgTextValue : "ערך", |
DlgTextCharWidth : "רוחב באותיות", |
DlgTextMaxChars : "מקסימות אותיות", |
DlgTextType : "סוג", |
DlgTextTypeText : "טקסט", |
DlgTextTypePass : "סיסמה", |
// Hidden Field Dialog |
DlgHiddenName : "שם", |
DlgHiddenValue : "ערך", |
// Bulleted List Dialog |
BulletedListProp : "מאפייני רשימה", |
NumberedListProp : "מאפייני רשימה ממוספרת", |
DlgLstStart : "Start", //MISSING |
DlgLstType : "סוג", |
DlgLstTypeCircle : "עיגול", |
DlgLstTypeDisc : "דיסק", |
DlgLstTypeSquare : "מרובע", |
DlgLstTypeNumbers : "מספרים (1, 2, 3)", |
DlgLstTypeLCase : "אותיות קטנות (a, b, c)", |
DlgLstTypeUCase : "אותיות גדולות (A, B, C)", |
DlgLstTypeSRoman : "ספרות רומאיות קטנות (i, ii, iii)", |
DlgLstTypeLRoman : "ספרות רומאיות גדולות (I, II, III)", |
// Document Properties Dialog |
DlgDocGeneralTab : "כללי", |
DlgDocBackTab : "רקע", |
DlgDocColorsTab : "צבעים וגבולות", |
DlgDocMetaTab : "נתוני META", |
DlgDocPageTitle : "כותרת דף", |
DlgDocLangDir : "כיוון שפה", |
DlgDocLangDirLTR : "שמאל לימין (LTR)", |
DlgDocLangDirRTL : "ימין לשמאל (RTL)", |
DlgDocLangCode : "קוד שפה", |
DlgDocCharSet : "קידוד אותיות", |
DlgDocCharSetCE : "Central European", //MISSING |
DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING |
DlgDocCharSetCR : "Cyrillic", //MISSING |
DlgDocCharSetGR : "Greek", //MISSING |
DlgDocCharSetJP : "Japanese", //MISSING |
DlgDocCharSetKR : "Korean", //MISSING |
DlgDocCharSetTR : "Turkish", //MISSING |
DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING |
DlgDocCharSetWE : "Western European", //MISSING |
DlgDocCharSetOther : "קידוד אותיות אחר", |
DlgDocDocType : "הגדרות סוג מסמך", |
DlgDocDocTypeOther : "הגדרות סוג מסמך אחרות", |
DlgDocIncXHTML : "כלול הגדרות XHTML", |
DlgDocBgColor : "צבע רקע", |
DlgDocBgImage : "URL לתמונת רקע", |
DlgDocBgNoScroll : "רגע ללא גלילה", |
DlgDocCText : "טקסט", |
DlgDocCLink : "קישור", |
DlgDocCVisited : "קישור שבוקר", |
DlgDocCActive : " קישור פעיל", |
DlgDocMargins : "גבולות דף", |
DlgDocMaTop : "למעלה", |
DlgDocMaLeft : "שמאלה", |
DlgDocMaRight : "ימינה", |
DlgDocMaBottom : "למטה", |
DlgDocMeIndex : "מפתח עניינים של המסמך )מופרד בפסיק(", |
DlgDocMeDescr : "תאור מסמך", |
DlgDocMeAuthor : "מחבר", |
DlgDocMeCopy : "זכויות יוצרים", |
DlgDocPreview : "תצוגה מקדימה", |
// Templates Dialog |
Templates : "תבניות", |
DlgTemplatesTitle : "תביות תוכן", |
DlgTemplatesSelMsg : "אנא בחר תבנית לפתיחה בעורך <BR>התוכן המקורי ימחק:", |
DlgTemplatesLoading : "מעלה רשימת תבניות אנא המתן", |
DlgTemplatesNoTpl : "(לא הוגדרו תבניות)", |
DlgTemplatesReplace : "Replace actual contents", //MISSING |
// About Dialog |
DlgAboutAboutTab : "אודות", |
DlgAboutBrowserInfoTab : "גירסת דפדפן", |
DlgAboutLicenseTab : "רשיון", |
DlgAboutVersion : "גירסא", |
DlgAboutLicense : "ברשיון תחת תנאי GNU Lesser General Public License", |
DlgAboutInfo : "מידע נוסף ניתן למצוא כאן:" |
} |
/branches/v1.0-menes/api/fckeditor/editor/lang/fi.js |
---|
New file |
0,0 → 1,501 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fi.js |
* Finnish language file. |
* |
* File Authors: |
* Marko Korhonen (marko.korhonen@datafisher.com) |
*/ |
var FCKLang = |
{ |
// Language direction : "ltr" (left to right) or "rtl" (right to left). |
Dir : "ltr", |
ToolbarCollapse : "Piilota työkalurivi", |
ToolbarExpand : "Näytä työkalurivi", |
// Toolbar Items and Context Menu |
Save : "Tallenna", |
NewPage : "Tyhjennä", |
Preview : "Esikatsele", |
Cut : "Leikkaa", |
Copy : "Kopioi", |
Paste : "Liitä", |
PasteText : "Liitä tekstinä", |
PasteWord : "Liitä Wordista", |
Print : "Tulosta", |
SelectAll : "Valitse kaikki", |
RemoveFormat : "Poista muotoilu", |
InsertLinkLbl : "Linkki", |
InsertLink : "Lisää linkki/muokkaa linkkiä", |
RemoveLink : "Poista linkki", |
Anchor : "Lisää ankkuri/muokkaa ankkuria", |
InsertImageLbl : "Kuva", |
InsertImage : "Lisää kuva/muokkaa kuvaa", |
InsertFlashLbl : "Flash", |
InsertFlash : "Lisää/muokkaa Flashia", |
InsertTableLbl : "Taulu", |
InsertTable : "Lisää taulu/muokkaa taulua", |
InsertLineLbl : "Murtoviiva", |
InsertLine : "Lisää murtoviiva", |
InsertSpecialCharLbl: "Erikoismerkki", |
InsertSpecialChar : "Lisää erikoismerkki", |
InsertSmileyLbl : "Hymiö", |
InsertSmiley : "Lisää hymiö", |
About : "FCKeditorista", |
Bold : "Lihavoitu", |
Italic : "Kursivoitu", |
Underline : "Alleviivattu", |
StrikeThrough : "Yliviivattu", |
Subscript : "Alaindeksi", |
Superscript : "Yläindeksi", |
LeftJustify : "Tasaa vasemmat reunat", |
CenterJustify : "Keskitä", |
RightJustify : "Tasaa oikeat reunat", |
BlockJustify : "Tasaa molemmat reunat", |
DecreaseIndent : "Pienennä sisennystä", |
IncreaseIndent : "Suurenna sisennystä", |
Undo : "Kumoa", |
Redo : "Toista", |
NumberedListLbl : "Numerointi", |
NumberedList : "Lisää/poista numerointi", |
BulletedListLbl : "Luottelomerkit", |
BulletedList : "Lisää/poista luottelomerkit", |
ShowTableBorders : "Näytä taulun rajat", |
ShowDetails : "Näytä muotoilu", |
Style : "Tyyli", |
FontFormat : "Muotoilu", |
Font : "Fontti", |
FontSize : "Koko", |
TextColor : "Tekstiväri", |
BGColor : "Taustaväri", |
Source : "Koodi", |
Find : "Etsi", |
Replace : "Korvaa", |
SpellCheck : "Tarkista oikeinkirjoitus", |
UniversalKeyboard : "Universaali näppäimistö", |
PageBreakLbl : "Sivun vaihto", |
PageBreak : "Lisää sivun vaihto", |
Form : "Lomake", |
Checkbox : "Valintaruutu", |
RadioButton : "Radiopainike", |
TextField : "Tekstikenttä", |
Textarea : "Tekstilaatikko", |
HiddenField : "Piilokenttä", |
Button : "Painike", |
SelectionField : "Valintakenttä", |
ImageButton : "Kuvapainike", |
FitWindow : "Suurenna editori koko ikkunaan", |
// Context Menu |
EditLink : "Muokkaa linkkiä", |
CellCM : "Solu", |
RowCM : "Rivi", |
ColumnCM : "Sarake", |
InsertRow : "Lisää rivi", |
DeleteRows : "Poista rivit", |
InsertColumn : "Lisää sarake", |
DeleteColumns : "Poista sarakkeet", |
InsertCell : "Lisää solu", |
DeleteCells : "Poista solut", |
MergeCells : "Yhdistä solut", |
SplitCell : "Jaa solu", |
TableDelete : "Poista taulu", |
CellProperties : "Solun ominaisuudet", |
TableProperties : "Taulun ominaisuudet", |
ImageProperties : "Kuvan ominaisuudet", |
FlashProperties : "Flash ominaisuudet", |
AnchorProp : "Ankkurin ominaisuudet", |
ButtonProp : "Painikkeen ominaisuudet", |
CheckboxProp : "Valintaruudun ominaisuudet", |
HiddenFieldProp : "Piilokentän ominaisuudet", |
RadioButtonProp : "Radiopainikkeen ominaisuudet", |
ImageButtonProp : "Kuvapainikkeen ominaisuudet", |
TextFieldProp : "Tekstikentän ominaisuudet", |
SelectionFieldProp : "Valintakentän ominaisuudet", |
TextareaProp : "Tekstilaatikon ominaisuudet", |
FormProp : "Lomakkeen ominaisuudet", |
FontFormats : "Normaali;Muotoiltu;Osoite;Otsikko 1;Otsikko 2;Otsikko 3;Otsikko 4;Otsikko 5;Otsikko 6", |
// Alerts and Messages |
ProcessingXHTML : "Prosessoidaan XHTML:ää. Odota hetki...", |
Done : "Valmis", |
PasteWordConfirm : "Teksti, jonka haluat liittää, näyttää olevan kopioitu Wordista. Haluatko puhdistaa sen ennen liittämistä?", |
NotCompatiblePaste : "Tämä komento toimii vain Internet Explorer 5.5:ssa tai uudemmassa. Haluatko liittää ilman puhdistusta?", |
UnknownToolbarItem : "Tuntemanton työkalu \"%1\"", |
UnknownCommand : "Tuntematon komento \"%1\"", |
NotImplemented : "Komentoa ei ole liitetty sovellukseen", |
UnknownToolbarSet : "Työkalukokonaisuus \"%1\" ei ole olemassa", |
NoActiveX : "Selaimesi turvallisuusasetukset voivat rajoittaa joitain editorin ominaisuuksia. Sinun pitää ottaa käyttöön asetuksista \"Suorita ActiveX komponentit ja -plugin-laajennukset\". Saatat kohdata virheitä ja huomata puuttuvia ominaisuuksia.", |
BrowseServerBlocked : "Resurssiselainta ei voitu avata. Varmista, että ponnahdusikkunoiden estäjät eivät ole päällä.", |
DialogBlocked : "Apuikkunaa ei voitu avaata. Varmista, että ponnahdusikkunoiden estäjät eivät ole päällä.", |
// Dialogs |
DlgBtnOK : "OK", |
DlgBtnCancel : "Peruuta", |
DlgBtnClose : "Sulje", |
DlgBtnBrowseServer : "Selaa palvelinta", |
DlgAdvancedTag : "Lisäominaisuudet", |
DlgOpOther : "Muut", |
DlgInfoTab : "Info", |
DlgAlertUrl : "Lisää URL", |
// General Dialogs Labels |
DlgGenNotSet : "<ei asetettu>", |
DlgGenId : "Tunniste", |
DlgGenLangDir : "Kielen suunta", |
DlgGenLangDirLtr : "Vasemmalta oikealle (LTR)", |
DlgGenLangDirRtl : "Oikealta vasemmalle (RTL)", |
DlgGenLangCode : "Kielikoodi", |
DlgGenAccessKey : "Pikanäppäin", |
DlgGenName : "Nimi", |
DlgGenTabIndex : "Tabulaattori indeksi", |
DlgGenLongDescr : "Pitkän kuvauksen URL", |
DlgGenClass : "Tyyliluokat", |
DlgGenTitle : "Avustava otsikko", |
DlgGenContType : "Avustava sisällön tyyppi", |
DlgGenLinkCharset : "Linkitetty kirjaimisto", |
DlgGenStyle : "Tyyli", |
// Image Dialog |
DlgImgTitle : "Kuvan ominaisuudet", |
DlgImgInfoTab : "Kuvan tiedot", |
DlgImgBtnUpload : "Lähetä palvelimelle", |
DlgImgURL : "Osoite", |
DlgImgUpload : "Lisää kuva", |
DlgImgAlt : "Vaihtoehtoinen teksti", |
DlgImgWidth : "Leveys", |
DlgImgHeight : "Korkeus", |
DlgImgLockRatio : "Lukitse suhteet", |
DlgBtnResetSize : "Alkuperäinen koko", |
DlgImgBorder : "Raja", |
DlgImgHSpace : "Vaakatila", |
DlgImgVSpace : "Pystytila", |
DlgImgAlign : "Kohdistus", |
DlgImgAlignLeft : "Vasemmalle", |
DlgImgAlignAbsBottom: "Aivan alas", |
DlgImgAlignAbsMiddle: "Aivan keskelle", |
DlgImgAlignBaseline : "Alas (teksti)", |
DlgImgAlignBottom : "Alas", |
DlgImgAlignMiddle : "Keskelle", |
DlgImgAlignRight : "Oikealle", |
DlgImgAlignTextTop : "Ylös (teksti)", |
DlgImgAlignTop : "Ylös", |
DlgImgPreview : "Esikatselu", |
DlgImgAlertUrl : "Kirjoita kuvan osoite (URL)", |
DlgImgLinkTab : "Linkki", |
// Flash Dialog |
DlgFlashTitle : "Flash ominaisuudet", |
DlgFlashChkPlay : "Automaattinen käynnistys", |
DlgFlashChkLoop : "Toisto", |
DlgFlashChkMenu : "Näytä Flash-valikko", |
DlgFlashScale : "Levitä", |
DlgFlashScaleAll : "Näytä kaikki", |
DlgFlashScaleNoBorder : "Ei rajaa", |
DlgFlashScaleFit : "Tarkka koko", |
// Link Dialog |
DlgLnkWindowTitle : "Linkki", |
DlgLnkInfoTab : "Linkin tiedot", |
DlgLnkTargetTab : "Kohde", |
DlgLnkType : "Linkkityyppi", |
DlgLnkTypeURL : "Osoite", |
DlgLnkTypeAnchor : "Ankkuri tässä sivussa", |
DlgLnkTypeEMail : "Sähköposti", |
DlgLnkProto : "Protokolla", |
DlgLnkProtoOther : "<muu>", |
DlgLnkURL : "Osoite", |
DlgLnkAnchorSel : "Valitse ankkuri", |
DlgLnkAnchorByName : "Ankkurin nimen mukaan", |
DlgLnkAnchorById : "Ankkurin ID:n mukaan", |
DlgLnkNoAnchors : "<Ei ankkureita tässä dokumentissa>", |
DlgLnkEMail : "Sähköpostiosoite", |
DlgLnkEMailSubject : "Aihe", |
DlgLnkEMailBody : "Viesti", |
DlgLnkUpload : "Lisää tiedosto", |
DlgLnkBtnUpload : "Lähetä palvelimelle", |
DlgLnkTarget : "Kohde", |
DlgLnkTargetFrame : "<kehys>", |
DlgLnkTargetPopup : "<popup ikkuna>", |
DlgLnkTargetBlank : "Uusi ikkuna (_blank)", |
DlgLnkTargetParent : "Emoikkuna (_parent)", |
DlgLnkTargetSelf : "Sama ikkuna (_self)", |
DlgLnkTargetTop : "Päällimmäisin ikkuna (_top)", |
DlgLnkTargetFrameName : "Kohdekehyksen nimi", |
DlgLnkPopWinName : "Popup ikkunan nimi", |
DlgLnkPopWinFeat : "Popup ikkunan ominaisuudet", |
DlgLnkPopResize : "Venytettävä", |
DlgLnkPopLocation : "Osoiterivi", |
DlgLnkPopMenu : "Valikkorivi", |
DlgLnkPopScroll : "Vierityspalkit", |
DlgLnkPopStatus : "Tilarivi", |
DlgLnkPopToolbar : "Vakiopainikkeet", |
DlgLnkPopFullScrn : "Täysi ikkuna (IE)", |
DlgLnkPopDependent : "Riippuva (Netscape)", |
DlgLnkPopWidth : "Leveys", |
DlgLnkPopHeight : "Korkeus", |
DlgLnkPopLeft : "Vasemmalta (px)", |
DlgLnkPopTop : "Ylhäältä (px)", |
DlnLnkMsgNoUrl : "Linkille on kirjoitettava URL", |
DlnLnkMsgNoEMail : "Kirjoita sähköpostiosoite", |
DlnLnkMsgNoAnchor : "Valitse ankkuri", |
DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING |
// Color Dialog |
DlgColorTitle : "Valitse väri", |
DlgColorBtnClear : "Tyhjennä", |
DlgColorHighlight : "Kohdalla", |
DlgColorSelected : "Valittu", |
// Smiley Dialog |
DlgSmileyTitle : "Lisää hymiö", |
// Special Character Dialog |
DlgSpecialCharTitle : "Valitse erikoismerkki", |
// Table Dialog |
DlgTableTitle : "Taulun ominaisuudet", |
DlgTableRows : "Rivit", |
DlgTableColumns : "Sarakkeet", |
DlgTableBorder : "Rajan paksuus", |
DlgTableAlign : "Kohdistus", |
DlgTableAlignNotSet : "<ei asetettu>", |
DlgTableAlignLeft : "Vasemmalle", |
DlgTableAlignCenter : "Keskelle", |
DlgTableAlignRight : "Oikealle", |
DlgTableWidth : "Leveys", |
DlgTableWidthPx : "pikseliä", |
DlgTableWidthPc : "prosenttia", |
DlgTableHeight : "Korkeus", |
DlgTableCellSpace : "Solujen väli", |
DlgTableCellPad : "Solujen sisennys", |
DlgTableCaption : "Otsikko", |
DlgTableSummary : "Yhteenveto", |
// Table Cell Dialog |
DlgCellTitle : "Solun ominaisuudet", |
DlgCellWidth : "Leveys", |
DlgCellWidthPx : "pikseliä", |
DlgCellWidthPc : "prosenttia", |
DlgCellHeight : "Korkeus", |
DlgCellWordWrap : "Tekstikierrätys", |
DlgCellWordWrapNotSet : "<Ei asetettu>", |
DlgCellWordWrapYes : "Kyllä", |
DlgCellWordWrapNo : "Ei", |
DlgCellHorAlign : "Vaakakohdistus", |
DlgCellHorAlignNotSet : "<Ei asetettu>", |
DlgCellHorAlignLeft : "Vasemmalle", |
DlgCellHorAlignCenter : "Keskelle", |
DlgCellHorAlignRight: "Oikealle", |
DlgCellVerAlign : "Pystykohdistus", |
DlgCellVerAlignNotSet : "<Ei asetettu>", |
DlgCellVerAlignTop : "Ylös", |
DlgCellVerAlignMiddle : "Keskelle", |
DlgCellVerAlignBottom : "Alas", |
DlgCellVerAlignBaseline : "Tekstin alas", |
DlgCellRowSpan : "Rivin jatkuvuus", |
DlgCellCollSpan : "Sarakkeen jatkuvuus", |
DlgCellBackColor : "Taustaväri", |
DlgCellBorderColor : "Rajan väri", |
DlgCellBtnSelect : "Valitse...", |
// Find Dialog |
DlgFindTitle : "Etsi", |
DlgFindFindBtn : "Etsi", |
DlgFindNotFoundMsg : "Etsittyä tekstiä ei löytynyt.", |
// Replace Dialog |
DlgReplaceTitle : "Korvaa", |
DlgReplaceFindLbl : "Etsi mitä:", |
DlgReplaceReplaceLbl : "Korvaa tällä:", |
DlgReplaceCaseChk : "Sama kirjainkoko", |
DlgReplaceReplaceBtn : "Korvaa", |
DlgReplaceReplAllBtn : "Korvaa kaikki", |
DlgReplaceWordChk : "Koko sana", |
// Paste Operations / Dialog |
PasteErrorPaste : "Selaimesi turva-asetukset eivät salli editorin toteuttaa liittämistä. Käytä näppäimistöä liittämiseen (Ctrl+V).", |
PasteErrorCut : "Selaimesi turva-asetukset eivät salli editorin toteuttaa leikkaamista. Käytä näppäimistöä leikkaamiseen (Ctrl+X).", |
PasteErrorCopy : "Selaimesi turva-asetukset eivät salli editorin toteuttaa kopioimista. Käytä näppäimistöä kopioimiseen (Ctrl+C).", |
PasteAsText : "Liitä tekstinä", |
PasteFromWord : "Liitä Wordista", |
DlgPasteMsg2 : "Liitä painamalla (<STRONG>Ctrl+V</STRONG>) ja painamalla <STRONG>OK</STRONG>.", |
DlgPasteIgnoreFont : "Jätä huomioimatta fonttimääritykset", |
DlgPasteRemoveStyles : "Poista tyylimääritykset", |
DlgPasteCleanBox : "Tyhjennä", |
// Color Picker |
ColorAutomatic : "Automaattinen", |
ColorMoreColors : "Lisää värejä...", |
// Document Properties |
DocProps : "Dokumentin ominaisuudet", |
// Anchor Dialog |
DlgAnchorTitle : "Ankkurin ominaisuudet", |
DlgAnchorName : "Nimi", |
DlgAnchorErrorName : "Ankkurille on kirjoitettava nimi", |
// Speller Pages Dialog |
DlgSpellNotInDic : "Ei sanakirjassa", |
DlgSpellChangeTo : "Vaihda", |
DlgSpellBtnIgnore : "Jätä huomioimatta", |
DlgSpellBtnIgnoreAll : "Jätä kaikki huomioimatta", |
DlgSpellBtnReplace : "Korvaa", |
DlgSpellBtnReplaceAll : "Korvaa kaikki", |
DlgSpellBtnUndo : "Kumoa", |
DlgSpellNoSuggestions : "Ei ehdotuksia", |
DlgSpellProgress : "Tarkistus käynnissä...", |
DlgSpellNoMispell : "Tarkistus valmis: Ei virheitä", |
DlgSpellNoChanges : "Tarkistus valmis: Yhtään sanaa ei muutettu", |
DlgSpellOneChange : "Tarkistus valmis: Yksi sana muutettiin", |
DlgSpellManyChanges : "Tarkistus valmis: %1 sanaa muutettiin", |
IeSpellDownload : "Oikeinkirjoituksen tarkistusta ei ole asennettu. Haluatko ladata sen nyt?", |
// Button Dialog |
DlgButtonText : "Teksti (arvo)", |
DlgButtonType : "Tyyppi", |
DlgButtonTypeBtn : "Button", //MISSING |
DlgButtonTypeSbm : "Submit", //MISSING |
DlgButtonTypeRst : "Reset", //MISSING |
// Checkbox and Radio Button Dialogs |
DlgCheckboxName : "Nimi", |
DlgCheckboxValue : "Arvo", |
DlgCheckboxSelected : "Valittu", |
// Form Dialog |
DlgFormName : "Nimi", |
DlgFormAction : "Toiminto", |
DlgFormMethod : "Tapa", |
// Select Field Dialog |
DlgSelectName : "Nimi", |
DlgSelectValue : "Arvo", |
DlgSelectSize : "Koko", |
DlgSelectLines : "Rivit", |
DlgSelectChkMulti : "Salli usea valinta", |
DlgSelectOpAvail : "Ominaisuudet", |
DlgSelectOpText : "Teksti", |
DlgSelectOpValue : "Arvo", |
DlgSelectBtnAdd : "Lisää", |
DlgSelectBtnModify : "Muuta", |
DlgSelectBtnUp : "Ylös", |
DlgSelectBtnDown : "Alas", |
DlgSelectBtnSetValue : "Aseta valituksi", |
DlgSelectBtnDelete : "Poista", |
// Textarea Dialog |
DlgTextareaName : "Nimi", |
DlgTextareaCols : "Sarakkeita", |
DlgTextareaRows : "Rivejä", |
// Text Field Dialog |
DlgTextName : "Nimi", |
DlgTextValue : "Arvo", |
DlgTextCharWidth : "Leveys", |
DlgTextMaxChars : "Maksimi merkkimäärä", |
DlgTextType : "Tyyppi", |
DlgTextTypeText : "Teksti", |
DlgTextTypePass : "Salasana", |
// Hidden Field Dialog |
DlgHiddenName : "Nimi", |
DlgHiddenValue : "Arvo", |
// Bulleted List Dialog |
BulletedListProp : "Luettelon ominaisuudet", |
NumberedListProp : "Numeroinnin ominaisuudet", |
DlgLstStart : "Start", //MISSING |
DlgLstType : "Tyyppi", |
DlgLstTypeCircle : "Kehä", |
DlgLstTypeDisc : "Ympyrä", |
DlgLstTypeSquare : "Neliö", |
DlgLstTypeNumbers : "Numerot (1, 2, 3)", |
DlgLstTypeLCase : "Pienet kirjaimet (a, b, c)", |
DlgLstTypeUCase : "Isot kirjaimet (A, B, C)", |
DlgLstTypeSRoman : "Pienet roomalaiset numerot (i, ii, iii)", |
DlgLstTypeLRoman : "Isot roomalaiset numerot (Ii, II, III)", |
// Document Properties Dialog |
DlgDocGeneralTab : "Yleiset", |
DlgDocBackTab : "Tausta", |
DlgDocColorsTab : "Värit ja marginaalit", |
DlgDocMetaTab : "Meta-tieto", |
DlgDocPageTitle : "Sivun nimi", |
DlgDocLangDir : "Kielen suunta", |
DlgDocLangDirLTR : "Vasemmalta oikealle (LTR)", |
DlgDocLangDirRTL : "Oikealta vasemmalle (RTL)", |
DlgDocLangCode : "Kielikoodi", |
DlgDocCharSet : "Merkistäkoodaus", |
DlgDocCharSetCE : "Central European", //MISSING |
DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING |
DlgDocCharSetCR : "Cyrillic", //MISSING |
DlgDocCharSetGR : "Greek", //MISSING |
DlgDocCharSetJP : "Japanese", //MISSING |
DlgDocCharSetKR : "Korean", //MISSING |
DlgDocCharSetTR : "Turkish", //MISSING |
DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING |
DlgDocCharSetWE : "Western European", //MISSING |
DlgDocCharSetOther : "Muu merkistäkoodaus", |
DlgDocDocType : "Dokumentin tyyppi", |
DlgDocDocTypeOther : "Muu dokumentin tyyppi", |
DlgDocIncXHTML : "Lisää XHTML julistukset", |
DlgDocBgColor : "Taustaväri", |
DlgDocBgImage : "Taustakuva", |
DlgDocBgNoScroll : "Paikallaanpysyvä tausta", |
DlgDocCText : "Teksti", |
DlgDocCLink : "Linkki", |
DlgDocCVisited : "Vierailtu linkki", |
DlgDocCActive : "Aktiivinen linkki", |
DlgDocMargins : "Sivun marginaalit", |
DlgDocMaTop : "Ylä", |
DlgDocMaLeft : "Vasen", |
DlgDocMaRight : "Oikea", |
DlgDocMaBottom : "Ala", |
DlgDocMeIndex : "Hakusanat (pilkulla erotettuna)", |
DlgDocMeDescr : "Kuvaus", |
DlgDocMeAuthor : "Tekijä", |
DlgDocMeCopy : "Tekijänoikeudet", |
DlgDocPreview : "Esikatselu", |
// Templates Dialog |
Templates : "Pohjat", |
DlgTemplatesTitle : "Sisältöpohjat", |
DlgTemplatesSelMsg : "Valitse pohja editoriin<br>(aiempi sisältö menetetään):", |
DlgTemplatesLoading : "Ladataan listaa pohjista. Hetkinen...", |
DlgTemplatesNoTpl : "(Ei määriteltyjä pohjia)", |
DlgTemplatesReplace : "Replace actual contents", //MISSING |
// About Dialog |
DlgAboutAboutTab : "Editorista", |
DlgAboutBrowserInfoTab : "Selaimen tiedot", |
DlgAboutLicenseTab : "Lisenssi", |
DlgAboutVersion : "versio", |
DlgAboutLicense : "Lisenssi: GNU Lesser General Public License", |
DlgAboutInfo : "Lisää tietoa osoitteesta" |
} |
/branches/v1.0-menes/api/fckeditor/editor/lang/hi.js |
---|
New file |
0,0 → 1,501 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: hi.js |
* Hindi language file. |
* |
* File Authors: |
* Utkarshraj Atmaram (utcursch@gmail.com) |
*/ |
var FCKLang = |
{ |
// Language direction : "ltr" (left to right) or "rtl" (right to left). |
Dir : "ltr", |
ToolbarCollapse : "टूलबार सिमटायें", |
ToolbarExpand : "टूलबार का विस्तार करें", |
// Toolbar Items and Context Menu |
Save : "सेव", |
NewPage : "नया पेज", |
Preview : "प्रीव्यू", |
Cut : "कट", |
Copy : "कॉपी", |
Paste : "पेस्ट", |
PasteText : "पेस्ट (सादा टॅक्स्ट)", |
PasteWord : "पेस्ट (वर्ड से)", |
Print : "प्रिन्ट", |
SelectAll : "सब सॅलॅक्ट करें", |
RemoveFormat : "फ़ॉर्मैट हटायें", |
InsertLinkLbl : "लिंक", |
InsertLink : "लिंक इन्सर्ट/संपादन", |
RemoveLink : "लिंक हटायें", |
Anchor : "ऐंकर इन्सर्ट/संपादन", |
InsertImageLbl : "तस्वीर", |
InsertImage : "तस्वीर इन्सर्ट/संपादन", |
InsertFlashLbl : "फ़्लैश", |
InsertFlash : "फ़्लैश इन्सर्ट/संपादन", |
InsertTableLbl : "टेबल", |
InsertTable : "टेबल इन्सर्ट/संपादन", |
InsertLineLbl : "रेखा", |
InsertLine : "हॉरिज़ॉन्टल रेखा इन्सर्ट करें", |
InsertSpecialCharLbl: "विशेष करॅक्टर", |
InsertSpecialChar : "विशेष करॅक्टर इन्सर्ट करें", |
InsertSmileyLbl : "स्माइली", |
InsertSmiley : "स्माइली इन्सर्ट करें", |
About : "FCKeditor के बारे में", |
Bold : "बोल्ड", |
Italic : "इटैलिक", |
Underline : "रेखांकण", |
StrikeThrough : "स्ट्राइक थ्रू", |
Subscript : "अधोलेख", |
Superscript : "अभिलेख", |
LeftJustify : "बायीं तरफ", |
CenterJustify : "बीच में", |
RightJustify : "दायीं तरफ", |
BlockJustify : "ब्लॉक जस्टीफ़ाई", |
DecreaseIndent : "इन्डॅन्ट कम करें", |
IncreaseIndent : "इन्डॅन्ट बढ़ायें", |
Undo : "अन्डू", |
Redo : "रीडू", |
NumberedListLbl : "अंकीय सूची", |
NumberedList : "अंकीय सूची इन्सर्ट/संपादन", |
BulletedListLbl : "बुलॅट सूची", |
BulletedList : "बुलॅट सूची इन्सर्ट/संपादन", |
ShowTableBorders : "टेबल बॉर्डरयें दिखायें", |
ShowDetails : "ज्यादा दिखायें", |
Style : "स्टाइल", |
FontFormat : "फ़ॉर्मैट", |
Font : "फ़ॉन्ट", |
FontSize : "साइज़", |
TextColor : "टेक्स्ट रंग", |
BGColor : "बैक्ग्राउन्ड रंग", |
Source : "सोर्स", |
Find : "खोजें", |
Replace : "रीप्लेस", |
SpellCheck : "वर्तनी (स्पेलिंग) जाँच", |
UniversalKeyboard : "यूनीवर्सल कीबोर्ड", |
PageBreakLbl : "पेज ब्रेक", |
PageBreak : "पेज ब्रेक इन्सर्ट् करें", |
Form : "फ़ॉर्म", |
Checkbox : "चॅक बॉक्स", |
RadioButton : "रेडिओ बटन", |
TextField : "टेक्स्ट फ़ील्ड", |
Textarea : "टेक्स्ट एरिया", |
HiddenField : "गुप्त फ़ील्ड", |
Button : "बटन", |
SelectionField : "चुनाव फ़ील्ड", |
ImageButton : "तस्वीर बटन", |
FitWindow : "एडिटर साइज़ को चरम सीमा तक बढ़ायें", |
// Context Menu |
EditLink : "लिंक संपादन", |
CellCM : "खाना", |
RowCM : "पंक्ति", |
ColumnCM : "कालम", |
InsertRow : "पंक्ति इन्सर्ट करें", |
DeleteRows : "पंक्तियाँ डिलीट करें", |
InsertColumn : "कॉलम इन्सर्ट करें", |
DeleteColumns : "कॉलम डिलीट करें", |
InsertCell : "सॅल इन्सर्ट करें", |
DeleteCells : "सॅल डिलीट करें", |
MergeCells : "सॅल मिलायें", |
SplitCell : "सॅल अलग करें", |
TableDelete : "टेबल डिलीट करें", |
CellProperties : "सॅल प्रॉपर्टीज़", |
TableProperties : "टेबल प्रॉपर्टीज़", |
ImageProperties : "तस्वीर प्रॉपर्टीज़", |
FlashProperties : "फ़्लैश प्रॉपर्टीज़", |
AnchorProp : "ऐंकर प्रॉपर्टीज़", |
ButtonProp : "बटन प्रॉपर्टीज़", |
CheckboxProp : "चॅक बॉक्स प्रॉपर्टीज़", |
HiddenFieldProp : "गुप्त फ़ील्ड प्रॉपर्टीज़", |
RadioButtonProp : "रेडिओ बटन प्रॉपर्टीज़", |
ImageButtonProp : "तस्वीर बटन प्रॉपर्टीज़", |
TextFieldProp : "टेक्स्ट फ़ील्ड प्रॉपर्टीज़", |
SelectionFieldProp : "चुनाव फ़ील्ड प्रॉपर्टीज़", |
TextareaProp : "टेक्स्त एरिया प्रॉपर्टीज़", |
FormProp : "फ़ॉर्म प्रॉपर्टीज़", |
FontFormats : "साधारण;फ़ॉर्मैटॅड;पता;शीर्षक 1;शीर्षक 2;शीर्षक 3;शीर्षक 4;शीर्षक 5;शीर्षक 6;शीर्षक (DIV)", |
// Alerts and Messages |
ProcessingXHTML : "XHTML प्रोसॅस हो रहा है। ज़रा ठहरें...", |
Done : "पूरा हुआ", |
PasteWordConfirm : "आप जो टेक्स्ट पेस्ट करना चाहते हैं, वह वर्ड से कॉपी किया हुआ लग रहा है। क्या पेस्ट करने से पहले आप इसे साफ़ करना चाहेंगे?", |
NotCompatiblePaste : "यह कमांड इन्टरनॅट एक्स्प्लोरर(Internet Explorer) 5.5 या उसके बाद के वर्ज़न के लिए ही उपलब्ध है। क्या आप बिना साफ़ किए पेस्ट करना चाहेंगे?", |
UnknownToolbarItem : "अनजान टूलबार आइटम \"%1\"", |
UnknownCommand : "अनजान कमान्ड \"%1\"", |
NotImplemented : "कमान्ड इम्प्लीमॅन्ट नहीं किया गया है", |
UnknownToolbarSet : "टूलबार सॅट \"%1\" उपलब्ध नहीं है", |
NoActiveX : "आपके ब्राउज़र् की सुरक्शा सेटिंग्स् एडिटर की कुछ् फ़ीचरों को सीमित कर् सकती हैं। क्रिपया \"Run ActiveX controls and plug-ins\" विकल्प को एनेबल करें. आपको एरर्स् और गायब फ़ीचर्स् का अनुभव हो सकता है।", |
BrowseServerBlocked : "रिसोर्सेज़ ब्राउज़र् नहीं खोला जा सका। क्रिपया सभी पॉप्-अप् ब्लॉकर्स् को डिसेबल करें।", |
DialogBlocked : "डायलग विन्डो नहीं खोला जा सका। क्रिपया सभी पॉप्-अप् ब्लॉकर्स् को डिसेबल करें।", |
// Dialogs |
DlgBtnOK : "ठीक है", |
DlgBtnCancel : "रद्द करें", |
DlgBtnClose : "बन्द करें", |
DlgBtnBrowseServer : "सर्वर ब्राउज़ करें", |
DlgAdvancedTag : "ऍड्वान्स्ड", |
DlgOpOther : "<अन्य>", |
DlgInfoTab : "सूचना", |
DlgAlertUrl : "URL इन्सर्ट करें", |
// General Dialogs Labels |
DlgGenNotSet : "<सॅट नहीं>", |
DlgGenId : "Id", |
DlgGenLangDir : "भाषा लिखने की दिशा", |
DlgGenLangDirLtr : "बायें से दायें (LTR)", |
DlgGenLangDirRtl : "दायें से बायें (RTL)", |
DlgGenLangCode : "भाषा कोड", |
DlgGenAccessKey : "ऍक्सॅस की", |
DlgGenName : "नाम", |
DlgGenTabIndex : "टैब इन्डॅक्स", |
DlgGenLongDescr : "अधिक विवरण के लिए URL", |
DlgGenClass : "स्टाइल-शीट क्लास", |
DlgGenTitle : "परामर्श शीर्शक", |
DlgGenContType : "परामर्श कन्टॅन्ट प्रकार", |
DlgGenLinkCharset : "लिंक रिसोर्स करॅक्टर सॅट", |
DlgGenStyle : "स्टाइल", |
// Image Dialog |
DlgImgTitle : "तस्वीर प्रॉपर्टीज़", |
DlgImgInfoTab : "तस्वीर की जानकारी", |
DlgImgBtnUpload : "इसे सर्वर को भेजें", |
DlgImgURL : "URL", |
DlgImgUpload : "अपलोड", |
DlgImgAlt : "वैकल्पिक टेक्स्ट", |
DlgImgWidth : "चौड़ाई", |
DlgImgHeight : "ऊँचाई", |
DlgImgLockRatio : "लॉक अनुपात", |
DlgBtnResetSize : "रीसॅट साइज़", |
DlgImgBorder : "बॉर्डर", |
DlgImgHSpace : "हॉरिज़ॉन्टल स्पेस", |
DlgImgVSpace : "वर्टिकल स्पेस", |
DlgImgAlign : "ऍलाइन", |
DlgImgAlignLeft : "दायें", |
DlgImgAlignAbsBottom: "Abs नीचे", |
DlgImgAlignAbsMiddle: "Abs ऊपर", |
DlgImgAlignBaseline : "मूल रेखा", |
DlgImgAlignBottom : "नीचे", |
DlgImgAlignMiddle : "मध्य", |
DlgImgAlignRight : "दायें", |
DlgImgAlignTextTop : "टेक्स्ट ऊपर", |
DlgImgAlignTop : "ऊपर", |
DlgImgPreview : "प्रीव्यू", |
DlgImgAlertUrl : "तस्वीर का URL टाइप करें ", |
DlgImgLinkTab : "लिंक", |
// Flash Dialog |
DlgFlashTitle : "फ़्लैश प्रॉपर्टीज़", |
DlgFlashChkPlay : "ऑटो प्ले", |
DlgFlashChkLoop : "लूप", |
DlgFlashChkMenu : "फ़्लैश मॅन्यू का प्रयोग करें", |
DlgFlashScale : "स्केल", |
DlgFlashScaleAll : "सभी दिखायें", |
DlgFlashScaleNoBorder : "कोई बॉर्डर नहीं", |
DlgFlashScaleFit : "बिल्कुल फ़िट", |
// Link Dialog |
DlgLnkWindowTitle : "लिंक", |
DlgLnkInfoTab : "लिंक ", |
DlgLnkTargetTab : "टार्गेट", |
DlgLnkType : "लिंक प्रकार", |
DlgLnkTypeURL : "URL", |
DlgLnkTypeAnchor : "इस पेज का ऐंकर", |
DlgLnkTypeEMail : "ई-मेल", |
DlgLnkProto : "प्रोटोकॉल", |
DlgLnkProtoOther : "<अन्य>", |
DlgLnkURL : "URL", |
DlgLnkAnchorSel : "ऐंकर चुनें", |
DlgLnkAnchorByName : "ऐंकर नाम से", |
DlgLnkAnchorById : "ऍलीमॅन्ट Id से", |
DlgLnkNoAnchors : "<डॉक्यूमॅन्ट में ऐंकर्स की संख्या>", |
DlgLnkEMail : "ई-मेल पता", |
DlgLnkEMailSubject : "संदेश विषय", |
DlgLnkEMailBody : "संदेश", |
DlgLnkUpload : "अपलोड", |
DlgLnkBtnUpload : "इसे सर्वर को भेजें", |
DlgLnkTarget : "टार्गेट", |
DlgLnkTargetFrame : "<फ़्रेम>", |
DlgLnkTargetPopup : "<पॉप-अप विन्डो>", |
DlgLnkTargetBlank : "नया विन्डो (_blank)", |
DlgLnkTargetParent : "मूल विन्डो (_parent)", |
DlgLnkTargetSelf : "इसी विन्डो (_self)", |
DlgLnkTargetTop : "शीर्ष विन्डो (_top)", |
DlgLnkTargetFrameName : "टार्गेट फ़्रेम का नाम", |
DlgLnkPopWinName : "पॉप-अप विन्डो का नाम", |
DlgLnkPopWinFeat : "पॉप-अप विन्डो फ़ीचर्स", |
DlgLnkPopResize : "साइज़ बदला जा सकता है", |
DlgLnkPopLocation : "लोकेशन बार", |
DlgLnkPopMenu : "मॅन्यू बार", |
DlgLnkPopScroll : "स्क्रॉल बार", |
DlgLnkPopStatus : "स्टेटस बार", |
DlgLnkPopToolbar : "टूल बार", |
DlgLnkPopFullScrn : "फ़ुल स्क्रीन (IE)", |
DlgLnkPopDependent : "डिपेन्डॅन्ट (Netscape)", |
DlgLnkPopWidth : "चौड़ाई", |
DlgLnkPopHeight : "ऊँचाई", |
DlgLnkPopLeft : "बायीं तरफ", |
DlgLnkPopTop : "दायीं तरफ", |
DlnLnkMsgNoUrl : "लिंक URL टाइप करें", |
DlnLnkMsgNoEMail : "ई-मेल पता टाइप करें", |
DlnLnkMsgNoAnchor : "ऐंकर चुनें", |
DlnLnkMsgInvPopName : "पॉप-अप का नाम अल्फाबेट से शुरू होना चाहिये और उसमें स्पेस नहीं होने चाहिए", |
// Color Dialog |
DlgColorTitle : "रंग चुनें", |
DlgColorBtnClear : "साफ़ करें", |
DlgColorHighlight : "हाइलाइट", |
DlgColorSelected : "सॅलॅक्टॅड", |
// Smiley Dialog |
DlgSmileyTitle : "स्माइली इन्सर्ट करें", |
// Special Character Dialog |
DlgSpecialCharTitle : "विशेष करॅक्टर चुनें", |
// Table Dialog |
DlgTableTitle : "टेबल प्रॉपर्टीज़", |
DlgTableRows : "पंक्तियाँ", |
DlgTableColumns : "कॉलम", |
DlgTableBorder : "बॉर्डर साइज़", |
DlgTableAlign : "ऍलाइन्मॅन्ट", |
DlgTableAlignNotSet : "<सॅट नहीं>", |
DlgTableAlignLeft : "दायें", |
DlgTableAlignCenter : "बीच में", |
DlgTableAlignRight : "बायें", |
DlgTableWidth : "चौड़ाई", |
DlgTableWidthPx : "पिक्सॅल", |
DlgTableWidthPc : "प्रतिशत", |
DlgTableHeight : "ऊँचाई", |
DlgTableCellSpace : "सॅल अंतर", |
DlgTableCellPad : "सॅल पैडिंग", |
DlgTableCaption : "शीर्षक", |
DlgTableSummary : "सारांश", |
// Table Cell Dialog |
DlgCellTitle : "सॅल प्रॉपर्टीज़", |
DlgCellWidth : "चौड़ाई", |
DlgCellWidthPx : "पिक्सॅल", |
DlgCellWidthPc : "प्रतिशत", |
DlgCellHeight : "ऊँचाई", |
DlgCellWordWrap : "वर्ड रैप", |
DlgCellWordWrapNotSet : "<सॅट नहीं>", |
DlgCellWordWrapYes : "हाँ", |
DlgCellWordWrapNo : "नहीं", |
DlgCellHorAlign : "हॉरिज़ॉन्टल ऍलाइन्मॅन्ट", |
DlgCellHorAlignNotSet : "<सॅट नहीं>", |
DlgCellHorAlignLeft : "दायें", |
DlgCellHorAlignCenter : "बीच में", |
DlgCellHorAlignRight: "बायें", |
DlgCellVerAlign : "वर्टिकल ऍलाइन्मॅन्ट", |
DlgCellVerAlignNotSet : "<सॅट नहीं>", |
DlgCellVerAlignTop : "ऊपर", |
DlgCellVerAlignMiddle : "मध्य", |
DlgCellVerAlignBottom : "नीचे", |
DlgCellVerAlignBaseline : "मूलरेखा", |
DlgCellRowSpan : "पंक्ति स्पैन", |
DlgCellCollSpan : "कॉलम स्पैन", |
DlgCellBackColor : "बैक्ग्राउन्ड रंग", |
DlgCellBorderColor : "बॉर्डर का रंग", |
DlgCellBtnSelect : "चुनें...", |
// Find Dialog |
DlgFindTitle : "खोजें", |
DlgFindFindBtn : "खोजें", |
DlgFindNotFoundMsg : "आपके द्वारा दिया गया टेक्स्ट नहीं मिला", |
// Replace Dialog |
DlgReplaceTitle : "रिप्लेस", |
DlgReplaceFindLbl : "यह खोजें:", |
DlgReplaceReplaceLbl : "इससे रिप्लेस करें:", |
DlgReplaceCaseChk : "केस मिलायें", |
DlgReplaceReplaceBtn : "रिप्लेस", |
DlgReplaceReplAllBtn : "सभी रिप्लेस करें", |
DlgReplaceWordChk : "पूरा शब्द मिलायें", |
// Paste Operations / Dialog |
PasteErrorPaste : "आपके ब्राउज़र की सुरक्षा सॅटिन्ग्स ने पेस्ट करने की अनुमति नहीं प्रदान की है। (Ctrl+V) का प्रयोग करें।", |
PasteErrorCut : "आपके ब्राउज़र की सुरक्षा सॅटिन्ग्स ने कट करने की अनुमति नहीं प्रदान की है। (Ctrl+X) का प्रयोग करें।", |
PasteErrorCopy : "आपके ब्राआउज़र की सुरक्षा सॅटिन्ग्स ने कॉपी करने की अनुमति नहीं प्रदान की है। (Ctrl+C) का प्रयोग करें।", |
PasteAsText : "पेस्ट (सादा टॅक्स्ट)", |
PasteFromWord : "पेस्ट (वर्ड से)", |
DlgPasteMsg2 : "Ctrl+V का प्रयोग करके पेस्ट करें और ठीक है करें.", |
DlgPasteIgnoreFont : "फ़ॉन्ट परिभाषा निकालें", |
DlgPasteRemoveStyles : "स्टाइल परिभाषा निकालें", |
DlgPasteCleanBox : "बॉक्स साफ़ करें", |
// Color Picker |
ColorAutomatic : "ऑटोमैटिक", |
ColorMoreColors : "और रंग...", |
// Document Properties |
DocProps : "डॉक्यूमॅन्ट प्रॉपर्टीज़", |
// Anchor Dialog |
DlgAnchorTitle : "ऐंकर प्रॉपर्टीज़", |
DlgAnchorName : "ऐंकर का नाम", |
DlgAnchorErrorName : "ऐंकर का नाम टाइप करें", |
// Speller Pages Dialog |
DlgSpellNotInDic : "शब्दकोश में नहीं", |
DlgSpellChangeTo : "इसमें बदलें", |
DlgSpellBtnIgnore : "इग्नोर", |
DlgSpellBtnIgnoreAll : "सभी इग्नोर करें", |
DlgSpellBtnReplace : "रिप्लेस", |
DlgSpellBtnReplaceAll : "सभी रिप्लेस करें", |
DlgSpellBtnUndo : "अन्डू", |
DlgSpellNoSuggestions : "- कोई सुझाव नहीं -", |
DlgSpellProgress : "वर्तनी की जाँच (स्पॅल-चॅक) जारी है...", |
DlgSpellNoMispell : "वर्तनी की जाँच : कोई गलत वर्तनी (स्पॅलिंग) नहीं पाई गई", |
DlgSpellNoChanges : "वर्तनी की जाँच :कोई शब्द नहीं बदला गया", |
DlgSpellOneChange : "वर्तनी की जाँच : एक शब्द बदला गया", |
DlgSpellManyChanges : "वर्तनी की जाँच : %1 शब्द बदले गये", |
IeSpellDownload : "स्पॅल-चॅकर इन्स्टाल नहीं किया गया है। क्या आप इसे डाउनलोड करना चाहेंगे?", |
// Button Dialog |
DlgButtonText : "टेक्स्ट (वैल्यू)", |
DlgButtonType : "प्रकार", |
DlgButtonTypeBtn : "बटन", |
DlgButtonTypeSbm : "सब्मिट", |
DlgButtonTypeRst : "रिसेट", |
// Checkbox and Radio Button Dialogs |
DlgCheckboxName : "नाम", |
DlgCheckboxValue : "वैल्यू", |
DlgCheckboxSelected : "सॅलॅक्टॅड", |
// Form Dialog |
DlgFormName : "नाम", |
DlgFormAction : "ऍक्शन", |
DlgFormMethod : "तरीका", |
// Select Field Dialog |
DlgSelectName : "नाम", |
DlgSelectValue : "वैल्यू", |
DlgSelectSize : "साइज़", |
DlgSelectLines : "पंक्तियाँ", |
DlgSelectChkMulti : "एक से ज्यादा विकल्प चुनने दें", |
DlgSelectOpAvail : "उपलब्ध विकल्प", |
DlgSelectOpText : "टेक्स्ट", |
DlgSelectOpValue : "वैल्यू", |
DlgSelectBtnAdd : "जोड़ें", |
DlgSelectBtnModify : "बदलें", |
DlgSelectBtnUp : "ऊपर", |
DlgSelectBtnDown : "नीचे", |
DlgSelectBtnSetValue : "चुनी गई वैल्यू सॅट करें", |
DlgSelectBtnDelete : "डिलीट", |
// Textarea Dialog |
DlgTextareaName : "नाम", |
DlgTextareaCols : "कॉलम", |
DlgTextareaRows : "पंक्तियां", |
// Text Field Dialog |
DlgTextName : "नाम", |
DlgTextValue : "वैल्यू", |
DlgTextCharWidth : "करॅक्टर की चौढ़ाई", |
DlgTextMaxChars : "अधिकतम करॅक्टर", |
DlgTextType : "टाइप", |
DlgTextTypeText : "टेक्स्ट", |
DlgTextTypePass : "पास्वर्ड", |
// Hidden Field Dialog |
DlgHiddenName : "नाम", |
DlgHiddenValue : "वैल्यू", |
// Bulleted List Dialog |
BulletedListProp : "बुलॅट सूची प्रॉपर्टीज़", |
NumberedListProp : "अंकीय सूची प्रॉपर्टीज़", |
DlgLstStart : "प्रारम्भ", |
DlgLstType : "प्रकार", |
DlgLstTypeCircle : "गोल", |
DlgLstTypeDisc : "डिस्क", |
DlgLstTypeSquare : "चौकॊण", |
DlgLstTypeNumbers : "अंक (1, 2, 3)", |
DlgLstTypeLCase : "छोटे अक्षर (a, b, c)", |
DlgLstTypeUCase : "बड़े अक्षर (A, B, C)", |
DlgLstTypeSRoman : "छोटे रोमन अंक (i, ii, iii)", |
DlgLstTypeLRoman : "बड़े रोमन अंक (I, II, III)", |
// Document Properties Dialog |
DlgDocGeneralTab : "आम", |
DlgDocBackTab : "बैक्ग्राउन्ड", |
DlgDocColorsTab : "रंग और मार्जिन", |
DlgDocMetaTab : "मॅटाडेटा", |
DlgDocPageTitle : "पेज शीर्षक", |
DlgDocLangDir : "भाषा लिखने की दिशा", |
DlgDocLangDirLTR : "बायें से दायें (LTR)", |
DlgDocLangDirRTL : "दायें से बायें (RTL)", |
DlgDocLangCode : "भाषा कोड", |
DlgDocCharSet : "करेक्टर सॅट ऍन्कोडिंग", |
DlgDocCharSetCE : "मध्य यूरोपीय (Central European)", |
DlgDocCharSetCT : "चीनी (Chinese Traditional Big5)", |
DlgDocCharSetCR : "सिरीलिक (Cyrillic)", |
DlgDocCharSetGR : "यवन (Greek)", |
DlgDocCharSetJP : "जापानी (Japanese)", |
DlgDocCharSetKR : "कोरीयन (Korean)", |
DlgDocCharSetTR : "तुर्की (Turkish)", |
DlgDocCharSetUN : "यूनीकोड (UTF-8)", |
DlgDocCharSetWE : "पश्चिम यूरोपीय (Western European)", |
DlgDocCharSetOther : "अन्य करेक्टर सॅट ऍन्कोडिंग", |
DlgDocDocType : "डॉक्यूमॅन्ट प्रकार शीर्षक", |
DlgDocDocTypeOther : "अन्य डॉक्यूमॅन्ट प्रकार शीर्षक", |
DlgDocIncXHTML : "XHTML सूचना सम्मिलित करें", |
DlgDocBgColor : "बैक्ग्राउन्ड रंग", |
DlgDocBgImage : "बैक्ग्राउन्ड तस्वीर URL", |
DlgDocBgNoScroll : "स्क्रॉल न करने वाला बैक्ग्राउन्ड", |
DlgDocCText : "टेक्स्ट", |
DlgDocCLink : "लिंक", |
DlgDocCVisited : "विज़िट किया गया लिंक", |
DlgDocCActive : "सक्रिय लिंक", |
DlgDocMargins : "पेज मार्जिन", |
DlgDocMaTop : "ऊपर", |
DlgDocMaLeft : "बायें", |
DlgDocMaRight : "दायें", |
DlgDocMaBottom : "नीचे", |
DlgDocMeIndex : "डॉक्युमॅन्ट इन्डेक्स संकेतशब्द (अल्पविराम से अलग करें)", |
DlgDocMeDescr : "डॉक्यूमॅन्ट करॅक्टरन", |
DlgDocMeAuthor : "लेखक", |
DlgDocMeCopy : "कॉपीराइट", |
DlgDocPreview : "प्रीव्यू", |
// Templates Dialog |
Templates : "टॅम्प्लेट", |
DlgTemplatesTitle : "कन्टेन्ट टॅम्प्लेट", |
DlgTemplatesSelMsg : "ऍडिटर में ओपन करने हेतु टॅम्प्लेट चुनें(वर्तमान कन्टॅन्ट सेव नहीं होंगे):", |
DlgTemplatesLoading : "टॅम्प्लेट सूची लोड की जा रही है। ज़रा ठहरें...", |
DlgTemplatesNoTpl : "(कोई टॅम्प्लेट डिफ़ाइन नहीं किया गया है)", |
DlgTemplatesReplace : "मूल शब्दों को बदलें", |
// About Dialog |
DlgAboutAboutTab : "FCKEditor के बारे में", |
DlgAboutBrowserInfoTab : "ब्राउज़र के बारे में", |
DlgAboutLicenseTab : "लाइसैन्स", |
DlgAboutVersion : "वर्ज़न", |
DlgAboutLicense : "लाइसेंस :GNU LGPL", |
DlgAboutInfo : "अधिक जानकारी के लिये यहाँ जायें:" |
} |
/branches/v1.0-menes/api/fckeditor/editor/lang/eo.js |
---|
New file |
0,0 → 1,501 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: eo.js |
* Esperanto language file. |
* |
* File Authors: |
* Tim Morley (timsk@openoffice.org) |
*/ |
var FCKLang = |
{ |
// Language direction : "ltr" (left to right) or "rtl" (right to left). |
Dir : "ltr", |
ToolbarCollapse : "Kaŝi Ilobreton", |
ToolbarExpand : "Vidigi Ilojn", |
// Toolbar Items and Context Menu |
Save : "Sekurigi", |
NewPage : "Nova Paĝo", |
Preview : "Vidigi Aspekton", |
Cut : "Eltondi", |
Copy : "Kopii", |
Paste : "Interglui", |
PasteText : "Interglui kiel Tekston", |
PasteWord : "Interglui el Word", |
Print : "Presi", |
SelectAll : "Elekti ĉion", |
RemoveFormat : "Forigi Formaton", |
InsertLinkLbl : "Ligilo", |
InsertLink : "Enmeti/Ŝanĝi Ligilon", |
RemoveLink : "Forigi Ligilon", |
Anchor : "Enmeti/Ŝanĝi Ankron", |
InsertImageLbl : "Bildo", |
InsertImage : "Enmeti/Ŝanĝi Bildon", |
InsertFlashLbl : "Flash", //MISSING |
InsertFlash : "Insert/Edit Flash", //MISSING |
InsertTableLbl : "Tabelo", |
InsertTable : "Enmeti/Ŝanĝi Tabelon", |
InsertLineLbl : "Horizonta Linio", |
InsertLine : "Enmeti Horizonta Linio", |
InsertSpecialCharLbl: "Speciala Signo", |
InsertSpecialChar : "Enmeti Specialan Signon", |
InsertSmileyLbl : "Mienvinjeto", |
InsertSmiley : "Enmeti Mienvinjeton", |
About : "Pri FCKeditor", |
Bold : "Grasa", |
Italic : "Kursiva", |
Underline : "Substreko", |
StrikeThrough : "Trastreko", |
Subscript : "Subskribo", |
Superscript : "Superskribo", |
LeftJustify : "Maldekstrigi", |
CenterJustify : "Centrigi", |
RightJustify : "Dekstrigi", |
BlockJustify : "Ĝisrandigi Ambaŭflanke", |
DecreaseIndent : "Malpligrandigi Krommarĝenon", |
IncreaseIndent : "Pligrandigi Krommarĝenon", |
Undo : "Malfari", |
Redo : "Refari", |
NumberedListLbl : "Numera Listo", |
NumberedList : "Enmeti/Forigi Numeran Liston", |
BulletedListLbl : "Bula Listo", |
BulletedList : "Enmeti/Forigi Bulan Liston", |
ShowTableBorders : "Vidigi Borderojn de Tabelo", |
ShowDetails : "Vidigi Detalojn", |
Style : "Stilo", |
FontFormat : "Formato", |
Font : "Tiparo", |
FontSize : "Grando", |
TextColor : "Teksta Koloro", |
BGColor : "Fona Koloro", |
Source : "Fonto", |
Find : "Serĉi", |
Replace : "Anstataŭigi", |
SpellCheck : "Literumada Kontrolilo", |
UniversalKeyboard : "Universala Klavaro", |
PageBreakLbl : "Page Break", //MISSING |
PageBreak : "Insert Page Break", //MISSING |
Form : "Formularo", |
Checkbox : "Markobutono", |
RadioButton : "Radiobutono", |
TextField : "Teksta kampo", |
Textarea : "Teksta Areo", |
HiddenField : "Kaŝita Kampo", |
Button : "Butono", |
SelectionField : "Elekta Kampo", |
ImageButton : "Bildbutono", |
FitWindow : "Maximize the editor size", //MISSING |
// Context Menu |
EditLink : "Modifier Ligilon", |
CellCM : "Cell", //MISSING |
RowCM : "Row", //MISSING |
ColumnCM : "Column", //MISSING |
InsertRow : "Enmeti Linion", |
DeleteRows : "Forigi Liniojn", |
InsertColumn : "Enmeti Kolumnon", |
DeleteColumns : "Forigi Kolumnojn", |
InsertCell : "Enmeti Ĉelon", |
DeleteCells : "Forigi Ĉelojn", |
MergeCells : "Kunfandi Ĉelojn", |
SplitCell : "Dividi Ĉelojn", |
TableDelete : "Delete Table", //MISSING |
CellProperties : "Atributoj de Ĉelo", |
TableProperties : "Atributoj de Tabelo", |
ImageProperties : "Atributoj de Bildo", |
FlashProperties : "Flash Properties", //MISSING |
AnchorProp : "Ankraj Atributoj", |
ButtonProp : "Butonaj Atributoj", |
CheckboxProp : "Markobutonaj Atributoj", |
HiddenFieldProp : "Atributoj de Kaŝita Kampo", |
RadioButtonProp : "Radiobutonaj Atributoj", |
ImageButtonProp : "Bildbutonaj Atributoj", |
TextFieldProp : "Atributoj de Teksta Kampo", |
SelectionFieldProp : "Atributoj de Elekta Kampo", |
TextareaProp : "Atributoj de Teksta Areo", |
FormProp : "Formularaj Atributoj", |
FontFormats : "Normala;Formatita;Adreso;Titolo 1;Titolo 2;Titolo 3;Titolo 4;Titolo 5;Titolo 6;Paragrafo (DIV)", |
// Alerts and Messages |
ProcessingXHTML : "Traktado de XHTML. Bonvolu pacienci...", |
Done : "Finita", |
PasteWordConfirm : "La algluota teksto ŝajnas esti Word-devena. Ĉu vi volas purigi ĝin antaŭ ol interglui?", |
NotCompatiblePaste : "Tiu ĉi komando bezonas almenaŭ Internet Explorer 5.5. Ĉu vi volas daŭrigi sen purigado?", |
UnknownToolbarItem : "Ilobretero nekonata \"%1\"", |
UnknownCommand : "Komandonomo nekonata \"%1\"", |
NotImplemented : "Komando ne ankoraŭ realigita", |
UnknownToolbarSet : "La ilobreto \"%1\" ne ekzistas", |
NoActiveX : "Your browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.", //MISSING |
BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.", //MISSING |
DialogBlocked : "It was not possible to open the dialog window. Make sure all popup blockers are disabled.", //MISSING |
// Dialogs |
DlgBtnOK : "Akcepti", |
DlgBtnCancel : "Rezigni", |
DlgBtnClose : "Fermi", |
DlgBtnBrowseServer : "Foliumi en la Servilo", |
DlgAdvancedTag : "Speciala", |
DlgOpOther : "<Alia>", |
DlgInfoTab : "Info", //MISSING |
DlgAlertUrl : "Please insert the URL", //MISSING |
// General Dialogs Labels |
DlgGenNotSet : "<Defaŭlta>", |
DlgGenId : "Id", |
DlgGenLangDir : "Skribdirekto", |
DlgGenLangDirLtr : "De maldekstro dekstren (LTR)", |
DlgGenLangDirRtl : "De dekstro maldekstren (RTL)", |
DlgGenLangCode : "Lingva Kodo", |
DlgGenAccessKey : "Fulmoklavo", |
DlgGenName : "Nomo", |
DlgGenTabIndex : "Taba Ordo", |
DlgGenLongDescr : "URL de Longa Priskribo", |
DlgGenClass : "Klasoj de Stilfolioj", |
DlgGenTitle : "Indika Titolo", |
DlgGenContType : "Indika Enhavotipo", |
DlgGenLinkCharset : "Signaro de la Ligita Rimedo", |
DlgGenStyle : "Stilo", |
// Image Dialog |
DlgImgTitle : "Atributoj de Bildo", |
DlgImgInfoTab : "Informoj pri Bildo", |
DlgImgBtnUpload : "Sendu al Servilo", |
DlgImgURL : "URL", |
DlgImgUpload : "Alŝuti", |
DlgImgAlt : "Anstataŭiga Teksto", |
DlgImgWidth : "Larĝo", |
DlgImgHeight : "Alto", |
DlgImgLockRatio : "Konservi Proporcion", |
DlgBtnResetSize : "Origina Grando", |
DlgImgBorder : "Bordero", |
DlgImgHSpace : "HSpaco", |
DlgImgVSpace : "VSpaco", |
DlgImgAlign : "Ĝisrandigo", |
DlgImgAlignLeft : "Maldekstre", |
DlgImgAlignAbsBottom: "Abs Malsupre", |
DlgImgAlignAbsMiddle: "Abs Centre", |
DlgImgAlignBaseline : "Je Malsupro de Teksto", |
DlgImgAlignBottom : "Malsupre", |
DlgImgAlignMiddle : "Centre", |
DlgImgAlignRight : "Dekstre", |
DlgImgAlignTextTop : "Je Supro de Teksto", |
DlgImgAlignTop : "Supre", |
DlgImgPreview : "Vidigi Aspekton", |
DlgImgAlertUrl : "Bonvolu tajpi la URL de la bildo", |
DlgImgLinkTab : "Link", //MISSING |
// Flash Dialog |
DlgFlashTitle : "Flash Properties", //MISSING |
DlgFlashChkPlay : "Auto Play", //MISSING |
DlgFlashChkLoop : "Loop", //MISSING |
DlgFlashChkMenu : "Enable Flash Menu", //MISSING |
DlgFlashScale : "Scale", //MISSING |
DlgFlashScaleAll : "Show all", //MISSING |
DlgFlashScaleNoBorder : "No Border", //MISSING |
DlgFlashScaleFit : "Exact Fit", //MISSING |
// Link Dialog |
DlgLnkWindowTitle : "Ligilo", |
DlgLnkInfoTab : "Informoj pri la Ligilo", |
DlgLnkTargetTab : "Celo", |
DlgLnkType : "Tipo de Ligilo", |
DlgLnkTypeURL : "URL", |
DlgLnkTypeAnchor : "Ankri en tiu ĉi paĝo", |
DlgLnkTypeEMail : "Retpoŝto", |
DlgLnkProto : "Protokolo", |
DlgLnkProtoOther : "<alia>", |
DlgLnkURL : "URL", |
DlgLnkAnchorSel : "Elekti Ankron", |
DlgLnkAnchorByName : "Per Ankronomo", |
DlgLnkAnchorById : "Per Elementidentigilo", |
DlgLnkNoAnchors : "<Ne disponeblas ankroj en la dokumento>", |
DlgLnkEMail : "Retadreso", |
DlgLnkEMailSubject : "Temlinio", |
DlgLnkEMailBody : "Mesaĝa korpo", |
DlgLnkUpload : "Alŝuti", |
DlgLnkBtnUpload : "Sendi al Servilo", |
DlgLnkTarget : "Celo", |
DlgLnkTargetFrame : "<kadro>", |
DlgLnkTargetPopup : "<ŝprucfenestro>", |
DlgLnkTargetBlank : "Nova Fenestro (_blank)", |
DlgLnkTargetParent : "Gepatra Fenestro (_parent)", |
DlgLnkTargetSelf : "Sama Fenestro (_self)", |
DlgLnkTargetTop : "Plej Supra Fenestro (_top)", |
DlgLnkTargetFrameName : "Nomo de Kadro", |
DlgLnkPopWinName : "Nomo de Ŝprucfenestro", |
DlgLnkPopWinFeat : "Atributoj de la Ŝprucfenestro", |
DlgLnkPopResize : "Grando Ŝanĝebla", |
DlgLnkPopLocation : "Adresobreto", |
DlgLnkPopMenu : "Menubreto", |
DlgLnkPopScroll : "Rulumlisteloj", |
DlgLnkPopStatus : "Statobreto", |
DlgLnkPopToolbar : "Ilobreto", |
DlgLnkPopFullScrn : "Tutekrane (IE)", |
DlgLnkPopDependent : "Dependa (Netscape)", |
DlgLnkPopWidth : "Larĝo", |
DlgLnkPopHeight : "Alto", |
DlgLnkPopLeft : "Pozicio de Maldekstro", |
DlgLnkPopTop : "Pozicio de Supro", |
DlnLnkMsgNoUrl : "Bonvolu entajpi la URL-on", |
DlnLnkMsgNoEMail : "Bonvolu entajpi la retadreson", |
DlnLnkMsgNoAnchor : "Bonvolu elekti ankron", |
DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING |
// Color Dialog |
DlgColorTitle : "Elekti", |
DlgColorBtnClear : "Forigi", |
DlgColorHighlight : "Emfazi", |
DlgColorSelected : "Elektita", |
// Smiley Dialog |
DlgSmileyTitle : "Enmeti Mienvinjeton", |
// Special Character Dialog |
DlgSpecialCharTitle : "Enmeti Specialan Signon", |
// Table Dialog |
DlgTableTitle : "Atributoj de Tabelo", |
DlgTableRows : "Linioj", |
DlgTableColumns : "Kolumnoj", |
DlgTableBorder : "Bordero", |
DlgTableAlign : "Ĝisrandigo", |
DlgTableAlignNotSet : "<Defaŭlte>", |
DlgTableAlignLeft : "Maldekstre", |
DlgTableAlignCenter : "Centre", |
DlgTableAlignRight : "Dekstre", |
DlgTableWidth : "Larĝo", |
DlgTableWidthPx : "Bitbilderoj", |
DlgTableWidthPc : "elcentoj", |
DlgTableHeight : "Alto", |
DlgTableCellSpace : "Interspacigo de Ĉeloj", |
DlgTableCellPad : "Ĉirkaŭenhava Plenigado", |
DlgTableCaption : "Titolo", |
DlgTableSummary : "Summary", //MISSING |
// Table Cell Dialog |
DlgCellTitle : "Atributoj de Celo", |
DlgCellWidth : "Larĝo", |
DlgCellWidthPx : "bitbilderoj", |
DlgCellWidthPc : "elcentoj", |
DlgCellHeight : "Alto", |
DlgCellWordWrap : "Linifaldo", |
DlgCellWordWrapNotSet : "<Defaŭlte>", |
DlgCellWordWrapYes : "Jes", |
DlgCellWordWrapNo : "Ne", |
DlgCellHorAlign : "Horizonta Ĝisrandigo", |
DlgCellHorAlignNotSet : "<Defaŭlte>", |
DlgCellHorAlignLeft : "Maldekstre", |
DlgCellHorAlignCenter : "Centre", |
DlgCellHorAlignRight: "Dekstre", |
DlgCellVerAlign : "Vertikala Ĝisrandigo", |
DlgCellVerAlignNotSet : "<Defaŭlte>", |
DlgCellVerAlignTop : "Supre", |
DlgCellVerAlignMiddle : "Centre", |
DlgCellVerAlignBottom : "Malsupre", |
DlgCellVerAlignBaseline : "Je Malsupro de Teksto", |
DlgCellRowSpan : "Linioj Kunfanditaj", |
DlgCellCollSpan : "Kolumnoj Kunfanditaj", |
DlgCellBackColor : "Fono", |
DlgCellBorderColor : "Bordero", |
DlgCellBtnSelect : "Elekti...", |
// Find Dialog |
DlgFindTitle : "Serĉi", |
DlgFindFindBtn : "Serĉi", |
DlgFindNotFoundMsg : "La celteksto ne estas trovita.", |
// Replace Dialog |
DlgReplaceTitle : "Anstataŭigi", |
DlgReplaceFindLbl : "Serĉi:", |
DlgReplaceReplaceLbl : "Anstataŭigi per:", |
DlgReplaceCaseChk : "Kongruigi Usklecon", |
DlgReplaceReplaceBtn : "Anstataŭigi", |
DlgReplaceReplAllBtn : "Anstataŭigi Ĉiun", |
DlgReplaceWordChk : "Tuta Vorto", |
// Paste Operations / Dialog |
PasteErrorPaste : "La sekurecagordo de via TTT-legilo ne permesas, ke la redaktilo faras intergluajn operaciojn. Bonvolu uzi la klavaron por tio (ctrl-V).", |
PasteErrorCut : "La sekurecagordo de via TTT-legilo ne permesas, ke la redaktilo faras eltondajn operaciojn. Bonvolu uzi la klavaron por tio (ctrl-X).", |
PasteErrorCopy : "La sekurecagordo de via TTT-legilo ne permesas, ke la redaktilo faras kopiajn operaciojn. Bonvolu uzi la klavaron por tio (ctrl-C).", |
PasteAsText : "Interglui kiel Tekston", |
PasteFromWord : "Interglui el Word", |
DlgPasteMsg2 : "Please paste inside the following box using the keyboard (<STRONG>Ctrl+V</STRONG>) and hit <STRONG>OK</STRONG>.", //MISSING |
DlgPasteIgnoreFont : "Ignore Font Face definitions", //MISSING |
DlgPasteRemoveStyles : "Remove Styles definitions", //MISSING |
DlgPasteCleanBox : "Clean Up Box", //MISSING |
// Color Picker |
ColorAutomatic : "Aŭtomata", |
ColorMoreColors : "Pli da Koloroj...", |
// Document Properties |
DocProps : "Dokumentaj Atributoj", |
// Anchor Dialog |
DlgAnchorTitle : "Ankraj Atributoj", |
DlgAnchorName : "Ankra Nomo", |
DlgAnchorErrorName : "Bv tajpi la ankran nomon", |
// Speller Pages Dialog |
DlgSpellNotInDic : "Ne trovita en la vortaro", |
DlgSpellChangeTo : "Ŝanĝi al", |
DlgSpellBtnIgnore : "Malatenti", |
DlgSpellBtnIgnoreAll : "Malatenti Ĉiun", |
DlgSpellBtnReplace : "Anstataŭigi", |
DlgSpellBtnReplaceAll : "Anstataŭigi Ĉiun", |
DlgSpellBtnUndo : "Malfari", |
DlgSpellNoSuggestions : "- Neniu propono -", |
DlgSpellProgress : "Literumkontrolado daŭras...", |
DlgSpellNoMispell : "Literumkontrolado finita: neniu fuŝo trovita", |
DlgSpellNoChanges : "Literumkontrolado finita: neniu vorto ŝanĝita", |
DlgSpellOneChange : "Literumkontrolado finita: unu vorto ŝanĝita", |
DlgSpellManyChanges : "Literumkontrolado finita: %1 vortoj ŝanĝitaj", |
IeSpellDownload : "Literumada Kontrolilo ne instalita. Ĉu vi volas elŝuti ĝin nun?", |
// Button Dialog |
DlgButtonText : "Teksto (Valoro)", |
DlgButtonType : "Tipo", |
DlgButtonTypeBtn : "Button", //MISSING |
DlgButtonTypeSbm : "Submit", //MISSING |
DlgButtonTypeRst : "Reset", //MISSING |
// Checkbox and Radio Button Dialogs |
DlgCheckboxName : "Nomo", |
DlgCheckboxValue : "Valoro", |
DlgCheckboxSelected : "Elektita", |
// Form Dialog |
DlgFormName : "Nomo", |
DlgFormAction : "Ago", |
DlgFormMethod : "Metodo", |
// Select Field Dialog |
DlgSelectName : "Nomo", |
DlgSelectValue : "Valoro", |
DlgSelectSize : "Grando", |
DlgSelectLines : "Linioj", |
DlgSelectChkMulti : "Permesi Plurajn Elektojn", |
DlgSelectOpAvail : "Elektoj Disponeblaj", |
DlgSelectOpText : "Teksto", |
DlgSelectOpValue : "Valoro", |
DlgSelectBtnAdd : "Aldoni", |
DlgSelectBtnModify : "Modifi", |
DlgSelectBtnUp : "Supren", |
DlgSelectBtnDown : "Malsupren", |
DlgSelectBtnSetValue : "Agordi kiel Elektitan Valoron", |
DlgSelectBtnDelete : "Forigi", |
// Textarea Dialog |
DlgTextareaName : "Nomo", |
DlgTextareaCols : "Kolumnoj", |
DlgTextareaRows : "Vicoj", |
// Text Field Dialog |
DlgTextName : "Nomo", |
DlgTextValue : "Valoro", |
DlgTextCharWidth : "Signolarĝo", |
DlgTextMaxChars : "Maksimuma Nombro da Signoj", |
DlgTextType : "Tipo", |
DlgTextTypeText : "Teksto", |
DlgTextTypePass : "Pasvorto", |
// Hidden Field Dialog |
DlgHiddenName : "Nomo", |
DlgHiddenValue : "Valoro", |
// Bulleted List Dialog |
BulletedListProp : "Atributoj de Bula Listo", |
NumberedListProp : "Atributoj de Numera Listo", |
DlgLstStart : "Start", //MISSING |
DlgLstType : "Tipo", |
DlgLstTypeCircle : "Cirklo", |
DlgLstTypeDisc : "Disc", //MISSING |
DlgLstTypeSquare : "Kvadrato", |
DlgLstTypeNumbers : "Ciferoj (1, 2, 3)", |
DlgLstTypeLCase : "Minusklaj Literoj (a, b, c)", |
DlgLstTypeUCase : "Majusklaj Literoj (A, B, C)", |
DlgLstTypeSRoman : "Malgrandaj Romanaj Ciferoj (i, ii, iii)", |
DlgLstTypeLRoman : "Grandaj Romanaj Ciferoj (I, II, III)", |
// Document Properties Dialog |
DlgDocGeneralTab : "Ĝeneralaĵoj", |
DlgDocBackTab : "Fono", |
DlgDocColorsTab : "Koloroj kaj Marĝenoj", |
DlgDocMetaTab : "Metadatumoj", |
DlgDocPageTitle : "Paĝotitolo", |
DlgDocLangDir : "Skribdirekto de la Lingvo", |
DlgDocLangDirLTR : "De maldekstro dekstren (LTR)", |
DlgDocLangDirRTL : "De dekstro maldekstren (LTR)", |
DlgDocLangCode : "Lingvokodo", |
DlgDocCharSet : "Signara Kodo", |
DlgDocCharSetCE : "Central European", //MISSING |
DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING |
DlgDocCharSetCR : "Cyrillic", //MISSING |
DlgDocCharSetGR : "Greek", //MISSING |
DlgDocCharSetJP : "Japanese", //MISSING |
DlgDocCharSetKR : "Korean", //MISSING |
DlgDocCharSetTR : "Turkish", //MISSING |
DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING |
DlgDocCharSetWE : "Western European", //MISSING |
DlgDocCharSetOther : "Alia Signara Kodo", |
DlgDocDocType : "Dokumenta Tipo", |
DlgDocDocTypeOther : "Alia Dokumenta Tipo", |
DlgDocIncXHTML : "Inkluzivi XHTML Deklaroj", |
DlgDocBgColor : "Fona Koloro", |
DlgDocBgImage : "URL de Fona Bildo", |
DlgDocBgNoScroll : "Neruluma Fono", |
DlgDocCText : "Teksto", |
DlgDocCLink : "Ligilo", |
DlgDocCVisited : "Vizitita Ligilo", |
DlgDocCActive : "Aktiva Ligilo", |
DlgDocMargins : "Paĝaj Marĝenoj", |
DlgDocMaTop : "Supra", |
DlgDocMaLeft : "Maldekstra", |
DlgDocMaRight : "Dekstra", |
DlgDocMaBottom : "Malsupra", |
DlgDocMeIndex : "Ŝlosilvortoj de la Dokumento (apartigita de komoj)", |
DlgDocMeDescr : "Dokumenta Priskribo", |
DlgDocMeAuthor : "Verkinto", |
DlgDocMeCopy : "Kopirajto", |
DlgDocPreview : "Aspekto", |
// Templates Dialog |
Templates : "Templates", //MISSING |
DlgTemplatesTitle : "Content Templates", //MISSING |
DlgTemplatesSelMsg : "Please select the template to open in the editor<br>(the actual contents will be lost):", //MISSING |
DlgTemplatesLoading : "Loading templates list. Please wait...", //MISSING |
DlgTemplatesNoTpl : "(No templates defined)", //MISSING |
DlgTemplatesReplace : "Replace actual contents", //MISSING |
// About Dialog |
DlgAboutAboutTab : "Pri", |
DlgAboutBrowserInfoTab : "Informoj pri TTT-legilo", |
DlgAboutLicenseTab : "License", //MISSING |
DlgAboutVersion : "versio", |
DlgAboutLicense : "Disdonata laŭ la GNU Lesser General Public License", |
DlgAboutInfo : "Por pli da informoj, vizitu" |
} |
/branches/v1.0-menes/api/fckeditor/editor/lang/fo.js |
---|
New file |
0,0 → 1,502 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fo.js |
* Faroese language file. |
* |
* File Authors: |
* Símin Lassaberg |
* Helgi Arnthorsson |
*/ |
var FCKLang = |
{ |
// Language direction : "ltr" (left to right) or "rtl" (right to left). |
Dir : "ltr", |
ToolbarCollapse : "Goym amboðalistan", |
ToolbarExpand : "Vís amboðalistan", |
// Toolbar Items and Context Menu |
Save : "Geim", |
NewPage : "Nýggj síða", |
Preview : "Vís dømi", |
Cut : "Klipp", |
Copy : "Avrita", |
Paste : "Set inn", |
PasteText : "Set inn sum reinan tekst", |
PasteWord : "Set inn frá Word", |
Print : "Prenta", |
SelectAll : "Markera alt", |
RemoveFormat : "Sletta sniðgeving", |
InsertLinkLbl : "Leinkja", |
InsertLink : "Seta inn/Broyta Leinkju", |
RemoveLink : "Sletta Leinkju", |
Anchor : "Seta inn/Broyta staðsetingarmerki", |
InsertImageLbl : "Seta inn mynd", |
InsertImage : "Seta inn/Broyta mynd", |
InsertFlashLbl : "Flash", //MISSING |
InsertFlash : "Insert/Edit Flash", //MISSING |
InsertTableLbl : "Talva", |
InsertTable : "Seta inn/Broyta talvu", |
InsertLineLbl : "Linja", |
InsertLine : "Seta inn vatnrætta linju", |
InsertSpecialCharLbl: "Serlig tekn", |
InsertSpecialChar : "Seta inn serligt tekn", |
InsertSmileyLbl : "Smiley", |
InsertSmiley : "Seta inn Smiley", |
About : "Um FCKeditor", |
Bold : "Feit", |
Italic : "Skástillað", |
Underline : "Undirstrikað", |
StrikeThrough : "Strikað yvir", |
Subscript : "Lækkað skrift", |
Superscript : "Hækkað skrift", |
LeftJustify : "Vinstristillað", |
CenterJustify : "Miðstillað", |
RightJustify : "Hægristillað", |
BlockJustify : "Beinir tekstkantar", |
DecreaseIndent : "Økja innrykk", |
IncreaseIndent : "Minka innrykk", |
Undo : "Angra", |
Redo : "Broyt aftur í upprunamynd", |
NumberedListLbl : "Talsettur listi", |
NumberedList : "Seta inn/Sletta talsettan lista", |
BulletedListLbl : "Punktsettur listi", |
BulletedList : "Seta inn/Sletta punktsettan lista", |
ShowTableBorders : "Vísa talvukantar ", |
ShowDetails : "Vísa detaljur", |
Style : "Tekstsnið", |
FontFormat : "Sniðgeving", |
Font : "Skrift", |
FontSize : "Skriftstødd", |
TextColor : "Tekstlitur", |
BGColor : "Litur aftanfyri", |
Source : "Kelda", |
Find : "Leita", |
Replace : "Set í staðin", |
SpellCheck : "Stavseting", |
UniversalKeyboard : "Universalt Tastatur", |
PageBreakLbl : "Page Break", //MISSING |
PageBreak : "Insert Page Break", //MISSING |
Form : "Seta inn Form", |
Checkbox : "Seta inn Avmerkingarboks", |
RadioButton : "Seta inn Radioknap", |
TextField : "Seta inn Tekstteig", |
Textarea : "Seta inn Tekstøki", |
HiddenField : "Seta inn GoymdanTeig", |
Button : "Seta inn knapp", |
SelectionField : "Seta inn Valteig", |
ImageButton : "Seta inn Myndaknapp", |
FitWindow : "Maximize the editor size", //MISSING |
// Context Menu |
EditLink : "Broyt leinkju", |
CellCM : "Cell", //MISSING |
RowCM : "Row", //MISSING |
ColumnCM : "Column", //MISSING |
InsertRow : "Seta inn rekkju", |
DeleteRows : "Sletta rekkjur", |
InsertColumn : "Seta inn søjlur", |
DeleteColumns : "Sletta søjlur", |
InsertCell : "Seta inn sellu", |
DeleteCells : "Sletta sellu", |
MergeCells : "Flætta sellur", |
SplitCell : "Deila sellur", |
TableDelete : "Delete Table", //MISSING |
CellProperties : "Eginleikar fyri sellu", |
TableProperties : "Eginleikar fyri talvu", |
ImageProperties : "Eginleikar fyri mynd", |
FlashProperties : "Flash Properties", //MISSING |
AnchorProp : "Eginleikar fyri staðsetingarpunkt", |
ButtonProp : "Eginleikar fyri knapp", |
CheckboxProp : "Eginleikar fyri avmerkingarboks", |
HiddenFieldProp : "Eginleikar fyri goymdan teig", |
RadioButtonProp : "Eginleikar fyri radioknapp", |
ImageButtonProp : "Eginleikar fyri myndaknapp", |
TextFieldProp : "Eginleikar fyri Tekstateig", |
SelectionFieldProp : "Eginleikar fyri Valteig", |
TextareaProp : "Eginleikar fyri Tekstaøki", |
FormProp : "Eginleikar fyri form", |
FontFormats : "Normalt;Sniðgevið;Adressa;Yvirskrift 1;Yvirskrift 2;Yvirskrift 3;Yvirskrift 4;Yvirskrift 5;Yvirskrift 6", |
// Alerts and Messages |
ProcessingXHTML : "Viðgerir XHTML. Bíða...", |
Done : "Liðugt", |
PasteWordConfirm : "Teksturin, tú roynir at seta inn, sýnist at vera frá Word. Vilt tú reinsa tekstin, áðrenn hann verður settur inn?", |
NotCompatiblePaste : "Hesin ordri er tøkur í Internet Explorer 5.5 og nýggjari. Vilt tú seta tekstin inn, uttan at reinsa hann?", |
UnknownToolbarItem : "Ókendur lutur í amboðalinju \"%1\"", |
UnknownCommand : "Kenni ikki ordra \"%1\"", |
NotImplemented : "Ordrin er ikki gjørdur virkin", |
UnknownToolbarSet : "Amboðalinjan \"%1\" finst ikki", |
NoActiveX : "Your browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.", //MISSING |
BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.", //MISSING |
DialogBlocked : "It was not possible to open the dialog window. Make sure all popup blockers are disabled.", //MISSING |
// Dialogs |
DlgBtnOK : "OK", |
DlgBtnCancel : "Angra", |
DlgBtnClose : "Lukka", |
DlgBtnBrowseServer : "Hyggja á servara", |
DlgAdvancedTag : "Útvíðka", |
DlgOpOther : "<Annað>", |
DlgInfoTab : "Info", //MISSING |
DlgAlertUrl : "Please insert the URL", //MISSING |
// General Dialogs Labels |
DlgGenNotSet : "<ikki sett>", |
DlgGenId : "Id", |
DlgGenLangDir : "Tekstakós", |
DlgGenLangDirLtr : "Vinstri móti høgri (LTR)", |
DlgGenLangDirRtl : "Høgri móti vinstri (RTL)", |
DlgGenLangCode : "Málkoda", |
DlgGenAccessKey : "Atgongdslykil", |
DlgGenName : "Navn", |
DlgGenTabIndex : "Tabulator Indeks", |
DlgGenLongDescr : "víðka frágreiðing", |
DlgGenClass : "Typografiark", |
DlgGenTitle : "Heiti", |
DlgGenContType : "Innihaldsslag", |
DlgGenLinkCharset : "Teknset", |
DlgGenStyle : "Prentlist", |
// Image Dialog |
DlgImgTitle : "Mynd eginleikar", |
DlgImgInfoTab : "Mynd info", |
DlgImgBtnUpload : "Send til serveren", |
DlgImgURL : "URL", |
DlgImgUpload : "Upload", |
DlgImgAlt : "Annar tekstur", |
DlgImgWidth : "Breidd", |
DlgImgHeight : "Hædd", |
DlgImgLockRatio : "Læs støddarlutfall", |
DlgBtnResetSize : "Nulstilla stødd", |
DlgImgBorder : "Ramma", |
DlgImgHSpace : "HMargin", |
DlgImgVSpace : "VMargin", |
DlgImgAlign : "Justering", |
DlgImgAlignLeft : "Vinstra", |
DlgImgAlignAbsBottom: "Abs botnur", |
DlgImgAlignAbsMiddle: "Abs Miðja", |
DlgImgAlignBaseline : "Botnlinja", |
DlgImgAlignBottom : "Botnur", |
DlgImgAlignMiddle : "Miðja", |
DlgImgAlignRight : "Høgra", |
DlgImgAlignTextTop : "Tekstur ovast", |
DlgImgAlignTop : "Ovast", |
DlgImgPreview : "Vís dømi", |
DlgImgAlertUrl : "Slá inn slóðina til myndina", |
DlgImgLinkTab : "Leinkja", |
// Flash Dialog |
DlgFlashTitle : "Flash Properties", //MISSING |
DlgFlashChkPlay : "Auto Play", //MISSING |
DlgFlashChkLoop : "Loop", //MISSING |
DlgFlashChkMenu : "Enable Flash Menu", //MISSING |
DlgFlashScale : "Scale", //MISSING |
DlgFlashScaleAll : "Show all", //MISSING |
DlgFlashScaleNoBorder : "No Border", //MISSING |
DlgFlashScaleFit : "Exact Fit", //MISSING |
// Link Dialog |
DlgLnkWindowTitle : "Leinkja", |
DlgLnkInfoTab : "Leinkju info", |
DlgLnkTargetTab : "Mál", |
DlgLnkType : "Leinkju slag", |
DlgLnkTypeURL : "URL", |
DlgLnkTypeAnchor : "Akker á hesari síðuni", |
DlgLnkTypeEMail : "Teldupostur", |
DlgLnkProto : "Protokoll", |
DlgLnkProtoOther : "<onnur>", |
DlgLnkURL : "URL", |
DlgLnkAnchorSel : "VEl eitt akker", |
DlgLnkAnchorByName : "Eftir akker navni", |
DlgLnkAnchorById : "Eftir element Id", |
DlgLnkNoAnchors : "<Tað eru ongi akker tøk í hesum dokumentinum;", |
DlgLnkEMail : "Teldupost Adresse", |
DlgLnkEMailSubject : "Evni", |
DlgLnkEMailBody : "Boð", |
DlgLnkUpload : "Upload", |
DlgLnkBtnUpload : "Send til servaran", |
DlgLnkTarget : "Mál", |
DlgLnkTargetFrame : "<ramma>", |
DlgLnkTargetPopup : "<popup vindeyga>", |
DlgLnkTargetBlank : "Nytt vindeyga (_blank)", |
DlgLnkTargetParent : "Omaná liggjandi vindeyga (_parent)", |
DlgLnkTargetSelf : "Sama vindeyga (_self)", |
DlgLnkTargetTop : "ovasta vindeyga (_top)", |
DlgLnkTargetFrameName : "vísa vindeygas navn", |
DlgLnkPopWinName : "Popup vindeygas navn", |
DlgLnkPopWinFeat : "Popup vindeygas eginleikar", |
DlgLnkPopResize : "Skalering", |
DlgLnkPopLocation : "Lokationslinja", |
DlgLnkPopMenu : "Menulinja", |
DlgLnkPopScroll : "Scrollbars", |
DlgLnkPopStatus : "Statuslinja", |
DlgLnkPopToolbar : "Værktøjslinja", |
DlgLnkPopFullScrn : "Fullur skermur (IE)", |
DlgLnkPopDependent : "Bundin (Netscape)", |
DlgLnkPopWidth : "Breidd", |
DlgLnkPopHeight : "Hædd", |
DlgLnkPopLeft : "Positión frá vinstru", |
DlgLnkPopTop : "Positión frá toppinum", |
DlnLnkMsgNoUrl : "Inntasta leinkju URL", |
DlnLnkMsgNoEMail : "Inntasta teldupost addressuna", |
DlnLnkMsgNoAnchor : "Vel akker", |
DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING |
// Color Dialog |
DlgColorTitle : "vel farvu", |
DlgColorBtnClear : "sletta alt", |
DlgColorHighlight : "Markera", |
DlgColorSelected : "valt", |
// Smiley Dialog |
DlgSmileyTitle : "Innset ein smiley", |
// Special Character Dialog |
DlgSpecialCharTitle : "vel specialkarakter", |
// Table Dialog |
DlgTableTitle : "Tabel eginleikar", |
DlgTableRows : "Rekkjur", |
DlgTableColumns : "Kolonnur", |
DlgTableBorder : "Rammu stødd", |
DlgTableAlign : "Justering", |
DlgTableAlignNotSet : "<Ikki sett>", |
DlgTableAlignLeft : "Vinstrastilla", |
DlgTableAlignCenter : "Miðseta", |
DlgTableAlignRight : "Høgrastilla", |
DlgTableWidth : "Breidd", |
DlgTableWidthPx : "pixels", |
DlgTableWidthPc : "prosent", |
DlgTableHeight : "Hædd", |
DlgTableCellSpace : "Fjarstøða millum sellur", |
DlgTableCellPad : "Sellu breddi", |
DlgTableCaption : "Heiti", |
DlgTableSummary : "Summary", //MISSING |
// Table Cell Dialog |
DlgCellTitle : "Sellu eginleikar", |
DlgCellWidth : "Breidd", |
DlgCellWidthPx : "pixels", |
DlgCellWidthPc : "prosent", |
DlgCellHeight : "Hædd", |
DlgCellWordWrap : "Orðbýti", |
DlgCellWordWrapNotSet : "<Ikki sett>", |
DlgCellWordWrapYes : "Ja", |
DlgCellWordWrapNo : "Nej", |
DlgCellHorAlign : "Horisontal justering", |
DlgCellHorAlignNotSet : "<Ikke sat>", |
DlgCellHorAlignLeft : "Vinstrastilla", |
DlgCellHorAlignCenter : "Miðsett", |
DlgCellHorAlignRight: "Høgrastilla", |
DlgCellVerAlign : "Lodrøtt Justering", |
DlgCellVerAlignNotSet : "<Ikki sett>", |
DlgCellVerAlignTop : "Ovast", |
DlgCellVerAlignMiddle : "Miðja", |
DlgCellVerAlignBottom : "Niðast", |
DlgCellVerAlignBaseline : "Botnlinja", |
DlgCellRowSpan : "Tal av rekkjum sellan spennur yvir", |
DlgCellCollSpan : "Tal av talrøðum sellan spennur yvir", |
DlgCellBackColor : "Bakgrundsfarva", |
DlgCellBorderColor : "rammufarva", |
DlgCellBtnSelect : "Vel...", |
// Find Dialog |
DlgFindTitle : "Finn", |
DlgFindFindBtn : "Finn", |
DlgFindNotFoundMsg : "Teksturin bleiv ikki funnin", |
// Replace Dialog |
DlgReplaceTitle : "Set í staðin", |
DlgReplaceFindLbl : "Finn:", |
DlgReplaceReplaceLbl : "Set í staðin við:", |
DlgReplaceCaseChk : "Munur á stórum og smáðum stavum", |
DlgReplaceReplaceBtn : "Set í staðin", |
DlgReplaceReplAllBtn : "Skift alt út", |
DlgReplaceWordChk : "Bert heil orð", |
// Paste Operations / Dialog |
PasteErrorPaste : "Leitarans trygdarinstillingar loyva ikki editorinum at innseta tekstin automatiskt. Brúka knappaborðið til at innseta tekstin (Ctrl+V).", |
PasteErrorCut : "Leitarans trygdarinstillingar loyva ikki editorinum at klippa tekstin automatiskt. Brúka í staðin knappaborðið til at klippa tekstin (Ctrl+X).", |
PasteErrorCopy : "Leitarans trygdarinstillingar loyva ikki editorinum at avrita tekstin automatiskt. Brúka í staðin knappaborðið til at avrita tekstin (Ctrl+V).", |
PasteAsText : "Seta inn som reinur tekstur", |
PasteFromWord : "Seta inn fra Word", |
DlgPasteMsg2 : "Please paste inside the following box using the keyboard (<STRONG>Ctrl+V</STRONG>) and hit <STRONG>OK</STRONG>.", //MISSING |
DlgPasteIgnoreFont : "Ignore Font Face definitions", //MISSING |
DlgPasteRemoveStyles : "Remove Styles definitions", //MISSING |
DlgPasteCleanBox : "Clean Up Box", //MISSING |
// Color Picker |
ColorAutomatic : "Automatisk", |
ColorMoreColors : "Fleiri farvur...", |
// Document Properties |
DocProps : "Dokument eginleikar", |
// Anchor Dialog |
DlgAnchorTitle : "Akker eginleikar", |
DlgAnchorName : "Akker navn", |
DlgAnchorErrorName : "Slá innn akker navn", |
// Speller Pages Dialog |
DlgSpellNotInDic : "Finnst ikki í orðabókini", |
DlgSpellChangeTo : "broyta til", |
DlgSpellBtnIgnore : "Ignorera", |
DlgSpellBtnIgnoreAll : "Ignorera alt", |
DlgSpellBtnReplace : "Skift út", |
DlgSpellBtnReplaceAll : "Skift út alt", |
DlgSpellBtnUndo : "Aftur", |
DlgSpellNoSuggestions : "- Einki uppskot -", |
DlgSpellProgress : "Stavarin arbeiðir...", |
DlgSpellNoMispell : "Stavarain liðugur: Eingin feilur funnin", |
DlgSpellNoChanges : "Stavarain liðugur: Einki orð broytt", |
DlgSpellOneChange : "Stavarain liðugur: Eitt orð broytt", |
DlgSpellManyChanges : "Stavarain liðugur: %1 orð broytt", |
IeSpellDownload : "Stavarin ikki lagdur inn. vilt tú heinta hann nú?", |
// Button Dialog |
DlgButtonText : "Tekstur (Virði)", |
DlgButtonType : "Slag", |
DlgButtonTypeBtn : "Button", //MISSING |
DlgButtonTypeSbm : "Submit", //MISSING |
DlgButtonTypeRst : "Reset", //MISSING |
// Checkbox and Radio Button Dialogs |
DlgCheckboxName : "Navn", |
DlgCheckboxValue : "Virði", |
DlgCheckboxSelected : "Valgt", |
// Form Dialog |
DlgFormName : "Navn", |
DlgFormAction : "Gerð", |
DlgFormMethod : "Háttur", |
// Select Field Dialog |
DlgSelectName : "Navn", |
DlgSelectValue : "Virði", |
DlgSelectSize : "Stødd", |
DlgSelectLines : "linjir", |
DlgSelectChkMulti : "Loyv fleiri valmøguleikar", |
DlgSelectOpAvail : "valmøguleikar", |
DlgSelectOpText : "Tekstur", |
DlgSelectOpValue : "Virði", |
DlgSelectBtnAdd : "Legg afturat", |
DlgSelectBtnModify : "Broyt", |
DlgSelectBtnUp : "Upp", |
DlgSelectBtnDown : "Niður", |
DlgSelectBtnSetValue : "Set sum útvald", |
DlgSelectBtnDelete : "Sletta", |
// Textarea Dialog |
DlgTextareaName : "Navn", |
DlgTextareaCols : "talrøð", |
DlgTextareaRows : "Rekkja", |
// Text Field Dialog |
DlgTextName : "Navn", |
DlgTextValue : "Virði", |
DlgTextCharWidth : "Sjónligt tal av bókstavum", |
DlgTextMaxChars : "Hægst loyvda tal av bókstavum", |
DlgTextType : "Slag", |
DlgTextTypeText : "Tekstur", |
DlgTextTypePass : "Koduorð", |
// Hidden Field Dialog |
DlgHiddenName : "Navn", |
DlgHiddenValue : "Virði", |
// Bulleted List Dialog |
BulletedListProp : "Punktteknsuppsetingar eginleikar", |
NumberedListProp : "Taluppsetingar eginleikar", |
DlgLstStart : "Start", //MISSING |
DlgLstType : "Slag", |
DlgLstTypeCircle : "Sirkul", |
DlgLstTypeDisc : "Disc", //MISSING |
DlgLstTypeSquare : "Fýrakantur", |
DlgLstTypeNumbers : "Talmerkt (1, 2, 3)", |
DlgLstTypeLCase : "Smáir bókstavir (a, b, c)", |
DlgLstTypeUCase : "Stórir bókstavir (A, B, C)", |
DlgLstTypeSRoman : "Smá rómaratøl (i, ii, iii)", |
DlgLstTypeLRoman : "Stór rómaratøl (I, II, III)", |
// Document Properties Dialog |
DlgDocGeneralTab : "Generelt", |
DlgDocBackTab : "Bakgrund", |
DlgDocColorsTab : "Farva og Breddin", |
DlgDocMetaTab : "Meta Information", |
DlgDocPageTitle : "Síðu heiti", |
DlgDocLangDir : "Mál", |
DlgDocLangDirLTR : "Frá vinstru móti høgru (LTR)", |
DlgDocLangDirRTL : "Frá høgru móti vinstru (RTL)", |
DlgDocLangCode : "Landakoda", |
DlgDocCharSet : "Karakter set kodu", |
DlgDocCharSetCE : "Central European", //MISSING |
DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING |
DlgDocCharSetCR : "Cyrillic", //MISSING |
DlgDocCharSetGR : "Greek", //MISSING |
DlgDocCharSetJP : "Japanese", //MISSING |
DlgDocCharSetKR : "Korean", //MISSING |
DlgDocCharSetTR : "Turkish", //MISSING |
DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING |
DlgDocCharSetWE : "Western European", //MISSING |
DlgDocCharSetOther : "Annar karakter set kodu", |
DlgDocDocType : "Dokument slag kategori", |
DlgDocDocTypeOther : "Annað dokument slag kategori", |
DlgDocIncXHTML : "Inkludere XHTML deklartion", |
DlgDocBgColor : "Bakgrundsfarva", |
DlgDocBgImage : "Bakgrundsmynd URL", |
DlgDocBgNoScroll : "Ikki scrollbar bakgrund", |
DlgDocCText : "Tekstur", |
DlgDocCLink : "Leinkja", |
DlgDocCVisited : "Vitja leinkja", |
DlgDocCActive : "Aktiv leinkja", |
DlgDocMargins : "Síðu breddi", |
DlgDocMaTop : "Ovast", |
DlgDocMaLeft : "Vinstra", |
DlgDocMaRight : "Høgra", |
DlgDocMaBottom : "Niðast", |
DlgDocMeIndex : "Dokument index lyklaorð (komma sundurskilt)", |
DlgDocMeDescr : "Dokument lýsing", |
DlgDocMeAuthor : "Høvundur", |
DlgDocMeCopy : "Copyright", |
DlgDocPreview : "Vís", |
// Templates Dialog |
Templates : "Frymlar", |
DlgTemplatesTitle : "Innihaldsfrymlar", |
DlgTemplatesSelMsg : "Vel tann frymilin, sum skal opnast í editorinum<br>(Tað verður skriva útyvir núverandi innihald):", |
DlgTemplatesLoading : "Heintar lista yvir frymlar. Vinarliga bíða...", |
DlgTemplatesNoTpl : "(Ongin frymil er valdur)", |
DlgTemplatesReplace : "Replace actual contents", //MISSING |
// About Dialog |
DlgAboutAboutTab : "Um", |
DlgAboutBrowserInfoTab : "Browsara upplýsingar", |
DlgAboutLicenseTab : "License", //MISSING |
DlgAboutVersion : "versión", |
DlgAboutLicense : "Loyvi undir treytum fyri GNU Lesser General Public License", |
DlgAboutInfo : "Fleiri upplýsingar, far til" |
} |
/branches/v1.0-menes/api/fckeditor/editor/lang/bs.js |
---|
New file |
0,0 → 1,501 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: bs.js |
* Bosnian language file. |
* |
* File Authors: |
* Muris Trax (www.elektronika.ba) |
*/ |
var FCKLang = |
{ |
// Language direction : "ltr" (left to right) or "rtl" (right to left). |
Dir : "ltr", |
ToolbarCollapse : "Skupi trake sa alatima", |
ToolbarExpand : "Otvori trake sa alatima", |
// Toolbar Items and Context Menu |
Save : "Snimi", |
NewPage : "Novi dokument", |
Preview : "Prikaži", |
Cut : "Izreži", |
Copy : "Kopiraj", |
Paste : "Zalijepi", |
PasteText : "Zalijepi kao obièan tekst", |
PasteWord : "Zalijepi iz Word-a", |
Print : "Štampaj", |
SelectAll : "Selektuj sve", |
RemoveFormat : "Poništi format", |
InsertLinkLbl : "Link", |
InsertLink : "Ubaci/Izmjeni link", |
RemoveLink : "Izbriši link", |
Anchor : "Insert/Edit Anchor", //MISSING |
InsertImageLbl : "Slika", |
InsertImage : "Ubaci/Izmjeni sliku", |
InsertFlashLbl : "Flash", //MISSING |
InsertFlash : "Insert/Edit Flash", //MISSING |
InsertTableLbl : "Tabela", |
InsertTable : "Ubaci/Izmjeni tabelu", |
InsertLineLbl : "Linija", |
InsertLine : "Ubaci horizontalnu liniju", |
InsertSpecialCharLbl: "Specijalni karakter", |
InsertSpecialChar : "Ubaci specijalni karater", |
InsertSmileyLbl : "Smješko", |
InsertSmiley : "Ubaci smješka", |
About : "O FCKeditor-u", |
Bold : "Boldiraj", |
Italic : "Ukosi", |
Underline : "Podvuci", |
StrikeThrough : "Precrtaj", |
Subscript : "Subscript", |
Superscript : "Superscript", |
LeftJustify : "Lijevo poravnanje", |
CenterJustify : "Centralno poravnanje", |
RightJustify : "Desno poravnanje", |
BlockJustify : "Puno poravnanje", |
DecreaseIndent : "Smanji uvod", |
IncreaseIndent : "Poveæaj uvod", |
Undo : "Vrati", |
Redo : "Ponovi", |
NumberedListLbl : "Numerisana lista", |
NumberedList : "Ubaci/Izmjeni numerisanu listu", |
BulletedListLbl : "Lista", |
BulletedList : "Ubaci/Izmjeni listu", |
ShowTableBorders : "Pokaži okvire tabela", |
ShowDetails : "Pokaži detalje", |
Style : "Stil", |
FontFormat : "Format", |
Font : "Font", |
FontSize : "Velièina", |
TextColor : "Boja teksta", |
BGColor : "Boja pozadine", |
Source : "HTML kôd", |
Find : "Naði", |
Replace : "Zamjeni", |
SpellCheck : "Check Spelling", //MISSING |
UniversalKeyboard : "Universal Keyboard", //MISSING |
PageBreakLbl : "Page Break", //MISSING |
PageBreak : "Insert Page Break", //MISSING |
Form : "Form", //MISSING |
Checkbox : "Checkbox", //MISSING |
RadioButton : "Radio Button", //MISSING |
TextField : "Text Field", //MISSING |
Textarea : "Textarea", //MISSING |
HiddenField : "Hidden Field", //MISSING |
Button : "Button", //MISSING |
SelectionField : "Selection Field", //MISSING |
ImageButton : "Image Button", //MISSING |
FitWindow : "Maximize the editor size", //MISSING |
// Context Menu |
EditLink : "Izmjeni link", |
CellCM : "Cell", //MISSING |
RowCM : "Row", //MISSING |
ColumnCM : "Column", //MISSING |
InsertRow : "Ubaci red", |
DeleteRows : "Briši redove", |
InsertColumn : "Ubaci kolonu", |
DeleteColumns : "Briši kolone", |
InsertCell : "Ubaci æeliju", |
DeleteCells : "BriÅ¡i æelije", |
MergeCells : "Spoji æelije", |
SplitCell : "Razdvoji æeliju", |
TableDelete : "Delete Table", //MISSING |
CellProperties : "Svojstva æelije", |
TableProperties : "Svojstva tabele", |
ImageProperties : "Svojstva slike", |
FlashProperties : "Flash Properties", //MISSING |
AnchorProp : "Anchor Properties", //MISSING |
ButtonProp : "Button Properties", //MISSING |
CheckboxProp : "Checkbox Properties", //MISSING |
HiddenFieldProp : "Hidden Field Properties", //MISSING |
RadioButtonProp : "Radio Button Properties", //MISSING |
ImageButtonProp : "Image Button Properties", //MISSING |
TextFieldProp : "Text Field Properties", //MISSING |
SelectionFieldProp : "Selection Field Properties", //MISSING |
TextareaProp : "Textarea Properties", //MISSING |
FormProp : "Form Properties", //MISSING |
FontFormats : "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6", |
// Alerts and Messages |
ProcessingXHTML : "Procesiram XHTML. Molim saèekajte...", |
Done : "Gotovo", |
PasteWordConfirm : "Tekst koji želite zalijepiti èini se da je kopiran iz Worda. Da li želite da se prvo oèisti?", |
NotCompatiblePaste : "Ova komanda je podržana u Internet Explorer-u verzijama 5.5 ili novijim. Da li želite da izvrÅ¡ite lijepljenje teksta bez èiÅ¡æenja?", |
UnknownToolbarItem : "Nepoznata stavka sa trake sa alatima \"%1\"", |
UnknownCommand : "Nepoznata komanda \"%1\"", |
NotImplemented : "Komanda nije implementirana", |
UnknownToolbarSet : "Traka sa alatima \"%1\" ne postoji", |
NoActiveX : "Your browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.", //MISSING |
BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.", //MISSING |
DialogBlocked : "It was not possible to open the dialog window. Make sure all popup blockers are disabled.", //MISSING |
// Dialogs |
DlgBtnOK : "OK", |
DlgBtnCancel : "Odustani", |
DlgBtnClose : "Zatvori", |
DlgBtnBrowseServer : "Browse Server", //MISSING |
DlgAdvancedTag : "Naprednije", |
DlgOpOther : "<Other>", //MISSING |
DlgInfoTab : "Info", //MISSING |
DlgAlertUrl : "Please insert the URL", //MISSING |
// General Dialogs Labels |
DlgGenNotSet : "<nije podešeno>", |
DlgGenId : "Id", |
DlgGenLangDir : "Smjer pisanja", |
DlgGenLangDirLtr : "S lijeva na desno (LTR)", |
DlgGenLangDirRtl : "S desna na lijevo (RTL)", |
DlgGenLangCode : "Jezièni kôd", |
DlgGenAccessKey : "Pristupna tipka", |
DlgGenName : "Naziv", |
DlgGenTabIndex : "Tab indeks", |
DlgGenLongDescr : "Dugaèki opis URL-a", |
DlgGenClass : "Klase CSS stilova", |
DlgGenTitle : "Advisory title", |
DlgGenContType : "Advisory vrsta sadržaja", |
DlgGenLinkCharset : "Linked Resource Charset", |
DlgGenStyle : "Stil", |
// Image Dialog |
DlgImgTitle : "Svojstva slike", |
DlgImgInfoTab : "Info slike", |
DlgImgBtnUpload : "Šalji na server", |
DlgImgURL : "URL", |
DlgImgUpload : "Šalji", |
DlgImgAlt : "Tekst na slici", |
DlgImgWidth : "Širina", |
DlgImgHeight : "Visina", |
DlgImgLockRatio : "Zakljuèaj odnos", |
DlgBtnResetSize : "Resetuj dimenzije", |
DlgImgBorder : "Okvir", |
DlgImgHSpace : "HSpace", |
DlgImgVSpace : "VSpace", |
DlgImgAlign : "Poravnanje", |
DlgImgAlignLeft : "Lijevo", |
DlgImgAlignAbsBottom: "Abs dole", |
DlgImgAlignAbsMiddle: "Abs sredina", |
DlgImgAlignBaseline : "Bazno", |
DlgImgAlignBottom : "Dno", |
DlgImgAlignMiddle : "Sredina", |
DlgImgAlignRight : "Desno", |
DlgImgAlignTextTop : "Vrh teksta", |
DlgImgAlignTop : "Vrh", |
DlgImgPreview : "Prikaz", |
DlgImgAlertUrl : "Molimo ukucajte URL od slike.", |
DlgImgLinkTab : "Link", //MISSING |
// Flash Dialog |
DlgFlashTitle : "Flash Properties", //MISSING |
DlgFlashChkPlay : "Auto Play", //MISSING |
DlgFlashChkLoop : "Loop", //MISSING |
DlgFlashChkMenu : "Enable Flash Menu", //MISSING |
DlgFlashScale : "Scale", //MISSING |
DlgFlashScaleAll : "Show all", //MISSING |
DlgFlashScaleNoBorder : "No Border", //MISSING |
DlgFlashScaleFit : "Exact Fit", //MISSING |
// Link Dialog |
DlgLnkWindowTitle : "Link", |
DlgLnkInfoTab : "Link info", |
DlgLnkTargetTab : "Prozor", |
DlgLnkType : "Tip linka", |
DlgLnkTypeURL : "URL", |
DlgLnkTypeAnchor : "Sidro na ovoj stranici", |
DlgLnkTypeEMail : "E-Mail", |
DlgLnkProto : "Protokol", |
DlgLnkProtoOther : "<drugi>", |
DlgLnkURL : "URL", |
DlgLnkAnchorSel : "Izaberi sidro", |
DlgLnkAnchorByName : "Po nazivu sidra", |
DlgLnkAnchorById : "Po Id-u elementa", |
DlgLnkNoAnchors : "<Nema dostupnih sidra na stranici>", |
DlgLnkEMail : "E-Mail Adresa", |
DlgLnkEMailSubject : "Subjekt poruke", |
DlgLnkEMailBody : "Poruka", |
DlgLnkUpload : "Šalji", |
DlgLnkBtnUpload : "Šalji na server", |
DlgLnkTarget : "Prozor", |
DlgLnkTargetFrame : "<frejm>", |
DlgLnkTargetPopup : "<popup prozor>", |
DlgLnkTargetBlank : "Novi prozor (_blank)", |
DlgLnkTargetParent : "Glavni prozor (_parent)", |
DlgLnkTargetSelf : "Isti prozor (_self)", |
DlgLnkTargetTop : "Najgornji prozor (_top)", |
DlgLnkTargetFrameName : "Target Frame Name", //MISSING |
DlgLnkPopWinName : "Naziv popup prozora", |
DlgLnkPopWinFeat : "Moguænosti popup prozora", |
DlgLnkPopResize : "Promjenljive velièine", |
DlgLnkPopLocation : "Traka za lokaciju", |
DlgLnkPopMenu : "Izborna traka", |
DlgLnkPopScroll : "Scroll traka", |
DlgLnkPopStatus : "Statusna traka", |
DlgLnkPopToolbar : "Traka sa alatima", |
DlgLnkPopFullScrn : "Cijeli ekran (IE)", |
DlgLnkPopDependent : "Ovisno (Netscape)", |
DlgLnkPopWidth : "Širina", |
DlgLnkPopHeight : "Visina", |
DlgLnkPopLeft : "Lijeva pozicija", |
DlgLnkPopTop : "Gornja pozicija", |
DlnLnkMsgNoUrl : "Molimo ukucajte URL link", |
DlnLnkMsgNoEMail : "Molimo ukucajte e-mail adresu", |
DlnLnkMsgNoAnchor : "Molimo izaberite sidro", |
DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING |
// Color Dialog |
DlgColorTitle : "Izaberi boju", |
DlgColorBtnClear : "Oèisti", |
DlgColorHighlight : "Igled", |
DlgColorSelected : "Selektovana", |
// Smiley Dialog |
DlgSmileyTitle : "Ubaci smješka", |
// Special Character Dialog |
DlgSpecialCharTitle : "Izaberi specijalni karakter", |
// Table Dialog |
DlgTableTitle : "Svojstva tabele", |
DlgTableRows : "Redova", |
DlgTableColumns : "Kolona", |
DlgTableBorder : "Okvir", |
DlgTableAlign : "Poravnanje", |
DlgTableAlignNotSet : "<Nije podešeno>", |
DlgTableAlignLeft : "Lijevo", |
DlgTableAlignCenter : "Centar", |
DlgTableAlignRight : "Desno", |
DlgTableWidth : "Širina", |
DlgTableWidthPx : "piksela", |
DlgTableWidthPc : "posto", |
DlgTableHeight : "Visina", |
DlgTableCellSpace : "Razmak æelija", |
DlgTableCellPad : "Uvod æelija", |
DlgTableCaption : "Naslov", |
DlgTableSummary : "Summary", //MISSING |
// Table Cell Dialog |
DlgCellTitle : "Svojstva æelije", |
DlgCellWidth : "Širina", |
DlgCellWidthPx : "piksela", |
DlgCellWidthPc : "posto", |
DlgCellHeight : "Visina", |
DlgCellWordWrap : "Vrapuj tekst", |
DlgCellWordWrapNotSet : "<Nije podešeno>", |
DlgCellWordWrapYes : "Da", |
DlgCellWordWrapNo : "Ne", |
DlgCellHorAlign : "Horizontalno poravnanje", |
DlgCellHorAlignNotSet : "<Nije podešeno>", |
DlgCellHorAlignLeft : "Lijevo", |
DlgCellHorAlignCenter : "Centar", |
DlgCellHorAlignRight: "Desno", |
DlgCellVerAlign : "Vertikalno poravnanje", |
DlgCellVerAlignNotSet : "<Nije podešeno>", |
DlgCellVerAlignTop : "Gore", |
DlgCellVerAlignMiddle : "Sredina", |
DlgCellVerAlignBottom : "Dno", |
DlgCellVerAlignBaseline : "Bazno", |
DlgCellRowSpan : "Spajanje æelija", |
DlgCellCollSpan : "Spajanje kolona", |
DlgCellBackColor : "Boja pozadine", |
DlgCellBorderColor : "Boja okvira", |
DlgCellBtnSelect : "Selektuj...", |
// Find Dialog |
DlgFindTitle : "Naði", |
DlgFindFindBtn : "Naði", |
DlgFindNotFoundMsg : "Traženi tekst nije pronaðen.", |
// Replace Dialog |
DlgReplaceTitle : "Zamjeni", |
DlgReplaceFindLbl : "Naði Å¡ta:", |
DlgReplaceReplaceLbl : "Zamjeni sa:", |
DlgReplaceCaseChk : "Uporeðuj velika/mala slova", |
DlgReplaceReplaceBtn : "Zamjeni", |
DlgReplaceReplAllBtn : "Zamjeni sve", |
DlgReplaceWordChk : "Uporeðuj samo cijelu rijeè", |
// Paste Operations / Dialog |
PasteErrorPaste : "Sigurnosne postavke vaÅ¡eg pretraživaèa ne dozvoljavaju operacije automatskog lijepljenja. Molimo koristite kraticu na tastaturi (Ctrl+V).", |
PasteErrorCut : "Sigurnosne postavke vaÅ¡eg pretraživaèa ne dozvoljavaju operacije automatskog rezanja. Molimo koristite kraticu na tastaturi (Ctrl+X).", |
PasteErrorCopy : "Sigurnosne postavke VaÅ¡eg pretraživaèa ne dozvoljavaju operacije automatskog kopiranja. Molimo koristite kraticu na tastaturi (Ctrl+C).", |
PasteAsText : "Zalijepi kao obièan tekst", |
PasteFromWord : "Zalijepi iz Word-a", |
DlgPasteMsg2 : "Please paste inside the following box using the keyboard (<STRONG>Ctrl+V</STRONG>) and hit <STRONG>OK</STRONG>.", //MISSING |
DlgPasteIgnoreFont : "Ignore Font Face definitions", //MISSING |
DlgPasteRemoveStyles : "Remove Styles definitions", //MISSING |
DlgPasteCleanBox : "Clean Up Box", //MISSING |
// Color Picker |
ColorAutomatic : "Automatska", |
ColorMoreColors : "Više boja...", |
// Document Properties |
DocProps : "Document Properties", //MISSING |
// Anchor Dialog |
DlgAnchorTitle : "Anchor Properties", //MISSING |
DlgAnchorName : "Anchor Name", //MISSING |
DlgAnchorErrorName : "Please type the anchor name", //MISSING |
// Speller Pages Dialog |
DlgSpellNotInDic : "Not in dictionary", //MISSING |
DlgSpellChangeTo : "Change to", //MISSING |
DlgSpellBtnIgnore : "Ignore", //MISSING |
DlgSpellBtnIgnoreAll : "Ignore All", //MISSING |
DlgSpellBtnReplace : "Replace", //MISSING |
DlgSpellBtnReplaceAll : "Replace All", //MISSING |
DlgSpellBtnUndo : "Undo", //MISSING |
DlgSpellNoSuggestions : "- No suggestions -", //MISSING |
DlgSpellProgress : "Spell check in progress...", //MISSING |
DlgSpellNoMispell : "Spell check complete: No misspellings found", //MISSING |
DlgSpellNoChanges : "Spell check complete: No words changed", //MISSING |
DlgSpellOneChange : "Spell check complete: One word changed", //MISSING |
DlgSpellManyChanges : "Spell check complete: %1 words changed", //MISSING |
IeSpellDownload : "Spell checker not installed. Do you want to download it now?", //MISSING |
// Button Dialog |
DlgButtonText : "Text (Value)", //MISSING |
DlgButtonType : "Type", //MISSING |
DlgButtonTypeBtn : "Button", //MISSING |
DlgButtonTypeSbm : "Submit", //MISSING |
DlgButtonTypeRst : "Reset", //MISSING |
// Checkbox and Radio Button Dialogs |
DlgCheckboxName : "Name", //MISSING |
DlgCheckboxValue : "Value", //MISSING |
DlgCheckboxSelected : "Selected", //MISSING |
// Form Dialog |
DlgFormName : "Name", //MISSING |
DlgFormAction : "Action", //MISSING |
DlgFormMethod : "Method", //MISSING |
// Select Field Dialog |
DlgSelectName : "Name", //MISSING |
DlgSelectValue : "Value", //MISSING |
DlgSelectSize : "Size", //MISSING |
DlgSelectLines : "lines", //MISSING |
DlgSelectChkMulti : "Allow multiple selections", //MISSING |
DlgSelectOpAvail : "Available Options", //MISSING |
DlgSelectOpText : "Text", //MISSING |
DlgSelectOpValue : "Value", //MISSING |
DlgSelectBtnAdd : "Add", //MISSING |
DlgSelectBtnModify : "Modify", //MISSING |
DlgSelectBtnUp : "Up", //MISSING |
DlgSelectBtnDown : "Down", //MISSING |
DlgSelectBtnSetValue : "Set as selected value", //MISSING |
DlgSelectBtnDelete : "Delete", //MISSING |
// Textarea Dialog |
DlgTextareaName : "Name", //MISSING |
DlgTextareaCols : "Columns", //MISSING |
DlgTextareaRows : "Rows", //MISSING |
// Text Field Dialog |
DlgTextName : "Name", //MISSING |
DlgTextValue : "Value", //MISSING |
DlgTextCharWidth : "Character Width", //MISSING |
DlgTextMaxChars : "Maximum Characters", //MISSING |
DlgTextType : "Type", //MISSING |
DlgTextTypeText : "Text", //MISSING |
DlgTextTypePass : "Password", //MISSING |
// Hidden Field Dialog |
DlgHiddenName : "Name", //MISSING |
DlgHiddenValue : "Value", //MISSING |
// Bulleted List Dialog |
BulletedListProp : "Bulleted List Properties", //MISSING |
NumberedListProp : "Numbered List Properties", //MISSING |
DlgLstStart : "Start", //MISSING |
DlgLstType : "Type", //MISSING |
DlgLstTypeCircle : "Circle", //MISSING |
DlgLstTypeDisc : "Disc", //MISSING |
DlgLstTypeSquare : "Square", //MISSING |
DlgLstTypeNumbers : "Numbers (1, 2, 3)", //MISSING |
DlgLstTypeLCase : "Lowercase Letters (a, b, c)", //MISSING |
DlgLstTypeUCase : "Uppercase Letters (A, B, C)", //MISSING |
DlgLstTypeSRoman : "Small Roman Numerals (i, ii, iii)", //MISSING |
DlgLstTypeLRoman : "Large Roman Numerals (I, II, III)", //MISSING |
// Document Properties Dialog |
DlgDocGeneralTab : "General", //MISSING |
DlgDocBackTab : "Background", //MISSING |
DlgDocColorsTab : "Colors and Margins", //MISSING |
DlgDocMetaTab : "Meta Data", //MISSING |
DlgDocPageTitle : "Page Title", //MISSING |
DlgDocLangDir : "Language Direction", //MISSING |
DlgDocLangDirLTR : "Left to Right (LTR)", //MISSING |
DlgDocLangDirRTL : "Right to Left (RTL)", //MISSING |
DlgDocLangCode : "Language Code", //MISSING |
DlgDocCharSet : "Character Set Encoding", //MISSING |
DlgDocCharSetCE : "Central European", //MISSING |
DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING |
DlgDocCharSetCR : "Cyrillic", //MISSING |
DlgDocCharSetGR : "Greek", //MISSING |
DlgDocCharSetJP : "Japanese", //MISSING |
DlgDocCharSetKR : "Korean", //MISSING |
DlgDocCharSetTR : "Turkish", //MISSING |
DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING |
DlgDocCharSetWE : "Western European", //MISSING |
DlgDocCharSetOther : "Other Character Set Encoding", //MISSING |
DlgDocDocType : "Document Type Heading", //MISSING |
DlgDocDocTypeOther : "Other Document Type Heading", //MISSING |
DlgDocIncXHTML : "Include XHTML Declarations", //MISSING |
DlgDocBgColor : "Background Color", //MISSING |
DlgDocBgImage : "Background Image URL", //MISSING |
DlgDocBgNoScroll : "Nonscrolling Background", //MISSING |
DlgDocCText : "Text", //MISSING |
DlgDocCLink : "Link", //MISSING |
DlgDocCVisited : "Visited Link", //MISSING |
DlgDocCActive : "Active Link", //MISSING |
DlgDocMargins : "Page Margins", //MISSING |
DlgDocMaTop : "Top", //MISSING |
DlgDocMaLeft : "Left", //MISSING |
DlgDocMaRight : "Right", //MISSING |
DlgDocMaBottom : "Bottom", //MISSING |
DlgDocMeIndex : "Document Indexing Keywords (comma separated)", //MISSING |
DlgDocMeDescr : "Document Description", //MISSING |
DlgDocMeAuthor : "Author", //MISSING |
DlgDocMeCopy : "Copyright", //MISSING |
DlgDocPreview : "Preview", //MISSING |
// Templates Dialog |
Templates : "Templates", //MISSING |
DlgTemplatesTitle : "Content Templates", //MISSING |
DlgTemplatesSelMsg : "Please select the template to open in the editor<br>(the actual contents will be lost):", //MISSING |
DlgTemplatesLoading : "Loading templates list. Please wait...", //MISSING |
DlgTemplatesNoTpl : "(No templates defined)", //MISSING |
DlgTemplatesReplace : "Replace actual contents", //MISSING |
// About Dialog |
DlgAboutAboutTab : "About", //MISSING |
DlgAboutBrowserInfoTab : "Browser Info", //MISSING |
DlgAboutLicenseTab : "License", //MISSING |
DlgAboutVersion : "verzija", |
DlgAboutLicense : "Licencirano pod uslovima GNU Lesser General Public License", |
DlgAboutInfo : "Za više informacija posjetite" |
} |
/branches/v1.0-menes/api/fckeditor/editor/lang/cs.js |
---|
New file |
0,0 → 1,503 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: cs.js |
* Czech language file. |
* |
* File Authors: |
* David Horák (david.horak@email.cz) |
* Petr Plavjaník (plavjanik@gmail.com) |
* Dave MacBlack (davemacblack@users.sourceforge.net) |
*/ |
var FCKLang = |
{ |
// Language direction : "ltr" (left to right) or "rtl" (right to left). |
Dir : "ltr", |
ToolbarCollapse : "Skrýt panel nástrojů", |
ToolbarExpand : "Zobrazit panel nástrojů", |
// Toolbar Items and Context Menu |
Save : "Uložit", |
NewPage : "Nová stránka", |
Preview : "Náhled", |
Cut : "Vyjmout", |
Copy : "Kopírovat", |
Paste : "Vložit", |
PasteText : "Vložit jako Äistý text", |
PasteWord : "Vložit z Wordu", |
Print : "Tisk", |
SelectAll : "Vybrat vše", |
RemoveFormat : "Odstranit formátování", |
InsertLinkLbl : "Odkaz", |
InsertLink : "Vložit/změnit odkaz", |
RemoveLink : "Odstranit odkaz", |
Anchor : "Vložít/zmÄnit záložku", |
InsertImageLbl : "Obrázek", |
InsertImage : "Vložit/zmÄnit obrázek", |
InsertFlashLbl : "Flash", |
InsertFlash : "Vložit/Upravit Flash", |
InsertTableLbl : "Tabulka", |
InsertTable : "Vložit/změnit tabulku", |
InsertLineLbl : "Linka", |
InsertLine : "Vložit vodorovnou linku", |
InsertSpecialCharLbl: "Speciální znaky", |
InsertSpecialChar : "Vložit speciální znaky", |
InsertSmileyLbl : "Smajlíky", |
InsertSmiley : "Vložit smajlík", |
About : "O aplikaci FCKeditor", |
Bold : "TuÄné", |
Italic : "Kurzíva", |
Underline : "Podtržené", |
StrikeThrough : "PÅeÅ¡krtnuté", |
Subscript : "Dolní index", |
Superscript : "Horní index", |
LeftJustify : "Zarovnat vlevo", |
CenterJustify : "Zarovnat na střed", |
RightJustify : "Zarovnat vpravo", |
BlockJustify : "Zarovnat do bloku", |
DecreaseIndent : "ZmenÅ¡it odsazení", |
IncreaseIndent : "ZvÄtÅ¡it odsazení", |
Undo : "Zpět", |
Redo : "Znovu", |
NumberedListLbl : "Äíslování", |
NumberedList : "Vložit/odstranit Äíslovaný seznam", |
BulletedListLbl : "Odrážky", |
BulletedList : "Vložit/odstranit odrážky", |
ShowTableBorders : "Zobrazit okraje tabulek", |
ShowDetails : "Zobrazit podrobnosti", |
Style : "Styl", |
FontFormat : "Formát", |
Font : "Písmo", |
FontSize : "Velikost", |
TextColor : "Barva textu", |
BGColor : "Barva pozadí", |
Source : "Zdroj", |
Find : "Hledat", |
Replace : "Nahradit", |
SpellCheck : "Zkontrolovat pravopis", |
UniversalKeyboard : "Univerzální klávesnice", |
PageBreakLbl : "Konec stránky", |
PageBreak : "Vložit konec stránky", |
Form : "FormuláÅ", |
Checkbox : "ZaÅ¡krtávací políÄko", |
RadioButton : "PÅepínaÄ", |
TextField : "Textové pole", |
Textarea : "Textová oblast", |
HiddenField : "Skryté pole", |
Button : "TlaÄítko", |
SelectionField : "Seznam", |
ImageButton : "Obrázkové tlaÄítko", |
FitWindow : "Maximalizovat velikost editoru", |
// Context Menu |
EditLink : "Změnit odkaz", |
CellCM : "Buňka", |
RowCM : "Åádek", |
ColumnCM : "Sloupec", |
InsertRow : "Vložit Åádek", |
DeleteRows : "Smazat Åádek", |
InsertColumn : "Vložit sloupec", |
DeleteColumns : "Smazat sloupec", |
InsertCell : "Vložit buňku", |
DeleteCells : "Smazat buňky", |
MergeCells : "Sloučit buňky", |
SplitCell : "Rozdělit buňku", |
TableDelete : "Smazat tabulku", |
CellProperties : "Vlastnosti buňky", |
TableProperties : "Vlastnosti tabulky", |
ImageProperties : "Vlastnosti obrázku", |
FlashProperties : "Vlastnosti Flashe", |
AnchorProp : "Vlastnosti záložky", |
ButtonProp : "Vlastnosti tlaÄítka", |
CheckboxProp : "Vlastnosti zaÅ¡krtávacího políÄka", |
HiddenFieldProp : "Vlastnosti skrytého pole", |
RadioButtonProp : "Vlastnosti pÅepínaÄe", |
ImageButtonProp : "Vlastností obrázkového tlaÄítka", |
TextFieldProp : "Vlastnosti textového pole", |
SelectionFieldProp : "Vlastnosti seznamu", |
TextareaProp : "Vlastnosti textové oblasti", |
FormProp : "Vlastnosti formuláÅe", |
FontFormats : "Normální;Formátovaný;Adresa;Nadpis 1;Nadpis 2;Nadpis 3;Nadpis 4;Nadpis 5;Nadpis 6", |
// Alerts and Messages |
ProcessingXHTML : "Probíhá zpracování XHTML. Prosím Äekejte...", |
Done : "Hotovo", |
PasteWordConfirm : "Jak je vidÄt, vkládaný text je kopírován z Wordu. Chcete jej pÅed vložením vyÄistit?", |
NotCompatiblePaste : "Tento pÅíkaz je dostupný pouze v Internet Exploreru verze 5.5 nebo vyÅ¡Å¡í. Chcete vložit text bez vyÄiÅ¡tÄní?", |
UnknownToolbarItem : "Neznámá položka panelu nástrojů \"%1\"", |
UnknownCommand : "Neznámý pÅíkaz \"%1\"", |
NotImplemented : "PÅíkaz není implementován", |
UnknownToolbarSet : "Panel nástrojů \"%1\" neexistuje", |
NoActiveX : "Nastavení bezpeÄnosti VaÅ¡eho prohlížeÄe omezuje funkÄnost nÄkterých jeho možností. Je tÅeba zapnout volbu \"SpouÅ¡tÄt ovládáací prvky ActiveX a moduly plug-in\", jinak nebude možné využívat vÅ¡echny dosputné schopnosti editoru.", |
BrowseServerBlocked : "Průzkumník zdrojů nelze otevÅít. ProvÄÅte, zda nemáte aktivováno blokování popup oken.", |
DialogBlocked : "Nelze otevÅít dialogové okno. ProvÄÅte, zda nemáte aktivováno blokování popup oken.", |
// Dialogs |
DlgBtnOK : "OK", |
DlgBtnCancel : "Storno", |
DlgBtnClose : "ZavÅít", |
DlgBtnBrowseServer : "Vybrat na serveru", |
DlgAdvancedTag : "RozÅ¡íÅené", |
DlgOpOther : "<Ostatní>", |
DlgInfoTab : "Info", |
DlgAlertUrl : "Prosím vložte URL", |
// General Dialogs Labels |
DlgGenNotSet : "<nenastaveno>", |
DlgGenId : "Id", |
DlgGenLangDir : "Orientace jazyka", |
DlgGenLangDirLtr : "Zleva do prava (LTR)", |
DlgGenLangDirRtl : "Zprava do leva (RTL)", |
DlgGenLangCode : "Kód jazyka", |
DlgGenAccessKey : "PÅístupový klíÄ", |
DlgGenName : "Jméno", |
DlgGenTabIndex : "PoÅadí prvku", |
DlgGenLongDescr : "Dlouhý popis URL", |
DlgGenClass : "TÅída stylu", |
DlgGenTitle : "Pomocný titulek", |
DlgGenContType : "Pomocný typ obsahu", |
DlgGenLinkCharset : "PÅiÅazená znaková sada", |
DlgGenStyle : "Styl", |
// Image Dialog |
DlgImgTitle : "Vlastnosti obrázku", |
DlgImgInfoTab : "Informace o obrázku", |
DlgImgBtnUpload : "Odeslat na server", |
DlgImgURL : "URL", |
DlgImgUpload : "Odeslat", |
DlgImgAlt : "Alternativní text", |
DlgImgWidth : "Å íÅka", |
DlgImgHeight : "VýÅ¡ka", |
DlgImgLockRatio : "Zámek", |
DlgBtnResetSize : "Původní velikost", |
DlgImgBorder : "Okraje", |
DlgImgHSpace : "H-mezera", |
DlgImgVSpace : "V-mezera", |
DlgImgAlign : "Zarovnání", |
DlgImgAlignLeft : "Vlevo", |
DlgImgAlignAbsBottom: "Zcela dolů", |
DlgImgAlignAbsMiddle: "Doprostřed", |
DlgImgAlignBaseline : "Na úÄaÅí", |
DlgImgAlignBottom : "Dolů", |
DlgImgAlignMiddle : "Na střed", |
DlgImgAlignRight : "Vpravo", |
DlgImgAlignTextTop : "Na horní okraj textu", |
DlgImgAlignTop : "Nahoru", |
DlgImgPreview : "Náhled", |
DlgImgAlertUrl : "Zadejte prosím URL obrázku", |
DlgImgLinkTab : "Odkaz", |
// Flash Dialog |
DlgFlashTitle : "Vlastnosti Flashe", |
DlgFlashChkPlay : "Automatické spuÅ¡tÄní", |
DlgFlashChkLoop : "Opakování", |
DlgFlashChkMenu : "Nabídka Flash", |
DlgFlashScale : "Zobrazit", |
DlgFlashScaleAll : "Zobrazit vše", |
DlgFlashScaleNoBorder : "Bez okraje", |
DlgFlashScaleFit : "Přizpůsobit", |
// Link Dialog |
DlgLnkWindowTitle : "Odkaz", |
DlgLnkInfoTab : "Informace o odkazu", |
DlgLnkTargetTab : "Cíl", |
DlgLnkType : "Typ odkazu", |
DlgLnkTypeURL : "URL", |
DlgLnkTypeAnchor : "Kotva v této stránce", |
DlgLnkTypeEMail : "E-Mail", |
DlgLnkProto : "Protokol", |
DlgLnkProtoOther : "<jiný>", |
DlgLnkURL : "URL", |
DlgLnkAnchorSel : "Vybrat kotvu", |
DlgLnkAnchorByName : "Podle jména kotvy", |
DlgLnkAnchorById : "Podle Id objektu", |
DlgLnkNoAnchors : "<Ve stránce žádná kotva není definována>", |
DlgLnkEMail : "E-Mailová adresa", |
DlgLnkEMailSubject : "PÅedmÄt zprávy", |
DlgLnkEMailBody : "TÄlo zprávy", |
DlgLnkUpload : "Odeslat", |
DlgLnkBtnUpload : "Odeslat na Server", |
DlgLnkTarget : "Cíl", |
DlgLnkTargetFrame : "<rámec>", |
DlgLnkTargetPopup : "<vyskakovací okno>", |
DlgLnkTargetBlank : "Nové okno (_blank)", |
DlgLnkTargetParent : "RodiÄovské okno (_parent)", |
DlgLnkTargetSelf : "Stejné okno (_self)", |
DlgLnkTargetTop : "Hlavní okno (_top)", |
DlgLnkTargetFrameName : "Název cílového rámu", |
DlgLnkPopWinName : "Název vyskakovacího okna", |
DlgLnkPopWinFeat : "Vlastnosti vyskakovacího okna", |
DlgLnkPopResize : "MÄnitelná velikost", |
DlgLnkPopLocation : "Panel umístÄní", |
DlgLnkPopMenu : "Panel nabídky", |
DlgLnkPopScroll : "Posuvníky", |
DlgLnkPopStatus : "Stavový Åádek", |
DlgLnkPopToolbar : "Panel nástrojů", |
DlgLnkPopFullScrn : "Celá obrazovka (IE)", |
DlgLnkPopDependent : "Závislost (Netscape)", |
DlgLnkPopWidth : "Å íÅka", |
DlgLnkPopHeight : "VýÅ¡ka", |
DlgLnkPopLeft : "Levý okraj", |
DlgLnkPopTop : "Horní okraj", |
DlnLnkMsgNoUrl : "Zadejte prosím URL odkazu", |
DlnLnkMsgNoEMail : "Zadejte prosím e-mailovou adresu", |
DlnLnkMsgNoAnchor : "Vyberte prosím kotvu", |
DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING |
// Color Dialog |
DlgColorTitle : "VýbÄr barvy", |
DlgColorBtnClear : "Vymazat", |
DlgColorHighlight : "ZvýraznÄná", |
DlgColorSelected : "Vybraná", |
// Smiley Dialog |
DlgSmileyTitle : "Vkládání smajlíků", |
// Special Character Dialog |
DlgSpecialCharTitle : "VýbÄr speciálního znaku", |
// Table Dialog |
DlgTableTitle : "Vlastnosti tabulky", |
DlgTableRows : "Åádky", |
DlgTableColumns : "Sloupce", |
DlgTableBorder : "OhraniÄení", |
DlgTableAlign : "Zarovnání", |
DlgTableAlignNotSet : "<nenastaveno>", |
DlgTableAlignLeft : "Vlevo", |
DlgTableAlignCenter : "Na střed", |
DlgTableAlignRight : "Vpravo", |
DlgTableWidth : "Å íÅka", |
DlgTableWidthPx : "bodů", |
DlgTableWidthPc : "procent", |
DlgTableHeight : "VýÅ¡ka", |
DlgTableCellSpace : "Vzdálenost bunÄk", |
DlgTableCellPad : "Odsazení obsahu", |
DlgTableCaption : "Popis", |
DlgTableSummary : "Souhrn", |
// Table Cell Dialog |
DlgCellTitle : "Vlastnosti buňky", |
DlgCellWidth : "Å íÅka", |
DlgCellWidthPx : "bodů", |
DlgCellWidthPc : "procent", |
DlgCellHeight : "VýÅ¡ka", |
DlgCellWordWrap : "Zalamování", |
DlgCellWordWrapNotSet : "<nenanstaveno>", |
DlgCellWordWrapYes : "Ano", |
DlgCellWordWrapNo : "Ne", |
DlgCellHorAlign : "Vodorovné zarovnání", |
DlgCellHorAlignNotSet : "<nenastaveno>", |
DlgCellHorAlignLeft : "Vlevo", |
DlgCellHorAlignCenter : "Na střed", |
DlgCellHorAlignRight: "Vpravo", |
DlgCellVerAlign : "Svislé zarovnání", |
DlgCellVerAlignNotSet : "<nenastaveno>", |
DlgCellVerAlignTop : "Nahoru", |
DlgCellVerAlignMiddle : "Doprostřed", |
DlgCellVerAlignBottom : "Dolů", |
DlgCellVerAlignBaseline : "Na úÄaÅí", |
DlgCellRowSpan : "SlouÄené Åádky", |
DlgCellCollSpan : "SlouÄené sloupce", |
DlgCellBackColor : "Barva pozadí", |
DlgCellBorderColor : "Barva ohraniÄení", |
DlgCellBtnSelect : "VýbÄr...", |
// Find Dialog |
DlgFindTitle : "Hledat", |
DlgFindFindBtn : "Hledat", |
DlgFindNotFoundMsg : "Hledaný text nebyl nalezen.", |
// Replace Dialog |
DlgReplaceTitle : "Nahradit", |
DlgReplaceFindLbl : "Co hledat:", |
DlgReplaceReplaceLbl : "Äím nahradit:", |
DlgReplaceCaseChk : "RozliÅ¡ovat velikost písma", |
DlgReplaceReplaceBtn : "Nahradit", |
DlgReplaceReplAllBtn : "Nahradit vše", |
DlgReplaceWordChk : "Pouze celá slova", |
// Paste Operations / Dialog |
PasteErrorPaste : "BezpeÄnostní nastavení VaÅ¡eho prohlížeÄe nedovolují editoru spustit funkci pro vložení textu ze schránky. Prosím vložte text ze schránky pomocí klávesnice (Ctrl+V).", |
PasteErrorCut : "BezpeÄnostní nastavení VaÅ¡eho prohlížeÄe nedovolují editoru spustit funkci pro vyjmutí zvoleného textu do schránky. Prosím vyjmÄte zvolený text do schránky pomocí klávesnice (Ctrl+X).", |
PasteErrorCopy : "BezpeÄnostní nastavení VaÅ¡eho prohlížeÄe nedovolují editoru spustit funkci pro kopírování zvoleného textu do schránky. Prosím zkopírujte zvolený text do schránky pomocí klávesnice (Ctrl+C).", |
PasteAsText : "Vložit jako Äistý text", |
PasteFromWord : "Vložit text z Wordu", |
DlgPasteMsg2 : "Do následujícího pole vložte požadovaný obsah pomocí klávesnice (<STRONG>Ctrl+V</STRONG>) a stisknÄte <STRONG>OK</STRONG>.", |
DlgPasteIgnoreFont : "Ignorovat písmo", |
DlgPasteRemoveStyles : "Odstranit styly", |
DlgPasteCleanBox : "Vyčistit", |
// Color Picker |
ColorAutomatic : "Automaticky", |
ColorMoreColors : "Více barev...", |
// Document Properties |
DocProps : "Vlastnosti dokumentu", |
// Anchor Dialog |
DlgAnchorTitle : "Vlastnosti záložky", |
DlgAnchorName : "Název záložky", |
DlgAnchorErrorName : "Zadejte prosím název záložky", |
// Speller Pages Dialog |
DlgSpellNotInDic : "Není ve slovníku", |
DlgSpellChangeTo : "Změnit na", |
DlgSpellBtnIgnore : "Přeskočit", |
DlgSpellBtnIgnoreAll : "Přeskakovat vše", |
DlgSpellBtnReplace : "Zaměnit", |
DlgSpellBtnReplaceAll : "Zaměňovat vše", |
DlgSpellBtnUndo : "Zpět", |
DlgSpellNoSuggestions : "- žádné návrhy -", |
DlgSpellProgress : "Probíhá kontrola pravopisu...", |
DlgSpellNoMispell : "Kontrola pravopisu dokonÄena: Žádné pravopisné chyby nenalezeny", |
DlgSpellNoChanges : "Kontrola pravopisu dokončena: Beze změn", |
DlgSpellOneChange : "Kontrola pravopisu dokončena: Jedno slovo změněno", |
DlgSpellManyChanges : "Kontrola pravopisu dokončena: %1 slov změněno", |
IeSpellDownload : "Kontrola pravopisu není nainstalována. Chcete ji nyní stáhnout?", |
// Button Dialog |
DlgButtonText : "Popisek", |
DlgButtonType : "Typ", |
DlgButtonTypeBtn : "Button", //MISSING |
DlgButtonTypeSbm : "Submit", //MISSING |
DlgButtonTypeRst : "Reset", //MISSING |
// Checkbox and Radio Button Dialogs |
DlgCheckboxName : "Název", |
DlgCheckboxValue : "Hodnota", |
DlgCheckboxSelected : "Zaškrtnuto", |
// Form Dialog |
DlgFormName : "Název", |
DlgFormAction : "Akce", |
DlgFormMethod : "Metoda", |
// Select Field Dialog |
DlgSelectName : "Název", |
DlgSelectValue : "Hodnota", |
DlgSelectSize : "Velikost", |
DlgSelectLines : "Åádků", |
DlgSelectChkMulti : "Povolit mnohonásobné výbÄry", |
DlgSelectOpAvail : "Dostupná nastavení", |
DlgSelectOpText : "Text", |
DlgSelectOpValue : "Hodnota", |
DlgSelectBtnAdd : "Přidat", |
DlgSelectBtnModify : "Změnit", |
DlgSelectBtnUp : "Nahoru", |
DlgSelectBtnDown : "Dolů", |
DlgSelectBtnSetValue : "Nastavit jako vybranou hodnotu", |
DlgSelectBtnDelete : "Smazat", |
// Textarea Dialog |
DlgTextareaName : "Název", |
DlgTextareaCols : "Sloupců", |
DlgTextareaRows : "Åádků", |
// Text Field Dialog |
DlgTextName : "Název", |
DlgTextValue : "Hodnota", |
DlgTextCharWidth : "Å íÅka ve znacích", |
DlgTextMaxChars : "Maximální poÄet znaků", |
DlgTextType : "Typ", |
DlgTextTypeText : "Text", |
DlgTextTypePass : "Heslo", |
// Hidden Field Dialog |
DlgHiddenName : "Název", |
DlgHiddenValue : "Hodnota", |
// Bulleted List Dialog |
BulletedListProp : "Vlastnosti odrážek", |
NumberedListProp : "Vlastnosti Äíslovaného seznamu", |
DlgLstStart : "Start", //MISSING |
DlgLstType : "Typ", |
DlgLstTypeCircle : "Kružnice", |
DlgLstTypeDisc : "Kruh", |
DlgLstTypeSquare : "Čtverec", |
DlgLstTypeNumbers : "Äísla (1, 2, 3)", |
DlgLstTypeLCase : "Malá písmena (a, b, c)", |
DlgLstTypeUCase : "Velká písmena (A, B, C)", |
DlgLstTypeSRoman : "Malé Åímská Äíslice (i, ii, iii)", |
DlgLstTypeLRoman : "Velké Åímské Äíslice (I, II, III)", |
// Document Properties Dialog |
DlgDocGeneralTab : "Obecné", |
DlgDocBackTab : "Pozadí", |
DlgDocColorsTab : "Barvy a okraje", |
DlgDocMetaTab : "Metadata", |
DlgDocPageTitle : "Titulek stránky", |
DlgDocLangDir : "Směr jazyku", |
DlgDocLangDirLTR : "Zleva do prava ", |
DlgDocLangDirRTL : "Zprava doleva", |
DlgDocLangCode : "Kód jazyku", |
DlgDocCharSet : "Znaková sada", |
DlgDocCharSetCE : "Central European", //MISSING |
DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING |
DlgDocCharSetCR : "Cyrillic", //MISSING |
DlgDocCharSetGR : "Greek", //MISSING |
DlgDocCharSetJP : "Japanese", //MISSING |
DlgDocCharSetKR : "Korean", //MISSING |
DlgDocCharSetTR : "Turkish", //MISSING |
DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING |
DlgDocCharSetWE : "Western European", //MISSING |
DlgDocCharSetOther : "DalÅ¡í znaková sada", |
DlgDocDocType : "Typ dokumentu", |
DlgDocDocTypeOther : "Jiný typ dokumetu", |
DlgDocIncXHTML : "Zahrnou deklarace XHTML", |
DlgDocBgColor : "Barva pozadí", |
DlgDocBgImage : "URL obrázku na pozadí", |
DlgDocBgNoScroll : "Nerolovatelné pozadí", |
DlgDocCText : "Text", |
DlgDocCLink : "Odkaz", |
DlgDocCVisited : "NavÅ¡tívený odkaz", |
DlgDocCActive : "Vybraný odkaz", |
DlgDocMargins : "Okraje stránky", |
DlgDocMaTop : "Horní", |
DlgDocMaLeft : "Levý", |
DlgDocMaRight : "Pravý", |
DlgDocMaBottom : "Dolní", |
DlgDocMeIndex : "KlíÄová slova (oddÄlená Äárkou)", |
DlgDocMeDescr : "Popis dokumentu", |
DlgDocMeAuthor : "Autor", |
DlgDocMeCopy : "Autorská práva", |
DlgDocPreview : "Náhled", |
// Templates Dialog |
Templates : "Šablony", |
DlgTemplatesTitle : "Šablony obsahu", |
DlgTemplatesSelMsg : "Prosím zvolte Å¡ablonu pro otevÅení v editoru<br>(aktuální obsah editoru bude ztracen):", |
DlgTemplatesLoading : "Nahrávám pÅeheld Å¡ablon. Prosím Äekejte...", |
DlgTemplatesNoTpl : "(Není definována žádná Å¡ablona)", |
DlgTemplatesReplace : "Replace actual contents", //MISSING |
// About Dialog |
DlgAboutAboutTab : "O aplikaci", |
DlgAboutBrowserInfoTab : "Informace o prohlížeÄi", |
DlgAboutLicenseTab : "Licence", |
DlgAboutVersion : "verze", |
DlgAboutLicense : "Licencováno pod GNU Lesser General Public License", |
DlgAboutInfo : "Více informací získáte na" |
} |
/branches/v1.0-menes/api/fckeditor/editor/lang/en-au.js |
---|
New file |
0,0 → 1,502 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: en-au.js |
* English (Australia) language file. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
* Christopher Dawes (fckeditor@dawes.id.au) |
*/ |
var FCKLang = |
{ |
// Language direction : "ltr" (left to right) or "rtl" (right to left). |
Dir : "ltr", |
ToolbarCollapse : "Collapse Toolbar", |
ToolbarExpand : "Expand Toolbar", |
// Toolbar Items and Context Menu |
Save : "Save", |
NewPage : "New Page", |
Preview : "Preview", |
Cut : "Cut", |
Copy : "Copy", |
Paste : "Paste", |
PasteText : "Paste as plain text", |
PasteWord : "Paste from Word", |
Print : "Print", |
SelectAll : "Select All", |
RemoveFormat : "Remove Format", |
InsertLinkLbl : "Link", |
InsertLink : "Insert/Edit Link", |
RemoveLink : "Remove Link", |
Anchor : "Insert/Edit Anchor", |
InsertImageLbl : "Image", |
InsertImage : "Insert/Edit Image", |
InsertFlashLbl : "Flash", |
InsertFlash : "Insert/Edit Flash", |
InsertTableLbl : "Table", |
InsertTable : "Insert/Edit Table", |
InsertLineLbl : "Line", |
InsertLine : "Insert Horizontal Line", |
InsertSpecialCharLbl: "Special Character", |
InsertSpecialChar : "Insert Special Character", |
InsertSmileyLbl : "Smiley", |
InsertSmiley : "Insert Smiley", |
About : "About FCKeditor", |
Bold : "Bold", |
Italic : "Italic", |
Underline : "Underline", |
StrikeThrough : "Strike Through", |
Subscript : "Subscript", |
Superscript : "Superscript", |
LeftJustify : "Left Justify", |
CenterJustify : "Centre Justify", |
RightJustify : "Right Justify", |
BlockJustify : "Block Justify", |
DecreaseIndent : "Decrease Indent", |
IncreaseIndent : "Increase Indent", |
Undo : "Undo", |
Redo : "Redo", |
NumberedListLbl : "Numbered List", |
NumberedList : "Insert/Remove Numbered List", |
BulletedListLbl : "Bulleted List", |
BulletedList : "Insert/Remove Bulleted List", |
ShowTableBorders : "Show Table Borders", |
ShowDetails : "Show Details", |
Style : "Style", |
FontFormat : "Format", |
Font : "Font", |
FontSize : "Size", |
TextColor : "Text Colour", |
BGColor : "Background Colour", |
Source : "Source", |
Find : "Find", |
Replace : "Replace", |
SpellCheck : "Check Spelling", |
UniversalKeyboard : "Universal Keyboard", |
PageBreakLbl : "Page Break", |
PageBreak : "Insert Page Break", |
Form : "Form", |
Checkbox : "Checkbox", |
RadioButton : "Radio Button", |
TextField : "Text Field", |
Textarea : "Textarea", |
HiddenField : "Hidden Field", |
Button : "Button", |
SelectionField : "Selection Field", |
ImageButton : "Image Button", |
FitWindow : "Maximize the editor size", |
// Context Menu |
EditLink : "Edit Link", |
CellCM : "Cell", |
RowCM : "Row", |
ColumnCM : "Column", |
InsertRow : "Insert Row", |
DeleteRows : "Delete Rows", |
InsertColumn : "Insert Column", |
DeleteColumns : "Delete Columns", |
InsertCell : "Insert Cell", |
DeleteCells : "Delete Cells", |
MergeCells : "Merge Cells", |
SplitCell : "Split Cell", |
TableDelete : "Delete Table", |
CellProperties : "Cell Properties", |
TableProperties : "Table Properties", |
ImageProperties : "Image Properties", |
FlashProperties : "Flash Properties", |
AnchorProp : "Anchor Properties", |
ButtonProp : "Button Properties", |
CheckboxProp : "Checkbox Properties", |
HiddenFieldProp : "Hidden Field Properties", |
RadioButtonProp : "Radio Button Properties", |
ImageButtonProp : "Image Button Properties", |
TextFieldProp : "Text Field Properties", |
SelectionFieldProp : "Selection Field Properties", |
TextareaProp : "Textarea Properties", |
FormProp : "Form Properties", |
FontFormats : "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Normal (DIV)", |
// Alerts and Messages |
ProcessingXHTML : "Processing XHTML. Please wait...", |
Done : "Done", |
PasteWordConfirm : "The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?", |
NotCompatiblePaste : "This command is available for Internet Explorer version 5.5 or more. Do you want to paste without cleaning?", |
UnknownToolbarItem : "Unknown toolbar item \"%1\"", |
UnknownCommand : "Unknown command name \"%1\"", |
NotImplemented : "Command not implemented", |
UnknownToolbarSet : "Toolbar set \"%1\" doesn't exist", |
NoActiveX : "Your browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.", |
BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.", |
DialogBlocked : "It was not possible to open the dialog window. Make sure all popup blockers are disabled.", |
// Dialogs |
DlgBtnOK : "OK", |
DlgBtnCancel : "Cancel", |
DlgBtnClose : "Close", |
DlgBtnBrowseServer : "Browse Server", |
DlgAdvancedTag : "Advanced", |
DlgOpOther : "<Other>", |
DlgInfoTab : "Info", |
DlgAlertUrl : "Please insert the URL", |
// General Dialogs Labels |
DlgGenNotSet : "<not set>", |
DlgGenId : "Id", |
DlgGenLangDir : "Language Direction", |
DlgGenLangDirLtr : "Left to Right (LTR)", |
DlgGenLangDirRtl : "Right to Left (RTL)", |
DlgGenLangCode : "Language Code", |
DlgGenAccessKey : "Access Key", |
DlgGenName : "Name", |
DlgGenTabIndex : "Tab Index", |
DlgGenLongDescr : "Long Description URL", |
DlgGenClass : "Stylesheet Classes", |
DlgGenTitle : "Advisory Title", |
DlgGenContType : "Advisory Content Type", |
DlgGenLinkCharset : "Linked Resource Charset", |
DlgGenStyle : "Style", |
// Image Dialog |
DlgImgTitle : "Image Properties", |
DlgImgInfoTab : "Image Info", |
DlgImgBtnUpload : "Send it to the Server", |
DlgImgURL : "URL", |
DlgImgUpload : "Upload", |
DlgImgAlt : "Alternative Text", |
DlgImgWidth : "Width", |
DlgImgHeight : "Height", |
DlgImgLockRatio : "Lock Ratio", |
DlgBtnResetSize : "Reset Size", |
DlgImgBorder : "Border", |
DlgImgHSpace : "HSpace", |
DlgImgVSpace : "VSpace", |
DlgImgAlign : "Align", |
DlgImgAlignLeft : "Left", |
DlgImgAlignAbsBottom: "Abs Bottom", |
DlgImgAlignAbsMiddle: "Abs Middle", |
DlgImgAlignBaseline : "Baseline", |
DlgImgAlignBottom : "Bottom", |
DlgImgAlignMiddle : "Middle", |
DlgImgAlignRight : "Right", |
DlgImgAlignTextTop : "Text Top", |
DlgImgAlignTop : "Top", |
DlgImgPreview : "Preview", |
DlgImgAlertUrl : "Please type the image URL", |
DlgImgLinkTab : "Link", |
// Flash Dialog |
DlgFlashTitle : "Flash Properties", |
DlgFlashChkPlay : "Auto Play", |
DlgFlashChkLoop : "Loop", |
DlgFlashChkMenu : "Enable Flash Menu", |
DlgFlashScale : "Scale", |
DlgFlashScaleAll : "Show all", |
DlgFlashScaleNoBorder : "No Border", |
DlgFlashScaleFit : "Exact Fit", |
// Link Dialog |
DlgLnkWindowTitle : "Link", |
DlgLnkInfoTab : "Link Info", |
DlgLnkTargetTab : "Target", |
DlgLnkType : "Link Type", |
DlgLnkTypeURL : "URL", |
DlgLnkTypeAnchor : "Link to anchor in the text", |
DlgLnkTypeEMail : "E-Mail", |
DlgLnkProto : "Protocol", |
DlgLnkProtoOther : "<other>", |
DlgLnkURL : "URL", |
DlgLnkAnchorSel : "Select an Anchor", |
DlgLnkAnchorByName : "By Anchor Name", |
DlgLnkAnchorById : "By Element Id", |
DlgLnkNoAnchors : "<No anchors available in the document>", |
DlgLnkEMail : "E-Mail Address", |
DlgLnkEMailSubject : "Message Subject", |
DlgLnkEMailBody : "Message Body", |
DlgLnkUpload : "Upload", |
DlgLnkBtnUpload : "Send it to the Server", |
DlgLnkTarget : "Target", |
DlgLnkTargetFrame : "<frame>", |
DlgLnkTargetPopup : "<popup window>", |
DlgLnkTargetBlank : "New Window (_blank)", |
DlgLnkTargetParent : "Parent Window (_parent)", |
DlgLnkTargetSelf : "Same Window (_self)", |
DlgLnkTargetTop : "Topmost Window (_top)", |
DlgLnkTargetFrameName : "Target Frame Name", |
DlgLnkPopWinName : "Popup Window Name", |
DlgLnkPopWinFeat : "Popup Window Features", |
DlgLnkPopResize : "Resizable", |
DlgLnkPopLocation : "Location Bar", |
DlgLnkPopMenu : "Menu Bar", |
DlgLnkPopScroll : "Scroll Bars", |
DlgLnkPopStatus : "Status Bar", |
DlgLnkPopToolbar : "Toolbar", |
DlgLnkPopFullScrn : "Full Screen (IE)", |
DlgLnkPopDependent : "Dependent (Netscape)", |
DlgLnkPopWidth : "Width", |
DlgLnkPopHeight : "Height", |
DlgLnkPopLeft : "Left Position", |
DlgLnkPopTop : "Top Position", |
DlnLnkMsgNoUrl : "Please type the link URL", |
DlnLnkMsgNoEMail : "Please type the e-mail address", |
DlnLnkMsgNoAnchor : "Please select an anchor", |
DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", |
// Color Dialog |
DlgColorTitle : "Select Colour", |
DlgColorBtnClear : "Clear", |
DlgColorHighlight : "Highlight", |
DlgColorSelected : "Selected", |
// Smiley Dialog |
DlgSmileyTitle : "Insert a Smiley", |
// Special Character Dialog |
DlgSpecialCharTitle : "Select Special Character", |
// Table Dialog |
DlgTableTitle : "Table Properties", |
DlgTableRows : "Rows", |
DlgTableColumns : "Columns", |
DlgTableBorder : "Border size", |
DlgTableAlign : "Alignment", |
DlgTableAlignNotSet : "<Not set>", |
DlgTableAlignLeft : "Left", |
DlgTableAlignCenter : "Centre", |
DlgTableAlignRight : "Right", |
DlgTableWidth : "Width", |
DlgTableWidthPx : "pixels", |
DlgTableWidthPc : "percent", |
DlgTableHeight : "Height", |
DlgTableCellSpace : "Cell spacing", |
DlgTableCellPad : "Cell padding", |
DlgTableCaption : "Caption", |
DlgTableSummary : "Summary", |
// Table Cell Dialog |
DlgCellTitle : "Cell Properties", |
DlgCellWidth : "Width", |
DlgCellWidthPx : "pixels", |
DlgCellWidthPc : "percent", |
DlgCellHeight : "Height", |
DlgCellWordWrap : "Word Wrap", |
DlgCellWordWrapNotSet : "<Not set>", |
DlgCellWordWrapYes : "Yes", |
DlgCellWordWrapNo : "No", |
DlgCellHorAlign : "Horizontal Alignment", |
DlgCellHorAlignNotSet : "<Not set>", |
DlgCellHorAlignLeft : "Left", |
DlgCellHorAlignCenter : "Centre", |
DlgCellHorAlignRight: "Right", |
DlgCellVerAlign : "Vertical Alignment", |
DlgCellVerAlignNotSet : "<Not set>", |
DlgCellVerAlignTop : "Top", |
DlgCellVerAlignMiddle : "Middle", |
DlgCellVerAlignBottom : "Bottom", |
DlgCellVerAlignBaseline : "Baseline", |
DlgCellRowSpan : "Rows Span", |
DlgCellCollSpan : "Columns Span", |
DlgCellBackColor : "Background Colour", |
DlgCellBorderColor : "Border Colour", |
DlgCellBtnSelect : "Select...", |
// Find Dialog |
DlgFindTitle : "Find", |
DlgFindFindBtn : "Find", |
DlgFindNotFoundMsg : "The specified text was not found.", |
// Replace Dialog |
DlgReplaceTitle : "Replace", |
DlgReplaceFindLbl : "Find what:", |
DlgReplaceReplaceLbl : "Replace with:", |
DlgReplaceCaseChk : "Match case", |
DlgReplaceReplaceBtn : "Replace", |
DlgReplaceReplAllBtn : "Replace All", |
DlgReplaceWordChk : "Match whole word", |
// Paste Operations / Dialog |
PasteErrorPaste : "Your browser security settings don't permit the editor to automatically execute pasting operations. Please use the keyboard for that (Ctrl+V).", |
PasteErrorCut : "Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl+X).", |
PasteErrorCopy : "Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl+C).", |
PasteAsText : "Paste as Plain Text", |
PasteFromWord : "Paste from Word", |
DlgPasteMsg2 : "Please paste inside the following box using the keyboard (<STRONG>Ctrl+V</STRONG>) and hit <STRONG>OK</STRONG>.", |
DlgPasteIgnoreFont : "Ignore Font Face definitions", |
DlgPasteRemoveStyles : "Remove Styles definitions", |
DlgPasteCleanBox : "Clean Up Box", |
// Color Picker |
ColorAutomatic : "Automatic", |
ColorMoreColors : "More Colours...", |
// Document Properties |
DocProps : "Document Properties", |
// Anchor Dialog |
DlgAnchorTitle : "Anchor Properties", |
DlgAnchorName : "Anchor Name", |
DlgAnchorErrorName : "Please type the anchor name", |
// Speller Pages Dialog |
DlgSpellNotInDic : "Not in dictionary", |
DlgSpellChangeTo : "Change to", |
DlgSpellBtnIgnore : "Ignore", |
DlgSpellBtnIgnoreAll : "Ignore All", |
DlgSpellBtnReplace : "Replace", |
DlgSpellBtnReplaceAll : "Replace All", |
DlgSpellBtnUndo : "Undo", |
DlgSpellNoSuggestions : "- No suggestions -", |
DlgSpellProgress : "Spell check in progress...", |
DlgSpellNoMispell : "Spell check complete: No misspellings found", |
DlgSpellNoChanges : "Spell check complete: No words changed", |
DlgSpellOneChange : "Spell check complete: One word changed", |
DlgSpellManyChanges : "Spell check complete: %1 words changed", |
IeSpellDownload : "Spell checker not installed. Do you want to download it now?", |
// Button Dialog |
DlgButtonText : "Text (Value)", |
DlgButtonType : "Type", |
DlgButtonTypeBtn : "Button", |
DlgButtonTypeSbm : "Submit", |
DlgButtonTypeRst : "Reset", |
// Checkbox and Radio Button Dialogs |
DlgCheckboxName : "Name", |
DlgCheckboxValue : "Value", |
DlgCheckboxSelected : "Selected", |
// Form Dialog |
DlgFormName : "Name", |
DlgFormAction : "Action", |
DlgFormMethod : "Method", |
// Select Field Dialog |
DlgSelectName : "Name", |
DlgSelectValue : "Value", |
DlgSelectSize : "Size", |
DlgSelectLines : "lines", |
DlgSelectChkMulti : "Allow multiple selections", |
DlgSelectOpAvail : "Available Options", |
DlgSelectOpText : "Text", |
DlgSelectOpValue : "Value", |
DlgSelectBtnAdd : "Add", |
DlgSelectBtnModify : "Modify", |
DlgSelectBtnUp : "Up", |
DlgSelectBtnDown : "Down", |
DlgSelectBtnSetValue : "Set as selected value", |
DlgSelectBtnDelete : "Delete", |
// Textarea Dialog |
DlgTextareaName : "Name", |
DlgTextareaCols : "Columns", |
DlgTextareaRows : "Rows", |
// Text Field Dialog |
DlgTextName : "Name", |
DlgTextValue : "Value", |
DlgTextCharWidth : "Character Width", |
DlgTextMaxChars : "Maximum Characters", |
DlgTextType : "Type", |
DlgTextTypeText : "Text", |
DlgTextTypePass : "Password", |
// Hidden Field Dialog |
DlgHiddenName : "Name", |
DlgHiddenValue : "Value", |
// Bulleted List Dialog |
BulletedListProp : "Bulleted List Properties", |
NumberedListProp : "Numbered List Properties", |
DlgLstStart : "Start", |
DlgLstType : "Type", |
DlgLstTypeCircle : "Circle", |
DlgLstTypeDisc : "Disc", |
DlgLstTypeSquare : "Square", |
DlgLstTypeNumbers : "Numbers (1, 2, 3)", |
DlgLstTypeLCase : "Lowercase Letters (a, b, c)", |
DlgLstTypeUCase : "Uppercase Letters (A, B, C)", |
DlgLstTypeSRoman : "Small Roman Numerals (i, ii, iii)", |
DlgLstTypeLRoman : "Large Roman Numerals (I, II, III)", |
// Document Properties Dialog |
DlgDocGeneralTab : "General", |
DlgDocBackTab : "Background", |
DlgDocColorsTab : "Colours and Margins", |
DlgDocMetaTab : "Meta Data", |
DlgDocPageTitle : "Page Title", |
DlgDocLangDir : "Language Direction", |
DlgDocLangDirLTR : "Left to Right (LTR)", |
DlgDocLangDirRTL : "Right to Left (RTL)", |
DlgDocLangCode : "Language Code", |
DlgDocCharSet : "Character Set Encoding", |
DlgDocCharSetCE : "Central European", |
DlgDocCharSetCT : "Chinese Traditional (Big5)", |
DlgDocCharSetCR : "Cyrillic", |
DlgDocCharSetGR : "Greek", |
DlgDocCharSetJP : "Japanese", |
DlgDocCharSetKR : "Korean", |
DlgDocCharSetTR : "Turkish", |
DlgDocCharSetUN : "Unicode (UTF-8)", |
DlgDocCharSetWE : "Western European", |
DlgDocCharSetOther : "Other Character Set Encoding", |
DlgDocDocType : "Document Type Heading", |
DlgDocDocTypeOther : "Other Document Type Heading", |
DlgDocIncXHTML : "Include XHTML Declarations", |
DlgDocBgColor : "Background Colour", |
DlgDocBgImage : "Background Image URL", |
DlgDocBgNoScroll : "Nonscrolling Background", |
DlgDocCText : "Text", |
DlgDocCLink : "Link", |
DlgDocCVisited : "Visited Link", |
DlgDocCActive : "Active Link", |
DlgDocMargins : "Page Margins", |
DlgDocMaTop : "Top", |
DlgDocMaLeft : "Left", |
DlgDocMaRight : "Right", |
DlgDocMaBottom : "Bottom", |
DlgDocMeIndex : "Document Indexing Keywords (comma separated)", |
DlgDocMeDescr : "Document Description", |
DlgDocMeAuthor : "Author", |
DlgDocMeCopy : "Copyright", |
DlgDocPreview : "Preview", |
// Templates Dialog |
Templates : "Templates", |
DlgTemplatesTitle : "Content Templates", |
DlgTemplatesSelMsg : "Please select the template to open in the editor<br>(the actual contents will be lost):", |
DlgTemplatesLoading : "Loading templates list. Please wait...", |
DlgTemplatesNoTpl : "(No templates defined)", |
DlgTemplatesReplace : "Replace actual contents", |
// About Dialog |
DlgAboutAboutTab : "About", |
DlgAboutBrowserInfoTab : "Browser Info", |
DlgAboutLicenseTab : "License", |
DlgAboutVersion : "version", |
DlgAboutLicense : "Licensed under the terms of the GNU Lesser General Public License", |
DlgAboutInfo : "For further information go to" |
} |
/branches/v1.0-menes/api/fckeditor/editor/lang/km.js |
---|
New file |
0,0 → 1,501 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: km.js |
* Khmer language file. |
* |
* File Authors: |
* Chay Sengtha (sengtha@e-khmer.com - http://translate.e-khmer.net) |
*/ |
var FCKLang = |
{ |
// Language direction : "ltr" (left to right) or "rtl" (right to left). |
Dir : "ltr", |
ToolbarCollapse : "បង្រួមរបាឧបរកណ៍", |
ToolbarExpand : "ពង្រីករបាឧបរណ៍", |
// Toolbar Items and Context Menu |
Save : "រក្សាទុក", |
NewPage : "ទំព័រថ្មី", |
Preview : "មើលសាកល្បង", |
Cut : "កាត់យក", |
Copy : "ចំលងយក", |
Paste : "ចំលងដាក់", |
PasteText : "ចំលងដាក់ជាអត្ថបទធម្មតា", |
PasteWord : "ចំលងដាក់ពី Word", |
Print : "បោះពុម្ភ", |
SelectAll : "ជ្រើសរើសទាំងអស់", |
RemoveFormat : "លប់ចោល ការរចនា", |
InsertLinkLbl : "ឈ្នាប់", |
InsertLink : "បន្ថែម/កែប្រែ ឈ្នាប់", |
RemoveLink : "លប់ឈ្នាប់", |
Anchor : "បន្ថែម/កែប្រែ យុថ្កា", |
InsertImageLbl : "រូបភាព", |
InsertImage : "បន្ថែម/កែប្រែ រូបភាព", |
InsertFlashLbl : "Flash", |
InsertFlash : "បន្ថែម/កែប្រែ Flash", |
InsertTableLbl : "តារាង", |
InsertTable : "បន្ថែម/កែប្រែ តារាង", |
InsertLineLbl : "បន្ទាត់", |
InsertLine : "បន្ថែមបន្ទាត់ផ្តេក", |
InsertSpecialCharLbl: "អក្សរពិសេស", |
InsertSpecialChar : "បន្ថែមអក្សរពិសេស", |
InsertSmileyLbl : "រូបភាព", |
InsertSmiley : "បន្ថែម រូបភាព", |
About : "អំពី FCKeditor", |
Bold : "អក្សរដិតធំ", |
Italic : "អក្សរផ្តេក", |
Underline : "ដិតបន្ទាត់ពីក្រោមអក្សរ", |
StrikeThrough : "ដិតបន្ទាត់ពាក់កណ្តាលអក្សរ", |
Subscript : "អក្សរតូចក្រោម", |
Superscript : "អក្សរតូចលើ", |
LeftJustify : "តំរឹមឆ្វេង", |
CenterJustify : "តំរឹមកណ្តាល", |
RightJustify : "តំរឹមស្តាំ", |
BlockJustify : "តំរឹមសងខាង", |
DecreaseIndent : "បន្ថយការចូលបន្ទាត់", |
IncreaseIndent : "បន្ថែមការចូលបន្ទាត់", |
Undo : "សារឡើងវិញ", |
Redo : "ធ្វើឡើងវិញ", |
NumberedListLbl : "បញ្ជីជាអក្សរ", |
NumberedList : "បន្ថែម/លប់ បញ្ជីជាអក្សរ", |
BulletedListLbl : "បញ្ជីជារង្វង់មូល", |
BulletedList : "បន្ថែម/លប់ បញ្ជីជារង្វង់មូល", |
ShowTableBorders : "បង្ហាញស៊ុមតារាង", |
ShowDetails : "បង្ហាញពិស្តារ", |
Style : "ម៉ូត", |
FontFormat : "រចនា", |
Font : "ហ្វុង", |
FontSize : "ទំហំ", |
TextColor : "ពណ៌អក្សរ", |
BGColor : "ពណ៌ផ្ទៃខាងក្រោយ", |
Source : "កូត", |
Find : "ស្វែងរក", |
Replace : "ជំនួស", |
SpellCheck : "ពិនិត្យអក្ខរាវិរុទ្ធ", |
UniversalKeyboard : "ក្តារពុម្ភអក្សរសកល", |
PageBreakLbl : "ការផ្តាច់ទំព័រ", |
PageBreak : "បន្ថែម ការផ្តាច់ទំព័រ", |
Form : "បែបបទ", |
Checkbox : "ប្រអប់ជ្រើសរើស", |
RadioButton : "ប៉ូតុនរង្វង់មូល", |
TextField : "ជួរសរសេរអត្ថបទ", |
Textarea : "តំបន់សរសេរអត្ថបទ", |
HiddenField : "ជួរលាក់", |
Button : "ប៉ូតុន", |
SelectionField : "ជួរជ្រើសរើស", |
ImageButton : "ប៉ូតុនរូបភាព", |
FitWindow : "Maximize the editor size", //MISSING |
// Context Menu |
EditLink : "កែប្រែឈ្នាប់", |
CellCM : "Cell", //MISSING |
RowCM : "Row", //MISSING |
ColumnCM : "Column", //MISSING |
InsertRow : "បន្ថែមជួរផ្តេក", |
DeleteRows : "លប់ជួរផ្តេក", |
InsertColumn : "បន្ថែមជួរឈរ", |
DeleteColumns : "លប់ជួរឈរ", |
InsertCell : "បន្ថែម សែល", |
DeleteCells : "លប់សែល", |
MergeCells : "បញ្ជូលសែល", |
SplitCell : "ផ្តាច់សែល", |
TableDelete : "លប់តារាង", |
CellProperties : "ការកំណត់សែល", |
TableProperties : "ការកំណត់តារាង", |
ImageProperties : "ការកំណត់រូបភាព", |
FlashProperties : "ការកំណត់ Flash", |
AnchorProp : "ការកំណត់យុថ្កា", |
ButtonProp : "ការកំណត់ ប៉ូតុន", |
CheckboxProp : "ការកំណត់ប្រអប់ជ្រើសរើស", |
HiddenFieldProp : "ការកំណត់ជួរលាក់", |
RadioButtonProp : "ការកំណត់ប៉ូតុនរង្វង់", |
ImageButtonProp : "ការកំណត់ប៉ូតុនរូបភាព", |
TextFieldProp : "ការកំណត់ជួរអត្ថបទ", |
SelectionFieldProp : "ការកំណត់ជួរជ្រើសរើស", |
TextareaProp : "ការកំណត់កន្លែងសរសេរអត្ថបទ", |
FormProp : "ការកំណត់បែបបទ", |
FontFormats : "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Normal (DIV)", |
// Alerts and Messages |
ProcessingXHTML : "កំពុងដំណើរការ XHTML ។ សូមរងចាំ...", |
Done : "ចប់រួចរាល់", |
PasteWordConfirm : "អត្ថបទដែលលោកអ្នកបំរុងចំលងដាក់ ហាក់បីដូចជាត្រូវចំលងមកពីកម្មវិធីWord។ តើលោកអ្នកចង់សំអាតមុនចំលងអត្ថបទដាក់ទេ?", |
NotCompatiblePaste : "ពាក្យបញ្ជានេះប្រើបានតែជាមួយ Internet Explorer កំរិត 5.5 រឺ លើសនេះ ។ តើលោកអ្នកចង់ចំលងដាក់ដោយមិនចាំបាច់សំអាតទេ?", |
UnknownToolbarItem : "វត្ថុលើរបាឧបរកណ៍ មិនស្គាល់ \"%1\"", |
UnknownCommand : "ឈ្មោះពាក្យបញ្ជា មិនស្គាល់ \"%1\"", |
NotImplemented : "ពាក្យបញ្ជា មិនបានអនុវត្ត", |
UnknownToolbarSet : "របាឧបរកណ៍ \"%1\" ពុំមាន ។", |
NoActiveX : "ការកំណត់សុវត្ថភាពរបស់កម្មវិធីរុករករបស់លោកអ្នក នេះអាចធ្វើអោយលោកអ្នកមិនអាចប្រើមុខងារខ្លះរបស់កម្មវិធីតាក់តែងអត្ថបទនេះ ។ លោកអ្នកត្រូវកំណត់អោយ \"ActiveX និងកម្មវិធីជំនួយក្នុង (plug-ins)\" អោយដំណើរការ ។ លោកអ្នកអាចជួបប្រទះនឹង បញ្ហា ព្រមជាមួយនឹងការបាត់បង់មុខងារណាមួយរបស់កម្មវិធីតាក់តែងអត្ថបទនេះ ។", |
BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.", //MISSING |
DialogBlocked : "វីនដូវមិនអាចបើកបានទេ ។ សូមពិនិត្យចំពោះកម្មវិធីបិទ វីនដូវលោត (popup) ថាតើវាដំណើរការរឺទេ ។", |
// Dialogs |
DlgBtnOK : "យល់ព្រម", |
DlgBtnCancel : "មិនយល់ព្រម", |
DlgBtnClose : "បិទ", |
DlgBtnBrowseServer : "មើល", |
DlgAdvancedTag : "កំរិតខ្ពស់", |
DlgOpOther : "<ផ្សេងទៅត>", |
DlgInfoTab : "ពត៌មាន", |
DlgAlertUrl : "សូមសរសេរ URL", |
// General Dialogs Labels |
DlgGenNotSet : "<មិនមែន>", |
DlgGenId : "Id", |
DlgGenLangDir : "ទិសដៅភាសា", |
DlgGenLangDirLtr : "ពីឆ្វេងទៅស្តាំ(LTR)", |
DlgGenLangDirRtl : "ពីស្តាំទៅឆ្វេង(RTL)", |
DlgGenLangCode : "លេខកូតភាសា", |
DlgGenAccessKey : "ឃី សំរាប់ចូល", |
DlgGenName : "ឈ្មោះ", |
DlgGenTabIndex : "លេខ Tab", |
DlgGenLongDescr : "អធិប្បាយ URL វែង", |
DlgGenClass : "Stylesheet Classes", |
DlgGenTitle : "ចំណងជើង ប្រឹក្សា", |
DlgGenContType : "ប្រភេទអត្ថបទ ប្រឹក្សា", |
DlgGenLinkCharset : "លេខកូតអក្សររបស់ឈ្នាប់", |
DlgGenStyle : "ម៉ូត", |
// Image Dialog |
DlgImgTitle : "ការកំណត់រូបភាព", |
DlgImgInfoTab : "ពត៌មានអំពីរូបភាព", |
DlgImgBtnUpload : "បញ្ជូនទៅកាន់ម៉ាស៊ីនផ្តល់សេវា", |
DlgImgURL : "URL", |
DlgImgUpload : "ទាញយក", |
DlgImgAlt : "អត្ថបទជំនួស", |
DlgImgWidth : "ទទឹង", |
DlgImgHeight : "កំពស់", |
DlgImgLockRatio : "អត្រាឡុក", |
DlgBtnResetSize : "កំណត់ទំហំឡើងវិញ", |
DlgImgBorder : "ស៊ុម", |
DlgImgHSpace : "គំលាតទទឹង", |
DlgImgVSpace : "គំលាតបណ្តោយ", |
DlgImgAlign : "កំណត់ទីតាំង", |
DlgImgAlignLeft : "ខាងឆ្វង", |
DlgImgAlignAbsBottom: "Abs Bottom", //MISSING |
DlgImgAlignAbsMiddle: "Abs Middle", //MISSING |
DlgImgAlignBaseline : "បន្ទាត់ជាមូលដ្ឋាន", |
DlgImgAlignBottom : "ខាងក្រោម", |
DlgImgAlignMiddle : "កណ្តាល", |
DlgImgAlignRight : "ខាងស្តាំ", |
DlgImgAlignTextTop : "លើអត្ថបទ", |
DlgImgAlignTop : "ខាងលើ", |
DlgImgPreview : "មើលសាកល្បង", |
DlgImgAlertUrl : "សូមសរសេរងាស័យដ្ឋានរបស់រូបភាព", |
DlgImgLinkTab : "ឈ្នាប់", |
// Flash Dialog |
DlgFlashTitle : "ការកំណត់ Flash", |
DlgFlashChkPlay : "លេងដោយស្វ័យប្រវត្ត", |
DlgFlashChkLoop : "ចំនួនដង", |
DlgFlashChkMenu : "បង្ហាញ មឺនុយរបស់ Flash", |
DlgFlashScale : "ទំហំ", |
DlgFlashScaleAll : "បង្ហាញទាំងអស់", |
DlgFlashScaleNoBorder : "មិនបង្ហាញស៊ុម", |
DlgFlashScaleFit : "ត្រូវល្មម", |
// Link Dialog |
DlgLnkWindowTitle : "ឈ្នាប់", |
DlgLnkInfoTab : "ពត៌មានអំពីឈ្នាប់", |
DlgLnkTargetTab : "គោលដៅ", |
DlgLnkType : "ប្រភេទឈ្នាប់", |
DlgLnkTypeURL : "URL", |
DlgLnkTypeAnchor : "យុថ្កានៅក្នុងទំព័រនេះ", |
DlgLnkTypeEMail : "អ៊ីមែល", |
DlgLnkProto : "ប្រូតូកូល", |
DlgLnkProtoOther : "<ផ្សេងទៀត>", |
DlgLnkURL : "URL", |
DlgLnkAnchorSel : "ជ្រើសរើសយុថ្កា", |
DlgLnkAnchorByName : "តាមឈ្មោះរបស់យុថ្កា", |
DlgLnkAnchorById : "តាម Id", |
DlgLnkNoAnchors : "<ពុំមានយុថ្កានៅក្នុងឯកសារនេះទេ>", |
DlgLnkEMail : "អ៊ីមែល", |
DlgLnkEMailSubject : "ចំណងជើងអត្ថបទ", |
DlgLnkEMailBody : "អត្ថបទ", |
DlgLnkUpload : "ទាញយក", |
DlgLnkBtnUpload : "ទាញយក", |
DlgLnkTarget : "គោលដៅ", |
DlgLnkTargetFrame : "<ហ្វ្រេម>", |
DlgLnkTargetPopup : "<វីនដូវ លោត>", |
DlgLnkTargetBlank : "វីនដូវថ្មី (_blank)", |
DlgLnkTargetParent : "វីនដូវមេ (_parent)", |
DlgLnkTargetSelf : "វីនដូវដដែល (_self)", |
DlgLnkTargetTop : "វីនដូវនៅលើគេ(_top)", |
DlgLnkTargetFrameName : "ឈ្មោះហ្រ្វេមដែលជាគោលដៅ", |
DlgLnkPopWinName : "ឈ្មោះវីនដូវលោត", |
DlgLnkPopWinFeat : "លក្ខណះរបស់វីនដូលលោត", |
DlgLnkPopResize : "ទំហំអាចផ្លាស់ប្តូរ", |
DlgLnkPopLocation : "របា ទីតាំង", |
DlgLnkPopMenu : "របា មឺនុយ", |
DlgLnkPopScroll : "របា ទាញ", |
DlgLnkPopStatus : "របា ពត៌មាន", |
DlgLnkPopToolbar : "របា ឩបករណ៍", |
DlgLnkPopFullScrn : "អេក្រុងពេញ(IE)", |
DlgLnkPopDependent : "អាស្រ័យលើ (Netscape)", |
DlgLnkPopWidth : "ទទឹង", |
DlgLnkPopHeight : "កំពស់", |
DlgLnkPopLeft : "ទីតាំងខាងឆ្វេង", |
DlgLnkPopTop : "ទីតាំងខាងលើ", |
DlnLnkMsgNoUrl : "សូមសរសេរ អាស័យដ្ឋាន URL", |
DlnLnkMsgNoEMail : "សូមសរសេរ អាស័យដ្ឋាន អ៊ីមែល", |
DlnLnkMsgNoAnchor : "សូមជ្រើសរើស យុថ្កា", |
DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING |
// Color Dialog |
DlgColorTitle : "ជ្រើសរើស ពណ៌", |
DlgColorBtnClear : "លប់", |
DlgColorHighlight : "ផាត់ពណ៌", |
DlgColorSelected : "បានជ្រើសរើស", |
// Smiley Dialog |
DlgSmileyTitle : "បញ្ជូលរូបភាព", |
// Special Character Dialog |
DlgSpecialCharTitle : "តូអក្សរពិសេស", |
// Table Dialog |
DlgTableTitle : "ការកំណត់ តារាង", |
DlgTableRows : "ជួរផ្តេក", |
DlgTableColumns : "ជួរឈរ", |
DlgTableBorder : "ទំហំស៊ុម", |
DlgTableAlign : "ការកំណត់ទីតាំង", |
DlgTableAlignNotSet : "<មិនកំណត់>", |
DlgTableAlignLeft : "ខាងឆ្វេង", |
DlgTableAlignCenter : "កណ្តាល", |
DlgTableAlignRight : "ខាងស្តាំ", |
DlgTableWidth : "ទទឹង", |
DlgTableWidthPx : "ភីកសែល", |
DlgTableWidthPc : "ភាគរយ", |
DlgTableHeight : "កំពស់", |
DlgTableCellSpace : "គំលាតសែល", |
DlgTableCellPad : "គែមសែល", |
DlgTableCaption : "ចំណងជើង", |
DlgTableSummary : "សេចក្តីសង្ខេប", |
// Table Cell Dialog |
DlgCellTitle : "ការកំណត់ សែល", |
DlgCellWidth : "ទទឹង", |
DlgCellWidthPx : "ភីកសែល", |
DlgCellWidthPc : "ភាគរយ", |
DlgCellHeight : "កំពស់", |
DlgCellWordWrap : "បង្ហាញអត្ថបទទាំងអស់", |
DlgCellWordWrapNotSet : "<មិនកំណត់>", |
DlgCellWordWrapYes : "បាទ(ចា)", |
DlgCellWordWrapNo : "ទេ", |
DlgCellHorAlign : "តំរឹមផ្តេក", |
DlgCellHorAlignNotSet : "<មិនកំណត់>", |
DlgCellHorAlignLeft : "ខាងឆ្វេង", |
DlgCellHorAlignCenter : "កណ្តាល", |
DlgCellHorAlignRight: "Right", //MISSING |
DlgCellVerAlign : "តំរឹមឈរ", |
DlgCellVerAlignNotSet : "<មិនកណត់>", |
DlgCellVerAlignTop : "ខាងលើ", |
DlgCellVerAlignMiddle : "កណ្តាល", |
DlgCellVerAlignBottom : "ខាងក្រោម", |
DlgCellVerAlignBaseline : "បន្ទាត់ជាមូលដ្ឋាន", |
DlgCellRowSpan : "បញ្ជូលជួរផ្តេក", |
DlgCellCollSpan : "បញ្ជូលជួរឈរ", |
DlgCellBackColor : "ពណ៌ផ្នែកខាងក្រោម", |
DlgCellBorderColor : "ពណ៌ស៊ុម", |
DlgCellBtnSelect : "ជ្រើសរើស...", |
// Find Dialog |
DlgFindTitle : "ស្វែងរក", |
DlgFindFindBtn : "ស្វែងរក", |
DlgFindNotFoundMsg : "ពាក្យនេះ រកមិនឃើញទេ ។", |
// Replace Dialog |
DlgReplaceTitle : "ជំនួស", |
DlgReplaceFindLbl : "ស្វែងរកអ្វី:", |
DlgReplaceReplaceLbl : "ជំនួសជាមួយ:", |
DlgReplaceCaseChk : "ករណ៉ត្រូវរក", |
DlgReplaceReplaceBtn : "ជំនួស", |
DlgReplaceReplAllBtn : "ជំនួសទាំងអស់", |
DlgReplaceWordChk : "ត្រូវពាក្យទាំងអស់", |
// Paste Operations / Dialog |
PasteErrorPaste : "Your browser security settings don't permit the editor to automatically execute pasting operations. Please use the keyboard for that (Ctrl+V).", //MISSING |
PasteErrorCut : "ការកំណត់សុវត្ថភាពរបស់កម្មវិធីរុករករបស់លោកអ្នក នេះមិនអាចធ្វើកម្មវិធីតាក់តែងអត្ថបទ កាត់អត្ថបទយកដោយស្វ័យប្រវត្តបានឡើយ ។ សូមប្រើប្រាស់បន្សំ ឃីដូចនេះ (Ctrl+X) ។", |
PasteErrorCopy : "ការកំណត់សុវត្ថភាពរបស់កម្មវិធីរុករករបស់លោកអ្នក នេះមិនអាចធ្វើកម្មវិធីតាក់តែងអត្ថបទ ចំលងអត្ថបទយកដោយស្វ័យប្រវត្តបានឡើយ ។ សូមប្រើប្រាស់បន្សំ ឃីដូចនេះ (Ctrl+C)។", |
PasteAsText : "ចំលងដាក់អត្ថបទធម្មតា", |
PasteFromWord : "ចំលងពាក្យពីកម្មវិធី Word", |
DlgPasteMsg2 : "សូមចំលងអត្ថបទទៅដាក់ក្នុងប្រអប់ដូចខាងក្រោមដោយប្រើប្រាស់ ឃី (<STRONG>Ctrl+V</STRONG>) ហើយចុច <STRONG>OK</STRONG> ។", |
DlgPasteIgnoreFont : "មិនគិតអំពីប្រភេទពុម្ភអក្សរ", |
DlgPasteRemoveStyles : "លប់ម៉ូត", |
DlgPasteCleanBox : "លប់អត្ថបទចេញពីប្រអប់", |
// Color Picker |
ColorAutomatic : "ស្វ័យប្រវត្ត", |
ColorMoreColors : "ពណ៌ផ្សេងទៀត..", |
// Document Properties |
DocProps : "ការកំណត់ ឯកសារ", |
// Anchor Dialog |
DlgAnchorTitle : "ការកំណត់ចំណងជើងយុទ្ធថ្កា", |
DlgAnchorName : "ឈ្មោះយុទ្ធថ្កា", |
DlgAnchorErrorName : "សូមសរសេរ ឈ្មោះយុទ្ធថ្កា", |
// Speller Pages Dialog |
DlgSpellNotInDic : "គ្មានក្នុងវចនានុក្រម", |
DlgSpellChangeTo : "ផ្លាស់ប្តូរទៅ", |
DlgSpellBtnIgnore : "មិនផ្លាស់ប្តូរ", |
DlgSpellBtnIgnoreAll : "មិនផ្លាស់ប្តូរ ទាំងអស់", |
DlgSpellBtnReplace : "ជំនួស", |
DlgSpellBtnReplaceAll : "ជំនួសទាំងអស់", |
DlgSpellBtnUndo : "សារឡើងវិញ", |
DlgSpellNoSuggestions : "- គ្មានសំណើរ -", |
DlgSpellProgress : "កំពុងពិនិត្យអក្ខរាវិរុទ្ធ...", |
DlgSpellNoMispell : "ការពិនិត្យអក្ខរាវិរុទ្ធបានចប់: គ្មានកំហុស", |
DlgSpellNoChanges : "ការពិនិត្យអក្ខរាវិរុទ្ធបានចប់: ពុំមានផ្លាស់ប្តូរ", |
DlgSpellOneChange : "ការពិនិត្យអក្ខរាវិរុទ្ធបានចប់: ពាក្យមួយត្រូចបានផ្លាស់ប្តូរ", |
DlgSpellManyChanges : "ការពិនិត្យអក្ខរាវិរុទ្ធបានចប់: %1 ពាក្យបានផ្លាស់ប្តូរ", |
IeSpellDownload : "ពុំមានកម្មវិធីពិនិត្យអក្ខរាវិរុទ្ធ ។ តើចង់ទាញយកពីណា?", |
// Button Dialog |
DlgButtonText : "អត្ថបទ(តំលៃ)", |
DlgButtonType : "ប្រភេទ", |
DlgButtonTypeBtn : "Button", //MISSING |
DlgButtonTypeSbm : "Submit", //MISSING |
DlgButtonTypeRst : "Reset", //MISSING |
// Checkbox and Radio Button Dialogs |
DlgCheckboxName : "ឈ្មោះ", |
DlgCheckboxValue : "តំលៃ", |
DlgCheckboxSelected : "បានជ្រើសរើស", |
// Form Dialog |
DlgFormName : "ឈ្មោះ", |
DlgFormAction : "សកម្មភាព", |
DlgFormMethod : "វិធី", |
// Select Field Dialog |
DlgSelectName : "ឈ្មោះ", |
DlgSelectValue : "តំលៃ", |
DlgSelectSize : "ទំហំ", |
DlgSelectLines : "បន្ទាត់", |
DlgSelectChkMulti : "អនុញ្ញាតអោយជ្រើសរើសច្រើន", |
DlgSelectOpAvail : "ការកំណត់ជ្រើសរើស ដែលអាចកំណត់បាន", |
DlgSelectOpText : "ពាក្យ", |
DlgSelectOpValue : "តំលៃ", |
DlgSelectBtnAdd : "បន្ថែម", |
DlgSelectBtnModify : "ផ្លាស់ប្តូរ", |
DlgSelectBtnUp : "លើ", |
DlgSelectBtnDown : "ក្រោម", |
DlgSelectBtnSetValue : "Set as selected value", //MISSING |
DlgSelectBtnDelete : "លប់", |
// Textarea Dialog |
DlgTextareaName : "ឈ្មោះ", |
DlgTextareaCols : "ជូរឈរ", |
DlgTextareaRows : "ជូរផ្តេក", |
// Text Field Dialog |
DlgTextName : "ឈ្មោះ", |
DlgTextValue : "តំលៃ", |
DlgTextCharWidth : "ទទឹង អក្សរ", |
DlgTextMaxChars : "អក្សរអតិបរិមា", |
DlgTextType : "ប្រភេទ", |
DlgTextTypeText : "ពាក្យ", |
DlgTextTypePass : "ពាក្យសំងាត់", |
// Hidden Field Dialog |
DlgHiddenName : "ឈ្មោះ", |
DlgHiddenValue : "តំលៃ", |
// Bulleted List Dialog |
BulletedListProp : "កំណត់បញ្ជីរង្វង់", |
NumberedListProp : "កំណត់បញ្េជីលេខ", |
DlgLstStart : "Start", //MISSING |
DlgLstType : "ប្រភេទ", |
DlgLstTypeCircle : "រង្វង់", |
DlgLstTypeDisc : "Disc", |
DlgLstTypeSquare : "ការេ", |
DlgLstTypeNumbers : "លេខ(1, 2, 3)", |
DlgLstTypeLCase : "អក្សរតូច(a, b, c)", |
DlgLstTypeUCase : "អក្សរធំ(A, B, C)", |
DlgLstTypeSRoman : "អក្សរឡាតាំងតូច(i, ii, iii)", |
DlgLstTypeLRoman : "អក្សរឡាតាំងធំ(I, II, III)", |
// Document Properties Dialog |
DlgDocGeneralTab : "ទូទៅ", |
DlgDocBackTab : "ផ្នែកខាងក្រោយ", |
DlgDocColorsTab : "ទំព័រនិង ស៊ុម", |
DlgDocMetaTab : "ទិន្នន័យមេ", |
DlgDocPageTitle : "ចំណងជើងទំព័រ", |
DlgDocLangDir : "ទិសដៅសរសេរភាសា", |
DlgDocLangDirLTR : "ពីឆ្វេងទៅស្ដាំ(LTR)", |
DlgDocLangDirRTL : "ពីស្ដាំទៅឆ្វេង(RTL)", |
DlgDocLangCode : "លេខកូតភាសា", |
DlgDocCharSet : "កំណត់លេខកូតភាសា", |
DlgDocCharSetCE : "Central European", //MISSING |
DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING |
DlgDocCharSetCR : "Cyrillic", //MISSING |
DlgDocCharSetGR : "Greek", //MISSING |
DlgDocCharSetJP : "Japanese", //MISSING |
DlgDocCharSetKR : "Korean", //MISSING |
DlgDocCharSetTR : "Turkish", //MISSING |
DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING |
DlgDocCharSetWE : "Western European", //MISSING |
DlgDocCharSetOther : "កំណត់លេខកូតភាសាផ្សេងទៀត", |
DlgDocDocType : "ប្រភេទក្បាលទំព័រ", |
DlgDocDocTypeOther : "ប្រភេទក្បាលទំព័រផ្សេងទៀត", |
DlgDocIncXHTML : "បញ្ជូល XHTML", |
DlgDocBgColor : "ពណ៌ខាងក្រោម", |
DlgDocBgImage : "URL របស់រូបភាពខាងក្រោម", |
DlgDocBgNoScroll : "ទំព័រក្រោមមិនប្តូរ", |
DlgDocCText : "អត្តបទ", |
DlgDocCLink : "ឈ្នាប់", |
DlgDocCVisited : "ឈ្នាប់មើលហើយ", |
DlgDocCActive : "ឈ្នាប់កំពុងមើល", |
DlgDocMargins : "ស៊ុមទំព័រ", |
DlgDocMaTop : "លើ", |
DlgDocMaLeft : "ឆ្វេង", |
DlgDocMaRight : "ស្ដាំ", |
DlgDocMaBottom : "ក្រោម", |
DlgDocMeIndex : "ពាក្យនៅក្នុងឯកសារ (ផ្តាច់ពីគ្នាដោយក្បៀស)", |
DlgDocMeDescr : "សេចក្តីអត្ថាធិប្បាយអំពីឯកសារ", |
DlgDocMeAuthor : "អ្នកនិពន្ធ", |
DlgDocMeCopy : "រក្សាសិទ្ធិ៏", |
DlgDocPreview : "មើលសាកល្បង", |
// Templates Dialog |
Templates : "ឯកសារគំរូ", |
DlgTemplatesTitle : "ឯកសារគំរូ របស់អត្ថន័យ", |
DlgTemplatesSelMsg : "សូមជ្រើសរើសឯកសារគំរូ ដើម្បីបើកនៅក្នុងកម្មវិធីតាក់តែងអត្ថបទ<br>(អត្ថបទនឹងបាត់បង់):", |
DlgTemplatesLoading : "កំពុងអានបញ្ជីឯកសារគំរូ ។ សូមរងចាំ...", |
DlgTemplatesNoTpl : "(ពុំមានឯកសារគំរូត្រូវបានកំណត់)", |
DlgTemplatesReplace : "Replace actual contents", //MISSING |
// About Dialog |
DlgAboutAboutTab : "អំពី", |
DlgAboutBrowserInfoTab : "ព៌តមានកម្មវិធីរុករក", |
DlgAboutLicenseTab : "License", //MISSING |
DlgAboutVersion : "ជំនាន់", |
DlgAboutLicense : "Licensed under the terms of the GNU Lesser General Public License", |
DlgAboutInfo : "សំរាប់ព៌តមានផ្សេងទៀត សូមទាក់ទង" |
} |
/branches/v1.0-menes/api/fckeditor/editor/lang/es.js |
---|
New file |
0,0 → 1,501 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: es.js |
* Spanish language file. |
* |
* File Authors: |
* Gabriel Schillaci (internetbug@users.sourceforge.net) |
*/ |
var FCKLang = |
{ |
// Language direction : "ltr" (left to right) or "rtl" (right to left). |
Dir : "ltr", |
ToolbarCollapse : "Contraer Barra", |
ToolbarExpand : "Expandir Barra", |
// Toolbar Items and Context Menu |
Save : "Guardar", |
NewPage : "Nueva Página", |
Preview : "Vista Previa", |
Cut : "Cortar", |
Copy : "Copiar", |
Paste : "Pegar", |
PasteText : "Pegar como texto plano", |
PasteWord : "Pegar desde Word", |
Print : "Imprimir", |
SelectAll : "Seleccionar Todo", |
RemoveFormat : "Eliminar Formato", |
InsertLinkLbl : "Vínculo", |
InsertLink : "Insertar/Editar Vínculo", |
RemoveLink : "Eliminar Vínculo", |
Anchor : "Referencia", |
InsertImageLbl : "Imagen", |
InsertImage : "Insertar/Editar Imagen", |
InsertFlashLbl : "Flash", |
InsertFlash : "Insertar/Editar Flash", |
InsertTableLbl : "Tabla", |
InsertTable : "Insertar/Editar Tabla", |
InsertLineLbl : "Línea", |
InsertLine : "Insertar Línea Horizontal", |
InsertSpecialCharLbl: "Caracter Especial", |
InsertSpecialChar : "Insertar Caracter Especial", |
InsertSmileyLbl : "Emoticons", |
InsertSmiley : "Insertar Emoticons", |
About : "Acerca de FCKeditor", |
Bold : "Negrita", |
Italic : "Cursiva", |
Underline : "Subrayado", |
StrikeThrough : "Tachado", |
Subscript : "Subíndice", |
Superscript : "Superíndice", |
LeftJustify : "Alinear a Izquierda", |
CenterJustify : "Centrar", |
RightJustify : "Alinear a Derecha", |
BlockJustify : "Justificado", |
DecreaseIndent : "Disminuir Sangría", |
IncreaseIndent : "Aumentar Sangría", |
Undo : "Deshacer", |
Redo : "Rehacer", |
NumberedListLbl : "Numeración", |
NumberedList : "Insertar/Eliminar Numeración", |
BulletedListLbl : "Viñetas", |
BulletedList : "Insertar/Eliminar Viñetas", |
ShowTableBorders : "Mostrar Bordes de Tablas", |
ShowDetails : "Mostrar saltos de Párrafo", |
Style : "Estilo", |
FontFormat : "Formato", |
Font : "Fuente", |
FontSize : "Tamaño", |
TextColor : "Color de Texto", |
BGColor : "Color de Fondo", |
Source : "Fuente HTML", |
Find : "Buscar", |
Replace : "Reemplazar", |
SpellCheck : "Ortografía", |
UniversalKeyboard : "Teclado Universal", |
PageBreakLbl : "Salto de Página", |
PageBreak : "Insertar Salto de Página", |
Form : "Formulario", |
Checkbox : "Casilla de Verificación", |
RadioButton : "Botones de Radio", |
TextField : "Campo de Texto", |
Textarea : "Area de Texto", |
HiddenField : "Campo Oculto", |
Button : "Botón", |
SelectionField : "Campo de Selección", |
ImageButton : "Botón Imagen", |
FitWindow : "Maximizar el tamaño del editor", |
// Context Menu |
EditLink : "Editar Vínculo", |
CellCM : "Celda", |
RowCM : "Fila", |
ColumnCM : "Columna", |
InsertRow : "Insertar Fila", |
DeleteRows : "Eliminar Filas", |
InsertColumn : "Insertar Columna", |
DeleteColumns : "Eliminar Columnas", |
InsertCell : "Insertar Celda", |
DeleteCells : "Eliminar Celdas", |
MergeCells : "Combinar Celdas", |
SplitCell : "Dividir Celda", |
TableDelete : "Eliminar Tabla", |
CellProperties : "Propiedades de Celda", |
TableProperties : "Propiedades de Tabla", |
ImageProperties : "Propiedades de Imagen", |
FlashProperties : "Propiedades de Flash", |
AnchorProp : "Propiedades de Referencia", |
ButtonProp : "Propiedades de Botón", |
CheckboxProp : "Propiedades de Casilla", |
HiddenFieldProp : "Propiedades de Campo Oculto", |
RadioButtonProp : "Propiedades de Botón de Radio", |
ImageButtonProp : "Propiedades de Botón de Imagen", |
TextFieldProp : "Propiedades de Campo de Texto", |
SelectionFieldProp : "Propiedades de Campo de Selección", |
TextareaProp : "Propiedades de Area de Texto", |
FormProp : "Propiedades de Formulario", |
FontFormats : "Normal;Con formato;Dirección;Encabezado 1;Encabezado 2;Encabezado 3;Encabezado 4;Encabezado 5;Encabezado 6;Normal (DIV)", |
// Alerts and Messages |
ProcessingXHTML : "Procesando XHTML. Por favor, espere...", |
Done : "Hecho", |
PasteWordConfirm : "El texto que desea parece provenir de Word. Desea depurarlo antes de pegarlo?", |
NotCompatiblePaste : "Este comando está disponible sólo para Internet Explorer version 5.5 or superior. Desea pegar sin depurar?", |
UnknownToolbarItem : "Item de barra desconocido \"%1\"", |
UnknownCommand : "Nombre de comando desconocido \"%1\"", |
NotImplemented : "Comando no implementado", |
UnknownToolbarSet : "Nombre de barra \"%1\" no definido", |
NoActiveX : "La configuración de las opciones de seguridad de su navegador puede estar limitando algunas características del editor. Por favor active la opción \"Ejecutar controles y complementos de ActiveX \", de lo contrario puede experimentar errores o ausencia de funcionalidades.", |
BrowseServerBlocked : "La ventana de visualización del servidor no pudo ser abierta. Verifique que su navegador no esté bloqueando las ventanas emergentes (pop up).", |
DialogBlocked : "No se ha podido abrir la ventana de diálogo. Verifique que su navegador no esté bloqueando las ventanas emergentes (pop up).", |
// Dialogs |
DlgBtnOK : "OK", |
DlgBtnCancel : "Cancelar", |
DlgBtnClose : "Cerrar", |
DlgBtnBrowseServer : "Ver Servidor", |
DlgAdvancedTag : "Avanzado", |
DlgOpOther : "<Otro>", |
DlgInfoTab : "Información", |
DlgAlertUrl : "Inserte el URL", |
// General Dialogs Labels |
DlgGenNotSet : "<No definido>", |
DlgGenId : "Id", |
DlgGenLangDir : "Orientación de idioma", |
DlgGenLangDirLtr : "Izquierda a Derecha (LTR)", |
DlgGenLangDirRtl : "Derecha a Izquierda (RTL)", |
DlgGenLangCode : "Código de idioma", |
DlgGenAccessKey : "Clave de Acceso", |
DlgGenName : "Nombre", |
DlgGenTabIndex : "Indice de tabulación", |
DlgGenLongDescr : "Descripción larga URL", |
DlgGenClass : "Clases de hojas de estilo", |
DlgGenTitle : "Título", |
DlgGenContType : "Tipo de Contenido", |
DlgGenLinkCharset : "Fuente de caracteres vinculado", |
DlgGenStyle : "Estilo", |
// Image Dialog |
DlgImgTitle : "Propiedades de Imagen", |
DlgImgInfoTab : "Información de Imagen", |
DlgImgBtnUpload : "Enviar al Servidor", |
DlgImgURL : "URL", |
DlgImgUpload : "Cargar", |
DlgImgAlt : "Texto Alternativo", |
DlgImgWidth : "Anchura", |
DlgImgHeight : "Altura", |
DlgImgLockRatio : "Proporcional", |
DlgBtnResetSize : "Tamaño Original", |
DlgImgBorder : "Borde", |
DlgImgHSpace : "Esp.Horiz", |
DlgImgVSpace : "Esp.Vert", |
DlgImgAlign : "Alineación", |
DlgImgAlignLeft : "Izquierda", |
DlgImgAlignAbsBottom: "Abs inferior", |
DlgImgAlignAbsMiddle: "Abs centro", |
DlgImgAlignBaseline : "Línea de base", |
DlgImgAlignBottom : "Pie", |
DlgImgAlignMiddle : "Centro", |
DlgImgAlignRight : "Derecha", |
DlgImgAlignTextTop : "Tope del texto", |
DlgImgAlignTop : "Tope", |
DlgImgPreview : "Vista Previa", |
DlgImgAlertUrl : "Por favor tipee el URL de la imagen", |
DlgImgLinkTab : "Vínculo", |
// Flash Dialog |
DlgFlashTitle : "Propiedades de Flash", |
DlgFlashChkPlay : "Autoejecución", |
DlgFlashChkLoop : "Repetir", |
DlgFlashChkMenu : "Activar Menú Flash", |
DlgFlashScale : "Escala", |
DlgFlashScaleAll : "Mostrar todo", |
DlgFlashScaleNoBorder : "Sin Borde", |
DlgFlashScaleFit : "Ajustado", |
// Link Dialog |
DlgLnkWindowTitle : "Vínculo", |
DlgLnkInfoTab : "Información de Vínculo", |
DlgLnkTargetTab : "Destino", |
DlgLnkType : "Tipo de vínculo", |
DlgLnkTypeURL : "URL", |
DlgLnkTypeAnchor : "Referencia en esta página", |
DlgLnkTypeEMail : "E-Mail", |
DlgLnkProto : "Protocolo", |
DlgLnkProtoOther : "<otro>", |
DlgLnkURL : "URL", |
DlgLnkAnchorSel : "Seleccionar una referencia", |
DlgLnkAnchorByName : "Por Nombre de Referencia", |
DlgLnkAnchorById : "Por ID de elemento", |
DlgLnkNoAnchors : "<No hay referencias disponibles en el documento>", |
DlgLnkEMail : "Dirección de E-Mail", |
DlgLnkEMailSubject : "Título del Mensaje", |
DlgLnkEMailBody : "Cuerpo del Mensaje", |
DlgLnkUpload : "Cargar", |
DlgLnkBtnUpload : "Enviar al Servidor", |
DlgLnkTarget : "Destino", |
DlgLnkTargetFrame : "<marco>", |
DlgLnkTargetPopup : "<ventana emergente>", |
DlgLnkTargetBlank : "Nueva Ventana(_blank)", |
DlgLnkTargetParent : "Ventana Padre (_parent)", |
DlgLnkTargetSelf : "Misma Ventana (_self)", |
DlgLnkTargetTop : "Ventana primaria (_top)", |
DlgLnkTargetFrameName : "Nombre del Marco Destino", |
DlgLnkPopWinName : "Nombre de Ventana Emergente", |
DlgLnkPopWinFeat : "Características de Ventana Emergente", |
DlgLnkPopResize : "Ajustable", |
DlgLnkPopLocation : "Barra de ubicación", |
DlgLnkPopMenu : "Barra de Menú", |
DlgLnkPopScroll : "Barras de desplazamiento", |
DlgLnkPopStatus : "Barra de Estado", |
DlgLnkPopToolbar : "Barra de Herramientas", |
DlgLnkPopFullScrn : "Pantalla Completa (IE)", |
DlgLnkPopDependent : "Dependiente (Netscape)", |
DlgLnkPopWidth : "Anchura", |
DlgLnkPopHeight : "Altura", |
DlgLnkPopLeft : "Posición Izquierda", |
DlgLnkPopTop : "Posición Derecha", |
DlnLnkMsgNoUrl : "Por favor tipee el vínculo URL", |
DlnLnkMsgNoEMail : "Por favor tipee la dirección de e-mail", |
DlnLnkMsgNoAnchor : "Por favor seleccione una referencia", |
DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING |
// Color Dialog |
DlgColorTitle : "Seleccionar Color", |
DlgColorBtnClear : "Ninguno", |
DlgColorHighlight : "Resaltado", |
DlgColorSelected : "Seleccionado", |
// Smiley Dialog |
DlgSmileyTitle : "Insertar un Emoticon", |
// Special Character Dialog |
DlgSpecialCharTitle : "Seleccione un caracter especial", |
// Table Dialog |
DlgTableTitle : "Propiedades de Tabla", |
DlgTableRows : "Filas", |
DlgTableColumns : "Columnas", |
DlgTableBorder : "Tamaño de Borde", |
DlgTableAlign : "Alineación", |
DlgTableAlignNotSet : "<No establecido>", |
DlgTableAlignLeft : "Izquierda", |
DlgTableAlignCenter : "Centrado", |
DlgTableAlignRight : "Derecha", |
DlgTableWidth : "Anchura", |
DlgTableWidthPx : "pixeles", |
DlgTableWidthPc : "porcentaje", |
DlgTableHeight : "Altura", |
DlgTableCellSpace : "Esp. e/celdas", |
DlgTableCellPad : "Esp. interior", |
DlgTableCaption : "Título", |
DlgTableSummary : "Síntesis", |
// Table Cell Dialog |
DlgCellTitle : "Propiedades de Celda", |
DlgCellWidth : "Anchura", |
DlgCellWidthPx : "pixeles", |
DlgCellWidthPc : "porcentaje", |
DlgCellHeight : "Altura", |
DlgCellWordWrap : "Cortar Línea", |
DlgCellWordWrapNotSet : "<No establecido>", |
DlgCellWordWrapYes : "Si", |
DlgCellWordWrapNo : "No", |
DlgCellHorAlign : "Alineación Horizontal", |
DlgCellHorAlignNotSet : "<No establecido>", |
DlgCellHorAlignLeft : "Izquierda", |
DlgCellHorAlignCenter : "Centrado", |
DlgCellHorAlignRight: "Derecha", |
DlgCellVerAlign : "Alineación Vertical", |
DlgCellVerAlignNotSet : "<Not establecido>", |
DlgCellVerAlignTop : "Tope", |
DlgCellVerAlignMiddle : "Medio", |
DlgCellVerAlignBottom : "ie", |
DlgCellVerAlignBaseline : "Línea de Base", |
DlgCellRowSpan : "Abarcar Filas", |
DlgCellCollSpan : "Abarcar Columnas", |
DlgCellBackColor : "Color de Fondo", |
DlgCellBorderColor : "Color de Borde", |
DlgCellBtnSelect : "Seleccione...", |
// Find Dialog |
DlgFindTitle : "Buscar", |
DlgFindFindBtn : "Buscar", |
DlgFindNotFoundMsg : "El texto especificado no ha sido encontrado.", |
// Replace Dialog |
DlgReplaceTitle : "Reemplazar", |
DlgReplaceFindLbl : "Texto a buscar:", |
DlgReplaceReplaceLbl : "Reemplazar con:", |
DlgReplaceCaseChk : "Coincidir may/min", |
DlgReplaceReplaceBtn : "Reemplazar", |
DlgReplaceReplAllBtn : "Reemplazar Todo", |
DlgReplaceWordChk : "Coincidir toda la palabra", |
// Paste Operations / Dialog |
PasteErrorPaste : "La configuración de seguridad de este navegador no permite la ejecución automática de operaciones de pegado. Por favor use el teclado (Ctrl+V).", |
PasteErrorCut : "La configuración de seguridad de este navegador no permite la ejecución automática de operaciones de cortado. Por favor use el teclado (Ctrl+X).", |
PasteErrorCopy : "La configuración de seguridad de este navegador no permite la ejecución automática de operaciones de copiado. Por favor use el teclado (Ctrl+C).", |
PasteAsText : "Pegar como Texto Plano", |
PasteFromWord : "Pegar desde Word", |
DlgPasteMsg2 : "Por favor pegue dentro del cuadro utilizando el teclado (<STRONG>Ctrl+V</STRONG>); luego presione <STRONG>OK</STRONG>.", |
DlgPasteIgnoreFont : "Ignorar definiciones de fuentes", |
DlgPasteRemoveStyles : "Remover definiciones de estilo", |
DlgPasteCleanBox : "Borrar el contenido del cuadro", |
// Color Picker |
ColorAutomatic : "Automático", |
ColorMoreColors : "Más Colores...", |
// Document Properties |
DocProps : "Propiedades del Documento", |
// Anchor Dialog |
DlgAnchorTitle : "Propiedades de la Referencia", |
DlgAnchorName : "Nombre de la Referencia", |
DlgAnchorErrorName : "Por favor, complete el nombre de la Referencia", |
// Speller Pages Dialog |
DlgSpellNotInDic : "No se encuentra en el Diccionario", |
DlgSpellChangeTo : "Cambiar a", |
DlgSpellBtnIgnore : "Ignorar", |
DlgSpellBtnIgnoreAll : "Ignorar Todo", |
DlgSpellBtnReplace : "Reemplazar", |
DlgSpellBtnReplaceAll : "Reemplazar Todo", |
DlgSpellBtnUndo : "Deshacer", |
DlgSpellNoSuggestions : "- No hay sugerencias -", |
DlgSpellProgress : "Control de Ortografía en progreso...", |
DlgSpellNoMispell : "Control finalizado: no se encontraron errores", |
DlgSpellNoChanges : "Control finalizado: no se ha cambiado ninguna palabra", |
DlgSpellOneChange : "Control finalizado: se ha cambiado una palabra", |
DlgSpellManyChanges : "Control finalizado: se ha cambiado %1 palabras", |
IeSpellDownload : "Módulo de Control de Ortografía no instalado. ¿Desea descargarlo ahora?", |
// Button Dialog |
DlgButtonText : "Texto (Valor)", |
DlgButtonType : "Tipo", |
DlgButtonTypeBtn : "Button", //MISSING |
DlgButtonTypeSbm : "Submit", //MISSING |
DlgButtonTypeRst : "Reset", //MISSING |
// Checkbox and Radio Button Dialogs |
DlgCheckboxName : "Nombre", |
DlgCheckboxValue : "Valor", |
DlgCheckboxSelected : "Seleccionado", |
// Form Dialog |
DlgFormName : "Nombre", |
DlgFormAction : "Acción", |
DlgFormMethod : "Método", |
// Select Field Dialog |
DlgSelectName : "Nombre", |
DlgSelectValue : "Valor", |
DlgSelectSize : "Tamaño", |
DlgSelectLines : "Lineas", |
DlgSelectChkMulti : "Permitir múltiple selección", |
DlgSelectOpAvail : "Opciones disponibles", |
DlgSelectOpText : "Texto", |
DlgSelectOpValue : "Valor", |
DlgSelectBtnAdd : "Agregar", |
DlgSelectBtnModify : "Modificar", |
DlgSelectBtnUp : "Subir", |
DlgSelectBtnDown : "Bajar", |
DlgSelectBtnSetValue : "Establecer como predeterminado", |
DlgSelectBtnDelete : "Eliminar", |
// Textarea Dialog |
DlgTextareaName : "Nombre", |
DlgTextareaCols : "Columnas", |
DlgTextareaRows : "Filas", |
// Text Field Dialog |
DlgTextName : "Nombre", |
DlgTextValue : "Valor", |
DlgTextCharWidth : "Caracteres de ancho", |
DlgTextMaxChars : "Máximo caracteres", |
DlgTextType : "Tipo", |
DlgTextTypeText : "Texto", |
DlgTextTypePass : "Contraseña", |
// Hidden Field Dialog |
DlgHiddenName : "Nombre", |
DlgHiddenValue : "Valor", |
// Bulleted List Dialog |
BulletedListProp : "Propiedades de Viñetas", |
NumberedListProp : "Propiedades de Numeraciones", |
DlgLstStart : "Start", //MISSING |
DlgLstType : "Tipo", |
DlgLstTypeCircle : "Círculo", |
DlgLstTypeDisc : "Disco", |
DlgLstTypeSquare : "Cuadrado", |
DlgLstTypeNumbers : "Números (1, 2, 3)", |
DlgLstTypeLCase : "letras en minúsculas (a, b, c)", |
DlgLstTypeUCase : "letras en mayúsculas (A, B, C)", |
DlgLstTypeSRoman : "Números Romanos (i, ii, iii)", |
DlgLstTypeLRoman : "Números Romanos (I, II, III)", |
// Document Properties Dialog |
DlgDocGeneralTab : "General", |
DlgDocBackTab : "Fondo", |
DlgDocColorsTab : "Colores y Márgenes", |
DlgDocMetaTab : "Meta Información", |
DlgDocPageTitle : "Título de Página", |
DlgDocLangDir : "Orientación de idioma", |
DlgDocLangDirLTR : "Izq. a Derecha (LTR)", |
DlgDocLangDirRTL : "Der. a Izquierda (RTL)", |
DlgDocLangCode : "Código de Idioma", |
DlgDocCharSet : "Codif. de Conjunto de Caracteres", |
DlgDocCharSetCE : "Central European", //MISSING |
DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING |
DlgDocCharSetCR : "Cyrillic", //MISSING |
DlgDocCharSetGR : "Greek", //MISSING |
DlgDocCharSetJP : "Japanese", //MISSING |
DlgDocCharSetKR : "Korean", //MISSING |
DlgDocCharSetTR : "Turkish", //MISSING |
DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING |
DlgDocCharSetWE : "Western European", //MISSING |
DlgDocCharSetOther : "Otra Codificación", |
DlgDocDocType : "Encabezado de Tipo de Documento", |
DlgDocDocTypeOther : "Otro Encabezado", |
DlgDocIncXHTML : "Incluir Declaraciones XHTML", |
DlgDocBgColor : "Color de Fondo", |
DlgDocBgImage : "URL de Imagen de Fondo", |
DlgDocBgNoScroll : "Fondo sin rolido", |
DlgDocCText : "Texto", |
DlgDocCLink : "Vínculo", |
DlgDocCVisited : "Vínculo Visitado", |
DlgDocCActive : "Vínculo Activo", |
DlgDocMargins : "Márgenes de Página", |
DlgDocMaTop : "Tope", |
DlgDocMaLeft : "Izquierda", |
DlgDocMaRight : "Derecha", |
DlgDocMaBottom : "Pie", |
DlgDocMeIndex : "Claves de indexación del Documento (separados por comas)", |
DlgDocMeDescr : "Descripción del Documento", |
DlgDocMeAuthor : "Autor", |
DlgDocMeCopy : "Copyright", |
DlgDocPreview : "Vista Previa", |
// Templates Dialog |
Templates : "Plantillas", |
DlgTemplatesTitle : "Contenido de Plantillas", |
DlgTemplatesSelMsg : "Por favor selecciona la plantilla a abrir en el editor<br>(el contenido actual se perderá):", |
DlgTemplatesLoading : "Cargando lista de Plantillas. Por favor, aguarde...", |
DlgTemplatesNoTpl : "(No hay plantillas definidas)", |
DlgTemplatesReplace : "Replace actual contents", //MISSING |
// About Dialog |
DlgAboutAboutTab : "Acerca de", |
DlgAboutBrowserInfoTab : "Información de Navegador", |
DlgAboutLicenseTab : "Licencia", |
DlgAboutVersion : "versión", |
DlgAboutLicense : "Licenciado bajo los términos de GNU Lesser General Public License", |
DlgAboutInfo : "Para mayor información por favor dirigirse a" |
} |
/branches/v1.0-menes/api/fckeditor/editor/lang/ko.js |
---|
New file |
0,0 → 1,502 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: ko.js |
* Korean language file. |
* |
* File Authors: |
* Taehwan Kwag (thkwag@nate.com) |
* Hyung-chae, Kim (chaeya@gmail.com) |
*/ |
var FCKLang = |
{ |
// Language direction : "ltr" (left to right) or "rtl" (right to left). |
Dir : "ltr", |
ToolbarCollapse : "툴바 감추기", |
ToolbarExpand : "툴바 보이기", |
// Toolbar Items and Context Menu |
Save : "저장하기", |
NewPage : "새 문서", |
Preview : "미리보기", |
Cut : "잘라내기", |
Copy : "복사하기", |
Paste : "붙여넣기", |
PasteText : "텍스트로 붙여넣기", |
PasteWord : "MS Word 형식에서 붙여넣기", |
Print : "인쇄하기", |
SelectAll : "전체선택", |
RemoveFormat : "포맷 지우기", |
InsertLinkLbl : "링크", |
InsertLink : "링크 삽입/변경", |
RemoveLink : "링크 삭제", |
Anchor : "책갈피 삽입/변경", |
InsertImageLbl : "이미지", |
InsertImage : "이미지 삽입/변경", |
InsertFlashLbl : "플래쉬", |
InsertFlash : "플래쉬 삽입/변경", |
InsertTableLbl : "표", |
InsertTable : "표 삽입/변경", |
InsertLineLbl : "수평선", |
InsertLine : "수평선 삽입", |
InsertSpecialCharLbl: "특수문자 삽입", |
InsertSpecialChar : "특수문자 삽입", |
InsertSmileyLbl : "아이콘", |
InsertSmiley : "아이콘 삽입", |
About : "FCKeditor에 대하여", |
Bold : "진하게", |
Italic : "이텔릭", |
Underline : "밑줄", |
StrikeThrough : "취소선", |
Subscript : "아래 첨자", |
Superscript : "위 첨자", |
LeftJustify : "왼쪽 정렬", |
CenterJustify : "가운데 정렬", |
RightJustify : "오른쪽 정렬", |
BlockJustify : "양쪽 맞춤", |
DecreaseIndent : "내어쓰기", |
IncreaseIndent : "들여쓰기", |
Undo : "취소", |
Redo : "재실행", |
NumberedListLbl : "순서있는 목록", |
NumberedList : "순서있는 목록", |
BulletedListLbl : "순서없는 목록", |
BulletedList : "순서없는 목록", |
ShowTableBorders : "표 테두리 보기", |
ShowDetails : "문서기호 보기", |
Style : "스타일", |
FontFormat : "포맷", |
Font : "폰트", |
FontSize : "글자 크기", |
TextColor : "글자 색상", |
BGColor : "배경 색상", |
Source : "소스", |
Find : "찾기", |
Replace : "바꾸기", |
SpellCheck : "철자검사", |
UniversalKeyboard : "다국어 입력기", |
PageBreakLbl : "Page Break", //MISSING |
PageBreak : "Insert Page Break", //MISSING |
Form : "폼", |
Checkbox : "체크박스", |
RadioButton : "라디오버튼", |
TextField : "입력필드", |
Textarea : "입력영역", |
HiddenField : "숨김필드", |
Button : "버튼", |
SelectionField : "펼침목록", |
ImageButton : "이미지버튼", |
FitWindow : "Maximize the editor size", //MISSING |
// Context Menu |
EditLink : "링크 수정", |
CellCM : "Cell", //MISSING |
RowCM : "Row", //MISSING |
ColumnCM : "Column", //MISSING |
InsertRow : "가로줄 삽입", |
DeleteRows : "가로줄 삭제", |
InsertColumn : "세로줄 삽입", |
DeleteColumns : "세로줄 삭제", |
InsertCell : "셀 삽입", |
DeleteCells : "셀 삭제", |
MergeCells : "셀 합치기", |
SplitCell : "셀 나누기", |
TableDelete : "Delete Table", //MISSING |
CellProperties : "셀 속성", |
TableProperties : "표 속성", |
ImageProperties : "이미지 속성", |
FlashProperties : "플래쉬 속성", |
AnchorProp : "책갈피 속성", |
ButtonProp : "버튼 속성", |
CheckboxProp : "체크박스 속성", |
HiddenFieldProp : "숨김필드 속성", |
RadioButtonProp : "라디오버튼 속성", |
ImageButtonProp : "이미지버튼 속성", |
TextFieldProp : "입력필드 속성", |
SelectionFieldProp : "펼침목록 속성", |
TextareaProp : "입력영역 속성", |
FormProp : "폼 속성", |
FontFormats : "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6", |
// Alerts and Messages |
ProcessingXHTML : "XHTML 처리중. 잠시만 기다려주십시요.", |
Done : "완료", |
PasteWordConfirm : "붙여넣기 할 텍스트는 MS Word에서 복사한 것입니다. 붙여넣기 전에 MS Word 포멧을 삭제하시겠습니까?", |
NotCompatiblePaste : "이 명령은 인터넷익스플로러 5.5 버전 이상에서만 작동합니다. 포멧을 삭제하지 않고 붙여넣기 하시겠습니까?", |
UnknownToolbarItem : "알수없는 툴바입니다. : \"%1\"", |
UnknownCommand : "알수없는 기능입니다. : \"%1\"", |
NotImplemented : "기능이 실행되지 않았습니다.", |
UnknownToolbarSet : "툴바 설정이 없습니다. : \"%1\"", |
NoActiveX : "Your browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.", //MISSING |
BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.", //MISSING |
DialogBlocked : "It was not possible to open the dialog window. Make sure all popup blockers are disabled.", //MISSING |
// Dialogs |
DlgBtnOK : "예", |
DlgBtnCancel : "아니오", |
DlgBtnClose : "닫기", |
DlgBtnBrowseServer : "서버 보기", |
DlgAdvancedTag : "자세히", |
DlgOpOther : "<기타>", |
DlgInfoTab : "정보", |
DlgAlertUrl : "URL을 입력하십시요", |
// General Dialogs Labels |
DlgGenNotSet : "<설정되지 않음>", |
DlgGenId : "ID", |
DlgGenLangDir : "쓰기 방향", |
DlgGenLangDirLtr : "왼쪽에서 오른쪽 (LTR)", |
DlgGenLangDirRtl : "오른쪽에서 왼쪽 (RTL)", |
DlgGenLangCode : "언어 코드", |
DlgGenAccessKey : "엑세스 키", |
DlgGenName : "Name", |
DlgGenTabIndex : "탭 순서", |
DlgGenLongDescr : "URL 설명", |
DlgGenClass : "Stylesheet Classes", |
DlgGenTitle : "Advisory Title", |
DlgGenContType : "Advisory Content Type", |
DlgGenLinkCharset : "Linked Resource Charset", |
DlgGenStyle : "Style", |
// Image Dialog |
DlgImgTitle : "이미지 설정", |
DlgImgInfoTab : "이미지 정보", |
DlgImgBtnUpload : "서버로 전송", |
DlgImgURL : "URL", |
DlgImgUpload : "업로드", |
DlgImgAlt : "이미지 설명", |
DlgImgWidth : "너비", |
DlgImgHeight : "높이", |
DlgImgLockRatio : "비율 유지", |
DlgBtnResetSize : "원래 크기로", |
DlgImgBorder : "테두리", |
DlgImgHSpace : "수평여백", |
DlgImgVSpace : "수직여백", |
DlgImgAlign : "정렬", |
DlgImgAlignLeft : "왼쪽", |
DlgImgAlignAbsBottom: "줄아래(Abs Bottom)", |
DlgImgAlignAbsMiddle: "줄중간(Abs Middle)", |
DlgImgAlignBaseline : "기준선", |
DlgImgAlignBottom : "아래", |
DlgImgAlignMiddle : "중간", |
DlgImgAlignRight : "오른쪽", |
DlgImgAlignTextTop : "글자위(Text Top)", |
DlgImgAlignTop : "위", |
DlgImgPreview : "미리보기", |
DlgImgAlertUrl : "이미지 URL을 입력하십시요", |
DlgImgLinkTab : "링크", |
// Flash Dialog |
DlgFlashTitle : "플래쉬 등록정보", |
DlgFlashChkPlay : "자동재생", |
DlgFlashChkLoop : "반복", |
DlgFlashChkMenu : "플래쉬메뉴 가능", |
DlgFlashScale : "영역", |
DlgFlashScaleAll : "모두보기", |
DlgFlashScaleNoBorder : "경계선없음", |
DlgFlashScaleFit : "영역자동조절", |
// Link Dialog |
DlgLnkWindowTitle : "링크", |
DlgLnkInfoTab : "링크 정보", |
DlgLnkTargetTab : "타겟", |
DlgLnkType : "링크 종류", |
DlgLnkTypeURL : "URL", |
DlgLnkTypeAnchor : "책갈피", |
DlgLnkTypeEMail : "이메일", |
DlgLnkProto : "프로토콜", |
DlgLnkProtoOther : "<기타>", |
DlgLnkURL : "URL", |
DlgLnkAnchorSel : "책갈피 선택", |
DlgLnkAnchorByName : "책갈피 이름", |
DlgLnkAnchorById : "책갈피 ID", |
DlgLnkNoAnchors : "<문서에 책갈피가 없습니다.>", |
DlgLnkEMail : "이메일 주소", |
DlgLnkEMailSubject : "제목", |
DlgLnkEMailBody : "내용", |
DlgLnkUpload : "업로드", |
DlgLnkBtnUpload : "서버로 전송", |
DlgLnkTarget : "타겟", |
DlgLnkTargetFrame : "<프레임>", |
DlgLnkTargetPopup : "<팝업창>", |
DlgLnkTargetBlank : "새 창 (_blank)", |
DlgLnkTargetParent : "부모 창 (_parent)", |
DlgLnkTargetSelf : "현재 창 (_self)", |
DlgLnkTargetTop : "최 상위 창 (_top)", |
DlgLnkTargetFrameName : "타겟 프레임 이름", |
DlgLnkPopWinName : "팝업창 이름", |
DlgLnkPopWinFeat : "팝업창 설정", |
DlgLnkPopResize : "크기조정", |
DlgLnkPopLocation : "주소표시줄", |
DlgLnkPopMenu : "메뉴바", |
DlgLnkPopScroll : "스크롤바", |
DlgLnkPopStatus : "상태바", |
DlgLnkPopToolbar : "툴바", |
DlgLnkPopFullScrn : "전체화면 (IE)", |
DlgLnkPopDependent : "Dependent (Netscape)", |
DlgLnkPopWidth : "너비", |
DlgLnkPopHeight : "높이", |
DlgLnkPopLeft : "왼쪽 위치", |
DlgLnkPopTop : "윗쪽 위치", |
DlnLnkMsgNoUrl : "링크 URL을 입력하십시요.", |
DlnLnkMsgNoEMail : "이메일주소를 입력하십시요.", |
DlnLnkMsgNoAnchor : "책갈피명을 입력하십시요.", |
DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING |
// Color Dialog |
DlgColorTitle : "색상 선택", |
DlgColorBtnClear : "지우기", |
DlgColorHighlight : "현재", |
DlgColorSelected : "선택됨", |
// Smiley Dialog |
DlgSmileyTitle : "아이콘 삽입", |
// Special Character Dialog |
DlgSpecialCharTitle : "특수문자 선택", |
// Table Dialog |
DlgTableTitle : "표 설정", |
DlgTableRows : "가로줄", |
DlgTableColumns : "세로줄", |
DlgTableBorder : "테두리 크기", |
DlgTableAlign : "정렬", |
DlgTableAlignNotSet : "<설정되지 않음>", |
DlgTableAlignLeft : "왼쪽", |
DlgTableAlignCenter : "가운데", |
DlgTableAlignRight : "오른쪽", |
DlgTableWidth : "너비", |
DlgTableWidthPx : "픽셀", |
DlgTableWidthPc : "퍼센트", |
DlgTableHeight : "높이", |
DlgTableCellSpace : "셀 간격", |
DlgTableCellPad : "셀 여백", |
DlgTableCaption : "캡션", |
DlgTableSummary : "Summary", //MISSING |
// Table Cell Dialog |
DlgCellTitle : "셀 설정", |
DlgCellWidth : "너비", |
DlgCellWidthPx : "픽셀", |
DlgCellWidthPc : "퍼센트", |
DlgCellHeight : "높이", |
DlgCellWordWrap : "워드랩", |
DlgCellWordWrapNotSet : "<설정되지 않음>", |
DlgCellWordWrapYes : "예", |
DlgCellWordWrapNo : "아니오", |
DlgCellHorAlign : "수평 정렬", |
DlgCellHorAlignNotSet : "<설정되지 않음>", |
DlgCellHorAlignLeft : "왼쪽", |
DlgCellHorAlignCenter : "가운데", |
DlgCellHorAlignRight: "오른쪽", |
DlgCellVerAlign : "수직 정렬", |
DlgCellVerAlignNotSet : "<설정되지 않음>", |
DlgCellVerAlignTop : "위", |
DlgCellVerAlignMiddle : "중간", |
DlgCellVerAlignBottom : "아래", |
DlgCellVerAlignBaseline : "기준선", |
DlgCellRowSpan : "세로 합치기", |
DlgCellCollSpan : "가로 합치기", |
DlgCellBackColor : "배경 색상", |
DlgCellBorderColor : "테두리 색상", |
DlgCellBtnSelect : "선택", |
// Find Dialog |
DlgFindTitle : "찾기", |
DlgFindFindBtn : "찾기", |
DlgFindNotFoundMsg : "문자열을 찾을 수 없습니다.", |
// Replace Dialog |
DlgReplaceTitle : "바꾸기", |
DlgReplaceFindLbl : "찾을 문자열:", |
DlgReplaceReplaceLbl : "바꿀 문자열:", |
DlgReplaceCaseChk : "대소문자 구분", |
DlgReplaceReplaceBtn : "바꾸기", |
DlgReplaceReplAllBtn : "모두 바꾸기", |
DlgReplaceWordChk : "온전한 단어", |
// Paste Operations / Dialog |
PasteErrorPaste : "브라우저의 보안설정때문에 붙여넣기 기능을 실행할 수 없습니다. 키보드 명령을 사용하십시요. (Ctrl+V).", |
PasteErrorCut : "브라우저의 보안설정때문에 잘라내기 기능을 실행할 수 없습니다. 키보드 명령을 사용하십시요. (Ctrl+X).", |
PasteErrorCopy : "브라우저의 보안설정때문에 복사하기 기능을 실행할 수 없습니다. 키보드 명령을 사용하십시요. (Ctrl+C).", |
PasteAsText : "텍스트로 붙여넣기", |
PasteFromWord : "MS Word 형식에서 붙여넣기", |
DlgPasteMsg2 : "키보드의 (<STRONG>Ctrl+V</STRONG>) 를 이용해서 상자안에 붙여넣고 <STRONG>OK</STRONG> 를 누르세요.", |
DlgPasteIgnoreFont : "폰트 설정 무시", |
DlgPasteRemoveStyles : "스타일 정의 제거", |
DlgPasteCleanBox : "글상자 제거", |
// Color Picker |
ColorAutomatic : "기본색상", |
ColorMoreColors : "색상선택...", |
// Document Properties |
DocProps : "문서 속성", |
// Anchor Dialog |
DlgAnchorTitle : "책갈피 속성", |
DlgAnchorName : "책갈피 이름", |
DlgAnchorErrorName : "책갈피 이름을 입력하십시요.", |
// Speller Pages Dialog |
DlgSpellNotInDic : "사전에 없는 단어", |
DlgSpellChangeTo : "변경할 단어", |
DlgSpellBtnIgnore : "건너뜀", |
DlgSpellBtnIgnoreAll : "모두 건너뜀", |
DlgSpellBtnReplace : "변경", |
DlgSpellBtnReplaceAll : "모두 변경", |
DlgSpellBtnUndo : "취소", |
DlgSpellNoSuggestions : "- 추천단어 없음 -", |
DlgSpellProgress : "철자검사를 진행중입니다...", |
DlgSpellNoMispell : "철자검사 완료: 잘못된 철자가 없습니다.", |
DlgSpellNoChanges : "철자검사 완료: 변경된 단어가 없습니다.", |
DlgSpellOneChange : "철자검사 완료: 단어가 변경되었습니다.", |
DlgSpellManyChanges : "철자검사 완료: %1 단어가 변경되었습니다.", |
IeSpellDownload : "철자 검사기가 철치되지 않았습니다. 지금 다운로드하시겠습니까?", |
// Button Dialog |
DlgButtonText : "버튼글자(값)", |
DlgButtonType : "버튼종류", |
DlgButtonTypeBtn : "Button", //MISSING |
DlgButtonTypeSbm : "Submit", //MISSING |
DlgButtonTypeRst : "Reset", //MISSING |
// Checkbox and Radio Button Dialogs |
DlgCheckboxName : "이름", |
DlgCheckboxValue : "값", |
DlgCheckboxSelected : "선택됨", |
// Form Dialog |
DlgFormName : "폼이름", |
DlgFormAction : "실행경로(Action)", |
DlgFormMethod : "방법(Method)", |
// Select Field Dialog |
DlgSelectName : "이름", |
DlgSelectValue : "값", |
DlgSelectSize : "세로크기", |
DlgSelectLines : "줄", |
DlgSelectChkMulti : "여러항목 선택 허용", |
DlgSelectOpAvail : "선택옵션", |
DlgSelectOpText : "이름", |
DlgSelectOpValue : "값", |
DlgSelectBtnAdd : "추가", |
DlgSelectBtnModify : "변경", |
DlgSelectBtnUp : "위로", |
DlgSelectBtnDown : "아래로", |
DlgSelectBtnSetValue : "선택된것으로 설정", |
DlgSelectBtnDelete : "삭제", |
// Textarea Dialog |
DlgTextareaName : "이름", |
DlgTextareaCols : "칸수", |
DlgTextareaRows : "줄수", |
// Text Field Dialog |
DlgTextName : "이름", |
DlgTextValue : "값", |
DlgTextCharWidth : "글자 너비", |
DlgTextMaxChars : "최대 글자수", |
DlgTextType : "종류", |
DlgTextTypeText : "문자열", |
DlgTextTypePass : "비밀번호", |
// Hidden Field Dialog |
DlgHiddenName : "이름", |
DlgHiddenValue : "값", |
// Bulleted List Dialog |
BulletedListProp : "순서없는 목록 속성", |
NumberedListProp : "순서있는 목록 속성", |
DlgLstStart : "Start", //MISSING |
DlgLstType : "종류", |
DlgLstTypeCircle : "원(Circle)", |
DlgLstTypeDisc : "Disc", //MISSING |
DlgLstTypeSquare : "네모점(Square)", |
DlgLstTypeNumbers : "번호 (1, 2, 3)", |
DlgLstTypeLCase : "소문자 (a, b, c)", |
DlgLstTypeUCase : "대문자 (A, B, C)", |
DlgLstTypeSRoman : "로마자 수문자 (i, ii, iii)", |
DlgLstTypeLRoman : "로마자 대문자 (I, II, III)", |
// Document Properties Dialog |
DlgDocGeneralTab : "일반", |
DlgDocBackTab : "배경", |
DlgDocColorsTab : "색상 및 여백", |
DlgDocMetaTab : "메타데이터", |
DlgDocPageTitle : "페이지명", |
DlgDocLangDir : "문자 쓰기방향", |
DlgDocLangDirLTR : "왼쪽에서 오른쪽 (LTR)", |
DlgDocLangDirRTL : "오른쪽에서 왼쪽 (RTL)", |
DlgDocLangCode : "언어코드", |
DlgDocCharSet : "캐릭터셋 인코딩", |
DlgDocCharSetCE : "Central European", //MISSING |
DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING |
DlgDocCharSetCR : "Cyrillic", //MISSING |
DlgDocCharSetGR : "Greek", //MISSING |
DlgDocCharSetJP : "Japanese", //MISSING |
DlgDocCharSetKR : "Korean", //MISSING |
DlgDocCharSetTR : "Turkish", //MISSING |
DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING |
DlgDocCharSetWE : "Western European", //MISSING |
DlgDocCharSetOther : "다른 캐릭터셋 인코딩", |
DlgDocDocType : "문서 헤드", |
DlgDocDocTypeOther : "다른 문서헤드", |
DlgDocIncXHTML : "XHTML 문서정의 포함", |
DlgDocBgColor : "배경색상", |
DlgDocBgImage : "배경이미지 URL", |
DlgDocBgNoScroll : "스크롤되지않는 배경", |
DlgDocCText : "텍스트", |
DlgDocCLink : "링크", |
DlgDocCVisited : "방문한 링크(Visited)", |
DlgDocCActive : "활성화된 링크(Active)", |
DlgDocMargins : "페이지 여백", |
DlgDocMaTop : "위", |
DlgDocMaLeft : "왼쪽", |
DlgDocMaRight : "오른쪽", |
DlgDocMaBottom : "아래", |
DlgDocMeIndex : "문서 키워드 (콤마로 구분)", |
DlgDocMeDescr : "문서 설명", |
DlgDocMeAuthor : "작성자", |
DlgDocMeCopy : "저작권", |
DlgDocPreview : "미리보기", |
// Templates Dialog |
Templates : "템플릿", |
DlgTemplatesTitle : "내용 템플릿", |
DlgTemplatesSelMsg : "에디터에서 사용할 템플릿을 선택하십시요.<br>(지금까지 작성된 내용은 사라집니다.):", |
DlgTemplatesLoading : "템플릿 목록을 불러오는중입니다. 잠시만 기다려주십시요.", |
DlgTemplatesNoTpl : "(템플릿이 없습니다.)", |
DlgTemplatesReplace : "Replace actual contents", //MISSING |
// About Dialog |
DlgAboutAboutTab : "About", |
DlgAboutBrowserInfoTab : "브라우저 정보", |
DlgAboutLicenseTab : "License", //MISSING |
DlgAboutVersion : "버전", |
DlgAboutLicense : "Licensed under the terms of the GNU Lesser General Public License", |
DlgAboutInfo : "For further information go to" |
} |
/branches/v1.0-menes/api/fckeditor/editor/lang/eu.js |
---|
New file |
0,0 → 1,502 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: eu.js |
* Basque language file. |
* Euskara hizkuntza fitxategia. |
* |
* File Authors: |
* Ibon Igartua (Librezale.org) |
*/ |
var FCKLang = |
{ |
// Language direction : "ltr" (left to right) or "rtl" (right to left). |
Dir : "ltr", |
ToolbarCollapse : "Estutu Tresna Barra", |
ToolbarExpand : "Hedatu Tresna Barra", |
// Toolbar Items and Context Menu |
Save : "Gorde", |
NewPage : "Orrialde Berria", |
Preview : "Aurrebista", |
Cut : "Ebaki", |
Copy : "Kopiatu", |
Paste : "Itsatsi", |
PasteText : "Itsatsi testu bezala", |
PasteWord : "Itsatsi Word-etik", |
Print : "Inprimatu", |
SelectAll : "Hautatu dena", |
RemoveFormat : "Kendu Formatoa", |
InsertLinkLbl : "Esteka", |
InsertLink : "Txertatu/Editatu Esteka", |
RemoveLink : "Kendu Esteka", |
Anchor : "Aingura", |
InsertImageLbl : "Irudia", |
InsertImage : "Txertatu/Editatu Irudia", |
InsertFlashLbl : "Flasha", |
InsertFlash : "Txertatu/Editatu Flasha", |
InsertTableLbl : "Taula", |
InsertTable : "Txertatu/Editatu Taula", |
InsertLineLbl : "Lerroa", |
InsertLine : "Txertatu Marra Horizontala", |
InsertSpecialCharLbl: "Karaktere Berezia", |
InsertSpecialChar : "Txertatu Karaktere Berezia", |
InsertSmileyLbl : "Aurpegierak", |
InsertSmiley : "Txertatu Aurpegierak", |
About : "FCKeditor-ri buruz", |
Bold : "Lodia", |
Italic : "Etzana", |
Underline : "Azpimarratu", |
StrikeThrough : "Marratua", |
Subscript : "Azpi-indize", |
Superscript : "Goi-indize", |
LeftJustify : "Lerrokatu Ezkerrean", |
CenterJustify : "Lerrokatu Erdian", |
RightJustify : "Lerrokatu Eskuman", |
BlockJustify : "Justifikatu", |
DecreaseIndent : "Txikitu Koska", |
IncreaseIndent : "Handitu Koska", |
Undo : "Desegin", |
Redo : "Berregin", |
NumberedListLbl : "Zenbakidun Zerrenda", |
NumberedList : "Txertatu/Kendu Zenbakidun zerrenda", |
BulletedListLbl : "Buletdun Zerrenda", |
BulletedList : "Txertatu/Kendu Buletdun zerrenda", |
ShowTableBorders : "Erakutsi Taularen Ertzak", |
ShowDetails : "Erakutsi Xehetasunak", |
Style : "Estiloa", |
FontFormat : "Formatoa", |
Font : "Letra-tipoa", |
FontSize : "Tamaina", |
TextColor : "Testu Kolorea", |
BGColor : "Atzeko kolorea", |
Source : "HTML Iturburua", |
Find : "Bilatu", |
Replace : "Ordezkatu", |
SpellCheck : "Ortografia", |
UniversalKeyboard : "Teklatu Unibertsala", |
PageBreakLbl : "Orrialde-jauzia", |
PageBreak : "Txertatu Orrialde-jauzia", |
Form : "Formularioa", |
Checkbox : "Kontrol-laukia", |
RadioButton : "Aukera-botoia", |
TextField : "Testu Eremua", |
Textarea : "Testu-area", |
HiddenField : "Ezkutuko Eremua", |
Button : "Botoia", |
SelectionField : "Hautespen Eremua", |
ImageButton : "Irudi Botoia", |
FitWindow : "Maximizatu editorearen tamaina", |
// Context Menu |
EditLink : "Aldatu Esteka", |
CellCM : "Gelaxka", |
RowCM : "Errenkada", |
ColumnCM : "Zutabea", |
InsertRow : "Txertatu Errenkada", |
DeleteRows : "Ezabatu Errenkadak", |
InsertColumn : "Txertatu Zutabea", |
DeleteColumns : "Ezabatu Zutabeak", |
InsertCell : "Txertatu Gelaxka", |
DeleteCells : "Kendu Gelaxkak", |
MergeCells : "Batu Gelaxkak", |
SplitCell : "Zatitu Gelaxka", |
TableDelete : "Ezabatu Taula", |
CellProperties : "Gelaxkaren Ezaugarriak", |
TableProperties : "Taularen Ezaugarriak", |
ImageProperties : "Irudiaren Ezaugarriak", |
FlashProperties : "Flasharen Ezaugarriak", |
AnchorProp : "Ainguraren Ezaugarriak", |
ButtonProp : "Botoiaren Ezaugarriak", |
CheckboxProp : "Kontrol-laukiko Ezaugarriak", |
HiddenFieldProp : "Ezkutuko Eremuaren Ezaugarriak", |
RadioButtonProp : "Aukera-botoiaren Ezaugarriak", |
ImageButtonProp : "Irudi Botoiaren Ezaugarriak", |
TextFieldProp : "Testu Eremuaren Ezaugarriak", |
SelectionFieldProp : "Hautespen Eremuaren Ezaugarriak", |
TextareaProp : "Testu-arearen Ezaugarriak", |
FormProp : "Formularioaren Ezaugarriak", |
FontFormats : "Arrunta;Formateatua;Helbidea;Izenburua 1;Izenburua 2;Izenburua 3;Izenburua 4;Izenburua 5;Izenburua 6;Paragrafoa (DIV)", |
// Alerts and Messages |
ProcessingXHTML : "XHTML Prozesatzen. Itxaron mesedez...", |
Done : "Eginda", |
PasteWordConfirm : "Itsatsi nahi duzun textua Wordetik hartua dela dirudi. Itsatsi baino lehen garbitu nahi duzu?", |
NotCompatiblePaste : "Komando hau Internet Explorer 5.5 bertsiorako edo ondorengoentzako erabilgarria dago. Garbitu gabe itsatsi nahi duzu?", |
UnknownToolbarItem : "Ataza barrako elementu ezezaguna \"%1\"", |
UnknownCommand : "Komando izen ezezaguna \"%1\"", |
NotImplemented : "Komando ez inplementatua", |
UnknownToolbarSet : "Ataza barra \"%1\" taldea ez da existitzen", |
NoActiveX : "Zure nabigatzailearen segustasun hobespenak editore honen zenbait ezaugarri mugatu ditzake. \"ActiveX kontrolak eta plug-inak\" aktibatu beharko zenituzke, bestela erroreak eta ezaugarrietan mugak egon daitezke.", |
BrowseServerBlocked : "Baliabideen arakatzailea ezin da ireki. Ziurtatu popup blokeatzaileak desgaituta dituzula.", |
DialogBlocked : "Ezin da elkarrizketa-leihoa ireki. Ziurtatu popup blokeatzaileak desgaituta dituzula.", |
// Dialogs |
DlgBtnOK : "Ados", |
DlgBtnCancel : "Utzi", |
DlgBtnClose : "Itxi", |
DlgBtnBrowseServer : "Zerbitzaria arakatu", |
DlgAdvancedTag : "Aurreratua", |
DlgOpOther : "<Bestelakoak>", |
DlgInfoTab : "Informazioa", |
DlgAlertUrl : "Mesedez URLa idatzi ezazu", |
// General Dialogs Labels |
DlgGenNotSet : "<Ezarri gabe>", |
DlgGenId : "Id", |
DlgGenLangDir : "Hizkuntzaren Norabidea", |
DlgGenLangDirLtr : "Ezkerretik Eskumara(LTR)", |
DlgGenLangDirRtl : "Eskumatik Ezkerrera (RTL)", |
DlgGenLangCode : "Hizkuntza Kodea", |
DlgGenAccessKey : "Sarbide-gakoa", |
DlgGenName : "Izena", |
DlgGenTabIndex : "Tabulazio Indizea", |
DlgGenLongDescr : "URL Deskribapen Luzea", |
DlgGenClass : "Estilo-orriko Klaseak", |
DlgGenTitle : "Izenburua", |
DlgGenContType : "Eduki Mota (Content Type)", |
DlgGenLinkCharset : "Estekatutako Karaktere Multzoa", |
DlgGenStyle : "Estiloa", |
// Image Dialog |
DlgImgTitle : "Irudi Ezaugarriak", |
DlgImgInfoTab : "Irudi informazioa", |
DlgImgBtnUpload : "Zerbitzarira bidalia", |
DlgImgURL : "URL", |
DlgImgUpload : "Gora Kargatu", |
DlgImgAlt : "Textu Alternatiboa", |
DlgImgWidth : "Zabalera", |
DlgImgHeight : "Altuera", |
DlgImgLockRatio : "Erlazioa Blokeatu", |
DlgBtnResetSize : "Tamaina Berrezarri", |
DlgImgBorder : "Ertza", |
DlgImgHSpace : "HSpace", |
DlgImgVSpace : "VSpace", |
DlgImgAlign : "Lerrokatu", |
DlgImgAlignLeft : "Ezkerrera", |
DlgImgAlignAbsBottom: "Abs Behean", |
DlgImgAlignAbsMiddle: "Abs Erdian", |
DlgImgAlignBaseline : "Oinan", |
DlgImgAlignBottom : "Behean", |
DlgImgAlignMiddle : "Erdian", |
DlgImgAlignRight : "Eskuman", |
DlgImgAlignTextTop : "Testua Goian", |
DlgImgAlignTop : "Goian", |
DlgImgPreview : "Aurrebista", |
DlgImgAlertUrl : "Mesedez Irudiaren URLa idatzi", |
DlgImgLinkTab : "Esteka", |
// Flash Dialog |
DlgFlashTitle : "Flasharen Ezaugarriak", |
DlgFlashChkPlay : "Automatikoki Erreproduzitu", |
DlgFlashChkLoop : "Begizta", |
DlgFlashChkMenu : "Flasharen Menua Gaitu", |
DlgFlashScale : "Eskalatu", |
DlgFlashScaleAll : "Dena erakutsi", |
DlgFlashScaleNoBorder : "Ertzarik gabe", |
DlgFlashScaleFit : "Doitu", |
// Link Dialog |
DlgLnkWindowTitle : "Esteka", |
DlgLnkInfoTab : "Estekaren Informazioa", |
DlgLnkTargetTab : "Helburua", |
DlgLnkType : "Esteka Mota", |
DlgLnkTypeURL : "URL", |
DlgLnkTypeAnchor : "Aingura horrialde honentan", |
DlgLnkTypeEMail : "ePosta", |
DlgLnkProto : "Protokoloa", |
DlgLnkProtoOther : "<Beste batzuk>", |
DlgLnkURL : "URL", |
DlgLnkAnchorSel : "Aingura bat hautatu", |
DlgLnkAnchorByName : "Aingura izenagatik", |
DlgLnkAnchorById : "Elementuaren ID-gatik", |
DlgLnkNoAnchors : "<Ez daude aingurak eskuragarri dokumentuan>", |
DlgLnkEMail : "ePosta Helbidea", |
DlgLnkEMailSubject : "Mezuaren Gaia", |
DlgLnkEMailBody : "Mezuaren Gorputza", |
DlgLnkUpload : "Gora kargatu", |
DlgLnkBtnUpload : "Zerbitzarira bidali", |
DlgLnkTarget : "Target (Helburua)", |
DlgLnkTargetFrame : "<marko>", |
DlgLnkTargetPopup : "<popup lehioa>", |
DlgLnkTargetBlank : "Lehio Berria (_blank)", |
DlgLnkTargetParent : "Lehio Gurasoa (_parent)", |
DlgLnkTargetSelf : "Lehio Berdina (_self)", |
DlgLnkTargetTop : "Goiko Lehioa (_top)", |
DlgLnkTargetFrameName : "Marko Helburuaren Izena", |
DlgLnkPopWinName : "Popup Lehioaren Izena", |
DlgLnkPopWinFeat : "Popup Lehioaren Ezaugarriak", |
DlgLnkPopResize : "Tamaina Aldakorra", |
DlgLnkPopLocation : "Kokaleku Barra", |
DlgLnkPopMenu : "Menu Barra", |
DlgLnkPopScroll : "Korritze Barrak", |
DlgLnkPopStatus : "Egoera Barra", |
DlgLnkPopToolbar : "Tresna Barra", |
DlgLnkPopFullScrn : "Pantaila Osoa (IE)", |
DlgLnkPopDependent : "Menpekoa (Netscape)", |
DlgLnkPopWidth : "Zabalera", |
DlgLnkPopHeight : "Altuera", |
DlgLnkPopLeft : "Ezkerreko Posizioa", |
DlgLnkPopTop : "Goiko Posizioa", |
DlnLnkMsgNoUrl : "Mesedez URL esteka idatzi", |
DlnLnkMsgNoEMail : "Mesedez ePosta helbidea idatzi", |
DlnLnkMsgNoAnchor : "Mesedez aingura bat aukeratu", |
DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING |
// Color Dialog |
DlgColorTitle : "Kolore Aukeraketa", |
DlgColorBtnClear : "Garbitu", |
DlgColorHighlight : "Nabarmendu", |
DlgColorSelected : "Aukeratuta", |
// Smiley Dialog |
DlgSmileyTitle : "Aurpegiera Sartu", |
// Special Character Dialog |
DlgSpecialCharTitle : "Karaktere Berezia Aukeratu", |
// Table Dialog |
DlgTableTitle : "Taularen Ezaugarriak", |
DlgTableRows : "Lerroak", |
DlgTableColumns : "Zutabeak", |
DlgTableBorder : "Ertzaren Zabalera", |
DlgTableAlign : "Lerrokatu", |
DlgTableAlignNotSet : "<Ezarri gabe>", |
DlgTableAlignLeft : "Ezkerrean", |
DlgTableAlignCenter : "Erdian", |
DlgTableAlignRight : "Eskuman", |
DlgTableWidth : "Zabalera", |
DlgTableWidthPx : "pixel", |
DlgTableWidthPc : "ehuneko", |
DlgTableHeight : "Altuera", |
DlgTableCellSpace : "Gelaxka arteko tartea", |
DlgTableCellPad : "Gelaxken betegarria", |
DlgTableCaption : "Epigrafea", |
DlgTableSummary : "Laburpena", |
// Table Cell Dialog |
DlgCellTitle : "Gelaxken Ezaugarriak", |
DlgCellWidth : "Zabalera", |
DlgCellWidthPx : "pixel", |
DlgCellWidthPc : "ehuneko", |
DlgCellHeight : "Altuera", |
DlgCellWordWrap : "Itzulbira", |
DlgCellWordWrapNotSet : "<Ezarri gabe>", |
DlgCellWordWrapYes : "Bai", |
DlgCellWordWrapNo : "Ez", |
DlgCellHorAlign : "Horizontal Alignment", |
DlgCellHorAlignNotSet : "<Ezarri gabe>", |
DlgCellHorAlignLeft : "Ezkerrean", |
DlgCellHorAlignCenter : "Erdian", |
DlgCellHorAlignRight: "Eskuman", |
DlgCellVerAlign : "Lerrokatu Bertikalki", |
DlgCellVerAlignNotSet : "<Ezarri gabe>", |
DlgCellVerAlignTop : "Goian", |
DlgCellVerAlignMiddle : "Erdian", |
DlgCellVerAlignBottom : "Behean", |
DlgCellVerAlignBaseline : "Oinan", |
DlgCellRowSpan : "Lerroak Hedatu", |
DlgCellCollSpan : "Zutabeak Hedatu", |
DlgCellBackColor : "Atzeko Kolorea", |
DlgCellBorderColor : "Ertzako Kolorea", |
DlgCellBtnSelect : "Aukertau...", |
// Find Dialog |
DlgFindTitle : "Bilaketa", |
DlgFindFindBtn : "Bilatu", |
DlgFindNotFoundMsg : "Idatzitako testua ez da topatu.", |
// Replace Dialog |
DlgReplaceTitle : "Ordeztu", |
DlgReplaceFindLbl : "Zer bilatu:", |
DlgReplaceReplaceLbl : "Zerekin ordeztu:", |
DlgReplaceCaseChk : "Maiuskula/minuskula", |
DlgReplaceReplaceBtn : "Ordeztu", |
DlgReplaceReplAllBtn : "Ordeztu Guztiak", |
DlgReplaceWordChk : "Esaldi osoa bilatu", |
// Paste Operations / Dialog |
PasteErrorPaste : "Zure web nabigatzailearen segurtasun ezarpenak testuak automatikoki itsastea ez dute baimentzen. Mesedez teklatua erabili ezazu (Ctrl+V).", |
PasteErrorCut : "Zure web nabigatzailearen segurtasun ezarpenak testuak automatikoki moztea ez dute baimentzen. Mesedez teklatua erabili ezazu (Ctrl+X).", |
PasteErrorCopy : "Zure web nabigatzailearen segurtasun ezarpenak testuak automatikoki kopiatzea ez dute baimentzen. Mesedez teklatua erabili ezazu (Ctrl+C).", |
PasteAsText : "Testu Arrunta bezala Itsatsi", |
PasteFromWord : "Word-etik itsatsi", |
DlgPasteMsg2 : "Mesedez teklatua erabilita (<STRONG>Ctrl+V</STRONG>) ondorego eremuan testua itsatsi eta <STRONG>OK</STRONG> sakatu.", |
DlgPasteIgnoreFont : "Letra Motaren definizioa ezikusi", |
DlgPasteRemoveStyles : "Estilo definizioak kendu", |
DlgPasteCleanBox : "Testu-eremua Garbitu", |
// Color Picker |
ColorAutomatic : "Automatikoa", |
ColorMoreColors : "Kolore gehiago...", |
// Document Properties |
DocProps : "Dokumentuaren Ezarpenak", |
// Anchor Dialog |
DlgAnchorTitle : "Ainguraren Ezaugarriak", |
DlgAnchorName : "Ainguraren Izena", |
DlgAnchorErrorName : "Idatzi ainguraren izena", |
// Speller Pages Dialog |
DlgSpellNotInDic : "Ez dago hiztegian", |
DlgSpellChangeTo : "Honekin ordezkatu", |
DlgSpellBtnIgnore : "Ezikusi", |
DlgSpellBtnIgnoreAll : "Denak Ezikusi", |
DlgSpellBtnReplace : "Ordezkatu", |
DlgSpellBtnReplaceAll : "Denak Ordezkatu", |
DlgSpellBtnUndo : "Desegin", |
DlgSpellNoSuggestions : "- Iradokizunik ez -", |
DlgSpellProgress : "Zuzenketa ortografikoa martxan...", |
DlgSpellNoMispell : "Zuzenketa ortografikoa bukatuta: Akatsik ez", |
DlgSpellNoChanges : "Zuzenketa ortografikoa bukatuta: Ez da ezer aldatu", |
DlgSpellOneChange : "Zuzenketa ortografikoa bukatuta: Hitz bat aldatu da", |
DlgSpellManyChanges : "Zuzenketa ortografikoa bukatuta: %1 hitz aldatu dira", |
IeSpellDownload : "Zuzentzaile ortografikoa ez dago instalatuta. Deskargatu nahi duzu?", |
// Button Dialog |
DlgButtonText : "Testua (Balorea)", |
DlgButtonType : "Mota", |
DlgButtonTypeBtn : "Button", //MISSING |
DlgButtonTypeSbm : "Submit", //MISSING |
DlgButtonTypeRst : "Reset", //MISSING |
// Checkbox and Radio Button Dialogs |
DlgCheckboxName : "Izena", |
DlgCheckboxValue : "Balorea", |
DlgCheckboxSelected : "Hautatuta", |
// Form Dialog |
DlgFormName : "Izena", |
DlgFormAction : "Ekintza", |
DlgFormMethod : "Method", |
// Select Field Dialog |
DlgSelectName : "Izena", |
DlgSelectValue : "Balorea", |
DlgSelectSize : "Tamaina", |
DlgSelectLines : "lerro kopurura", |
DlgSelectChkMulti : "Hautaketa anitzak baimendu", |
DlgSelectOpAvail : "Aukera Eskuragarriak", |
DlgSelectOpText : "Testua", |
DlgSelectOpValue : "Balorea", |
DlgSelectBtnAdd : "Gehitu", |
DlgSelectBtnModify : "Aldatu", |
DlgSelectBtnUp : "Gora", |
DlgSelectBtnDown : "Behera", |
DlgSelectBtnSetValue : "Aukeratutako balorea ezarri", |
DlgSelectBtnDelete : "Ezabatu", |
// Textarea Dialog |
DlgTextareaName : "Izena", |
DlgTextareaCols : "Zutabeak", |
DlgTextareaRows : "Lerroak", |
// Text Field Dialog |
DlgTextName : "Izena", |
DlgTextValue : "Balorea", |
DlgTextCharWidth : "Zabalera", |
DlgTextMaxChars : "Zenbat karaktere gehienez", |
DlgTextType : "Mota", |
DlgTextTypeText : "Testua", |
DlgTextTypePass : "Pasahitza", |
// Hidden Field Dialog |
DlgHiddenName : "Izena", |
DlgHiddenValue : "Balorea", |
// Bulleted List Dialog |
BulletedListProp : "Buletdun Zerrendaren Ezarpenak", |
NumberedListProp : "Zenbakidun Zerrendaren Ezarpenak", |
DlgLstStart : "Start", //MISSING |
DlgLstType : "Mota", |
DlgLstTypeCircle : "Zirkulua", |
DlgLstTypeDisc : "Diskoa", |
DlgLstTypeSquare : "Karratua", |
DlgLstTypeNumbers : "Zenbakiak (1, 2, 3)", |
DlgLstTypeLCase : "Letra xeheak (a, b, c)", |
DlgLstTypeUCase : "Letra larriak (A, B, C)", |
DlgLstTypeSRoman : "Erromatar zenbaki zeheak (i, ii, iii)", |
DlgLstTypeLRoman : "Erromatar zenbaki larriak (I, II, III)", |
// Document Properties Dialog |
DlgDocGeneralTab : "Orokorra", |
DlgDocBackTab : "Atzekaldea", |
DlgDocColorsTab : "Koloreak eta Marjinak", |
DlgDocMetaTab : "Meta Informazioa", |
DlgDocPageTitle : "Orriaren Izenburua", |
DlgDocLangDir : "Hizkuntzaren Norabidea", |
DlgDocLangDirLTR : "Ezkerretik eskumara (LTR)", |
DlgDocLangDirRTL : "Eskumatik ezkerrera (RTL)", |
DlgDocLangCode : "Hizkuntzaren Kodea", |
DlgDocCharSet : "Karaktere Multzoaren Kodeketa", |
DlgDocCharSetCE : "Central European", //MISSING |
DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING |
DlgDocCharSetCR : "Cyrillic", //MISSING |
DlgDocCharSetGR : "Greek", //MISSING |
DlgDocCharSetJP : "Japanese", //MISSING |
DlgDocCharSetKR : "Korean", //MISSING |
DlgDocCharSetTR : "Turkish", //MISSING |
DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING |
DlgDocCharSetWE : "Western European", //MISSING |
DlgDocCharSetOther : "Beste Karaktere Multzoaren Kodeketa", |
DlgDocDocType : "Document Type Goiburua", |
DlgDocDocTypeOther : "Beste Document Type Goiburua", |
DlgDocIncXHTML : "XHTML Ezarpenak", |
DlgDocBgColor : "Atzeko Kolorea", |
DlgDocBgImage : "Atzeko Irudiaren URL-a", |
DlgDocBgNoScroll : "Korritze gabeko Atzekaldea", |
DlgDocCText : "Testua", |
DlgDocCLink : "Estekak", |
DlgDocCVisited : "Bisitatutako Estekak", |
DlgDocCActive : "Esteka Aktiboa", |
DlgDocMargins : "Orrialdearen marjinak", |
DlgDocMaTop : "Goian", |
DlgDocMaLeft : "Ezkerrean", |
DlgDocMaRight : "Eskuman", |
DlgDocMaBottom : "Behean", |
DlgDocMeIndex : "Dokumentuaren Gako-hitzak (komarekin bananduta)", |
DlgDocMeDescr : "Dokumentuaren Deskribapena", |
DlgDocMeAuthor : "Egilea", |
DlgDocMeCopy : "Copyright", |
DlgDocPreview : "Aurrebista", |
// Templates Dialog |
Templates : "Txantiloiak", |
DlgTemplatesTitle : "Eduki Txantiloiak", |
DlgTemplatesSelMsg : "Mesedez txantiloia aukeratu editorean kargatzeko<br>(orain dauden edukiak galduko dira):", |
DlgTemplatesLoading : "Txantiloiak kargatzen. Itxaron mesedez...", |
DlgTemplatesNoTpl : "(Ez dago definitutako txantiloirik)", |
DlgTemplatesReplace : "Replace actual contents", //MISSING |
// About Dialog |
DlgAboutAboutTab : "Honi buruz", |
DlgAboutBrowserInfoTab : "Nabigatzailearen Informazioa", |
DlgAboutLicenseTab : "Lizentzia", |
DlgAboutVersion : "bertsioa", |
DlgAboutLicense : "GNU Lesser General Public License Lizentziapean", |
DlgAboutInfo : "Informazio gehiago eskuratzeko hona joan" |
} |
/branches/v1.0-menes/api/fckeditor/editor/lang/hu.js |
---|
New file |
0,0 → 1,502 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: hu.js |
* Hungarian language file. |
* |
* File Authors: |
* Varga Zsolt (meridian@netteszt.hu) |
* Géza Szűcs (flextor@flextor.hu) |
*/ |
var FCKLang = |
{ |
// Language direction : "ltr" (left to right) or "rtl" (right to left). |
Dir : "ltr", |
ToolbarCollapse : "Eszköztár elrejtése", |
ToolbarExpand : "Eszköztár megjelenítése", |
// Toolbar Items and Context Menu |
Save : "Mentés", |
NewPage : "Új oldal", |
Preview : "ElÅnézet", |
Cut : "Kivágás", |
Copy : "Másolás", |
Paste : "Beillesztés", |
PasteText : "Beillesztés formázás nélkül", |
PasteWord : "Beillesztés Word-bÅl", |
Print : "Nyomtatás", |
SelectAll : "Mindent kijelöl", |
RemoveFormat : "Formázás eltávolítása", |
InsertLinkLbl : "Hivatkozás", |
InsertLink : "Hivatkozás beillesztése/módosítása", |
RemoveLink : "Hivatkozás törlése", |
Anchor : "Horgony beillesztése/szerkesztése", |
InsertImageLbl : "Kép", |
InsertImage : "Kép beillesztése/módosítása", |
InsertFlashLbl : "Flash", |
InsertFlash : "Flash beillesztése, módosítása", |
InsertTableLbl : "Táblázat", |
InsertTable : "Táblázat beillesztése/módosítása", |
InsertLineLbl : "Vonal", |
InsertLine : "Elválasztóvonal beillesztése", |
InsertSpecialCharLbl: "Speciális karakter", |
InsertSpecialChar : "Speciális karakter beillesztése", |
InsertSmileyLbl : "Hangulatjelek", |
InsertSmiley : "Hangulatjelek beillesztése", |
About : "FCKeditor névjegy", |
Bold : "Félkövér", |
Italic : "Dőlt", |
Underline : "Aláhúzott", |
StrikeThrough : "Áthúzott", |
Subscript : "Alsó index", |
Superscript : "Felső index", |
LeftJustify : "Balra", |
CenterJustify : "Középre", |
RightJustify : "Jobbra", |
BlockJustify : "Sorkizárt", |
DecreaseIndent : "Behúzás csökkentése", |
IncreaseIndent : "Behúzás növelése", |
Undo : "Visszavonás", |
Redo : "Ismétlés", |
NumberedListLbl : "Számozás", |
NumberedList : "Számozás beillesztése/törlése", |
BulletedListLbl : "Felsorolás", |
BulletedList : "Felsorolás beillesztése/törlése", |
ShowTableBorders : "Táblázat szegély mutatása", |
ShowDetails : "Részletek mutatása", |
Style : "Stílus", |
FontFormat : "Formátum", |
Font : "Betűtípus", |
FontSize : "Méret", |
TextColor : "Betűszín", |
BGColor : "Háttérszín", |
Source : "Forráskód", |
Find : "Keresés", |
Replace : "Csere", |
SpellCheck : "Helyesírás-ellenÅrzés", |
UniversalKeyboard : "Univerzális billentyűzet", |
PageBreakLbl : "Oldaltörés", |
PageBreak : "Oldaltörés beillesztése", |
Form : "Űrlap", |
Checkbox : "JelölÅnégyzet", |
RadioButton : "Választógomb", |
TextField : "SzövegmezÅ", |
Textarea : "Szövegterület", |
HiddenField : "Rejtettmező", |
Button : "Gomb", |
SelectionField : "LegördülÅ lista", |
ImageButton : "Képgomb", |
FitWindow : "Maximalizálás", |
// Context Menu |
EditLink : "Hivatkozás módosítása", |
CellCM : "Cella", |
RowCM : "Sor", |
ColumnCM : "Oszlop", |
InsertRow : "Sor beszúrása", |
DeleteRows : "Sorok törlése", |
InsertColumn : "Oszlop beszúrása", |
DeleteColumns : "Oszlopok törlése", |
InsertCell : "Cella beszúrása", |
DeleteCells : "Cellák törlése", |
MergeCells : "Cellák egyesítése", |
SplitCell : "Cella szétválasztása", |
TableDelete : "Táblázat törlése", |
CellProperties : "Cella tulajdonságai", |
TableProperties : "Táblázat tulajdonságai", |
ImageProperties : "Kép tulajdonságai", |
FlashProperties : "Flash tulajdonságai", |
AnchorProp : "Horgony tulajdonságai", |
ButtonProp : "Gomb tulajdonságai", |
CheckboxProp : "JelölÅnégyzet tulajdonságai", |
HiddenFieldProp : "Rejtett mezÅ tulajdonságai", |
RadioButtonProp : "Választógomb tulajdonságai", |
ImageButtonProp : "Képgomb tulajdonságai", |
TextFieldProp : "SzövegmezÅ tulajdonságai", |
SelectionFieldProp : "LegördülÅ lista tulajdonságai", |
TextareaProp : "Szövegterület tulajdonságai", |
FormProp : "Å°rlap tulajdonságai", |
FontFormats : "Normál;Formázott;Címsor;Fejléc 1;Fejléc 2;Fejléc 3;Fejléc 4;Fejléc 5;Fejléc 6;Bekezdés (DIV)", |
// Alerts and Messages |
ProcessingXHTML : "XHTML feldolgozása. Kérem várjon...", |
Done : "Kész", |
PasteWordConfirm : "A beilleszteni kívánt szöveg Word-bÅl van másolva. El kívánja távolítani a formázást a beillesztés elÅtt?", |
NotCompatiblePaste : "Ez a parancs csak Internet Explorer 5.5 verziótól használható. Megpróbálja beilleszteni a szöveget az eredeti formázással?", |
UnknownToolbarItem : "Ismeretlen eszköztár elem \"%1\"", |
UnknownCommand : "Ismeretlen parancs \"%1\"", |
NotImplemented : "A parancs nem hajtható végre", |
UnknownToolbarSet : "Az eszközkészlet \"%1\" nem létezik", |
NoActiveX : "A böngészÅ biztonsági beállításai korlátozzák a szerkesztÅ lehetÅségeit. Engedélyezni kell ezt az opciót: \"Run ActiveX controls and plug-ins\". EttÅl függetlenül elÅfordulhatnak hibaüzenetek ill. bizonyos funkciók hiányozhatnak.", |
BrowseServerBlocked : "Nem lehet megnyitni a fájlböngészÅt. Bizonyosodjon meg róla, hogy a felbukkanó ablakok engedélyezve vannak.", |
DialogBlocked : "Nem lehet megnyitni a párbeszédablakot. Bizonyosodjon meg róla, hogy a felbukkanó ablakok engedélyezve vannak.", |
// Dialogs |
DlgBtnOK : "Rendben", |
DlgBtnCancel : "Mégsem", |
DlgBtnClose : "Bezárás", |
DlgBtnBrowseServer : "Böngészés a szerveren", |
DlgAdvancedTag : "További opciók", |
DlgOpOther : "Egyéb", |
DlgInfoTab : "Alaptulajdonságok", |
DlgAlertUrl : "Illessze be a webcímet", |
// General Dialogs Labels |
DlgGenNotSet : "<nincs beállítva>", |
DlgGenId : "Azonosító", |
DlgGenLangDir : "Írás iránya", |
DlgGenLangDirLtr : "Balról jobbra", |
DlgGenLangDirRtl : "Jobbról balra", |
DlgGenLangCode : "Nyelv kódja", |
DlgGenAccessKey : "Billentyűkombináció", |
DlgGenName : "Név", |
DlgGenTabIndex : "Tabulátor index", |
DlgGenLongDescr : "Részletes leírás webcíme", |
DlgGenClass : "Stíluskészlet", |
DlgGenTitle : "Súgócimke", |
DlgGenContType : "Súgó tartalomtípusa", |
DlgGenLinkCharset : "Hivatkozott tartalom kódlapja", |
DlgGenStyle : "Stílus", |
// Image Dialog |
DlgImgTitle : "Kép tulajdonságai", |
DlgImgInfoTab : "Alaptulajdonságok", |
DlgImgBtnUpload : "Küldés a szerverre", |
DlgImgURL : "Hivatkozás", |
DlgImgUpload : "Feltöltés", |
DlgImgAlt : "Buborék szöveg", |
DlgImgWidth : "Szélesség", |
DlgImgHeight : "Magasság", |
DlgImgLockRatio : "Arány megtartása", |
DlgBtnResetSize : "Eredeti méret", |
DlgImgBorder : "Keret", |
DlgImgHSpace : "Vízsz. táv", |
DlgImgVSpace : "Függ. táv", |
DlgImgAlign : "Igazítás", |
DlgImgAlignLeft : "Bal", |
DlgImgAlignAbsBottom: "Legaljára", |
DlgImgAlignAbsMiddle: "Közepére", |
DlgImgAlignBaseline : "Alapvonalhoz", |
DlgImgAlignBottom : "Aljára", |
DlgImgAlignMiddle : "Középre", |
DlgImgAlignRight : "Jobbra", |
DlgImgAlignTextTop : "Szöveg tetejére", |
DlgImgAlignTop : "Tetejére", |
DlgImgPreview : "ElÅnézet", |
DlgImgAlertUrl : "Töltse ki a kép webcímét", |
DlgImgLinkTab : "Hivatkozás", |
// Flash Dialog |
DlgFlashTitle : "Flash tulajdonságai", |
DlgFlashChkPlay : "Automata lejátszás", |
DlgFlashChkLoop : "Folyamatosan", |
DlgFlashChkMenu : "Flash menü engedélyezése", |
DlgFlashScale : "Méretezés", |
DlgFlashScaleAll : "Mindent mutat", |
DlgFlashScaleNoBorder : "Keret nélkül", |
DlgFlashScaleFit : "Teljes kitöltés", |
// Link Dialog |
DlgLnkWindowTitle : "Hivatkozás tulajdonságai", |
DlgLnkInfoTab : "Alaptulajdonságok", |
DlgLnkTargetTab : "Megjelenítés", |
DlgLnkType : "Hivatkozás típusa", |
DlgLnkTypeURL : "Webcím", |
DlgLnkTypeAnchor : "Horgony az oldalon", |
DlgLnkTypeEMail : "E-Mail", |
DlgLnkProto : "Protokoll", |
DlgLnkProtoOther : "<más>", |
DlgLnkURL : "Webcím", |
DlgLnkAnchorSel : "Horgony választása", |
DlgLnkAnchorByName : "Horgony név szerint", |
DlgLnkAnchorById : "Azonosító szerint", |
DlgLnkNoAnchors : "<Nincs horgony a dokumentumban>", |
DlgLnkEMail : "E-Mail cím", |
DlgLnkEMailSubject : "Üzenet tárgya", |
DlgLnkEMailBody : "Üzenet", |
DlgLnkUpload : "Feltöltés", |
DlgLnkBtnUpload : "Küldés a szerverre", |
DlgLnkTarget : "Tartalom megjelenítése", |
DlgLnkTargetFrame : "<keretben>", |
DlgLnkTargetPopup : "<felugró ablakban>", |
DlgLnkTargetBlank : "Új ablakban (_blank)", |
DlgLnkTargetParent : "SzülÅ ablakban (_parent)", |
DlgLnkTargetSelf : "Azonos ablakban (_self)", |
DlgLnkTargetTop : "Legfelső ablakban (_top)", |
DlgLnkTargetFrameName : "Keret neve", |
DlgLnkPopWinName : "Felugró ablak neve", |
DlgLnkPopWinFeat : "Felugró ablak jellemzÅi", |
DlgLnkPopResize : "MéretezhetÅ", |
DlgLnkPopLocation : "Címsor", |
DlgLnkPopMenu : "Menü sor", |
DlgLnkPopScroll : "GördítÅsáv", |
DlgLnkPopStatus : "Állapotsor", |
DlgLnkPopToolbar : "Eszköztár", |
DlgLnkPopFullScrn : "Teljes képernyÅ (csak IE)", |
DlgLnkPopDependent : "SzülÅhöz kapcsolt (csak Netscape)", |
DlgLnkPopWidth : "Szélesség", |
DlgLnkPopHeight : "Magasság", |
DlgLnkPopLeft : "Bal pozíció", |
DlgLnkPopTop : "FelsÅ pozíció", |
DlnLnkMsgNoUrl : "Adja meg a hivatkozás webcímét", |
DlnLnkMsgNoEMail : "Adja meg az E-Mail címet", |
DlnLnkMsgNoAnchor : "Válasszon egy horgonyt", |
DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING |
// Color Dialog |
DlgColorTitle : "Színválasztás", |
DlgColorBtnClear : "Törlés", |
DlgColorHighlight : "ElÅnézet", |
DlgColorSelected : "Kiválasztott", |
// Smiley Dialog |
DlgSmileyTitle : "Hangulatjel beszúrása", |
// Special Character Dialog |
DlgSpecialCharTitle : "Speciális karakter választása", |
// Table Dialog |
DlgTableTitle : "Táblázat tulajdonságai", |
DlgTableRows : "Sorok", |
DlgTableColumns : "Oszlopok", |
DlgTableBorder : "Szegélyméret", |
DlgTableAlign : "Igazítás", |
DlgTableAlignNotSet : "<Nincs beállítva>", |
DlgTableAlignLeft : "Balra", |
DlgTableAlignCenter : "Középre", |
DlgTableAlignRight : "Jobbra", |
DlgTableWidth : "Szélesség", |
DlgTableWidthPx : "képpont", |
DlgTableWidthPc : "százalék", |
DlgTableHeight : "Magasság", |
DlgTableCellSpace : "Cella térköz", |
DlgTableCellPad : "Cella belsÅ margó", |
DlgTableCaption : "Felirat", |
DlgTableSummary : "Leírás", |
// Table Cell Dialog |
DlgCellTitle : "Cella tulajdonságai", |
DlgCellWidth : "Szélesség", |
DlgCellWidthPx : "képpont", |
DlgCellWidthPc : "százalék", |
DlgCellHeight : "Magasság", |
DlgCellWordWrap : "Sortörés", |
DlgCellWordWrapNotSet : "<Nincs beállítva>", |
DlgCellWordWrapYes : "Igen", |
DlgCellWordWrapNo : "Nem", |
DlgCellHorAlign : "Vízsz. igazítás", |
DlgCellHorAlignNotSet : "<Nincs beállítva>", |
DlgCellHorAlignLeft : "Balra", |
DlgCellHorAlignCenter : "Középre", |
DlgCellHorAlignRight: "Jobbra", |
DlgCellVerAlign : "Függ. igazítás", |
DlgCellVerAlignNotSet : "<Nincs beállítva>", |
DlgCellVerAlignTop : "Tetejére", |
DlgCellVerAlignMiddle : "Középre", |
DlgCellVerAlignBottom : "Aljára", |
DlgCellVerAlignBaseline : "Egyvonalba", |
DlgCellRowSpan : "Sorok egyesítése", |
DlgCellCollSpan : "Oszlopok egyesítése", |
DlgCellBackColor : "Háttérszín", |
DlgCellBorderColor : "Szegélyszín", |
DlgCellBtnSelect : "Kiválasztás...", |
// Find Dialog |
DlgFindTitle : "Keresés", |
DlgFindFindBtn : "Keresés", |
DlgFindNotFoundMsg : "A keresett szöveg nem található.", |
// Replace Dialog |
DlgReplaceTitle : "Csere", |
DlgReplaceFindLbl : "Keresett szöveg:", |
DlgReplaceReplaceLbl : "Csere erre:", |
DlgReplaceCaseChk : "kis- és nagybetű megkülönböztetése", |
DlgReplaceReplaceBtn : "Csere", |
DlgReplaceReplAllBtn : "Az összes cseréje", |
DlgReplaceWordChk : "csak ha ez a teljes szó", |
// Paste Operations / Dialog |
PasteErrorPaste : "A böngészÅ biztonsági beállításai nem engedélyezik a szerkesztÅnek, hogy végrehajtsa a beillesztés műveletet. Használja az alábbi billentyűkombinációt (Ctrl+V).", |
PasteErrorCut : "A böngészÅ biztonsági beállításai nem engedélyezik a szerkesztÅnek, hogy végrehajtsa a kivágás műveletet. Használja az alábbi billentyűkombinációt (Ctrl+X).", |
PasteErrorCopy : "A böngészÅ biztonsági beállításai nem engedélyezik a szerkesztÅnek, hogy végrehajtsa a másolás műveletet. Használja az alábbi billentyűkombinációt (Ctrl+X).", |
PasteAsText : "Beillesztés formázatlan szövegként", |
PasteFromWord : "Beillesztés Word-bÅl", |
DlgPasteMsg2 : "Másolja be az alábbi mezÅbe a <STRONG>Ctrl+V</STRONG> billentyűk lenyomásával, majd nyomjon <STRONG>Rendben</STRONG>-t.", |
DlgPasteIgnoreFont : "Betű formázások megszüntetése", |
DlgPasteRemoveStyles : "Stílusok eltávolítása", |
DlgPasteCleanBox : "Törlés", |
// Color Picker |
ColorAutomatic : "Automatikus", |
ColorMoreColors : "További színek...", |
// Document Properties |
DocProps : "Dokumentum tulajdonságai", |
// Anchor Dialog |
DlgAnchorTitle : "Horgony tulajdonságai", |
DlgAnchorName : "Horgony neve", |
DlgAnchorErrorName : "Kérem adja meg a horgony nevét", |
// Speller Pages Dialog |
DlgSpellNotInDic : "Nincs a szótárban", |
DlgSpellChangeTo : "Módosítás", |
DlgSpellBtnIgnore : "Kihagyja", |
DlgSpellBtnIgnoreAll : "Mindet kihagyja", |
DlgSpellBtnReplace : "Csere", |
DlgSpellBtnReplaceAll : "Összes cseréje", |
DlgSpellBtnUndo : "Visszavonás", |
DlgSpellNoSuggestions : "Nincs javaslat", |
DlgSpellProgress : "Helyesírás-ellenÅrzés folyamatban...", |
DlgSpellNoMispell : "Helyesírás-ellenÅrzés kész: Nem találtam hibát", |
DlgSpellNoChanges : "Helyesírás-ellenÅrzés kész: Nincs változtatott szó", |
DlgSpellOneChange : "Helyesírás-ellenÅrzés kész: Egy szó cserélve", |
DlgSpellManyChanges : "Helyesírás-ellenÅrzés kész: %1 szó cserélve", |
IeSpellDownload : "A helyesírás-ellenÅrzÅ nincs telepítve. Szeretné letölteni most?", |
// Button Dialog |
DlgButtonText : "Szöveg (Érték)", |
DlgButtonType : "Típus", |
DlgButtonTypeBtn : "Gomb", |
DlgButtonTypeSbm : "Küldés", |
DlgButtonTypeRst : "Alaphelyzet", |
// Checkbox and Radio Button Dialogs |
DlgCheckboxName : "Név", |
DlgCheckboxValue : "Érték", |
DlgCheckboxSelected : "Kiválasztott", |
// Form Dialog |
DlgFormName : "Név", |
DlgFormAction : "Adatfeldolgozást végzÅ hivatkozás", |
DlgFormMethod : "Adatküldés módja", |
// Select Field Dialog |
DlgSelectName : "Név", |
DlgSelectValue : "Érték", |
DlgSelectSize : "Méret", |
DlgSelectLines : "sor", |
DlgSelectChkMulti : "több sor is kiválasztható", |
DlgSelectOpAvail : "ElérhetÅ opciók", |
DlgSelectOpText : "Szöveg", |
DlgSelectOpValue : "Érték", |
DlgSelectBtnAdd : "Hozzáad", |
DlgSelectBtnModify : "Módosít", |
DlgSelectBtnUp : "Fel", |
DlgSelectBtnDown : "Le", |
DlgSelectBtnSetValue : "Legyen az alapértelmezett érték", |
DlgSelectBtnDelete : "Töröl", |
// Textarea Dialog |
DlgTextareaName : "Név", |
DlgTextareaCols : "Karakterek száma egy sorban", |
DlgTextareaRows : "Sorok száma", |
// Text Field Dialog |
DlgTextName : "Név", |
DlgTextValue : "Érték", |
DlgTextCharWidth : "Megjelenített karakterek száma", |
DlgTextMaxChars : "Maximális karakterszám", |
DlgTextType : "Típus", |
DlgTextTypeText : "Szöveg", |
DlgTextTypePass : "Jelszó", |
// Hidden Field Dialog |
DlgHiddenName : "Név", |
DlgHiddenValue : "Érték", |
// Bulleted List Dialog |
BulletedListProp : "Felsorolás tulajdonságai", |
NumberedListProp : "Számozás tulajdonságai", |
DlgLstStart : "Start", |
DlgLstType : "Formátum", |
DlgLstTypeCircle : "Kör", |
DlgLstTypeDisc : "Lemez", |
DlgLstTypeSquare : "Négyzet", |
DlgLstTypeNumbers : "Számok (1, 2, 3)", |
DlgLstTypeLCase : "Kisbetűk (a, b, c)", |
DlgLstTypeUCase : "Nagybetűk (A, B, C)", |
DlgLstTypeSRoman : "Kis római számok (i, ii, iii)", |
DlgLstTypeLRoman : "Nagy római számok (I, II, III)", |
// Document Properties Dialog |
DlgDocGeneralTab : "Általános", |
DlgDocBackTab : "Háttér", |
DlgDocColorsTab : "Színek és margók", |
DlgDocMetaTab : "Meta adatok", |
DlgDocPageTitle : "Oldalcím", |
DlgDocLangDir : "Írás iránya", |
DlgDocLangDirLTR : "Balról jobbra", |
DlgDocLangDirRTL : "Jobbról balra", |
DlgDocLangCode : "Nyelv kód", |
DlgDocCharSet : "Karakterkódolás", |
DlgDocCharSetCE : "Közép-Európai", |
DlgDocCharSetCT : "Kínai Tradicionális (Big5)", |
DlgDocCharSetCR : "Cyrill", |
DlgDocCharSetGR : "Görög", |
DlgDocCharSetJP : "Japán", |
DlgDocCharSetKR : "Koreai", |
DlgDocCharSetTR : "Török", |
DlgDocCharSetUN : "Unicode (UTF-8)", |
DlgDocCharSetWE : "Nyugat-Európai", |
DlgDocCharSetOther : "Más karakterkódolás", |
DlgDocDocType : "Dokumentum típus fejléc", |
DlgDocDocTypeOther : "Más dokumentum típus fejléc", |
DlgDocIncXHTML : "XHTML deklarációk beillesztése", |
DlgDocBgColor : "Háttérszín", |
DlgDocBgImage : "Háttérkép cím", |
DlgDocBgNoScroll : "Nem gördíthetÅ háttér", |
DlgDocCText : "Szöveg", |
DlgDocCLink : "Cím", |
DlgDocCVisited : "Látogatott cím", |
DlgDocCActive : "Aktív cím", |
DlgDocMargins : "Oldal margók", |
DlgDocMaTop : "Felső", |
DlgDocMaLeft : "Bal", |
DlgDocMaRight : "Jobb", |
DlgDocMaBottom : "Alsó", |
DlgDocMeIndex : "Dokumentum keresÅszavak (vesszÅvel elválasztva)", |
DlgDocMeDescr : "Dokumentum leírás", |
DlgDocMeAuthor : "Szerző", |
DlgDocMeCopy : "Szerzői jog", |
DlgDocPreview : "ElÅnézet", |
// Templates Dialog |
Templates : "Sablonok", |
DlgTemplatesTitle : "ElérhetÅ sablonok", |
DlgTemplatesSelMsg : "Válassza ki melyik sablon nyíljon meg a szerkesztÅben<br>(a jelenlegi tartalom elveszik):", |
DlgTemplatesLoading : "Sablon lista betöltése. Kis türelmet...", |
DlgTemplatesNoTpl : "(Nincs sablon megadva)", |
DlgTemplatesReplace : "Kicseréli a jelenlegi tartalmat", |
// About Dialog |
DlgAboutAboutTab : "Névjegy", |
DlgAboutBrowserInfoTab : "BöngészÅ információ", |
DlgAboutLicenseTab : "Licensz", |
DlgAboutVersion : "verzió", |
DlgAboutLicense : "GNU Lesser General Public License szabadalom alá tartozik", |
DlgAboutInfo : "További információkért látogasson el ide:" |
} |
/branches/v1.0-menes/api/fckeditor/editor/lang/no.js |
---|
New file |
0,0 → 1,501 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: no.js |
* Norwegian language file. |
* |
* File Authors: |
* Martin Kronstad (www.siteman.no) (martin.kronstad@gmail.com) |
*/ |
var FCKLang = |
{ |
// Language direction : "ltr" (left to right) or "rtl" (right to left). |
Dir : "ltr", |
ToolbarCollapse : "Skjul verktøylinje", |
ToolbarExpand : "Vis verktøylinje", |
// Toolbar Items and Context Menu |
Save : "Lagre", |
NewPage : "Ny Side", |
Preview : "Forhåndsvis", |
Cut : "Klipp ut", |
Copy : "Kopier", |
Paste : "Lim inn", |
PasteText : "Lim inn som ren tekst", |
PasteWord : "Lim inn fra Word", |
Print : "Skriv ut", |
SelectAll : "Velg alle", |
RemoveFormat : "Fjern format", |
InsertLinkLbl : "Lenke", |
InsertLink : "Sett inn/Rediger lenke", |
RemoveLink : "Fjern lenke", |
Anchor : "Sett inn/Rediger anker", |
InsertImageLbl : "Bilde", |
InsertImage : "Sett inn/Rediger bilde", |
InsertFlashLbl : "Flash", |
InsertFlash : "Sett inn/Rediger Flash", |
InsertTableLbl : "Tabell", |
InsertTable : "Sett inn/Rediger tabell", |
InsertLineLbl : "Linje", |
InsertLine : "Sett inn horisontal linje", |
InsertSpecialCharLbl: "Spesielt tegn", |
InsertSpecialChar : "Sett inn spesielt tegn", |
InsertSmileyLbl : "Smil", |
InsertSmiley : "Sett inn smil", |
About : "Om FCKeditor", |
Bold : "Fet", |
Italic : "Kursiv", |
Underline : "Understrek", |
StrikeThrough : "Gjennomstrek", |
Subscript : "Senket skrift", |
Superscript : "Hevet skrift", |
LeftJustify : "Venstrejuster", |
CenterJustify : "Midtjuster", |
RightJustify : "Høyrejuster", |
BlockJustify : "Blokkjuster", |
DecreaseIndent : "Senk nivå", |
IncreaseIndent : "Øk nivå", |
Undo : "Angre", |
Redo : "Gjør om", |
NumberedListLbl : "Numrert liste", |
NumberedList : "Sett inn/Fjern numrert liste", |
BulletedListLbl : "Uordnet liste", |
BulletedList : "Sett inn/Fjern uordnet liste", |
ShowTableBorders : "Vis tabellrammer", |
ShowDetails : "Vis detaljer", |
Style : "Stil", |
FontFormat : "Format", |
Font : "Skrift", |
FontSize : "Størrelse", |
TextColor : "Tekstfarge", |
BGColor : "Bakgrunnsfarge", |
Source : "Kilde", |
Find : "Finn", |
Replace : "Erstatt", |
SpellCheck : "Stavekontroll", |
UniversalKeyboard : "Universelt tastatur", |
PageBreakLbl : "Sideskift", |
PageBreak : "Sett inn sideskift", |
Form : "Skjema", |
Checkbox : "Sjekkboks", |
RadioButton : "Radioknapp", |
TextField : "Tekstfelt", |
Textarea : "Tekstområde", |
HiddenField : "Skjult felt", |
Button : "Knapp", |
SelectionField : "Dropdown meny", |
ImageButton : "Bildeknapp", |
FitWindow : "Maksimer størrelsen på redigeringsverktøyet", |
// Context Menu |
EditLink : "Rediger lenke", |
CellCM : "Celle", |
RowCM : "Rader", |
ColumnCM : "Kolonne", |
InsertRow : "Sett inn rad", |
DeleteRows : "Slett rader", |
InsertColumn : "Sett inn kolonne", |
DeleteColumns : "Slett kolonner", |
InsertCell : "Sett inn celle", |
DeleteCells : "Slett celler", |
MergeCells : "Slå sammen celler", |
SplitCell : "Splitt celler", |
TableDelete : "Slett tabell", |
CellProperties : "Celleegenskaper", |
TableProperties : "Tabellegenskaper", |
ImageProperties : "Bildeegenskaper", |
FlashProperties : "Flash Egenskaper", |
AnchorProp : "Ankeregenskaper", |
ButtonProp : "Knappegenskaper", |
CheckboxProp : "Sjekkboksegenskaper", |
HiddenFieldProp : "Skjult felt egenskaper", |
RadioButtonProp : "Radioknappegenskaper", |
ImageButtonProp : "Bildeknappegenskaper", |
TextFieldProp : "Tekstfeltegenskaper", |
SelectionFieldProp : "Dropdown menyegenskaper", |
TextareaProp : "Tekstfeltegenskaper", |
FormProp : "Skjemaegenskaper", |
FontFormats : "Normal;Formatert;Adresse;Tittel 1;Tittel 2;Tittel 3;Tittel 4;Tittel 5;Tittel 6", |
// Alerts and Messages |
ProcessingXHTML : "Lager XHTML. Vennligst vent...", |
Done : "Ferdig", |
PasteWordConfirm : "Teksten du prøver å lime inn ser ut som om den kommer fra word , du bør rense den før du limer inn , vil du gjøre dette?", |
NotCompatiblePaste : "Denne kommandoen er tilgjenglig kun for Internet Explorer version 5.5 eller bedre. Vil du fortsette uten å rense?(Du kan lime inn som ren tekst)", |
UnknownToolbarItem : "Ukjent menyvalg \"%1\"", |
UnknownCommand : "Ukjent kommando \"%1\"", |
NotImplemented : "Kommando ikke ennå implimentert", |
UnknownToolbarSet : "Verktøylinjesett \"%1\" finnes ikke", |
NoActiveX : "Din nettleser's sikkerhetsinstillinger kan begrense noen av funksjonene i redigeringsverktøyet. Du må aktivere \"Kjør ActiveXkontroller og plugins\". Du kan oppleve feil og advarsler om manglende funksjoner", |
BrowseServerBlocked : "Kunne ikke åpne dialogboksen for filarkiv. Pass på at du har slått av popupstoppere.", |
DialogBlocked : "Kunne ikke åpne dialogboksen. Pass på at du har slått av popupstoppere.", |
// Dialogs |
DlgBtnOK : "OK", |
DlgBtnCancel : "Avbryt", |
DlgBtnClose : "Lukk", |
DlgBtnBrowseServer : "Bla igjennom server", |
DlgAdvancedTag : "Avansert", |
DlgOpOther : "<Annet>", |
DlgInfoTab : "Info", |
DlgAlertUrl : "Vennligst skriv inn URL'en", |
// General Dialogs Labels |
DlgGenNotSet : "<ikke satt>", |
DlgGenId : "Id", |
DlgGenLangDir : "Språkretning", |
DlgGenLangDirLtr : "Venstre til høyre (VTH)", |
DlgGenLangDirRtl : "Høyre til venstre (HTV)", |
DlgGenLangCode : "Språk kode", |
DlgGenAccessKey : "Aksessknapp", |
DlgGenName : "Navn", |
DlgGenTabIndex : "Tab Indeks", |
DlgGenLongDescr : "Utvidet beskrivelse", |
DlgGenClass : "Stilarkklasser", |
DlgGenTitle : "Tittel", |
DlgGenContType : "Type", |
DlgGenLinkCharset : "Lenket språkkart", |
DlgGenStyle : "Stil", |
// Image Dialog |
DlgImgTitle : "Bildeegenskaper", |
DlgImgInfoTab : "Bildeinformasjon", |
DlgImgBtnUpload : "Send det til serveren", |
DlgImgURL : "URL", |
DlgImgUpload : "Last opp", |
DlgImgAlt : "Alternativ tekst", |
DlgImgWidth : "Bredde", |
DlgImgHeight : "Høyde", |
DlgImgLockRatio : "Lås forhold", |
DlgBtnResetSize : "Tilbakestill størrelse", |
DlgImgBorder : "Ramme", |
DlgImgHSpace : "HMarg", |
DlgImgVSpace : "VMarg", |
DlgImgAlign : "Juster", |
DlgImgAlignLeft : "Venstre", |
DlgImgAlignAbsBottom: "Abs bunn", |
DlgImgAlignAbsMiddle: "Abs midten", |
DlgImgAlignBaseline : "Bunnlinje", |
DlgImgAlignBottom : "Bunn", |
DlgImgAlignMiddle : "Midten", |
DlgImgAlignRight : "Høyre", |
DlgImgAlignTextTop : "Tekst topp", |
DlgImgAlignTop : "Topp", |
DlgImgPreview : "Forhåndsvis", |
DlgImgAlertUrl : "Vennligst skriv bildeurlen", |
DlgImgLinkTab : "Lenke", |
// Flash Dialog |
DlgFlashTitle : "Flash Egenskaper", |
DlgFlashChkPlay : "Auto Spill", |
DlgFlashChkLoop : "Loop", |
DlgFlashChkMenu : "Slå på Flash meny", |
DlgFlashScale : "Skaler", |
DlgFlashScaleAll : "Vis alt", |
DlgFlashScaleNoBorder : "Ingen ramme", |
DlgFlashScaleFit : "Skaler til å passeExact Fit", |
// Link Dialog |
DlgLnkWindowTitle : "Lenke", |
DlgLnkInfoTab : "Lenkeinfo", |
DlgLnkTargetTab : "Mål", |
DlgLnkType : "Lenketype", |
DlgLnkTypeURL : "URL", |
DlgLnkTypeAnchor : "Lenke til bokmerke i teksten", |
DlgLnkTypeEMail : "E-Post", |
DlgLnkProto : "Protokoll", |
DlgLnkProtoOther : "<annet>", |
DlgLnkURL : "URL", |
DlgLnkAnchorSel : "Velg ett anker", |
DlgLnkAnchorByName : "Anker etter navn", |
DlgLnkAnchorById : "Element etter ID", |
DlgLnkNoAnchors : "<Ingen anker i dokumentet>", |
DlgLnkEMail : "E-Post Addresse", |
DlgLnkEMailSubject : "Meldingsemne", |
DlgLnkEMailBody : "Melding", |
DlgLnkUpload : "Last opp", |
DlgLnkBtnUpload : "Send til server", |
DlgLnkTarget : "Mål", |
DlgLnkTargetFrame : "<ramme>", |
DlgLnkTargetPopup : "<popup vindu>", |
DlgLnkTargetBlank : "Nytt vindu (_blank)", |
DlgLnkTargetParent : "Foreldre vindu (_parent)", |
DlgLnkTargetSelf : "Samme vindu (_self)", |
DlgLnkTargetTop : "Hele vindu (_top)", |
DlgLnkTargetFrameName : "Målramme", |
DlgLnkPopWinName : "Popup vindus navn", |
DlgLnkPopWinFeat : "Popup vindus egenskaper", |
DlgLnkPopResize : "Endre størrelse", |
DlgLnkPopLocation : "Adresselinje", |
DlgLnkPopMenu : "Menylinje", |
DlgLnkPopScroll : "Scrollbar", |
DlgLnkPopStatus : "Statuslinje", |
DlgLnkPopToolbar : "Verktøylinje", |
DlgLnkPopFullScrn : "Full skjerm (IE)", |
DlgLnkPopDependent : "Avhenging (Netscape)", |
DlgLnkPopWidth : "Bredde", |
DlgLnkPopHeight : "Høyde", |
DlgLnkPopLeft : "Venstre posisjon", |
DlgLnkPopTop : "Topp posisjon", |
DlnLnkMsgNoUrl : "Vennligst skriv inn lenkens url", |
DlnLnkMsgNoEMail : "Vennligst skriv inn e-postadressen", |
DlnLnkMsgNoAnchor : "Vennligst velg ett anker", |
DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING |
// Color Dialog |
DlgColorTitle : "Velg farge", |
DlgColorBtnClear : "Tøm", |
DlgColorHighlight : "Marker", |
DlgColorSelected : "Velg", |
// Smiley Dialog |
DlgSmileyTitle : "Sett inn smil", |
// Special Character Dialog |
DlgSpecialCharTitle : "Velg spesielt tegn", |
// Table Dialog |
DlgTableTitle : "Tabellegenskaper", |
DlgTableRows : "Rader", |
DlgTableColumns : "Kolonner", |
DlgTableBorder : "Rammestørrelse", |
DlgTableAlign : "Justering", |
DlgTableAlignNotSet : "<Ikke satt>", |
DlgTableAlignLeft : "Venstre", |
DlgTableAlignCenter : "Midtjuster", |
DlgTableAlignRight : "Høyre", |
DlgTableWidth : "Bredde", |
DlgTableWidthPx : "pixler", |
DlgTableWidthPc : "prosent", |
DlgTableHeight : "Høyde", |
DlgTableCellSpace : "Celle marg", |
DlgTableCellPad : "Celle polstring", |
DlgTableCaption : "Tittel", |
DlgTableSummary : "Sammendrag", |
// Table Cell Dialog |
DlgCellTitle : "Celle egenskaper", |
DlgCellWidth : "Bredde", |
DlgCellWidthPx : "pixeler", |
DlgCellWidthPc : "prosent", |
DlgCellHeight : "Høyde", |
DlgCellWordWrap : "Tekstbrytning", |
DlgCellWordWrapNotSet : "<Ikke satt>", |
DlgCellWordWrapYes : "Ja", |
DlgCellWordWrapNo : "Nei", |
DlgCellHorAlign : "Horisontal justering", |
DlgCellHorAlignNotSet : "<Ikke satt>", |
DlgCellHorAlignLeft : "Venstre", |
DlgCellHorAlignCenter : "Midtjuster", |
DlgCellHorAlignRight: "Høyre", |
DlgCellVerAlign : "Vertikal justering", |
DlgCellVerAlignNotSet : "<Ikke satt>", |
DlgCellVerAlignTop : "Topp", |
DlgCellVerAlignMiddle : "Midten", |
DlgCellVerAlignBottom : "Bunn", |
DlgCellVerAlignBaseline : "Bunnlinje", |
DlgCellRowSpan : "Radspenn", |
DlgCellCollSpan : "Kolonnespenn", |
DlgCellBackColor : "Bakgrunnsfarge", |
DlgCellBorderColor : "Rammefarge", |
DlgCellBtnSelect : "Velg...", |
// Find Dialog |
DlgFindTitle : "Finn", |
DlgFindFindBtn : "Finn", |
DlgFindNotFoundMsg : "Den spesifiserte teksten ble ikke funnet.", |
// Replace Dialog |
DlgReplaceTitle : "Erstatt", |
DlgReplaceFindLbl : "Finn hva:", |
DlgReplaceReplaceLbl : "Erstatt med:", |
DlgReplaceCaseChk : "Riktig case", |
DlgReplaceReplaceBtn : "Erstatt", |
DlgReplaceReplAllBtn : "Erstatt alle", |
DlgReplaceWordChk : "Finn hele ordet", |
// Paste Operations / Dialog |
PasteErrorPaste : "Din nettlesers sikkerhetsinstillinger tillater ikke automatisk innliming av tekst. Vennligst brukt snareveien (Ctrl+V).", |
PasteErrorCut : "Din nettlesers sikkerhetsinstillinger tillater ikke automatisk klipping av tekst. Vennligst brukt snareveien (Ctrl+X).", |
PasteErrorCopy : "Din nettlesers sikkerhetsinstillinger tillater ikke automatisk kopiering av tekst. Vennligst brukt snareveien (Ctrl+C).", |
PasteAsText : "Lim inn som ren tekst", |
PasteFromWord : "Lim inn fra word", |
DlgPasteMsg2 : "Vennligst lim inn i den følgende boksen med tastaturet (<STRONG>Ctrl+V</STRONG>) og trykk <STRONG>OK</STRONG>.", |
DlgPasteIgnoreFont : "Fjern skrifttyper", |
DlgPasteRemoveStyles : "Fjern stildefinisjoner", |
DlgPasteCleanBox : "Tøm boksen", |
// Color Picker |
ColorAutomatic : "Automatisk", |
ColorMoreColors : "Flere farger...", |
// Document Properties |
DocProps : "Dokumentegenskaper", |
// Anchor Dialog |
DlgAnchorTitle : "Ankeregenskaper", |
DlgAnchorName : "Ankernavn", |
DlgAnchorErrorName : "Vennligst skriv inn ankernavnet", |
// Speller Pages Dialog |
DlgSpellNotInDic : "Ikke i ordboken", |
DlgSpellChangeTo : "Endre til", |
DlgSpellBtnIgnore : "Ignorer", |
DlgSpellBtnIgnoreAll : "Ignorer alle", |
DlgSpellBtnReplace : "Erstatt", |
DlgSpellBtnReplaceAll : "Erstatt alle", |
DlgSpellBtnUndo : "Angre", |
DlgSpellNoSuggestions : "- ingen forslag -", |
DlgSpellProgress : "Stavekontroll pågår...", |
DlgSpellNoMispell : "Stavekontroll fullført: ingen feilstavinger funnet", |
DlgSpellNoChanges : "Stavekontroll fullført: ingen ord endret", |
DlgSpellOneChange : "Stavekontroll fullført: Ett ord endret", |
DlgSpellManyChanges : "Stavekontroll fullført: %1 ord endret", |
IeSpellDownload : "Stavekontroll ikke installert, vil du laste den ned nå?", |
// Button Dialog |
DlgButtonText : "Tekst", |
DlgButtonType : "Type", |
DlgButtonTypeBtn : "Button", //MISSING |
DlgButtonTypeSbm : "Submit", //MISSING |
DlgButtonTypeRst : "Reset", //MISSING |
// Checkbox and Radio Button Dialogs |
DlgCheckboxName : "Navn", |
DlgCheckboxValue : "Verdi", |
DlgCheckboxSelected : "Valgt", |
// Form Dialog |
DlgFormName : "Navn", |
DlgFormAction : "Handling", |
DlgFormMethod : "Metode", |
// Select Field Dialog |
DlgSelectName : "Navn", |
DlgSelectValue : "Verdi", |
DlgSelectSize : "Størrelse", |
DlgSelectLines : "Linjer", |
DlgSelectChkMulti : "Tillat flervalg", |
DlgSelectOpAvail : "Tilgjenglige alternativer", |
DlgSelectOpText : "Tekst", |
DlgSelectOpValue : "Verdi", |
DlgSelectBtnAdd : "Legg til", |
DlgSelectBtnModify : "Endre", |
DlgSelectBtnUp : "Opp", |
DlgSelectBtnDown : "Ned", |
DlgSelectBtnSetValue : "Sett som valgt", |
DlgSelectBtnDelete : "Slett", |
// Textarea Dialog |
DlgTextareaName : "Navn", |
DlgTextareaCols : "Kolonner", |
DlgTextareaRows : "Rader", |
// Text Field Dialog |
DlgTextName : "Navn", |
DlgTextValue : "verdi", |
DlgTextCharWidth : "Tegnbredde", |
DlgTextMaxChars : "Maks antall tegn", |
DlgTextType : "Type", |
DlgTextTypeText : "Tekst", |
DlgTextTypePass : "Passord", |
// Hidden Field Dialog |
DlgHiddenName : "Navn", |
DlgHiddenValue : "Verdi", |
// Bulleted List Dialog |
BulletedListProp : "Uordnet listeegenskaper", |
NumberedListProp : "Ordnet listeegenskaper", |
DlgLstStart : "Start", //MISSING |
DlgLstType : "Type", |
DlgLstTypeCircle : "Sirkel", |
DlgLstTypeDisc : "Hel sirkel", |
DlgLstTypeSquare : "Firkant", |
DlgLstTypeNumbers : "Numre(1, 2, 3)", |
DlgLstTypeLCase : "Små bokstaver (a, b, c)", |
DlgLstTypeUCase : "Store bokstaver(A, B, C)", |
DlgLstTypeSRoman : "Små romerske tall(i, ii, iii)", |
DlgLstTypeLRoman : "Store romerske tall(I, II, III)", |
// Document Properties Dialog |
DlgDocGeneralTab : "Generalt", |
DlgDocBackTab : "Bakgrunn", |
DlgDocColorsTab : "Farger og marginer", |
DlgDocMetaTab : "Meta Data", |
DlgDocPageTitle : "Sidetittel", |
DlgDocLangDir : "Språkretning", |
DlgDocLangDirLTR : "Venstre til høyre (LTR)", |
DlgDocLangDirRTL : "Høyre til venstre (RTL)", |
DlgDocLangCode : "Språkkode", |
DlgDocCharSet : "Tegnsett", |
DlgDocCharSetCE : "Central European", //MISSING |
DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING |
DlgDocCharSetCR : "Cyrillic", //MISSING |
DlgDocCharSetGR : "Greek", //MISSING |
DlgDocCharSetJP : "Japanese", //MISSING |
DlgDocCharSetKR : "Korean", //MISSING |
DlgDocCharSetTR : "Turkish", //MISSING |
DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING |
DlgDocCharSetWE : "Western European", //MISSING |
DlgDocCharSetOther : "Annet tegnsett", |
DlgDocDocType : "Dokumenttype header", |
DlgDocDocTypeOther : "Annet dokumenttype header", |
DlgDocIncXHTML : "Inkulder XHTML deklarasjon", |
DlgDocBgColor : "Bakgrunnsfarge", |
DlgDocBgImage : "Bakgrunnsbilde url", |
DlgDocBgNoScroll : "Ikke scroll bakgrunnsbilde", |
DlgDocCText : "Tekst", |
DlgDocCLink : "Link", |
DlgDocCVisited : "Besøkt lenke", |
DlgDocCActive : "Aktiv lenke", |
DlgDocMargins : "Sidemargin", |
DlgDocMaTop : "Topp", |
DlgDocMaLeft : "Venstre", |
DlgDocMaRight : "Høyre", |
DlgDocMaBottom : "Bunn", |
DlgDocMeIndex : "Dokument nøkkelord (kommaseparert)", |
DlgDocMeDescr : "Dokumentbeskrivelse", |
DlgDocMeAuthor : "Forfatter", |
DlgDocMeCopy : "Kopirett", |
DlgDocPreview : "Forhåndsvising", |
// Templates Dialog |
Templates : "Maler", |
DlgTemplatesTitle : "Innholdsmaler", |
DlgTemplatesSelMsg : "Velg malen du vil åpne<br>(innholdet du har skrevet blir tapt!):", |
DlgTemplatesLoading : "Laster malliste. Vennligst vent...", |
DlgTemplatesNoTpl : "(Ingen maler definert)", |
DlgTemplatesReplace : "Replace actual contents", //MISSING |
// About Dialog |
DlgAboutAboutTab : "Om", |
DlgAboutBrowserInfoTab : "Nettleserinfo", |
DlgAboutLicenseTab : "Lisens", |
DlgAboutVersion : "versjon", |
DlgAboutLicense : "Lisensiert under GNU Lesser General Public License", |
DlgAboutInfo : "Oversatt av Siteman AS<br /><a target=\"_blank\" href=\"http://www.siteman.no\">www.siteman.no</a><br /><br />For mer informasjon gå til" |
} |
/branches/v1.0-menes/api/fckeditor/editor/lang/sk.js |
---|
New file |
0,0 → 1,501 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: sk.js |
* Slovak language file. |
* |
* File Authors: |
* Samuel Szabo (samuel@nanete.sk) |
*/ |
var FCKLang = |
{ |
// Language direction : "ltr" (left to right) or "rtl" (right to left). |
Dir : "ltr", |
ToolbarCollapse : "SkryÅ¥ panel nástrojov", |
ToolbarExpand : "ZobraziÅ¥ panel nástrojov", |
// Toolbar Items and Context Menu |
Save : "Uložit", |
NewPage : "Nová stránka", |
Preview : "Náhľad", |
Cut : "VystrihnúÅ¥", |
Copy : "KopírovaÅ¥", |
Paste : "Vložiť", |
PasteText : "VložiÅ¥ ako Äistý text", |
PasteWord : "Vložiť z Wordu", |
Print : "Tlač", |
SelectAll : "Vybrať všetko", |
RemoveFormat : "OdstrániÅ¥ formátovanie", |
InsertLinkLbl : "Odkaz", |
InsertLink : "Vložiť/zmeniť odkaz", |
RemoveLink : "OdstrániÅ¥ odkaz", |
Anchor : "Vložiť/zmeniť kotvu", |
InsertImageLbl : "Obrázok", |
InsertImage : "Vložiť/zmeniť obrazok", |
InsertFlashLbl : "Flash", |
InsertFlash : "Vložiť/zmeniť Flash", |
InsertTableLbl : "Tabuľka", |
InsertTable : "Vložiť/zmeniť tabuľku", |
InsertLineLbl : "Čiara", |
InsertLine : "VložiÅ¥ vodorovnú Äiara", |
InsertSpecialCharLbl: "Speciálne znaky", |
InsertSpecialChar : "VložiÅ¥ Å¡peciálne znaky", |
InsertSmileyLbl : "Smajlíky", |
InsertSmiley : "VložiÅ¥ smajlíka", |
About : "O aplikáci FCKeditor", |
Bold : "TuÄné", |
Italic : "Kurzíva", |
Underline : "PodÄiarknuté", |
StrikeThrough : "PreÄiarknuté", |
Subscript : "Dolný index", |
Superscript : "Horný index", |
LeftJustify : "Zarovnať vľavo", |
CenterJustify : "Zarovnať na stred", |
RightJustify : "Zarovnať vpravo", |
BlockJustify : "Zarovnať do bloku", |
DecreaseIndent : "Zmenšiť odsadenie", |
IncreaseIndent : "ZväÄÅ¡iÅ¥ odsadenie", |
Undo : "SpäÅ¥", |
Redo : "Znovu", |
NumberedListLbl : "Äíslovanie", |
NumberedList : "VložiÅ¥/odstrániÅ¥ Äíslovaný zoznam", |
BulletedListLbl : "Odrážky", |
BulletedList : "VložiÅ¥/odstraniÅ¥ odrážky", |
ShowTableBorders : "Zobraziť okraje tabuliek", |
ShowDetails : "Zobraziť podrobnosti", |
Style : "Å týl", |
FontFormat : "Formát", |
Font : "Písmo", |
FontSize : "Veľkost", |
TextColor : "Farba textu", |
BGColor : "Farba pozadia", |
Source : "Zdroj", |
Find : "Hľadať", |
Replace : "Nahradiť", |
SpellCheck : "Kontrola pravopisu", |
UniversalKeyboard : "Univerzálna klávesnica", |
PageBreakLbl : "OddeľovaÄ stránky", |
PageBreak : "VložiÅ¥ oddeľovaÄ stránky", |
Form : "Formulár", |
Checkbox : "ZaÅ¡krtávacie políÄko", |
RadioButton : "PrepínaÄ", |
TextField : "Textové pole", |
Textarea : "Textová oblasÅ¥", |
HiddenField : "Skryté pole", |
Button : "TlaÄítko", |
SelectionField : "Rozbaľovací zoznam", |
ImageButton : "Obrázkové tlaÄítko", |
FitWindow : "Maximize the editor size", //MISSING |
// Context Menu |
EditLink : "Zmeniť odkaz", |
CellCM : "Cell", //MISSING |
RowCM : "Row", //MISSING |
ColumnCM : "Column", //MISSING |
InsertRow : "Vložiť riadok", |
DeleteRows : "Zmazať riadok", |
InsertColumn : "Vložiť stĺpec", |
DeleteColumns : "Zmazať stĺpec", |
InsertCell : "Vložiť bunku", |
DeleteCells : "Zmazať bunky", |
MergeCells : "ZlúÄiÅ¥ bunky", |
SplitCell : "Rozdeliť bunku", |
TableDelete : "Zmazať tabuľku", |
CellProperties : "Vlastnosti bunky", |
TableProperties : "Vlastnosti tabuľky", |
ImageProperties : "Vlastnosti obrázku", |
FlashProperties : "Vlastnosti Flashu", |
AnchorProp : "Vlastnosti kotvy", |
ButtonProp : "Vlastnosti tlaÄítka", |
CheckboxProp : "Vlastnosti zaÅ¡krtávacieho políÄka", |
HiddenFieldProp : "Vlastnosti skrytého poľa", |
RadioButtonProp : "Vlastnosti prepínaÄa", |
ImageButtonProp : "Vlastnosti obrázkového tlaÄítka", |
TextFieldProp : "Vlastnosti textového pola", |
SelectionFieldProp : "Vlastnosti rozbaľovacieho zoznamu", |
TextareaProp : "Vlastnosti textové oblasti", |
FormProp : "Vlastnosti formulára", |
FontFormats : "Normálny;Formátovaný;Adresa;Nadpis 1;Nadpis 2;Nadpis 3;Nadpis 4;Nadpis 5;Nadpis 6;Odsek (DIV)", |
// Alerts and Messages |
ProcessingXHTML : "Prebieha spracovanie XHTML. Äakejte prosím...", |
Done : "DokonÄené.", |
PasteWordConfirm : "Vyzerá to tak, že vkladaný text je kopírovaný z Wordu. Chcete ho pred vložením vyÄistiÅ¥?", |
NotCompatiblePaste : "Tento príkaz je dostupný len v prehliadaÄi Internet Explorer verzie 5.5 alebo vyÅ¡Å¡ej. Chcete vložiÅ¥ text bez vyÄistenia?", |
UnknownToolbarItem : "Neznáma položka panela nástrojov \"%1\"", |
UnknownCommand : "Neznámy príkaz \"%1\"", |
NotImplemented : "Príkaz nie je implementovaný", |
UnknownToolbarSet : "Panel nástrojov \"%1\" neexistuje", |
NoActiveX : "BezpeÄnostné nastavenia VaÅ¡eho prehliadaÄa môžu obmedzovaÅ¥ niektoré funkcie editora. Pre ich plnú funkÄnosÅ¥ musíte zapnúÅ¥ voľbu \"SpúÅ¡Å¥aÅ¥ ActiveX moduly a zásuvné moduly\", inak sa môžete stretnúÅ¥ s chybami a nefunkÄnosÅ¥ou niektorých funkcií.", |
BrowseServerBlocked : "PrehliadaÄ zdrojových prvkov nebolo možné otvoriÅ¥. Uistite sa, že máte vypnuté vÅ¡etky blokovaÄe vyskakujúcich okien.", |
DialogBlocked : "Dialógové okno nebolo možné otvoriÅ¥. Uistite sa, že máte vypnuté vÅ¡etky blokovaÄe vyskakujúcich okien.", |
// Dialogs |
DlgBtnOK : "OK", |
DlgBtnCancel : "Zrušiť", |
DlgBtnClose : "Zavrieť", |
DlgBtnBrowseServer : "PrechádzaÅ¥ server", |
DlgAdvancedTag : "RozÅ¡írené", |
DlgOpOther : "<Ďalšie>", |
DlgInfoTab : "Info", |
DlgAlertUrl : "Prosím vložte URL", |
// General Dialogs Labels |
DlgGenNotSet : "<nenastavené>", |
DlgGenId : "Id", |
DlgGenLangDir : "Orientácia jazyka", |
DlgGenLangDirLtr : "Zľava doprava (LTR)", |
DlgGenLangDirRtl : "Zprava doľava (RTL)", |
DlgGenLangCode : "Kód jazyka", |
DlgGenAccessKey : "Prístupový kľúÄ", |
DlgGenName : "Meno", |
DlgGenTabIndex : "Poradie prvku", |
DlgGenLongDescr : "Dlhý popis URL", |
DlgGenClass : "Trieda Å¡týlu", |
DlgGenTitle : "Pomocný titulok", |
DlgGenContType : "Pomocný typ obsahu", |
DlgGenLinkCharset : "Priradená znaková sada", |
DlgGenStyle : "Å týl", |
// Image Dialog |
DlgImgTitle : "Vlastnosti obrázku", |
DlgImgInfoTab : "Informácie o obrázku", |
DlgImgBtnUpload : "Odoslať na server", |
DlgImgURL : "URL", |
DlgImgUpload : "Odoslať", |
DlgImgAlt : "Alternatívny text", |
DlgImgWidth : "Å írka", |
DlgImgHeight : "VýÅ¡ka", |
DlgImgLockRatio : "Zámok", |
DlgBtnResetSize : "Pôvodná veľkosÅ¥", |
DlgImgBorder : "Okraje", |
DlgImgHSpace : "H-medzera", |
DlgImgVSpace : "V-medzera", |
DlgImgAlign : "Zarovnanie", |
DlgImgAlignLeft : "Vľavo", |
DlgImgAlignAbsBottom: "Úplne dole", |
DlgImgAlignAbsMiddle: "Do stredu", |
DlgImgAlignBaseline : "Na základÅu", |
DlgImgAlignBottom : "Dole", |
DlgImgAlignMiddle : "Na stred", |
DlgImgAlignRight : "Vpravo", |
DlgImgAlignTextTop : "Na horný okraj textu", |
DlgImgAlignTop : "Nahor", |
DlgImgPreview : "Náhľad", |
DlgImgAlertUrl : "Zadajte prosím URL obrázku", |
DlgImgLinkTab : "Odkaz", |
// Flash Dialog |
DlgFlashTitle : "Vlastnosti Flashu", |
DlgFlashChkPlay : "Automatické prehrávanie", |
DlgFlashChkLoop : "Opakovanie", |
DlgFlashChkMenu : "Povoliť Flash Menu", |
DlgFlashScale : "Mierka", |
DlgFlashScaleAll : "Zobraziť mierku", |
DlgFlashScaleNoBorder : "Bez okrajov", |
DlgFlashScaleFit : "RoztiahnuÅ¥ na celé", |
// Link Dialog |
DlgLnkWindowTitle : "Odkaz", |
DlgLnkInfoTab : "Informácie o odkaze", |
DlgLnkTargetTab : "Cieľ", |
DlgLnkType : "Typ odkazu", |
DlgLnkTypeURL : "URL", |
DlgLnkTypeAnchor : "Kotva v tejto stránke", |
DlgLnkTypeEMail : "E-Mail", |
DlgLnkProto : "Protokol", |
DlgLnkProtoOther : "<iný>", |
DlgLnkURL : "URL", |
DlgLnkAnchorSel : "Vybrať kotvu", |
DlgLnkAnchorByName : "Podľa mena kotvy", |
DlgLnkAnchorById : "Podľa Id objektu", |
DlgLnkNoAnchors : "<V stránke nie je definovaná žiadna kotva>", |
DlgLnkEMail : "E-Mailová adresa", |
DlgLnkEMailSubject : "Predmet správy", |
DlgLnkEMailBody : "Telo správy", |
DlgLnkUpload : "Odoslať", |
DlgLnkBtnUpload : "Odoslať na server", |
DlgLnkTarget : "Cieľ", |
DlgLnkTargetFrame : "<rámec>", |
DlgLnkTargetPopup : "<vyskakovacie okno>", |
DlgLnkTargetBlank : "Nové okno (_blank)", |
DlgLnkTargetParent : "RodiÄovské okno (_parent)", |
DlgLnkTargetSelf : "Rovnaké okno (_self)", |
DlgLnkTargetTop : "Hlavné okno (_top)", |
DlgLnkTargetFrameName : "Meno rámu cieľa", |
DlgLnkPopWinName : "Názov vyskakovacieho okna", |
DlgLnkPopWinFeat : "Vlastnosti vyskakovacieho okna", |
DlgLnkPopResize : "Meniteľná veľkosÅ¥", |
DlgLnkPopLocation : "Panel umiestnenia", |
DlgLnkPopMenu : "Panel ponuky", |
DlgLnkPopScroll : "Posuvníky", |
DlgLnkPopStatus : "Stavový riadok", |
DlgLnkPopToolbar : "Panel nástrojov", |
DlgLnkPopFullScrn : "Celá obrazovka (IE)", |
DlgLnkPopDependent : "ZávislosÅ¥ (Netscape)", |
DlgLnkPopWidth : "Å írka", |
DlgLnkPopHeight : "VýÅ¡ka", |
DlgLnkPopLeft : "Ľavý okraj", |
DlgLnkPopTop : "Horný okraj", |
DlnLnkMsgNoUrl : "Zadajte prosím URL odkazu", |
DlnLnkMsgNoEMail : "Zadajte prosím e-mailovú adresu", |
DlnLnkMsgNoAnchor : "Vyberte prosím kotvu", |
DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING |
// Color Dialog |
DlgColorTitle : "Výber farby", |
DlgColorBtnClear : "Vymazať", |
DlgColorHighlight : "Zvýraznená", |
DlgColorSelected : "Vybraná", |
// Smiley Dialog |
DlgSmileyTitle : "Vkladanie smajlíkov", |
// Special Character Dialog |
DlgSpecialCharTitle : "Výber speciálneho znaku", |
// Table Dialog |
DlgTableTitle : "Vlastnosti tabuľky", |
DlgTableRows : "Riadky", |
DlgTableColumns : "Stĺpce", |
DlgTableBorder : "Ohraničenie", |
DlgTableAlign : "Zarovnanie", |
DlgTableAlignNotSet : "<nenastavené>", |
DlgTableAlignLeft : "Vľavo", |
DlgTableAlignCenter : "Na stred", |
DlgTableAlignRight : "Vpravo", |
DlgTableWidth : "Å írka", |
DlgTableWidthPx : "pixelov", |
DlgTableWidthPc : "percent", |
DlgTableHeight : "VýÅ¡ka", |
DlgTableCellSpace : "Vzdialenosť buniek", |
DlgTableCellPad : "Odsadenie obsahu", |
DlgTableCaption : "Popis", |
DlgTableSummary : "Prehľad", |
// Table Cell Dialog |
DlgCellTitle : "Vlastnosti bunky", |
DlgCellWidth : "Å írka", |
DlgCellWidthPx : "bodov", |
DlgCellWidthPc : "percent", |
DlgCellHeight : "VýÅ¡ka", |
DlgCellWordWrap : "Zalamovannie", |
DlgCellWordWrapNotSet : "<nenastavené>", |
DlgCellWordWrapYes : "Áno", |
DlgCellWordWrapNo : "Nie", |
DlgCellHorAlign : "Vodorovné zarovnanie", |
DlgCellHorAlignNotSet : "<nenastavené>", |
DlgCellHorAlignLeft : "Vľavo", |
DlgCellHorAlignCenter : "Na stred", |
DlgCellHorAlignRight: "Vpravo", |
DlgCellVerAlign : "Zvyslé zarovnanie", |
DlgCellVerAlignNotSet : "<nenastavené>", |
DlgCellVerAlignTop : "Nahor", |
DlgCellVerAlignMiddle : "Doprostred", |
DlgCellVerAlignBottom : "Dole", |
DlgCellVerAlignBaseline : "Na základÅu", |
DlgCellRowSpan : "ZlúÄené riadky", |
DlgCellCollSpan : "ZlúÄené stĺpce", |
DlgCellBackColor : "Farba pozadia", |
DlgCellBorderColor : "Farba ohraničenia", |
DlgCellBtnSelect : "Výber...", |
// Find Dialog |
DlgFindTitle : "Hľadať", |
DlgFindFindBtn : "Hľadať", |
DlgFindNotFoundMsg : "Hľadaný text nebol nájdený.", |
// Replace Dialog |
DlgReplaceTitle : "Nahradiť", |
DlgReplaceFindLbl : "Čo hľadať:", |
DlgReplaceReplaceLbl : "Äím nahradiÅ¥:", |
DlgReplaceCaseChk : "RozliÅ¡ovaÅ¥ malé/veľké písmená", |
DlgReplaceReplaceBtn : "Nahradiť", |
DlgReplaceReplAllBtn : "Nahradiť všetko", |
DlgReplaceWordChk : "Len celé slová", |
// Paste Operations / Dialog |
PasteErrorPaste : "BezpeÄnostné nastavenie VáÅ¡ho prohehliadaÄa nedovoľujú editoru spustiÅ¥ funkciu pre vloženie textu zo schránky. Prosím vložte text zo schránky pomocou klávesnice (Ctrl+V).", |
PasteErrorCut : "BezpeÄnostné nastavenie VáÅ¡ho prohehliadaÄa nedovoľujú editoru spustiÅ¥ funkciu pre vystrihnutie zvoleného textu do schránky. Prosím vystrihnite zvolený text do schránky pomocou klávesnice (Ctrl+X).", |
PasteErrorCopy : "BezpeÄnostné nastavenie VáÅ¡ho prohehliadaÄa nedovoľujú editoru spustiÅ¥ funkciu pre kopírovánie zvoleného textu do schránky. Prosím skopírujte zvolený text do schránky pomocou klávesnice (Ctrl+C).", |
PasteAsText : "VložiÅ¥ ako Äistý text", |
PasteFromWord : "Vložiť text z Wordu", |
DlgPasteMsg2 : "Do nasledujúceho boxu vložte obsah schránky použitím klávesnice (<STRONG>Ctrl+V</STRONG>) a stlaÄte <STRONG>OK</STRONG>.", |
DlgPasteIgnoreFont : "IgnorovaÅ¥ nastavenia typu písma", |
DlgPasteRemoveStyles : "OdstrániÅ¥ formátovanie", |
DlgPasteCleanBox : "VyÄistiÅ¥ schránku", |
// Color Picker |
ColorAutomatic : "Automaticky", |
ColorMoreColors : "Viac farieb...", |
// Document Properties |
DocProps : "Vlastnosti dokumentu", |
// Anchor Dialog |
DlgAnchorTitle : "Vlastnosti kotvy", |
DlgAnchorName : "Meno kotvy", |
DlgAnchorErrorName : "Zadajte prosím meno kotvy", |
// Speller Pages Dialog |
DlgSpellNotInDic : "Nie je v slovníku", |
DlgSpellChangeTo : "Zmeniť na", |
DlgSpellBtnIgnore : "Ignorovať", |
DlgSpellBtnIgnoreAll : "Ignorovať všetko", |
DlgSpellBtnReplace : "Prepísat", |
DlgSpellBtnReplaceAll : "Prepísat vÅ¡etko", |
DlgSpellBtnUndo : "SpäÅ¥", |
DlgSpellNoSuggestions : "- Žiadny návrh -", |
DlgSpellProgress : "Prebieha kontrola pravopisu...", |
DlgSpellNoMispell : "Kontrola pravopisu dokonÄená: bez chyb", |
DlgSpellNoChanges : "Kontrola pravopisu dokonÄená: žiadne slová nezmenené", |
DlgSpellOneChange : "Kontrola pravopisu dokonÄená: zmenené jedno slovo", |
DlgSpellManyChanges : "Kontrola pravopisu dokonÄená: zmenených %1 slov", |
IeSpellDownload : "Kontrola pravopisu nie je naiÅ¡talovaná. Chcete ju hneÄ stiahnuÅ¥?", |
// Button Dialog |
DlgButtonText : "Text", |
DlgButtonType : "Typ", |
DlgButtonTypeBtn : "Button", //MISSING |
DlgButtonTypeSbm : "Submit", //MISSING |
DlgButtonTypeRst : "Reset", //MISSING |
// Checkbox and Radio Button Dialogs |
DlgCheckboxName : "Názov", |
DlgCheckboxValue : "Hodnota", |
DlgCheckboxSelected : "Vybrané", |
// Form Dialog |
DlgFormName : "Názov", |
DlgFormAction : "Akcie", |
DlgFormMethod : "Metóda", |
// Select Field Dialog |
DlgSelectName : "Názov", |
DlgSelectValue : "Hodnota", |
DlgSelectSize : "Veľkosť", |
DlgSelectLines : "riadkov", |
DlgSelectChkMulti : "PovoliÅ¥ viacnásobný výber", |
DlgSelectOpAvail : "Dostupné možnosti", |
DlgSelectOpText : "Text", |
DlgSelectOpValue : "Hodnota", |
DlgSelectBtnAdd : "Pridať", |
DlgSelectBtnModify : "Zmeniť", |
DlgSelectBtnUp : "Nahor", |
DlgSelectBtnDown : "Dolu", |
DlgSelectBtnSetValue : "NastaviÅ¥ ako vybranú hodnotu", |
DlgSelectBtnDelete : "Zmazať", |
// Textarea Dialog |
DlgTextareaName : "Názov", |
DlgTextareaCols : "Stĺpce", |
DlgTextareaRows : "Riadky", |
// Text Field Dialog |
DlgTextName : "Názov", |
DlgTextValue : "Hodnota", |
DlgTextCharWidth : "Å írka pola (znakov)", |
DlgTextMaxChars : "Maximálny poÄet znakov", |
DlgTextType : "Typ", |
DlgTextTypeText : "Text", |
DlgTextTypePass : "Heslo", |
// Hidden Field Dialog |
DlgHiddenName : "Názov", |
DlgHiddenValue : "Hodnota", |
// Bulleted List Dialog |
BulletedListProp : "Vlastnosti odrážok", |
NumberedListProp : "Vlastnosti Äíslovania", |
DlgLstStart : "Start", //MISSING |
DlgLstType : "Typ", |
DlgLstTypeCircle : "Krúžok", |
DlgLstTypeDisc : "Disk", |
DlgLstTypeSquare : "Štvorec", |
DlgLstTypeNumbers : "Äíslovanie (1, 2, 3)", |
DlgLstTypeLCase : "Malé písmená (a, b, c)", |
DlgLstTypeUCase : "Veľké písmená (A, B, C)", |
DlgLstTypeSRoman : "Malé rímske Äíslice (i, ii, iii)", |
DlgLstTypeLRoman : "Veľké rímske Äíslice (I, II, III)", |
// Document Properties Dialog |
DlgDocGeneralTab : "VÅ¡eobecné", |
DlgDocBackTab : "Pozadie", |
DlgDocColorsTab : "Farby a okraje", |
DlgDocMetaTab : "Meta Data", |
DlgDocPageTitle : "Titulok", |
DlgDocLangDir : "Orientácie jazyka", |
DlgDocLangDirLTR : "Zľava doprava (LTR)", |
DlgDocLangDirRTL : "Zprava doľava (RTL)", |
DlgDocLangCode : "Kód jazyka", |
DlgDocCharSet : "Kódová stránka", |
DlgDocCharSetCE : "Central European", //MISSING |
DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING |
DlgDocCharSetCR : "Cyrillic", //MISSING |
DlgDocCharSetGR : "Greek", //MISSING |
DlgDocCharSetJP : "Japanese", //MISSING |
DlgDocCharSetKR : "Korean", //MISSING |
DlgDocCharSetTR : "Turkish", //MISSING |
DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING |
DlgDocCharSetWE : "Western European", //MISSING |
DlgDocCharSetOther : "Iná kódová stránka", |
DlgDocDocType : "Typ záhlavia dokumentu", |
DlgDocDocTypeOther : "Iný typ záhlavia dokumentu", |
DlgDocIncXHTML : "Obsahuje deklarácie XHTML", |
DlgDocBgColor : "Farba pozadia", |
DlgDocBgImage : "URL adresa obrázku na pozadí", |
DlgDocBgNoScroll : "Fixné pozadie", |
DlgDocCText : "Text", |
DlgDocCLink : "Odkaz", |
DlgDocCVisited : "NavÅ¡tívený odkaz", |
DlgDocCActive : "Aktívny odkaz", |
DlgDocMargins : "Okraje stránky", |
DlgDocMaTop : "Horný", |
DlgDocMaLeft : "Ľavý", |
DlgDocMaRight : "Pravý", |
DlgDocMaBottom : "Dolný", |
DlgDocMeIndex : "KľúÄové slová pre indexovanie (oddelené Äiarkou)", |
DlgDocMeDescr : "Popis stránky", |
DlgDocMeAuthor : "Autor", |
DlgDocMeCopy : "Autorské práva", |
DlgDocPreview : "Náhľad", |
// Templates Dialog |
Templates : "Å ablóny", |
DlgTemplatesTitle : "Å ablóny obsahu", |
DlgTemplatesSelMsg : "Prosím vyberte Å¡ablóny ma otvorenie v editore<br>(terajÅ¡í obsah bude stratený):", |
DlgTemplatesLoading : "Nahrávam zoznam Å¡ablón. Äakajte prosím...", |
DlgTemplatesNoTpl : "(žiadne Å¡ablóny nenájdené)", |
DlgTemplatesReplace : "Replace actual contents", //MISSING |
// About Dialog |
DlgAboutAboutTab : "O aplikáci", |
DlgAboutBrowserInfoTab : "Informácie o prehliadaÄi", |
DlgAboutLicenseTab : "License", //MISSING |
DlgAboutVersion : "verzie", |
DlgAboutLicense : "Licencované pod pravidlami GNU Lesser General Public License", |
DlgAboutInfo : "Viac informácií získate na" |
} |
/branches/v1.0-menes/api/fckeditor/editor/lang/vi.js |
---|
New file |
0,0 → 1,502 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: vi.js |
* Vietnamese language file. |
* |
* File Authors: |
* Phan Binh Giang (bbbgiang@yahoo.com) |
* Hà Thanh Hải (thanhhai.ha@gmail.com) |
*/ |
var FCKLang = |
{ |
// Language direction : "ltr" (left to right) or "rtl" (right to left). |
Dir : "ltr", |
ToolbarCollapse : "Thu gá»n Thanh công cụ", |
ToolbarExpand : "Má» rá»ng Thanh công cụ", |
// Toolbar Items and Context Menu |
Save : "Lưu", |
NewPage : "Trang mới", |
Preview : "Xem trước", |
Cut : "Cắt", |
Copy : "Sao chép", |
Paste : "Dán", |
PasteText : "Dán theo dạng vÄn bản thuần", |
PasteWord : "Dán vá»i Äá»nh dạng Word", |
Print : "In", |
SelectAll : "Chọn Tất cả", |
RemoveFormat : "Xoá Äá»nh dạng", |
InsertLinkLbl : "Liên kết", |
InsertLink : "Chèn/Sá»a Liên kết", |
RemoveLink : "Xoá Liên kết", |
Anchor : "Chèn/Sá»a Neo", |
InsertImageLbl : "Hình ảnh", |
InsertImage : "Chèn/Sá»a Hình ảnh", |
InsertFlashLbl : "Flash", |
InsertFlash : "Chèn/Sá»a Flash", |
InsertTableLbl : "Bảng", |
InsertTable : "Chèn/Sá»a Bảng", |
InsertLineLbl : "ÄÆ°á»ng phân cách ngang", |
InsertLine : "Chèn ÄÆ°á»ng phân cách ngang", |
InsertSpecialCharLbl: "Ký tá»± Äặc biá»t", |
InsertSpecialChar : "Chèn Ký tá»± Äặc biá»t", |
InsertSmileyLbl : "Hình biá»u lá» cảm xúc (mặt cÆ°á»i)", |
InsertSmiley : "Chèn Hình biá»u lá» cảm xúc (mặt cÆ°á»i)", |
About : "Giới thiệu về FCKeditor", |
Bold : "Đậm", |
Italic : "Nghiêng", |
Underline : "Gạch chân", |
StrikeThrough : "Gạch xuyên ngang", |
Subscript : "Chỉ số dưới", |
Superscript : "Chá» sá» trên", |
LeftJustify : "Canh trái", |
CenterJustify : "Canh giữa", |
RightJustify : "Canh phải", |
BlockJustify : "Canh đều", |
DecreaseIndent : "Dá»ch ra ngoài", |
IncreaseIndent : "Dá»ch vào trong", |
Undo : "Khôi phục thao tác", |
Redo : "Làm lại thao tác", |
NumberedListLbl : "Danh sách có thứ tá»±", |
NumberedList : "Chèn/Xoá Danh sách có thứ tá»±", |
BulletedListLbl : "Danh sách không thứ tá»±", |
BulletedList : "Chèn/Xoá Danh sách không thứ tá»±", |
ShowTableBorders : "Hiển thị Đường viền bảng", |
ShowDetails : "Hiển thị Chi tiết", |
Style : "Mẫu", |
FontFormat : "Định dạng", |
Font : "Phông", |
FontSize : "Cỡ chữ", |
TextColor : "Màu chữ", |
BGColor : "Màu ná»n", |
Source : "Mã HTML", |
Find : "Tìm kiếm", |
Replace : "Thay thế", |
SpellCheck : "Kiá»m tra Chính tả", |
UniversalKeyboard : "Bàn phím Quá»c tế", |
PageBreakLbl : "Ngắt trang", |
PageBreak : "Chèn Ngắt trang", |
Form : "Biểu mẫu", |
Checkbox : "Nút kiá»m", |
RadioButton : "Nút chá»n", |
TextField : "Trường văn bản", |
Textarea : "Vùng vÄn bản", |
HiddenField : "Trường ẩn", |
Button : "Nút", |
SelectionField : "Ô chá»n", |
ImageButton : "Nút hình ảnh", |
FitWindow : "Má» rá»ng tá»i Äa kích thÆ°á»c trình biên táºp", |
// Context Menu |
EditLink : "Sá»a Liên kết", |
CellCM : "Ô", |
RowCM : "Hàng", |
ColumnCM : "Cột", |
InsertRow : "Chèn Hàng", |
DeleteRows : "Xoá Hàng", |
InsertColumn : "Chèn Cá»t", |
DeleteColumns : "Xoá Cá»t", |
InsertCell : "Chèn Ô", |
DeleteCells : "Xoá Ô", |
MergeCells : "Trá»n Ô", |
SplitCell : "Chia Ô", |
TableDelete : "Xóa Bảng", |
CellProperties : "Thuá»c tính Ô", |
TableProperties : "Thuá»c tính Bảng", |
ImageProperties : "Thuá»c tính Hình ảnh", |
FlashProperties : "Thuá»c tính Flash", |
AnchorProp : "Thuá»c tính Neo", |
ButtonProp : "Thuá»c tính Nút", |
CheckboxProp : "Thuá»c tính Nút kiá»m", |
HiddenFieldProp : "Thuá»c tính TrÆ°á»ng ẩn", |
RadioButtonProp : "Thuá»c tính Nút chá»n", |
ImageButtonProp : "Thuá»c tính Nút hình ảnh", |
TextFieldProp : "Thuá»c tính TrÆ°á»ng vÄn bản", |
SelectionFieldProp : "Thuá»c tính Ô chá»n", |
TextareaProp : "Thuá»c tính Vùng vÄn bản", |
FormProp : "Thuá»c tính Biá»u mẫu", |
FontFormats : "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Normal (DIV)", |
// Alerts and Messages |
ProcessingXHTML : "Äang xá» lý XHTML. Vui lòng Äợi trong giây lát...", |
Done : "Äã hoàn thành", |
PasteWordConfirm : "VÄn bản bạn muá»n dán có kèm Äá»nh dạng của Word. Bạn có muá»n loại bá» Äá»nh dạng Word trÆ°á»c khi dán?", |
NotCompatiblePaste : "Lá»nh này chá» Äược há» trợ từ trình duyá»t Internet Explorer phiên bản 5.5 hoặc má»i hÆ¡n. Bạn có muá»n dán nguyên mẫu?", |
UnknownToolbarItem : "Không rõ mục trên thanh công cụ \"%1\"", |
UnknownCommand : "Không rõ lá»nh \"%1\"", |
NotImplemented : "Lá»nh không Äược thá»±c hiá»n", |
UnknownToolbarSet : "Thanh công cụ \"%1\" không tá»n tại", |
NoActiveX : "Các thiết láºp bảo máºt của trình duyá»t có thá» giá»i hạn má»t sá» chức nÄng của trình biên táºp. Bạn phải báºt tùy chá»n \"Run ActiveX controls and plug-ins\". Bạn có thá» gặp má»t sá» lá»i và thấy thiếu Äi má»t sá» chức nÄng.", |
BrowseServerBlocked : "Không thá» má» Äược bá» duyá»t tài nguyên. Hãy Äảm bảo chức nÄng chặn popup Äã bá» vô hiá»u hóa.", |
DialogBlocked : "Không thá» má» Äược cá»a sá» há»p thoại. Hãy Äảm bảo chức nÄng chặn popup Äã bá» vô hiá»u hóa.", |
// Dialogs |
DlgBtnOK : "Äá»ng ý", |
DlgBtnCancel : "Bỏ qua", |
DlgBtnClose : "Äóng", |
DlgBtnBrowseServer : "Duyá»t trên máy chủ", |
DlgAdvancedTag : "Mở rộng", |
DlgOpOther : "<Khác>", |
DlgInfoTab : "Thông tin", |
DlgAlertUrl : "Hãy nháºp vào má»t URL", |
// General Dialogs Labels |
DlgGenNotSet : "<không thiết láºp>", |
DlgGenId : "Định danh", |
DlgGenLangDir : "ÄÆ°á»ng dẫn Ngôn ngữ", |
DlgGenLangDirLtr : "Trái sang Phải (LTR)", |
DlgGenLangDirRtl : "Phải sang Trái (RTL)", |
DlgGenLangCode : "Mã Ngôn ngữ", |
DlgGenAccessKey : "Phím Há» trợ truy cáºp", |
DlgGenName : "Tên", |
DlgGenTabIndex : "Chỉ số của Tab", |
DlgGenLongDescr : "Mô tả URL", |
DlgGenClass : "Lớp Stylesheet", |
DlgGenTitle : "Advisory Title", |
DlgGenContType : "Advisory Content Type", |
DlgGenLinkCharset : "Bảng mã của tài nguyên Äược liên kết Äến", |
DlgGenStyle : "Mẫu", |
// Image Dialog |
DlgImgTitle : "Thuá»c tính Hình ảnh", |
DlgImgInfoTab : "Thông tin Hình ảnh", |
DlgImgBtnUpload : "Tải lên Máy chủ", |
DlgImgURL : "URL", |
DlgImgUpload : "Tải lên", |
DlgImgAlt : "Chú thích Hình ảnh", |
DlgImgWidth : "Rộng", |
DlgImgHeight : "Cao", |
DlgImgLockRatio : "Giữ tỷ lệ", |
DlgBtnResetSize : "Kích thÆ°á»c gá»c", |
DlgImgBorder : "Đường viền", |
DlgImgHSpace : "HSpace", |
DlgImgVSpace : "VSpace", |
DlgImgAlign : "Vá» trí", |
DlgImgAlignLeft : "Trái", |
DlgImgAlignAbsBottom: "Dưới tuyệt đối", |
DlgImgAlignAbsMiddle: "Giữa tuyệt đối", |
DlgImgAlignBaseline : "Baseline", |
DlgImgAlignBottom : "Dưới", |
DlgImgAlignMiddle : "Giữa", |
DlgImgAlignRight : "Phải", |
DlgImgAlignTextTop : "Phía trên chữ", |
DlgImgAlignTop : "Trên", |
DlgImgPreview : "Xem trước", |
DlgImgAlertUrl : "Hãy ÄÆ°a vào URL của hình ảnh", |
DlgImgLinkTab : "Liên kết", |
// Flash Dialog |
DlgFlashTitle : "Thuá»c tính Flash", |
DlgFlashChkPlay : "Tự động chạy", |
DlgFlashChkLoop : "Lặp", |
DlgFlashChkMenu : "Cho phép báºt Menu của Flash", |
DlgFlashScale : "Tỷ lệ", |
DlgFlashScaleAll : "Hiển thị tất cả", |
DlgFlashScaleNoBorder : "Không ÄÆ°á»ng viá»n", |
DlgFlashScaleFit : "Vừa vặn", |
// Link Dialog |
DlgLnkWindowTitle : "Liên kết", |
DlgLnkInfoTab : "Thông tin Liên kết", |
DlgLnkTargetTab : "Äích", |
DlgLnkType : "Kiá»u Liên kết", |
DlgLnkTypeURL : "URL", |
DlgLnkTypeAnchor : "Neo trong trang này", |
DlgLnkTypeEMail : "Thư điện tử", |
DlgLnkProto : "Giao thức", |
DlgLnkProtoOther : "<khác>", |
DlgLnkURL : "URL", |
DlgLnkAnchorSel : "Chọn một Neo", |
DlgLnkAnchorByName : "Theo Tên Neo", |
DlgLnkAnchorById : "Theo Định danh Element", |
DlgLnkNoAnchors : "<Không có Neo nào trong tài liá»u>", |
DlgLnkEMail : "Thư điện tử", |
DlgLnkEMailSubject : "Tiêu Äá» Thông Äiá»p", |
DlgLnkEMailBody : "Ná»i dung Thông Äiá»p", |
DlgLnkUpload : "Tải lên", |
DlgLnkBtnUpload : "Tải lên Máy chủ", |
DlgLnkTarget : "Äích", |
DlgLnkTargetFrame : "<khung>", |
DlgLnkTargetPopup : "<cửa sổ popup>", |
DlgLnkTargetBlank : "Cửa sổ mới (_blank)", |
DlgLnkTargetParent : "Cửa sổ cha (_parent)", |
DlgLnkTargetSelf : "Cùng cá»a sá» (_self)", |
DlgLnkTargetTop : "Cá»a sá» trên cùng(_top)", |
DlgLnkTargetFrameName : "Tên Khung Äích", |
DlgLnkPopWinName : "Tên Cá»a sá» Popup", |
DlgLnkPopWinFeat : "Đặc điểm của Cửa sổ Popup", |
DlgLnkPopResize : "Kích thÆ°á»c thay Äá»i", |
DlgLnkPopLocation : "Thanh vá» trí", |
DlgLnkPopMenu : "Thanh Menu", |
DlgLnkPopScroll : "Thanh cuộn", |
DlgLnkPopStatus : "Thanh trạng thái", |
DlgLnkPopToolbar : "Thanh công cụ", |
DlgLnkPopFullScrn : "Toàn màn hình (IE)", |
DlgLnkPopDependent : "Phụ thuộc (Netscape)", |
DlgLnkPopWidth : "Rộng", |
DlgLnkPopHeight : "Cao", |
DlgLnkPopLeft : "Vá» trí Trái", |
DlgLnkPopTop : "Vá» trí Trên", |
DlnLnkMsgNoUrl : "Hãy ÄÆ°a vào Liên kết URL", |
DlnLnkMsgNoEMail : "Hãy ÄÆ°a vào Äá»a chá» thÆ° Äiá»n tá»", |
DlnLnkMsgNoAnchor : "Hãy chá»n má»t Neo", |
DlnLnkMsgInvPopName : "Tên của cá»a sá» Popup phải bắt Äầu bằng má»t ký tá»± và không Äược chứa khoảng trắng", |
// Color Dialog |
DlgColorTitle : "Chá»n màu", |
DlgColorBtnClear : "Xoá", |
DlgColorHighlight : "Tô sáng", |
DlgColorSelected : "Äã chá»n", |
// Smiley Dialog |
DlgSmileyTitle : "Chèn Hình biá»u lá» cảm xúc (mặt cÆ°á»i)", |
// Special Character Dialog |
DlgSpecialCharTitle : "Hãy chá»n Ký tá»± Äặc biá»t", |
// Table Dialog |
DlgTableTitle : "Thuá»c tính bảng", |
DlgTableRows : "Hàng", |
DlgTableColumns : "Cột", |
DlgTableBorder : "Cỡ Đường viền", |
DlgTableAlign : "Canh lề", |
DlgTableAlignNotSet : "<Chưa thiết lập>", |
DlgTableAlignLeft : "Trái", |
DlgTableAlignCenter : "Giữa", |
DlgTableAlignRight : "Phải", |
DlgTableWidth : "Rộng", |
DlgTableWidthPx : "điểm (px)", |
DlgTableWidthPc : "%", |
DlgTableHeight : "Cao", |
DlgTableCellSpace : "Khoảng cách Ô", |
DlgTableCellPad : "Äá»m Ô", |
DlgTableCaption : "Đầu đề", |
DlgTableSummary : "Tóm lược", |
// Table Cell Dialog |
DlgCellTitle : "Thuá»c tính Ô", |
DlgCellWidth : "Rộng", |
DlgCellWidthPx : "điểm (px)", |
DlgCellWidthPc : "%", |
DlgCellHeight : "Cao", |
DlgCellWordWrap : "Bọc từ", |
DlgCellWordWrapNotSet : "<Chưa thiết lập>", |
DlgCellWordWrapYes : "Äá»ng ý", |
DlgCellWordWrapNo : "Không", |
DlgCellHorAlign : "Canh theo Chiều ngang", |
DlgCellHorAlignNotSet : "<Chưa thiết lập>", |
DlgCellHorAlignLeft : "Trái", |
DlgCellHorAlignCenter : "Giữa", |
DlgCellHorAlignRight: "Phải", |
DlgCellVerAlign : "Canh theo Chiều dọc", |
DlgCellVerAlignNotSet : "<Chưa thiết lập>", |
DlgCellVerAlignTop : "Trên", |
DlgCellVerAlignMiddle : "Giữa", |
DlgCellVerAlignBottom : "Dưới", |
DlgCellVerAlignBaseline : "Baseline", |
DlgCellRowSpan : "Ná»i Hàng", |
DlgCellCollSpan : "Nối Cột", |
DlgCellBackColor : "Màu ná»n", |
DlgCellBorderColor : "Màu viá»n", |
DlgCellBtnSelect : "Chọn...", |
// Find Dialog |
DlgFindTitle : "Tìm kiếm", |
DlgFindFindBtn : "Tìm kiếm", |
DlgFindNotFoundMsg : "Không tìm thấy chuá»i cần tìm.", |
// Replace Dialog |
DlgReplaceTitle : "Thay thế", |
DlgReplaceFindLbl : "Tìm chuá»i:", |
DlgReplaceReplaceLbl : "Thay bằng:", |
DlgReplaceCaseChk : "Phân biá»t chữ hoa/thÆ°á»ng", |
DlgReplaceReplaceBtn : "Thay thế", |
DlgReplaceReplAllBtn : "Thay thế Tất cả", |
DlgReplaceWordChk : "Äúng toàn bá» từ", |
// Paste Operations / Dialog |
PasteErrorPaste : "Các thiết láºp bảo máºt của trình duyá»t không cho phép trình biên táºp tá»± Äá»ng thá»±c thi lá»nh dán. Hãy sá» dụng bàn phím cho lá»nh này (Ctrl+V).", |
PasteErrorCut : "Các thiết láºp bảo máºt của trình duyá»t không cho phép trình biên táºp tá»± Äá»ng thá»±c thi lá»nh cắt. Hãy sá» dụng bàn phím cho lá»nh này (Ctrl+X).", |
PasteErrorCopy : "Các thiết láºp bảo máºt của trình duyá»t không cho phép trình biên táºp tá»± Äá»ng thá»±c thi lá»nh sao chép. Hãy sá» dụng bàn phím cho lá»nh này (Ctrl+C).", |
PasteAsText : "Dán theo Äá»nh dạng vÄn bản thuần", |
PasteFromWord : "Dán vá»i Äá»nh dạng Word", |
DlgPasteMsg2 : "Hãy dán ná»i dung vào trong khung bên dÆ°á»i, sá» dụng tá» hợp phím (<STRONG>Ctrl+V</STRONG>) và nhấn vào nút <STRONG>Äá»ng ý</STRONG>.", |
DlgPasteIgnoreFont : "Chấp nháºn các Äá»nh dạng phông", |
DlgPasteRemoveStyles : "Gỡ bá» các Äá»nh dạng Styles", |
DlgPasteCleanBox : "Xóa ná»i dung", |
// Color Picker |
ColorAutomatic : "Tự động", |
ColorMoreColors : "Màu khác...", |
// Document Properties |
DocProps : "Thuá»c tính Tài liá»u", |
// Anchor Dialog |
DlgAnchorTitle : "Thuá»c tính Neo", |
DlgAnchorName : "Tên của Neo", |
DlgAnchorErrorName : "Hãy ÄÆ°a vào tên của Neo", |
// Speller Pages Dialog |
DlgSpellNotInDic : "Không có trong từ Äiá»n", |
DlgSpellChangeTo : "Chuyá»n thành", |
DlgSpellBtnIgnore : "Bỏ qua", |
DlgSpellBtnIgnoreAll : "Bỏ qua Tất cả", |
DlgSpellBtnReplace : "Thay thế", |
DlgSpellBtnReplaceAll : "Thay thế Tất cả", |
DlgSpellBtnUndo : "Phục hồi lại", |
DlgSpellNoSuggestions : "- Không ÄÆ°a ra gợi ý vá» từ -", |
DlgSpellProgress : "Äang tiến hành kiá»m tra chính tả...", |
DlgSpellNoMispell : "Hoàn tất kiá»m tra chính tả: Không có lá»i chính tả", |
DlgSpellNoChanges : "Hoàn tất kiá»m tra chính tả: Không có từ nào Äược thay Äá»i", |
DlgSpellOneChange : "Hoàn tất kiá»m tra chính tả: Má»t từ Äã Äược thay Äá»i", |
DlgSpellManyChanges : "Hoàn tất kiá»m tra chính tả: %1 từ Äã Äược thay Äá»i", |
IeSpellDownload : "Chức nÄng kiá»m tra chính tả chÆ°a Äược cài Äặt. Bạn có muá»n tải vá» ngay bây giá»?", |
// Button Dialog |
DlgButtonText : "Chuá»i hiá»n thá» (Giá trá»)", |
DlgButtonType : "Kiểu", |
DlgButtonTypeBtn : "Nút Bấm", |
DlgButtonTypeSbm : "Nút Gá»i", |
DlgButtonTypeRst : "Nút Nháºp lại", |
// Checkbox and Radio Button Dialogs |
DlgCheckboxName : "Tên", |
DlgCheckboxValue : "Giá trá»", |
DlgCheckboxSelected : "Được chọn", |
// Form Dialog |
DlgFormName : "Tên", |
DlgFormAction : "Hành Äá»ng", |
DlgFormMethod : "Phương thức", |
// Select Field Dialog |
DlgSelectName : "Tên", |
DlgSelectValue : "Giá trá»", |
DlgSelectSize : "Kích cỡ", |
DlgSelectLines : "dòng", |
DlgSelectChkMulti : "Cho phép chá»n nhiá»u", |
DlgSelectOpAvail : "Các tùy chá»n có thá» sá» dụng", |
DlgSelectOpText : "Văn bản", |
DlgSelectOpValue : "Giá trá»", |
DlgSelectBtnAdd : "Thêm", |
DlgSelectBtnModify : "Thay đổi", |
DlgSelectBtnUp : "Lên", |
DlgSelectBtnDown : "Xuống", |
DlgSelectBtnSetValue : "Giá trá» Äược chá»n", |
DlgSelectBtnDelete : "Xoá", |
// Textarea Dialog |
DlgTextareaName : "Tên", |
DlgTextareaCols : "Cột", |
DlgTextareaRows : "Hàng", |
// Text Field Dialog |
DlgTextName : "Tên", |
DlgTextValue : "Giá trá»", |
DlgTextCharWidth : "Rộng", |
DlgTextMaxChars : "Sá» Ký tá»± tá»i Äa", |
DlgTextType : "Kiểu", |
DlgTextTypeText : "Ký tá»±", |
DlgTextTypePass : "Mật khẩu", |
// Hidden Field Dialog |
DlgHiddenName : "Tên", |
DlgHiddenValue : "Giá trá»", |
// Bulleted List Dialog |
BulletedListProp : "Thuá»c tính Danh sách không thứ tá»±", |
NumberedListProp : "Thuá»c tính Danh sách có thứ tá»±", |
DlgLstStart : "Bắt đầu", |
DlgLstType : "Kiểu", |
DlgLstTypeCircle : "Hình tròn", |
DlgLstTypeDisc : "Hình ÄÄ©a", |
DlgLstTypeSquare : "Hình vuông", |
DlgLstTypeNumbers : "Số thứ tự (1, 2, 3)", |
DlgLstTypeLCase : "Chữ cái thÆ°á»ng (a, b, c)", |
DlgLstTypeUCase : "Chữ cái hoa (A, B, C)", |
DlgLstTypeSRoman : "Sá» La Mã thÆ°á»ng (i, ii, iii)", |
DlgLstTypeLRoman : "Sá» La Mã hoa (I, II, III)", |
// Document Properties Dialog |
DlgDocGeneralTab : "Toàn thá»", |
DlgDocBackTab : "Nền", |
DlgDocColorsTab : "Màu sắc và ÄÆ°á»ng biên", |
DlgDocMetaTab : "Siêu dữ liá»u", |
DlgDocPageTitle : "Tiêu Äá» Trang", |
DlgDocLangDir : "ÄÆ°á»ng dẫn Ngôn ngữ", |
DlgDocLangDirLTR : "Trái sang Phải (LTR)", |
DlgDocLangDirRTL : "Phải sang Trái (RTL)", |
DlgDocLangCode : "Mã Ngôn ngữ", |
DlgDocCharSet : "Bảng mã ký tá»±", |
DlgDocCharSetCE : "Trung Âu", |
DlgDocCharSetCT : "Tiếng Trung Quốc (Big5)", |
DlgDocCharSetCR : "Tiếng Kirin", |
DlgDocCharSetGR : "Tiếng Hy Lạp", |
DlgDocCharSetJP : "Tiếng Nhật", |
DlgDocCharSetKR : "Tiếng Hàn", |
DlgDocCharSetTR : "Tiếng Thổ Nhĩ Kỳ", |
DlgDocCharSetUN : "Unicode (UTF-8)", |
DlgDocCharSetWE : "Tây Âu", |
DlgDocCharSetOther : "Bảng mã ký tá»± khác", |
DlgDocDocType : "Kiá»u Äá» mục Tài liá»u", |
DlgDocDocTypeOther : "Kiá»u Äá» mục Tài liá»u khác", |
DlgDocIncXHTML : "Bao gồm cả định nghĩa XHTML", |
DlgDocBgColor : "Màu ná»n", |
DlgDocBgImage : "URL của Hình ảnh ná»n", |
DlgDocBgNoScroll : "Không cuá»n ná»n", |
DlgDocCText : "Văn bản", |
DlgDocCLink : "Liên kết", |
DlgDocCVisited : "Liên kết Äã ghé thÄm", |
DlgDocCActive : "Liên kết Hiá»n hành", |
DlgDocMargins : "ÄÆ°á»ng biên của Trang", |
DlgDocMaTop : "Trên", |
DlgDocMaLeft : "Trái", |
DlgDocMaRight : "Phải", |
DlgDocMaBottom : "Dưới", |
DlgDocMeIndex : "Các từ khóa chá» mục tài liá»u (phân cách bá»i dấu phẩy)", |
DlgDocMeDescr : "Mô tả tài liá»u", |
DlgDocMeAuthor : "Tác giả", |
DlgDocMeCopy : "Bản quyền", |
DlgDocPreview : "Xem trước", |
// Templates Dialog |
Templates : "Mẫu dựng sẵn", |
DlgTemplatesTitle : "Nội dung Mẫu dựng sẵn", |
DlgTemplatesSelMsg : "Hãy chá»n Mẫu dá»±ng sẵn Äá» má» trong trình biên táºp<br>(ná»i dung hiá»n tại sẽ bá» mất):", |
DlgTemplatesLoading : "Äang nạp Danh sách Mẫu dá»±ng sẵn. Vui lòng Äợi trong giây lát...", |
DlgTemplatesNoTpl : "(Không có Mẫu dá»±ng sẵn nào Äược Äá»nh nghÄ©a)", |
DlgTemplatesReplace : "Thay thế nội dung hiện tại", |
// About Dialog |
DlgAboutAboutTab : "Giới thiệu", |
DlgAboutBrowserInfoTab : "Thông tin trình duyá»t", |
DlgAboutLicenseTab : "Giấy phép", |
DlgAboutVersion : "phiên bản", |
DlgAboutLicense : "Äược cấp phép theo các Äiá»u khoản của giấy phép GNU Lesser General Public License", |
DlgAboutInfo : "Äá» biết thêm thông tin, hãy truy cáºp" |
} |
/branches/v1.0-menes/api/fckeditor/editor/lang/en-uk.js |
---|
New file |
0,0 → 1,502 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: en-uk.js |
* English (United Kingdom) language file. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
* Christopher Dawes (fckeditor@dawes.id.au) |
*/ |
var FCKLang = |
{ |
// Language direction : "ltr" (left to right) or "rtl" (right to left). |
Dir : "ltr", |
ToolbarCollapse : "Collapse Toolbar", |
ToolbarExpand : "Expand Toolbar", |
// Toolbar Items and Context Menu |
Save : "Save", |
NewPage : "New Page", |
Preview : "Preview", |
Cut : "Cut", |
Copy : "Copy", |
Paste : "Paste", |
PasteText : "Paste as plain text", |
PasteWord : "Paste from Word", |
Print : "Print", |
SelectAll : "Select All", |
RemoveFormat : "Remove Format", |
InsertLinkLbl : "Link", |
InsertLink : "Insert/Edit Link", |
RemoveLink : "Remove Link", |
Anchor : "Insert/Edit Anchor", |
InsertImageLbl : "Image", |
InsertImage : "Insert/Edit Image", |
InsertFlashLbl : "Flash", |
InsertFlash : "Insert/Edit Flash", |
InsertTableLbl : "Table", |
InsertTable : "Insert/Edit Table", |
InsertLineLbl : "Line", |
InsertLine : "Insert Horizontal Line", |
InsertSpecialCharLbl: "Special Character", |
InsertSpecialChar : "Insert Special Character", |
InsertSmileyLbl : "Smiley", |
InsertSmiley : "Insert Smiley", |
About : "About FCKeditor", |
Bold : "Bold", |
Italic : "Italic", |
Underline : "Underline", |
StrikeThrough : "Strike Through", |
Subscript : "Subscript", |
Superscript : "Superscript", |
LeftJustify : "Left Justify", |
CenterJustify : "Centre Justify", |
RightJustify : "Right Justify", |
BlockJustify : "Block Justify", |
DecreaseIndent : "Decrease Indent", |
IncreaseIndent : "Increase Indent", |
Undo : "Undo", |
Redo : "Redo", |
NumberedListLbl : "Numbered List", |
NumberedList : "Insert/Remove Numbered List", |
BulletedListLbl : "Bulleted List", |
BulletedList : "Insert/Remove Bulleted List", |
ShowTableBorders : "Show Table Borders", |
ShowDetails : "Show Details", |
Style : "Style", |
FontFormat : "Format", |
Font : "Font", |
FontSize : "Size", |
TextColor : "Text Colour", |
BGColor : "Background Colour", |
Source : "Source", |
Find : "Find", |
Replace : "Replace", |
SpellCheck : "Check Spelling", |
UniversalKeyboard : "Universal Keyboard", |
PageBreakLbl : "Page Break", |
PageBreak : "Insert Page Break", |
Form : "Form", |
Checkbox : "Checkbox", |
RadioButton : "Radio Button", |
TextField : "Text Field", |
Textarea : "Textarea", |
HiddenField : "Hidden Field", |
Button : "Button", |
SelectionField : "Selection Field", |
ImageButton : "Image Button", |
FitWindow : "Maximize the editor size", |
// Context Menu |
EditLink : "Edit Link", |
CellCM : "Cell", |
RowCM : "Row", |
ColumnCM : "Column", |
InsertRow : "Insert Row", |
DeleteRows : "Delete Rows", |
InsertColumn : "Insert Column", |
DeleteColumns : "Delete Columns", |
InsertCell : "Insert Cell", |
DeleteCells : "Delete Cells", |
MergeCells : "Merge Cells", |
SplitCell : "Split Cell", |
TableDelete : "Delete Table", |
CellProperties : "Cell Properties", |
TableProperties : "Table Properties", |
ImageProperties : "Image Properties", |
FlashProperties : "Flash Properties", |
AnchorProp : "Anchor Properties", |
ButtonProp : "Button Properties", |
CheckboxProp : "Checkbox Properties", |
HiddenFieldProp : "Hidden Field Properties", |
RadioButtonProp : "Radio Button Properties", |
ImageButtonProp : "Image Button Properties", |
TextFieldProp : "Text Field Properties", |
SelectionFieldProp : "Selection Field Properties", |
TextareaProp : "Textarea Properties", |
FormProp : "Form Properties", |
FontFormats : "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Normal (DIV)", |
// Alerts and Messages |
ProcessingXHTML : "Processing XHTML. Please wait...", |
Done : "Done", |
PasteWordConfirm : "The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?", |
NotCompatiblePaste : "This command is available for Internet Explorer version 5.5 or more. Do you want to paste without cleaning?", |
UnknownToolbarItem : "Unknown toolbar item \"%1\"", |
UnknownCommand : "Unknown command name \"%1\"", |
NotImplemented : "Command not implemented", |
UnknownToolbarSet : "Toolbar set \"%1\" doesn't exist", |
NoActiveX : "Your browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.", |
BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.", |
DialogBlocked : "It was not possible to open the dialog window. Make sure all popup blockers are disabled.", |
// Dialogs |
DlgBtnOK : "OK", |
DlgBtnCancel : "Cancel", |
DlgBtnClose : "Close", |
DlgBtnBrowseServer : "Browse Server", |
DlgAdvancedTag : "Advanced", |
DlgOpOther : "<Other>", |
DlgInfoTab : "Info", |
DlgAlertUrl : "Please insert the URL", |
// General Dialogs Labels |
DlgGenNotSet : "<not set>", |
DlgGenId : "Id", |
DlgGenLangDir : "Language Direction", |
DlgGenLangDirLtr : "Left to Right (LTR)", |
DlgGenLangDirRtl : "Right to Left (RTL)", |
DlgGenLangCode : "Language Code", |
DlgGenAccessKey : "Access Key", |
DlgGenName : "Name", |
DlgGenTabIndex : "Tab Index", |
DlgGenLongDescr : "Long Description URL", |
DlgGenClass : "Stylesheet Classes", |
DlgGenTitle : "Advisory Title", |
DlgGenContType : "Advisory Content Type", |
DlgGenLinkCharset : "Linked Resource Charset", |
DlgGenStyle : "Style", |
// Image Dialog |
DlgImgTitle : "Image Properties", |
DlgImgInfoTab : "Image Info", |
DlgImgBtnUpload : "Send it to the Server", |
DlgImgURL : "URL", |
DlgImgUpload : "Upload", |
DlgImgAlt : "Alternative Text", |
DlgImgWidth : "Width", |
DlgImgHeight : "Height", |
DlgImgLockRatio : "Lock Ratio", |
DlgBtnResetSize : "Reset Size", |
DlgImgBorder : "Border", |
DlgImgHSpace : "HSpace", |
DlgImgVSpace : "VSpace", |
DlgImgAlign : "Align", |
DlgImgAlignLeft : "Left", |
DlgImgAlignAbsBottom: "Abs Bottom", |
DlgImgAlignAbsMiddle: "Abs Middle", |
DlgImgAlignBaseline : "Baseline", |
DlgImgAlignBottom : "Bottom", |
DlgImgAlignMiddle : "Middle", |
DlgImgAlignRight : "Right", |
DlgImgAlignTextTop : "Text Top", |
DlgImgAlignTop : "Top", |
DlgImgPreview : "Preview", |
DlgImgAlertUrl : "Please type the image URL", |
DlgImgLinkTab : "Link", |
// Flash Dialog |
DlgFlashTitle : "Flash Properties", |
DlgFlashChkPlay : "Auto Play", |
DlgFlashChkLoop : "Loop", |
DlgFlashChkMenu : "Enable Flash Menu", |
DlgFlashScale : "Scale", |
DlgFlashScaleAll : "Show all", |
DlgFlashScaleNoBorder : "No Border", |
DlgFlashScaleFit : "Exact Fit", |
// Link Dialog |
DlgLnkWindowTitle : "Link", |
DlgLnkInfoTab : "Link Info", |
DlgLnkTargetTab : "Target", |
DlgLnkType : "Link Type", |
DlgLnkTypeURL : "URL", |
DlgLnkTypeAnchor : "Link to anchor in the text", |
DlgLnkTypeEMail : "E-Mail", |
DlgLnkProto : "Protocol", |
DlgLnkProtoOther : "<other>", |
DlgLnkURL : "URL", |
DlgLnkAnchorSel : "Select an Anchor", |
DlgLnkAnchorByName : "By Anchor Name", |
DlgLnkAnchorById : "By Element Id", |
DlgLnkNoAnchors : "<No anchors available in the document>", |
DlgLnkEMail : "E-Mail Address", |
DlgLnkEMailSubject : "Message Subject", |
DlgLnkEMailBody : "Message Body", |
DlgLnkUpload : "Upload", |
DlgLnkBtnUpload : "Send it to the Server", |
DlgLnkTarget : "Target", |
DlgLnkTargetFrame : "<frame>", |
DlgLnkTargetPopup : "<popup window>", |
DlgLnkTargetBlank : "New Window (_blank)", |
DlgLnkTargetParent : "Parent Window (_parent)", |
DlgLnkTargetSelf : "Same Window (_self)", |
DlgLnkTargetTop : "Topmost Window (_top)", |
DlgLnkTargetFrameName : "Target Frame Name", |
DlgLnkPopWinName : "Popup Window Name", |
DlgLnkPopWinFeat : "Popup Window Features", |
DlgLnkPopResize : "Resizable", |
DlgLnkPopLocation : "Location Bar", |
DlgLnkPopMenu : "Menu Bar", |
DlgLnkPopScroll : "Scroll Bars", |
DlgLnkPopStatus : "Status Bar", |
DlgLnkPopToolbar : "Toolbar", |
DlgLnkPopFullScrn : "Full Screen (IE)", |
DlgLnkPopDependent : "Dependent (Netscape)", |
DlgLnkPopWidth : "Width", |
DlgLnkPopHeight : "Height", |
DlgLnkPopLeft : "Left Position", |
DlgLnkPopTop : "Top Position", |
DlnLnkMsgNoUrl : "Please type the link URL", |
DlnLnkMsgNoEMail : "Please type the e-mail address", |
DlnLnkMsgNoAnchor : "Please select an anchor", |
DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", |
// Color Dialog |
DlgColorTitle : "Select Colour", |
DlgColorBtnClear : "Clear", |
DlgColorHighlight : "Highlight", |
DlgColorSelected : "Selected", |
// Smiley Dialog |
DlgSmileyTitle : "Insert a Smiley", |
// Special Character Dialog |
DlgSpecialCharTitle : "Select Special Character", |
// Table Dialog |
DlgTableTitle : "Table Properties", |
DlgTableRows : "Rows", |
DlgTableColumns : "Columns", |
DlgTableBorder : "Border size", |
DlgTableAlign : "Alignment", |
DlgTableAlignNotSet : "<Not set>", |
DlgTableAlignLeft : "Left", |
DlgTableAlignCenter : "Centre", |
DlgTableAlignRight : "Right", |
DlgTableWidth : "Width", |
DlgTableWidthPx : "pixels", |
DlgTableWidthPc : "percent", |
DlgTableHeight : "Height", |
DlgTableCellSpace : "Cell spacing", |
DlgTableCellPad : "Cell padding", |
DlgTableCaption : "Caption", |
DlgTableSummary : "Summary", |
// Table Cell Dialog |
DlgCellTitle : "Cell Properties", |
DlgCellWidth : "Width", |
DlgCellWidthPx : "pixels", |
DlgCellWidthPc : "percent", |
DlgCellHeight : "Height", |
DlgCellWordWrap : "Word Wrap", |
DlgCellWordWrapNotSet : "<Not set>", |
DlgCellWordWrapYes : "Yes", |
DlgCellWordWrapNo : "No", |
DlgCellHorAlign : "Horizontal Alignment", |
DlgCellHorAlignNotSet : "<Not set>", |
DlgCellHorAlignLeft : "Left", |
DlgCellHorAlignCenter : "Centre", |
DlgCellHorAlignRight: "Right", |
DlgCellVerAlign : "Vertical Alignment", |
DlgCellVerAlignNotSet : "<Not set>", |
DlgCellVerAlignTop : "Top", |
DlgCellVerAlignMiddle : "Middle", |
DlgCellVerAlignBottom : "Bottom", |
DlgCellVerAlignBaseline : "Baseline", |
DlgCellRowSpan : "Rows Span", |
DlgCellCollSpan : "Columns Span", |
DlgCellBackColor : "Background Colour", |
DlgCellBorderColor : "Border Colour", |
DlgCellBtnSelect : "Select...", |
// Find Dialog |
DlgFindTitle : "Find", |
DlgFindFindBtn : "Find", |
DlgFindNotFoundMsg : "The specified text was not found.", |
// Replace Dialog |
DlgReplaceTitle : "Replace", |
DlgReplaceFindLbl : "Find what:", |
DlgReplaceReplaceLbl : "Replace with:", |
DlgReplaceCaseChk : "Match case", |
DlgReplaceReplaceBtn : "Replace", |
DlgReplaceReplAllBtn : "Replace All", |
DlgReplaceWordChk : "Match whole word", |
// Paste Operations / Dialog |
PasteErrorPaste : "Your browser security settings don't permit the editor to automatically execute pasting operations. Please use the keyboard for that (Ctrl+V).", |
PasteErrorCut : "Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl+X).", |
PasteErrorCopy : "Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl+C).", |
PasteAsText : "Paste as Plain Text", |
PasteFromWord : "Paste from Word", |
DlgPasteMsg2 : "Please paste inside the following box using the keyboard (<STRONG>Ctrl+V</STRONG>) and hit <STRONG>OK</STRONG>.", |
DlgPasteIgnoreFont : "Ignore Font Face definitions", |
DlgPasteRemoveStyles : "Remove Styles definitions", |
DlgPasteCleanBox : "Clean Up Box", |
// Color Picker |
ColorAutomatic : "Automatic", |
ColorMoreColors : "More Colours...", |
// Document Properties |
DocProps : "Document Properties", |
// Anchor Dialog |
DlgAnchorTitle : "Anchor Properties", |
DlgAnchorName : "Anchor Name", |
DlgAnchorErrorName : "Please type the anchor name", |
// Speller Pages Dialog |
DlgSpellNotInDic : "Not in dictionary", |
DlgSpellChangeTo : "Change to", |
DlgSpellBtnIgnore : "Ignore", |
DlgSpellBtnIgnoreAll : "Ignore All", |
DlgSpellBtnReplace : "Replace", |
DlgSpellBtnReplaceAll : "Replace All", |
DlgSpellBtnUndo : "Undo", |
DlgSpellNoSuggestions : "- No suggestions -", |
DlgSpellProgress : "Spell check in progress...", |
DlgSpellNoMispell : "Spell check complete: No misspellings found", |
DlgSpellNoChanges : "Spell check complete: No words changed", |
DlgSpellOneChange : "Spell check complete: One word changed", |
DlgSpellManyChanges : "Spell check complete: %1 words changed", |
IeSpellDownload : "Spell checker not installed. Do you want to download it now?", |
// Button Dialog |
DlgButtonText : "Text (Value)", |
DlgButtonType : "Type", |
DlgButtonTypeBtn : "Button", |
DlgButtonTypeSbm : "Submit", |
DlgButtonTypeRst : "Reset", |
// Checkbox and Radio Button Dialogs |
DlgCheckboxName : "Name", |
DlgCheckboxValue : "Value", |
DlgCheckboxSelected : "Selected", |
// Form Dialog |
DlgFormName : "Name", |
DlgFormAction : "Action", |
DlgFormMethod : "Method", |
// Select Field Dialog |
DlgSelectName : "Name", |
DlgSelectValue : "Value", |
DlgSelectSize : "Size", |
DlgSelectLines : "lines", |
DlgSelectChkMulti : "Allow multiple selections", |
DlgSelectOpAvail : "Available Options", |
DlgSelectOpText : "Text", |
DlgSelectOpValue : "Value", |
DlgSelectBtnAdd : "Add", |
DlgSelectBtnModify : "Modify", |
DlgSelectBtnUp : "Up", |
DlgSelectBtnDown : "Down", |
DlgSelectBtnSetValue : "Set as selected value", |
DlgSelectBtnDelete : "Delete", |
// Textarea Dialog |
DlgTextareaName : "Name", |
DlgTextareaCols : "Columns", |
DlgTextareaRows : "Rows", |
// Text Field Dialog |
DlgTextName : "Name", |
DlgTextValue : "Value", |
DlgTextCharWidth : "Character Width", |
DlgTextMaxChars : "Maximum Characters", |
DlgTextType : "Type", |
DlgTextTypeText : "Text", |
DlgTextTypePass : "Password", |
// Hidden Field Dialog |
DlgHiddenName : "Name", |
DlgHiddenValue : "Value", |
// Bulleted List Dialog |
BulletedListProp : "Bulleted List Properties", |
NumberedListProp : "Numbered List Properties", |
DlgLstStart : "Start", |
DlgLstType : "Type", |
DlgLstTypeCircle : "Circle", |
DlgLstTypeDisc : "Disc", |
DlgLstTypeSquare : "Square", |
DlgLstTypeNumbers : "Numbers (1, 2, 3)", |
DlgLstTypeLCase : "Lowercase Letters (a, b, c)", |
DlgLstTypeUCase : "Uppercase Letters (A, B, C)", |
DlgLstTypeSRoman : "Small Roman Numerals (i, ii, iii)", |
DlgLstTypeLRoman : "Large Roman Numerals (I, II, III)", |
// Document Properties Dialog |
DlgDocGeneralTab : "General", |
DlgDocBackTab : "Background", |
DlgDocColorsTab : "Colours and Margins", |
DlgDocMetaTab : "Meta Data", |
DlgDocPageTitle : "Page Title", |
DlgDocLangDir : "Language Direction", |
DlgDocLangDirLTR : "Left to Right (LTR)", |
DlgDocLangDirRTL : "Right to Left (RTL)", |
DlgDocLangCode : "Language Code", |
DlgDocCharSet : "Character Set Encoding", |
DlgDocCharSetCE : "Central European", |
DlgDocCharSetCT : "Chinese Traditional (Big5)", |
DlgDocCharSetCR : "Cyrillic", |
DlgDocCharSetGR : "Greek", |
DlgDocCharSetJP : "Japanese", |
DlgDocCharSetKR : "Korean", |
DlgDocCharSetTR : "Turkish", |
DlgDocCharSetUN : "Unicode (UTF-8)", |
DlgDocCharSetWE : "Western European", |
DlgDocCharSetOther : "Other Character Set Encoding", |
DlgDocDocType : "Document Type Heading", |
DlgDocDocTypeOther : "Other Document Type Heading", |
DlgDocIncXHTML : "Include XHTML Declarations", |
DlgDocBgColor : "Background Colour", |
DlgDocBgImage : "Background Image URL", |
DlgDocBgNoScroll : "Nonscrolling Background", |
DlgDocCText : "Text", |
DlgDocCLink : "Link", |
DlgDocCVisited : "Visited Link", |
DlgDocCActive : "Active Link", |
DlgDocMargins : "Page Margins", |
DlgDocMaTop : "Top", |
DlgDocMaLeft : "Left", |
DlgDocMaRight : "Right", |
DlgDocMaBottom : "Bottom", |
DlgDocMeIndex : "Document Indexing Keywords (comma separated)", |
DlgDocMeDescr : "Document Description", |
DlgDocMeAuthor : "Author", |
DlgDocMeCopy : "Copyright", |
DlgDocPreview : "Preview", |
// Templates Dialog |
Templates : "Templates", |
DlgTemplatesTitle : "Content Templates", |
DlgTemplatesSelMsg : "Please select the template to open in the editor<br>(the actual contents will be lost):", |
DlgTemplatesLoading : "Loading templates list. Please wait...", |
DlgTemplatesNoTpl : "(No templates defined)", |
DlgTemplatesReplace : "Replace actual contents", |
// About Dialog |
DlgAboutAboutTab : "About", |
DlgAboutBrowserInfoTab : "Browser Info", |
DlgAboutLicenseTab : "License", |
DlgAboutVersion : "version", |
DlgAboutLicense : "Licensed under the terms of the GNU Lesser General Public License", |
DlgAboutInfo : "For further information go to" |
} |
/branches/v1.0-menes/api/fckeditor/editor/lang/ms.js |
---|
New file |
0,0 → 1,501 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: ms.js |
* Malay language file. |
* |
* File Authors: |
* Fairul Izham Mohd Mokhlas (eg86@hotmail.com) |
*/ |
var FCKLang = |
{ |
// Language direction : "ltr" (left to right) or "rtl" (right to left). |
Dir : "ltr", |
ToolbarCollapse : "Collapse Toolbar", |
ToolbarExpand : "Expand Toolbar", |
// Toolbar Items and Context Menu |
Save : "Simpan", |
NewPage : "Helaian Baru", |
Preview : "Prebiu", |
Cut : "Potong", |
Copy : "Salin", |
Paste : "Tampal", |
PasteText : "Tampal sebagai Text Biasa", |
PasteWord : "Tampal dari Word", |
Print : "Cetak", |
SelectAll : "Pilih Semua", |
RemoveFormat : "Buang Format", |
InsertLinkLbl : "Sambungan", |
InsertLink : "Masukkan/Sunting Sambungan", |
RemoveLink : "Buang Sambungan", |
Anchor : "Masukkan/Sunting Pautan", |
InsertImageLbl : "Gambar", |
InsertImage : "Masukkan/Sunting Gambar", |
InsertFlashLbl : "Flash", //MISSING |
InsertFlash : "Insert/Edit Flash", //MISSING |
InsertTableLbl : "Jadual", |
InsertTable : "Masukkan/Sunting Jadual", |
InsertLineLbl : "Garisan", |
InsertLine : "Masukkan Garisan Membujur", |
InsertSpecialCharLbl: "Huruf Istimewa", |
InsertSpecialChar : "Masukkan Huruf Istimewa", |
InsertSmileyLbl : "Smiley", |
InsertSmiley : "Masukkan Smiley", |
About : "Tentang FCKeditor", |
Bold : "Bold", |
Italic : "Italic", |
Underline : "Underline", |
StrikeThrough : "Strike Through", |
Subscript : "Subscript", |
Superscript : "Superscript", |
LeftJustify : "Jajaran Kiri", |
CenterJustify : "Jajaran Tengah", |
RightJustify : "Jajaran Kanan", |
BlockJustify : "Jajaran Blok", |
DecreaseIndent : "Kurangkan Inden", |
IncreaseIndent : "Tambahkan Inden", |
Undo : "Batalkan", |
Redo : "Ulangkan", |
NumberedListLbl : "Senarai bernombor", |
NumberedList : "Masukkan/Sunting Senarai bernombor", |
BulletedListLbl : "Senarai tidak bernombor", |
BulletedList : "Masukkan/Sunting Senarai tidak bernombor", |
ShowTableBorders : "Tunjukkan Border Jadual", |
ShowDetails : "Tunjukkan Butiran", |
Style : "Stail", |
FontFormat : "Format", |
Font : "Font", |
FontSize : "Saiz", |
TextColor : "Warna Text", |
BGColor : "Warna Latarbelakang", |
Source : "Sumber", |
Find : "Cari", |
Replace : "Ganti", |
SpellCheck : "Semak Ejaan", |
UniversalKeyboard : "Papan Kekunci Universal", |
PageBreakLbl : "Page Break", //MISSING |
PageBreak : "Insert Page Break", //MISSING |
Form : "Borang", |
Checkbox : "Checkbox", |
RadioButton : "Butang Radio", |
TextField : "Text Field", |
Textarea : "Textarea", |
HiddenField : "Field Tersembunyi", |
Button : "Butang", |
SelectionField : "Field Pilihan", |
ImageButton : "Butang Bergambar", |
FitWindow : "Maximize the editor size", //MISSING |
// Context Menu |
EditLink : "Sunting Sambungan", |
CellCM : "Cell", //MISSING |
RowCM : "Row", //MISSING |
ColumnCM : "Column", //MISSING |
InsertRow : "Masukkan Baris", |
DeleteRows : "Buangkan Baris", |
InsertColumn : "Masukkan Lajur", |
DeleteColumns : "Buangkan Lajur", |
InsertCell : "Masukkan Sel", |
DeleteCells : "Buangkan Sel-sel", |
MergeCells : "Cantumkan Sel-sel", |
SplitCell : "Bahagikan Sel", |
TableDelete : "Delete Table", //MISSING |
CellProperties : "Ciri-ciri Sel", |
TableProperties : "Ciri-ciri Jadual", |
ImageProperties : "Ciri-ciri Gambar", |
FlashProperties : "Flash Properties", //MISSING |
AnchorProp : "Ciri-ciri Pautan", |
ButtonProp : "Ciri-ciri Butang", |
CheckboxProp : "Ciri-ciri Checkbox", |
HiddenFieldProp : "Ciri-ciri Field Tersembunyi", |
RadioButtonProp : "Ciri-ciri Butang Radio", |
ImageButtonProp : "Ciri-ciri Butang Bergambar", |
TextFieldProp : "Ciri-ciri Text Field", |
SelectionFieldProp : "Ciri-ciri Selection Field", |
TextareaProp : "Ciri-ciri Textarea", |
FormProp : "Ciri-ciri Borang", |
FontFormats : "Normal;Telah Diformat;Alamat;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Perenggan (DIV)", |
// Alerts and Messages |
ProcessingXHTML : "Memproses XHTML. Sila tunggu...", |
Done : "Siap", |
PasteWordConfirm : "Text yang anda hendak tampal adalah berasal dari Word. Adakah anda mahu membuang semua format Word sebelum tampal ke dalam text?", |
NotCompatiblePaste : "Arahan ini bole dilakukan jika anda mempuunyai Internet Explorer version 5.5 atau yang lebih tinggi. Adakah anda hendak tampal text tanpa membuang format Word?", |
UnknownToolbarItem : "Toolbar item tidak diketahui\"%1\"", |
UnknownCommand : "Arahan tidak diketahui \"%1\"", |
NotImplemented : "Arahan tidak terdapat didalam sistem", |
UnknownToolbarSet : "Set toolbar \"%1\" tidak wujud", |
NoActiveX : "Your browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.", //MISSING |
BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.", //MISSING |
DialogBlocked : "It was not possible to open the dialog window. Make sure all popup blockers are disabled.", //MISSING |
// Dialogs |
DlgBtnOK : "OK", |
DlgBtnCancel : "Batal", |
DlgBtnClose : "Tutup", |
DlgBtnBrowseServer : "Browse Server", |
DlgAdvancedTag : "Advanced", |
DlgOpOther : "<Lain-lain>", |
DlgInfoTab : "Info", //MISSING |
DlgAlertUrl : "Please insert the URL", //MISSING |
// General Dialogs Labels |
DlgGenNotSet : "<tidak di set>", |
DlgGenId : "Id", |
DlgGenLangDir : "Arah Tulisan", |
DlgGenLangDirLtr : "Kiri ke Kanan (LTR)", |
DlgGenLangDirRtl : "Kanan ke Kiri (RTL)", |
DlgGenLangCode : "Kod Bahasa", |
DlgGenAccessKey : "Kunci Akses", |
DlgGenName : "Nama", |
DlgGenTabIndex : "Indeks Tab ", |
DlgGenLongDescr : "Butiran Panjang URL", |
DlgGenClass : "Kelas-kelas Stylesheet", |
DlgGenTitle : "Tajuk Makluman", |
DlgGenContType : "Jenis Kandungan Makluman", |
DlgGenLinkCharset : "Linked Resource Charset", |
DlgGenStyle : "Stail", |
// Image Dialog |
DlgImgTitle : "Ciri-ciri Imej", |
DlgImgInfoTab : "Info Imej", |
DlgImgBtnUpload : "Hantar ke Server", |
DlgImgURL : "URL", |
DlgImgUpload : "Muat Naik", |
DlgImgAlt : "Text Alternatif", |
DlgImgWidth : "Lebar", |
DlgImgHeight : "Tinggi", |
DlgImgLockRatio : "Tetapkan Nisbah", |
DlgBtnResetSize : "Saiz Set Semula", |
DlgImgBorder : "Border", |
DlgImgHSpace : "Ruang Melintang", |
DlgImgVSpace : "Ruang Menegak", |
DlgImgAlign : "Jajaran", |
DlgImgAlignLeft : "Kiri", |
DlgImgAlignAbsBottom: "Bawah Mutlak", |
DlgImgAlignAbsMiddle: "Pertengahan Mutlak", |
DlgImgAlignBaseline : "Garis Dasar", |
DlgImgAlignBottom : "Bawah", |
DlgImgAlignMiddle : "Pertengahan", |
DlgImgAlignRight : "Kanan", |
DlgImgAlignTextTop : "Atas Text", |
DlgImgAlignTop : "Atas", |
DlgImgPreview : "Prebiu", |
DlgImgAlertUrl : "Sila taip URL untuk fail gambar", |
DlgImgLinkTab : "Sambungan", |
// Flash Dialog |
DlgFlashTitle : "Flash Properties", //MISSING |
DlgFlashChkPlay : "Auto Play", //MISSING |
DlgFlashChkLoop : "Loop", //MISSING |
DlgFlashChkMenu : "Enable Flash Menu", //MISSING |
DlgFlashScale : "Scale", //MISSING |
DlgFlashScaleAll : "Show all", //MISSING |
DlgFlashScaleNoBorder : "No Border", //MISSING |
DlgFlashScaleFit : "Exact Fit", //MISSING |
// Link Dialog |
DlgLnkWindowTitle : "Sambungan", |
DlgLnkInfoTab : "Butiran Sambungan", |
DlgLnkTargetTab : "Sasaran", |
DlgLnkType : "Jenis Sambungan", |
DlgLnkTypeURL : "URL", |
DlgLnkTypeAnchor : "Pautan dalam muka surat ini", |
DlgLnkTypeEMail : "E-Mail", |
DlgLnkProto : "Protokol", |
DlgLnkProtoOther : "<lain-lain>", |
DlgLnkURL : "URL", |
DlgLnkAnchorSel : "Sila pilih pautan", |
DlgLnkAnchorByName : "dengan menggunakan nama pautan", |
DlgLnkAnchorById : "dengan menggunakan ID elemen", |
DlgLnkNoAnchors : "<Tiada pautan terdapat dalam dokumen ini>", |
DlgLnkEMail : "Alamat E-Mail", |
DlgLnkEMailSubject : "Subjek Mesej", |
DlgLnkEMailBody : "Isi Kandungan Mesej", |
DlgLnkUpload : "Muat Naik", |
DlgLnkBtnUpload : "Hantar ke Server", |
DlgLnkTarget : "Sasaran", |
DlgLnkTargetFrame : "<bingkai>", |
DlgLnkTargetPopup : "<tetingkap popup>", |
DlgLnkTargetBlank : "Tetingkap Baru (_blank)", |
DlgLnkTargetParent : "Tetingkap Parent (_parent)", |
DlgLnkTargetSelf : "Tetingkap yang Sama (_self)", |
DlgLnkTargetTop : "Tetingkap yang paling atas (_top)", |
DlgLnkTargetFrameName : "Nama Bingkai Sasaran", |
DlgLnkPopWinName : "Nama Tetingkap Popup", |
DlgLnkPopWinFeat : "Ciri Tetingkap Popup", |
DlgLnkPopResize : "Saiz bolehubah", |
DlgLnkPopLocation : "Bar Lokasi", |
DlgLnkPopMenu : "Bar Menu", |
DlgLnkPopScroll : "Bar-bar skrol", |
DlgLnkPopStatus : "Bar Status", |
DlgLnkPopToolbar : "Toolbar", |
DlgLnkPopFullScrn : "Skrin Penuh (IE)", |
DlgLnkPopDependent : "Bergantungan (Netscape)", |
DlgLnkPopWidth : "Lebar", |
DlgLnkPopHeight : "Tinggi", |
DlgLnkPopLeft : "Posisi Kiri", |
DlgLnkPopTop : "Posisi Atas", |
DlnLnkMsgNoUrl : "Sila taip sambungan URL", |
DlnLnkMsgNoEMail : "Sila taip alamat e-mail", |
DlnLnkMsgNoAnchor : "Sila pilih pautan berkenaaan", |
DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING |
// Color Dialog |
DlgColorTitle : "Pilihan Warna", |
DlgColorBtnClear : "Nyahwarna", |
DlgColorHighlight : "Terang", |
DlgColorSelected : "Dipilih", |
// Smiley Dialog |
DlgSmileyTitle : "Masukkan Smiley", |
// Special Character Dialog |
DlgSpecialCharTitle : "Sila pilih huruf istimewa", |
// Table Dialog |
DlgTableTitle : "Ciri-ciri Jadual", |
DlgTableRows : "Barisan", |
DlgTableColumns : "Jaluran", |
DlgTableBorder : "Saiz Border", |
DlgTableAlign : "Penjajaran", |
DlgTableAlignNotSet : "<Tidak diset>", |
DlgTableAlignLeft : "Kiri", |
DlgTableAlignCenter : "Tengah", |
DlgTableAlignRight : "Kanan", |
DlgTableWidth : "Lebar", |
DlgTableWidthPx : "piksel-piksel", |
DlgTableWidthPc : "peratus", |
DlgTableHeight : "Tinggi", |
DlgTableCellSpace : "Ruangan Antara Sel", |
DlgTableCellPad : "Tambahan Ruang Sel", |
DlgTableCaption : "Keterangan", |
DlgTableSummary : "Summary", //MISSING |
// Table Cell Dialog |
DlgCellTitle : "Ciri-ciri Sel", |
DlgCellWidth : "Lebar", |
DlgCellWidthPx : "piksel-piksel", |
DlgCellWidthPc : "peratus", |
DlgCellHeight : "Tinggi", |
DlgCellWordWrap : "Mengulung Perkataan", |
DlgCellWordWrapNotSet : "<Tidak diset>", |
DlgCellWordWrapYes : "Ya", |
DlgCellWordWrapNo : "Tidak", |
DlgCellHorAlign : "Jajaran Membujur", |
DlgCellHorAlignNotSet : "<Tidak diset>", |
DlgCellHorAlignLeft : "Kiri", |
DlgCellHorAlignCenter : "Tengah", |
DlgCellHorAlignRight: "Kanan", |
DlgCellVerAlign : "Jajaran Menegak", |
DlgCellVerAlignNotSet : "<Tidak diset>", |
DlgCellVerAlignTop : "Atas", |
DlgCellVerAlignMiddle : "Tengah", |
DlgCellVerAlignBottom : "Bawah", |
DlgCellVerAlignBaseline : "Garis Dasar", |
DlgCellRowSpan : "Penggunaan Baris", |
DlgCellCollSpan : "Penggunaan Lajur", |
DlgCellBackColor : "Warna Latarbelakang", |
DlgCellBorderColor : "Warna Border", |
DlgCellBtnSelect : "Pilih...", |
// Find Dialog |
DlgFindTitle : "Carian", |
DlgFindFindBtn : "Cari", |
DlgFindNotFoundMsg : "Text yang dicari tidak dijumpai.", |
// Replace Dialog |
DlgReplaceTitle : "Gantian", |
DlgReplaceFindLbl : "Perkataan yang dicari:", |
DlgReplaceReplaceLbl : "Diganti dengan:", |
DlgReplaceCaseChk : "Padanan case huruf", |
DlgReplaceReplaceBtn : "Ganti", |
DlgReplaceReplAllBtn : "Ganti semua", |
DlgReplaceWordChk : "Padana Keseluruhan perkataan", |
// Paste Operations / Dialog |
PasteErrorPaste : "Keselamatan perisian browser anda tidak membenarkan operasi tampalan text/imej. Sila gunakan papan kekunci (Ctrl+V).", |
PasteErrorCut : "Keselamatan perisian browser anda tidak membenarkan operasi suntingan text/imej. Sila gunakan papan kekunci (Ctrl+X).", |
PasteErrorCopy : "Keselamatan perisian browser anda tidak membenarkan operasi salinan text/imej. Sila gunakan papan kekunci (Ctrl+C).", |
PasteAsText : "Tampal sebagai text biasa", |
PasteFromWord : "Tampal dari perisian \"Word\"", |
DlgPasteMsg2 : "Please paste inside the following box using the keyboard (<STRONG>Ctrl+V</STRONG>) and hit <STRONG>OK</STRONG>.", //MISSING |
DlgPasteIgnoreFont : "Ignore Font Face definitions", //MISSING |
DlgPasteRemoveStyles : "Remove Styles definitions", //MISSING |
DlgPasteCleanBox : "Clean Up Box", //MISSING |
// Color Picker |
ColorAutomatic : "Otomatik", |
ColorMoreColors : "Warna lain-lain...", |
// Document Properties |
DocProps : "Ciri-ciri dokumen", |
// Anchor Dialog |
DlgAnchorTitle : "Ciri-ciri Pautan", |
DlgAnchorName : "Nama Pautan", |
DlgAnchorErrorName : "Sila taip nama pautan", |
// Speller Pages Dialog |
DlgSpellNotInDic : "Tidak terdapat didalam kamus", |
DlgSpellChangeTo : "Tukarkan kepada", |
DlgSpellBtnIgnore : "Biar", |
DlgSpellBtnIgnoreAll : "Biarkan semua", |
DlgSpellBtnReplace : "Ganti", |
DlgSpellBtnReplaceAll : "Gantikan Semua", |
DlgSpellBtnUndo : "Batalkan", |
DlgSpellNoSuggestions : "- Tiada cadangan -", |
DlgSpellProgress : "Pemeriksaan ejaan sedang diproses...", |
DlgSpellNoMispell : "Pemeriksaan ejaan siap: Tiada salah ejaan", |
DlgSpellNoChanges : "Pemeriksaan ejaan siap: Tiada perkataan diubah", |
DlgSpellOneChange : "Pemeriksaan ejaan siap: Satu perkataan telah diubah", |
DlgSpellManyChanges : "Pemeriksaan ejaan siap: %1 perkataan diubah", |
IeSpellDownload : "Pemeriksa ejaan tidak dipasang. Adakah anda mahu muat turun sekarang?", |
// Button Dialog |
DlgButtonText : "Teks (Nilai)", |
DlgButtonType : "Jenis", |
DlgButtonTypeBtn : "Button", //MISSING |
DlgButtonTypeSbm : "Submit", //MISSING |
DlgButtonTypeRst : "Reset", //MISSING |
// Checkbox and Radio Button Dialogs |
DlgCheckboxName : "Nama", |
DlgCheckboxValue : "Nilai", |
DlgCheckboxSelected : "Dipilih", |
// Form Dialog |
DlgFormName : "Nama", |
DlgFormAction : "Tindakan borang", |
DlgFormMethod : "Cara borang dihantar", |
// Select Field Dialog |
DlgSelectName : "Nama", |
DlgSelectValue : "Nilai", |
DlgSelectSize : "Saiz", |
DlgSelectLines : "garisan", |
DlgSelectChkMulti : "Benarkan pilihan pelbagai", |
DlgSelectOpAvail : "Pilihan sediada", |
DlgSelectOpText : "Teks", |
DlgSelectOpValue : "Nilai", |
DlgSelectBtnAdd : "Tambah Pilihan", |
DlgSelectBtnModify : "Ubah Pilihan", |
DlgSelectBtnUp : "Naik ke atas", |
DlgSelectBtnDown : "Turun ke bawah", |
DlgSelectBtnSetValue : "Set sebagai nilai terpilih", |
DlgSelectBtnDelete : "Padam", |
// Textarea Dialog |
DlgTextareaName : "Nama", |
DlgTextareaCols : "Lajur", |
DlgTextareaRows : "Baris", |
// Text Field Dialog |
DlgTextName : "Nama", |
DlgTextValue : "Nilai", |
DlgTextCharWidth : "Lebar isian", |
DlgTextMaxChars : "Isian Maksimum", |
DlgTextType : "Jenis", |
DlgTextTypeText : "Teks", |
DlgTextTypePass : "Kata Laluan", |
// Hidden Field Dialog |
DlgHiddenName : "Nama", |
DlgHiddenValue : "Nilai", |
// Bulleted List Dialog |
BulletedListProp : "Ciri-ciri senarai berpeluru", |
NumberedListProp : "Ciri-ciri senarai bernombor", |
DlgLstStart : "Start", //MISSING |
DlgLstType : "Jenis", |
DlgLstTypeCircle : "Circle", |
DlgLstTypeDisc : "Disc", //MISSING |
DlgLstTypeSquare : "Square", |
DlgLstTypeNumbers : "Nombor-nombor (1, 2, 3)", |
DlgLstTypeLCase : "Huruf-huruf kecil (a, b, c)", |
DlgLstTypeUCase : "Huruf-huruf besar (A, B, C)", |
DlgLstTypeSRoman : "Nombor Roman Kecil (i, ii, iii)", |
DlgLstTypeLRoman : "Nombor Roman Besar (I, II, III)", |
// Document Properties Dialog |
DlgDocGeneralTab : "Umum", |
DlgDocBackTab : "Latarbelakang", |
DlgDocColorsTab : "Warna dan margin", |
DlgDocMetaTab : "Data Meta", |
DlgDocPageTitle : "Tajuk Muka Surat", |
DlgDocLangDir : "Arah Tulisan", |
DlgDocLangDirLTR : "Kiri ke Kanan (LTR)", |
DlgDocLangDirRTL : "Kanan ke Kiri (RTL)", |
DlgDocLangCode : "Kod Bahasa", |
DlgDocCharSet : "Enkod Set Huruf", |
DlgDocCharSetCE : "Central European", //MISSING |
DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING |
DlgDocCharSetCR : "Cyrillic", //MISSING |
DlgDocCharSetGR : "Greek", //MISSING |
DlgDocCharSetJP : "Japanese", //MISSING |
DlgDocCharSetKR : "Korean", //MISSING |
DlgDocCharSetTR : "Turkish", //MISSING |
DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING |
DlgDocCharSetWE : "Western European", //MISSING |
DlgDocCharSetOther : "Enkod Set Huruf yang Lain", |
DlgDocDocType : "Jenis Kepala Dokumen", |
DlgDocDocTypeOther : "Jenis Kepala Dokumen yang Lain", |
DlgDocIncXHTML : "Masukkan pemula kod XHTML", |
DlgDocBgColor : "Warna Latarbelakang", |
DlgDocBgImage : "URL Gambar Latarbelakang", |
DlgDocBgNoScroll : "Imej Latarbelakang tanpa Skrol", |
DlgDocCText : "Teks", |
DlgDocCLink : "Sambungan", |
DlgDocCVisited : "Sambungan telah Dilawati", |
DlgDocCActive : "Sambungan Aktif", |
DlgDocMargins : "Margin Muka Surat", |
DlgDocMaTop : "Atas", |
DlgDocMaLeft : "Kiri", |
DlgDocMaRight : "Kanan", |
DlgDocMaBottom : "Bawah", |
DlgDocMeIndex : "Kata Kunci Indeks Dokumen (dipisahkan oleh koma)", |
DlgDocMeDescr : "Keterangan Dokumen", |
DlgDocMeAuthor : "Penulis", |
DlgDocMeCopy : "Hakcipta", |
DlgDocPreview : "Prebiu", |
// Templates Dialog |
Templates : "Templat", |
DlgTemplatesTitle : "Templat Kandungan", |
DlgTemplatesSelMsg : "Sila pilih templat untuk dibuka oleh editor<br>(kandungan sebenar akan hilang):", |
DlgTemplatesLoading : "Senarai Templat sedang diproses. Sila Tunggu...", |
DlgTemplatesNoTpl : "(Tiada Templat Disimpan)", |
DlgTemplatesReplace : "Replace actual contents", //MISSING |
// About Dialog |
DlgAboutAboutTab : "Tentang", |
DlgAboutBrowserInfoTab : "Maklumat Perisian Browser", |
DlgAboutLicenseTab : "License", //MISSING |
DlgAboutVersion : "versi", |
DlgAboutLicense : "Perlesenan dibawah terma GNU Lesser General Public License", |
DlgAboutInfo : "Untuk maklumat lanjut sila pergi ke" |
} |
/branches/v1.0-menes/api/fckeditor/editor/lang/uk.js |
---|
New file |
0,0 → 1,501 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: uk.js |
* Ukrainian language file. |
* |
* File Authors: |
* Alexander Pervak (pervak@gmail.com) |
*/ |
var FCKLang = |
{ |
// Language direction : "ltr" (left to right) or "rtl" (right to left). |
Dir : "ltr", |
ToolbarCollapse : "Згорнути панель інструментів", |
ToolbarExpand : "Розгорнути панель інструментів", |
// Toolbar Items and Context Menu |
Save : "Зберегти", |
NewPage : "Нова сторінка", |
Preview : "Попередній перегляд", |
Cut : "Вирізати", |
Copy : "Копіювати", |
Paste : "Вставити", |
PasteText : "Вставити тільки текст", |
PasteWord : "Вставити з Word", |
Print : "Друк", |
SelectAll : "Виділити все", |
RemoveFormat : "Прибрати форматування", |
InsertLinkLbl : "Посилання", |
InsertLink : "Вставити/Редагувати посилання", |
RemoveLink : "Знищити посилання", |
Anchor : "Вставити/Редагувати якір", |
InsertImageLbl : "Зображення", |
InsertImage : "Вставити/Редагувати зображення", |
InsertFlashLbl : "Flash", |
InsertFlash : "Вставити/Редагувати Flash", |
InsertTableLbl : "Таблиця", |
InsertTable : "Вставити/Редагувати таблицю", |
InsertLineLbl : "Лінія", |
InsertLine : "Вставити горизонтальну лінію", |
InsertSpecialCharLbl: "Спеціальний символ", |
InsertSpecialChar : "Вставити спеціальний символ", |
InsertSmileyLbl : "Смайлик", |
InsertSmiley : "Вставити смайлик", |
About : "Про FCKeditor", |
Bold : "Жирний", |
Italic : "Курсив", |
Underline : "Підкреслений", |
StrikeThrough : "Закреслений", |
Subscript : "Підрядковий індекс", |
Superscript : "Надрядковий индекс", |
LeftJustify : "По лівому краю", |
CenterJustify : "По центру", |
RightJustify : "По правому краю", |
BlockJustify : "По ширині", |
DecreaseIndent : "Зменшити відступ", |
IncreaseIndent : "Збільшити відступ", |
Undo : "Повернути", |
Redo : "Повторити", |
NumberedListLbl : "Нумерований список", |
NumberedList : "Вставити/Видалити нумерований список", |
BulletedListLbl : "Маркований список", |
BulletedList : "Вставити/Видалити маркований список", |
ShowTableBorders : "Показати бордюри таблиці", |
ShowDetails : "Показати деталі", |
Style : "Стиль", |
FontFormat : "Форматування", |
Font : "Шрифт", |
FontSize : "Розмір", |
TextColor : "Колір тексту", |
BGColor : "Колір фону", |
Source : "Джерело", |
Find : "Пошук", |
Replace : "Заміна", |
SpellCheck : "Перевірити орфографію", |
UniversalKeyboard : "Універсальна клавіатура", |
PageBreakLbl : "Page Break", //MISSING |
PageBreak : "Insert Page Break", //MISSING |
Form : "Форма", |
Checkbox : "Флагова кнопка", |
RadioButton : "Кнопка вибору", |
TextField : "Текстове поле", |
Textarea : "Текстова область", |
HiddenField : "Приховане поле", |
Button : "Кнопка", |
SelectionField : "Список", |
ImageButton : "Кнопка із зображенням", |
FitWindow : "Maximize the editor size", //MISSING |
// Context Menu |
EditLink : "Вставити посилання", |
CellCM : "Cell", //MISSING |
RowCM : "Row", //MISSING |
ColumnCM : "Column", //MISSING |
InsertRow : "Вставити строку", |
DeleteRows : "Видалити строки", |
InsertColumn : "Вставити колонку", |
DeleteColumns : "Видалити колонки", |
InsertCell : "Вставити комірку", |
DeleteCells : "Видалити комірки", |
MergeCells : "Об'єднати комірки", |
SplitCell : "Роз'єднати комірку", |
TableDelete : "Delete Table", //MISSING |
CellProperties : "Властивості комірки", |
TableProperties : "Властивості таблиці", |
ImageProperties : "Властивості зображення", |
FlashProperties : "Властивості Flash", |
AnchorProp : "Властивості якоря", |
ButtonProp : "Властивості кнопки", |
CheckboxProp : "Властивості флагової кнопки", |
HiddenFieldProp : "Властивості прихованого поля", |
RadioButtonProp : "Властивості кнопки вибору", |
ImageButtonProp : "Властивості кнопки із зображенням", |
TextFieldProp : "Властивості текстового поля", |
SelectionFieldProp : "Властивості списку", |
TextareaProp : "Властивості текстової області", |
FormProp : "Властивості форми", |
FontFormats : "Нормальний;Форматований;Адреса;Заголовок 1;Заголовок 2;Заголовок 3;Заголовок 4;Заголовок 5;Заголовок 6", |
// Alerts and Messages |
ProcessingXHTML : "Обробка XHTML. Зачекайте, будь ласка...", |
Done : "Зроблено", |
PasteWordConfirm : "Текст, що ви хочете вставити, схожий на копійований з Word. Ви хочете очистити його перед вставкою?", |
NotCompatiblePaste : "Ця команда доступна для Internet Explorer версії 5.5 або вище. Ви хочете вставити без очищення?", |
UnknownToolbarItem : "Невідомий елемент панелі інструментів \"%1\"", |
UnknownCommand : "Невідоме ім'я команди \"%1\"", |
NotImplemented : "Команда не реалізована", |
UnknownToolbarSet : "Панель інструментів \"%1\" не існує", |
NoActiveX : "Your browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.", //MISSING |
BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.", //MISSING |
DialogBlocked : "It was not possible to open the dialog window. Make sure all popup blockers are disabled.", //MISSING |
// Dialogs |
DlgBtnOK : "ОК", |
DlgBtnCancel : "Скасувати", |
DlgBtnClose : "Зачинити", |
DlgBtnBrowseServer : "Передивитися на сервері", |
DlgAdvancedTag : "Розширений", |
DlgOpOther : "<Інше>", |
DlgInfoTab : "Інфо", |
DlgAlertUrl : "Вставте, будь-ласка, URL", |
// General Dialogs Labels |
DlgGenNotSet : "<не визначено>", |
DlgGenId : "Ідентифікатор", |
DlgGenLangDir : "Напрямок мови", |
DlgGenLangDirLtr : "Зліва на право (LTR)", |
DlgGenLangDirRtl : "Зправа на ліво (RTL)", |
DlgGenLangCode : "Мова", |
DlgGenAccessKey : "Гаряча клавіша", |
DlgGenName : "Им'я", |
DlgGenTabIndex : "Послідовність переходу", |
DlgGenLongDescr : "Довгий опис URL", |
DlgGenClass : "Клас CSS", |
DlgGenTitle : "Заголовок", |
DlgGenContType : "Тип вмісту", |
DlgGenLinkCharset : "Кодировка", |
DlgGenStyle : "Стиль CSS", |
// Image Dialog |
DlgImgTitle : "Властивості зображення", |
DlgImgInfoTab : "Інформація про изображении", |
DlgImgBtnUpload : "Надіслати на сервер", |
DlgImgURL : "URL", |
DlgImgUpload : "Закачати", |
DlgImgAlt : "Альтернативний текст", |
DlgImgWidth : "Ширина", |
DlgImgHeight : "Висота", |
DlgImgLockRatio : "Зберегти пропорції", |
DlgBtnResetSize : "Скинути розмір", |
DlgImgBorder : "Бордюр", |
DlgImgHSpace : "Горизонтальний відступ", |
DlgImgVSpace : "Вертикальний відступ", |
DlgImgAlign : "Вирівнювання", |
DlgImgAlignLeft : "По лівому краю", |
DlgImgAlignAbsBottom: "Абс по низу", |
DlgImgAlignAbsMiddle: "Абс по середині", |
DlgImgAlignBaseline : "По базовій лінії", |
DlgImgAlignBottom : "По низу", |
DlgImgAlignMiddle : "По середині", |
DlgImgAlignRight : "По правому краю", |
DlgImgAlignTextTop : "Текст на верху", |
DlgImgAlignTop : "По верху", |
DlgImgPreview : "Попередній перегляд", |
DlgImgAlertUrl : "Будь ласка, введіть URL зображення", |
DlgImgLinkTab : "Посилання", |
// Flash Dialog |
DlgFlashTitle : "Властивості Flash", |
DlgFlashChkPlay : "Авто програвання", |
DlgFlashChkLoop : "Зациклити", |
DlgFlashChkMenu : "Дозволити меню Flash", |
DlgFlashScale : "Масштаб", |
DlgFlashScaleAll : "Показати всі", |
DlgFlashScaleNoBorder : "Без рамки", |
DlgFlashScaleFit : "Дійсний розмір", |
// Link Dialog |
DlgLnkWindowTitle : "Посилання", |
DlgLnkInfoTab : "Інформація посилання", |
DlgLnkTargetTab : "Ціль", |
DlgLnkType : "Тип посилання", |
DlgLnkTypeURL : "URL", |
DlgLnkTypeAnchor : "Якір на цю сторінку", |
DlgLnkTypeEMail : "Эл. пошта", |
DlgLnkProto : "Протокол", |
DlgLnkProtoOther : "<інше>", |
DlgLnkURL : "URL", |
DlgLnkAnchorSel : "Оберіть якір", |
DlgLnkAnchorByName : "За ім'ям якоря", |
DlgLnkAnchorById : "За ідентифікатором елемента", |
DlgLnkNoAnchors : "<Немає якорів доступних в цьому документі>", |
DlgLnkEMail : "Адреса ел. пошти", |
DlgLnkEMailSubject : "Тема листа", |
DlgLnkEMailBody : "Тіло повідомлення", |
DlgLnkUpload : "Закачати", |
DlgLnkBtnUpload : "Переслати на сервер", |
DlgLnkTarget : "Ціль", |
DlgLnkTargetFrame : "<фрейм>", |
DlgLnkTargetPopup : "<спливаюче вікно>", |
DlgLnkTargetBlank : "Нове вікно (_blank)", |
DlgLnkTargetParent : "Батьківське вікно (_parent)", |
DlgLnkTargetSelf : "Теж вікно (_self)", |
DlgLnkTargetTop : "Найвище вікно (_top)", |
DlgLnkTargetFrameName : "Ім'я целевого фрейма", |
DlgLnkPopWinName : "Ім'я спливаючого вікна", |
DlgLnkPopWinFeat : "Властивості спливаючого вікна", |
DlgLnkPopResize : "Змінюється в розмірах", |
DlgLnkPopLocation : "Панель локації", |
DlgLnkPopMenu : "Панель меню", |
DlgLnkPopScroll : "Полоси прокрутки", |
DlgLnkPopStatus : "Строка статусу", |
DlgLnkPopToolbar : "Панель інструментів", |
DlgLnkPopFullScrn : "Повний екран (IE)", |
DlgLnkPopDependent : "Залежний (Netscape)", |
DlgLnkPopWidth : "Ширина", |
DlgLnkPopHeight : "Висота", |
DlgLnkPopLeft : "Позиція зліва", |
DlgLnkPopTop : "Позиція зверху", |
DlnLnkMsgNoUrl : "Будь ласка, занесіть URL посилання", |
DlnLnkMsgNoEMail : "Будь ласка, занесіть адрес эл. почты", |
DlnLnkMsgNoAnchor : "Будь ласка, оберіть якір", |
DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING |
// Color Dialog |
DlgColorTitle : "Оберіть колір", |
DlgColorBtnClear : "Очистити", |
DlgColorHighlight : "Підсвічений", |
DlgColorSelected : "Обраний", |
// Smiley Dialog |
DlgSmileyTitle : "Вставити смайлик", |
// Special Character Dialog |
DlgSpecialCharTitle : "Оберіть спеціальний символ", |
// Table Dialog |
DlgTableTitle : "Властивості таблиці", |
DlgTableRows : "Строки", |
DlgTableColumns : "Колонки", |
DlgTableBorder : "Розмір бордюра", |
DlgTableAlign : "Вирівнювання", |
DlgTableAlignNotSet : "<Не вст.>", |
DlgTableAlignLeft : "Зліва", |
DlgTableAlignCenter : "По центру", |
DlgTableAlignRight : "Зправа", |
DlgTableWidth : "Ширина", |
DlgTableWidthPx : "пікселів", |
DlgTableWidthPc : "відсотків", |
DlgTableHeight : "Висота", |
DlgTableCellSpace : "Проміжок (spacing)", |
DlgTableCellPad : "Відступ (padding)", |
DlgTableCaption : "Заголовок (Caption)", |
DlgTableSummary : "Summary", //MISSING |
// Table Cell Dialog |
DlgCellTitle : "Властивості комірки", |
DlgCellWidth : "Ширина", |
DlgCellWidthPx : "пікселів", |
DlgCellWidthPc : "відсотків", |
DlgCellHeight : "Висота", |
DlgCellWordWrap : "Згортання текста", |
DlgCellWordWrapNotSet : "<Не вст.>", |
DlgCellWordWrapYes : "Так", |
DlgCellWordWrapNo : "Ні", |
DlgCellHorAlign : "Горизонтальне вирівнювання", |
DlgCellHorAlignNotSet : "<Не вст.>", |
DlgCellHorAlignLeft : "Зліва", |
DlgCellHorAlignCenter : "По центру", |
DlgCellHorAlignRight: "Зправа", |
DlgCellVerAlign : "Вертикальное вирівнювання", |
DlgCellVerAlignNotSet : "<Не вст.>", |
DlgCellVerAlignTop : "Зверху", |
DlgCellVerAlignMiddle : "Посередині", |
DlgCellVerAlignBottom : "Знизу", |
DlgCellVerAlignBaseline : "По базовій лінії", |
DlgCellRowSpan : "Діапазон строк (span)", |
DlgCellCollSpan : "Діапазон колонок (span)", |
DlgCellBackColor : "Колір фона", |
DlgCellBorderColor : "Колір бордюра", |
DlgCellBtnSelect : "Оберіть...", |
// Find Dialog |
DlgFindTitle : "Пошук", |
DlgFindFindBtn : "Пошук", |
DlgFindNotFoundMsg : "Вказаний текст не знайдений.", |
// Replace Dialog |
DlgReplaceTitle : "Замінити", |
DlgReplaceFindLbl : "Шукати:", |
DlgReplaceReplaceLbl : "Замінити на:", |
DlgReplaceCaseChk : "Учитывать регистр", |
DlgReplaceReplaceBtn : "Замінити", |
DlgReplaceReplAllBtn : "Замінити все", |
DlgReplaceWordChk : "Збіг цілих слів", |
// Paste Operations / Dialog |
PasteErrorPaste : "Настройки безпеки вашого браузера не дозволяють редактору автоматично виконувати операції вставки. Будь ласка, використовуйте клавіатуру для цього (Ctrl+V).", |
PasteErrorCut : "Настройки безпеки вашого браузера не дозволяють редактору автоматично виконувати операції вирізування. Будь ласка, використовуйте клавіатуру для цього (Ctrl+X).", |
PasteErrorCopy : "Настройки безпеки вашого браузера не дозволяють редактору автоматично виконувати операції копіювання. Будь ласка, використовуйте клавіатуру для цього (Ctrl+C).", |
PasteAsText : "Вставити тільки текст", |
PasteFromWord : "Вставити з Word", |
DlgPasteMsg2 : "Будь-ласка, вставте з буфера обміну в цю область, користуючись комбінацією клавіш (<STRONG>Ctrl+V</STRONG>) та натисніть <STRONG>OK</STRONG>.", |
DlgPasteIgnoreFont : "Ігнорувати налаштування шрифтів", |
DlgPasteRemoveStyles : "Видалити налаштування стилів", |
DlgPasteCleanBox : "Очистити область", |
// Color Picker |
ColorAutomatic : "Автоматичний", |
ColorMoreColors : "Кольори...", |
// Document Properties |
DocProps : "Властивості документа", |
// Anchor Dialog |
DlgAnchorTitle : "Властивості якоря", |
DlgAnchorName : "Ім'я якоря", |
DlgAnchorErrorName : "Будь ласка, занесіть ім'я якоря", |
// Speller Pages Dialog |
DlgSpellNotInDic : "Не має в словнику", |
DlgSpellChangeTo : "Замінити на", |
DlgSpellBtnIgnore : "Ігнорувати", |
DlgSpellBtnIgnoreAll : "Ігнорувати все", |
DlgSpellBtnReplace : "Замінити", |
DlgSpellBtnReplaceAll : "Замінити все", |
DlgSpellBtnUndo : "Назад", |
DlgSpellNoSuggestions : "- Немає припущень -", |
DlgSpellProgress : "Виконується перевірка орфографії...", |
DlgSpellNoMispell : "Перевірку орфографії завершено: помилок не знайдено", |
DlgSpellNoChanges : "Перевірку орфографії завершено: жодне слово не змінено", |
DlgSpellOneChange : "Перевірку орфографії завершено: змінено одно слово", |
DlgSpellManyChanges : "Перевірку орфографії завершено: 1% слів змінено", |
IeSpellDownload : "Модуль перевірки орфографії не встановлено. Бажаєтн завантажити його зараз?", |
// Button Dialog |
DlgButtonText : "Текст (Значення)", |
DlgButtonType : "Тип", |
DlgButtonTypeBtn : "Button", //MISSING |
DlgButtonTypeSbm : "Submit", //MISSING |
DlgButtonTypeRst : "Reset", //MISSING |
// Checkbox and Radio Button Dialogs |
DlgCheckboxName : "Ім'я", |
DlgCheckboxValue : "Значення", |
DlgCheckboxSelected : "Обрана", |
// Form Dialog |
DlgFormName : "Ім'я", |
DlgFormAction : "Дія", |
DlgFormMethod : "Метод", |
// Select Field Dialog |
DlgSelectName : "Ім'я", |
DlgSelectValue : "Значення", |
DlgSelectSize : "Розмір", |
DlgSelectLines : "лінії", |
DlgSelectChkMulti : "Дозволити обрання декількох позицій", |
DlgSelectOpAvail : "Доступні варіанти", |
DlgSelectOpText : "Текст", |
DlgSelectOpValue : "Значення", |
DlgSelectBtnAdd : "Добавити", |
DlgSelectBtnModify : "Змінити", |
DlgSelectBtnUp : "Вгору", |
DlgSelectBtnDown : "Вниз", |
DlgSelectBtnSetValue : "Встановити як вибране значення", |
DlgSelectBtnDelete : "Видалити", |
// Textarea Dialog |
DlgTextareaName : "Ім'я", |
DlgTextareaCols : "Колонки", |
DlgTextareaRows : "Строки", |
// Text Field Dialog |
DlgTextName : "Ім'я", |
DlgTextValue : "Значення", |
DlgTextCharWidth : "Ширина", |
DlgTextMaxChars : "Макс. кіл-ть символів", |
DlgTextType : "Тип", |
DlgTextTypeText : "Текст", |
DlgTextTypePass : "Пароль", |
// Hidden Field Dialog |
DlgHiddenName : "Ім'я", |
DlgHiddenValue : "Значення", |
// Bulleted List Dialog |
BulletedListProp : "Властивості маркованого списка", |
NumberedListProp : "Властивості нумерованного списка", |
DlgLstStart : "Start", //MISSING |
DlgLstType : "Тип", |
DlgLstTypeCircle : "Коло", |
DlgLstTypeDisc : "Disc", //MISSING |
DlgLstTypeSquare : "Квадрат", |
DlgLstTypeNumbers : "Номери (1, 2, 3)", |
DlgLstTypeLCase : "Літери нижнього регістра(a, b, c)", |
DlgLstTypeUCase : "Літери ВЕРХНЬОГО РЕГІСТРА (A, B, C)", |
DlgLstTypeSRoman : "Малі римські літери (i, ii, iii)", |
DlgLstTypeLRoman : "Великі римські літери (I, II, III)", |
// Document Properties Dialog |
DlgDocGeneralTab : "Загальні", |
DlgDocBackTab : "Заднє тло", |
DlgDocColorsTab : "Кольори та відступи", |
DlgDocMetaTab : "Мета дані", |
DlgDocPageTitle : "Заголовок сторінки", |
DlgDocLangDir : "Напрямок тексту", |
DlgDocLangDirLTR : "Зліва на право (LTR)", |
DlgDocLangDirRTL : "Зправа на лево (RTL)", |
DlgDocLangCode : "Код мови", |
DlgDocCharSet : "Кодування набору символів", |
DlgDocCharSetCE : "Central European", //MISSING |
DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING |
DlgDocCharSetCR : "Cyrillic", //MISSING |
DlgDocCharSetGR : "Greek", //MISSING |
DlgDocCharSetJP : "Japanese", //MISSING |
DlgDocCharSetKR : "Korean", //MISSING |
DlgDocCharSetTR : "Turkish", //MISSING |
DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING |
DlgDocCharSetWE : "Western European", //MISSING |
DlgDocCharSetOther : "Інше кодування набору символів", |
DlgDocDocType : "Заголовок типу документу", |
DlgDocDocTypeOther : "Інший заголовок типу документу", |
DlgDocIncXHTML : "Ввімкнути XHTML оголошення", |
DlgDocBgColor : "Колір тла", |
DlgDocBgImage : "URL зображення тла", |
DlgDocBgNoScroll : "Тло без прокрутки", |
DlgDocCText : "Текст", |
DlgDocCLink : "Посилання", |
DlgDocCVisited : "Відвідане посилання", |
DlgDocCActive : "Активне посилання", |
DlgDocMargins : "Відступи сторінки", |
DlgDocMaTop : "Верхній", |
DlgDocMaLeft : "Лівий", |
DlgDocMaRight : "Правий", |
DlgDocMaBottom : "Нижній", |
DlgDocMeIndex : "Ключові слова документа (розділені комами)", |
DlgDocMeDescr : "Опис документа", |
DlgDocMeAuthor : "Автор", |
DlgDocMeCopy : "Авторські права", |
DlgDocPreview : "Попередній перегляд", |
// Templates Dialog |
Templates : "Шаблони", |
DlgTemplatesTitle : "Шаблони змісту", |
DlgTemplatesSelMsg : "Оберіть, будь ласка, шаблон для відкриття в редакторі<br>(поточний зміст буде втрачено):", |
DlgTemplatesLoading : "Завантаження списку шаблонів. Зачекайте, будь ласка...", |
DlgTemplatesNoTpl : "(Не визначено жодного шаблону)", |
DlgTemplatesReplace : "Replace actual contents", //MISSING |
// About Dialog |
DlgAboutAboutTab : "Про програму", |
DlgAboutBrowserInfoTab : "Інформація браузера", |
DlgAboutLicenseTab : "License", //MISSING |
DlgAboutVersion : "Версія", |
DlgAboutLicense : "Ліцензовано згідно умовам GNU Lesser General Public License", |
DlgAboutInfo : "Додаткову інформацію дивіться на " |
} |
/branches/v1.0-menes/api/fckeditor/editor/lang/zh-cn.js |
---|
New file |
0,0 → 1,501 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: zh-cn.js |
* Chinese Simplified language file. |
* |
* File Authors: |
* NetRube (NetRube@gmail.com) |
*/ |
var FCKLang = |
{ |
// Language direction : "ltr" (left to right) or "rtl" (right to left). |
Dir : "ltr", |
ToolbarCollapse : "折叠工具栏", |
ToolbarExpand : "展开工具栏", |
// Toolbar Items and Context Menu |
Save : "保存", |
NewPage : "新建", |
Preview : "预览", |
Cut : "剪切", |
Copy : "复制", |
Paste : "粘贴", |
PasteText : "粘贴为无格式文本", |
PasteWord : "从 MS Word 粘贴", |
Print : "打印", |
SelectAll : "全选", |
RemoveFormat : "清除格式", |
InsertLinkLbl : "超链接", |
InsertLink : "插入/编辑超链接", |
RemoveLink : "取消超链接", |
Anchor : "插入/编辑锚点链接", |
InsertImageLbl : "图象", |
InsertImage : "插入/编辑图象", |
InsertFlashLbl : "Flash", |
InsertFlash : "插入/编辑 Flash", |
InsertTableLbl : "表格", |
InsertTable : "插入/编辑表格", |
InsertLineLbl : "水平线", |
InsertLine : "插入水平线", |
InsertSpecialCharLbl: "特殊符号", |
InsertSpecialChar : "插入特殊符号", |
InsertSmileyLbl : "表情符", |
InsertSmiley : "插入表情图标", |
About : "关于 FCKeditor", |
Bold : "加粗", |
Italic : "倾斜", |
Underline : "下划线", |
StrikeThrough : "删除线", |
Subscript : "下标", |
Superscript : "上标", |
LeftJustify : "左对齐", |
CenterJustify : "居中对齐", |
RightJustify : "右对齐", |
BlockJustify : "两端对齐", |
DecreaseIndent : "减少缩进量", |
IncreaseIndent : "增加缩进量", |
Undo : "撤消", |
Redo : "重做", |
NumberedListLbl : "编号列表", |
NumberedList : "插入/删除编号列表", |
BulletedListLbl : "项目列表", |
BulletedList : "插入/删除项目列表", |
ShowTableBorders : "显示表格边框", |
ShowDetails : "显示详细资料", |
Style : "样式", |
FontFormat : "格式", |
Font : "字体", |
FontSize : "大小", |
TextColor : "文本颜色", |
BGColor : "背景颜色", |
Source : "源代码", |
Find : "查找", |
Replace : "替换", |
SpellCheck : "拼写检查", |
UniversalKeyboard : "软键盘", |
PageBreakLbl : "分页符", |
PageBreak : "插入分页符", |
Form : "表单", |
Checkbox : "复选框", |
RadioButton : "单选按钮", |
TextField : "单行文本", |
Textarea : "多行文本", |
HiddenField : "隐藏域", |
Button : "按钮", |
SelectionField : "列表/菜单", |
ImageButton : "图像域", |
FitWindow : "全屏编辑", |
// Context Menu |
EditLink : "编辑超链接", |
CellCM : "单元格", |
RowCM : "行", |
ColumnCM : "列", |
InsertRow : "插入行", |
DeleteRows : "删除行", |
InsertColumn : "插入列", |
DeleteColumns : "删除列", |
InsertCell : "插入单元格", |
DeleteCells : "删除单元格", |
MergeCells : "合并单元格", |
SplitCell : "拆分单元格", |
TableDelete : "删除表格", |
CellProperties : "单元格属性", |
TableProperties : "表格属性", |
ImageProperties : "图象属性", |
FlashProperties : "Flash 属性", |
AnchorProp : "锚点链接属性", |
ButtonProp : "按钮属性", |
CheckboxProp : "复选框属性", |
HiddenFieldProp : "隐藏域属性", |
RadioButtonProp : "单选按钮属性", |
ImageButtonProp : "图像域属性", |
TextFieldProp : "单行文本属性", |
SelectionFieldProp : "菜单/列表属性", |
TextareaProp : "多行文本属性", |
FormProp : "表单属性", |
FontFormats : "普通;已编排格式;地址;标题 1;标题 2;标题 3;标题 4;标题 5;标题 6;段落(DIV)", |
// Alerts and Messages |
ProcessingXHTML : "正在处理 XHTML,请稍等...", |
Done : "完成", |
PasteWordConfirm : "您要粘贴的内容好像是来自 MS Word,是否要清除 MS Word 格式后再粘贴?", |
NotCompatiblePaste : "该命令需要 Internet Explorer 5.5 或更高版本的支持,是否按常规粘贴进行?", |
UnknownToolbarItem : "未知工具栏项目 \"%1\"", |
UnknownCommand : "未知命令名称 \"%1\"", |
NotImplemented : "命令无法执行", |
UnknownToolbarSet : "工具栏设置 \"%1\" 不存在", |
NoActiveX : "浏览器安全设置限制了本编辑器的某些功能。您必须启用安全设置中的“运行 ActiveX 控件和插件”,否则将出现某些错误并缺少功能。", |
BrowseServerBlocked : "无法打开资源浏览器,请确认是否启用了禁止弹出窗口。", |
DialogBlocked : "无法打开对话框窗口,请确认是否启用了禁止弹出窗口或网页对话框(IE)。", |
// Dialogs |
DlgBtnOK : "确定", |
DlgBtnCancel : "取消", |
DlgBtnClose : "关闭", |
DlgBtnBrowseServer : "浏览服务器", |
DlgAdvancedTag : "高级", |
DlgOpOther : "<其它>", |
DlgInfoTab : "信息", |
DlgAlertUrl : "请插入 URL", |
// General Dialogs Labels |
DlgGenNotSet : "<没有设置>", |
DlgGenId : "ID", |
DlgGenLangDir : "语言方向", |
DlgGenLangDirLtr : "从左到右 (LTR)", |
DlgGenLangDirRtl : "从右到左 (RTL)", |
DlgGenLangCode : "语言代码", |
DlgGenAccessKey : "访问键", |
DlgGenName : "名称", |
DlgGenTabIndex : "Tab 键次序", |
DlgGenLongDescr : "详细说明地址", |
DlgGenClass : "样式类名称", |
DlgGenTitle : "标题", |
DlgGenContType : "内容类型", |
DlgGenLinkCharset : "字符编码", |
DlgGenStyle : "行内样式", |
// Image Dialog |
DlgImgTitle : "图象属性", |
DlgImgInfoTab : "图象", |
DlgImgBtnUpload : "发送到服务器上", |
DlgImgURL : "源文件", |
DlgImgUpload : "上传", |
DlgImgAlt : "替换文本", |
DlgImgWidth : "宽度", |
DlgImgHeight : "高度", |
DlgImgLockRatio : "锁定比例", |
DlgBtnResetSize : "恢复尺寸", |
DlgImgBorder : "边框大小", |
DlgImgHSpace : "水平间距", |
DlgImgVSpace : "垂直间距", |
DlgImgAlign : "对齐方式", |
DlgImgAlignLeft : "左对齐", |
DlgImgAlignAbsBottom: "绝对底边", |
DlgImgAlignAbsMiddle: "绝对居中", |
DlgImgAlignBaseline : "基线", |
DlgImgAlignBottom : "底边", |
DlgImgAlignMiddle : "居中", |
DlgImgAlignRight : "右对齐", |
DlgImgAlignTextTop : "文本上方", |
DlgImgAlignTop : "顶端", |
DlgImgPreview : "预览", |
DlgImgAlertUrl : "请输入图象地址", |
DlgImgLinkTab : "链接", |
// Flash Dialog |
DlgFlashTitle : "Flash 属性", |
DlgFlashChkPlay : "自动播放", |
DlgFlashChkLoop : "循环", |
DlgFlashChkMenu : "启用 Flash 菜单", |
DlgFlashScale : "缩放", |
DlgFlashScaleAll : "全部显示", |
DlgFlashScaleNoBorder : "无边框", |
DlgFlashScaleFit : "严格匹配", |
// Link Dialog |
DlgLnkWindowTitle : "超链接", |
DlgLnkInfoTab : "超链接信息", |
DlgLnkTargetTab : "目标", |
DlgLnkType : "超链接类型", |
DlgLnkTypeURL : "超链接", |
DlgLnkTypeAnchor : "页内锚点链接", |
DlgLnkTypeEMail : "电子邮件", |
DlgLnkProto : "协议", |
DlgLnkProtoOther : "<其它>", |
DlgLnkURL : "地址", |
DlgLnkAnchorSel : "选择一个锚点", |
DlgLnkAnchorByName : "按锚点名称", |
DlgLnkAnchorById : "按锚点 ID", |
DlgLnkNoAnchors : "<此文档没有可用的锚点>", |
DlgLnkEMail : "地址", |
DlgLnkEMailSubject : "主题", |
DlgLnkEMailBody : "内容", |
DlgLnkUpload : "上传", |
DlgLnkBtnUpload : "发送到服务器上", |
DlgLnkTarget : "目标", |
DlgLnkTargetFrame : "<框架>", |
DlgLnkTargetPopup : "<弹出窗口>", |
DlgLnkTargetBlank : "新窗口 (_blank)", |
DlgLnkTargetParent : "父窗口 (_parent)", |
DlgLnkTargetSelf : "本窗口 (_self)", |
DlgLnkTargetTop : "整页 (_top)", |
DlgLnkTargetFrameName : "目标框架名称", |
DlgLnkPopWinName : "弹出窗口名称", |
DlgLnkPopWinFeat : "弹出窗口属性", |
DlgLnkPopResize : "调整大小", |
DlgLnkPopLocation : "地址栏", |
DlgLnkPopMenu : "菜单栏", |
DlgLnkPopScroll : "滚动条", |
DlgLnkPopStatus : "状态栏", |
DlgLnkPopToolbar : "工具栏", |
DlgLnkPopFullScrn : "全屏 (IE)", |
DlgLnkPopDependent : "依附 (NS)", |
DlgLnkPopWidth : "宽", |
DlgLnkPopHeight : "高", |
DlgLnkPopLeft : "左", |
DlgLnkPopTop : "右", |
DlnLnkMsgNoUrl : "请输入超链接地址", |
DlnLnkMsgNoEMail : "请输入电子邮件地址", |
DlnLnkMsgNoAnchor : "请选择一个锚点", |
DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING |
// Color Dialog |
DlgColorTitle : "选择颜色", |
DlgColorBtnClear : "清除", |
DlgColorHighlight : "预览", |
DlgColorSelected : "选择", |
// Smiley Dialog |
DlgSmileyTitle : "插入表情图标", |
// Special Character Dialog |
DlgSpecialCharTitle : "选择特殊符号", |
// Table Dialog |
DlgTableTitle : "表格属性", |
DlgTableRows : "行数", |
DlgTableColumns : "列数", |
DlgTableBorder : "边框", |
DlgTableAlign : "对齐", |
DlgTableAlignNotSet : "<没有设置>", |
DlgTableAlignLeft : "左对齐", |
DlgTableAlignCenter : "居中", |
DlgTableAlignRight : "右对齐", |
DlgTableWidth : "宽度", |
DlgTableWidthPx : "像素", |
DlgTableWidthPc : "百分比", |
DlgTableHeight : "高度", |
DlgTableCellSpace : "间距", |
DlgTableCellPad : "边距", |
DlgTableCaption : "标题", |
DlgTableSummary : "摘要", |
// Table Cell Dialog |
DlgCellTitle : "单元格属性", |
DlgCellWidth : "宽度", |
DlgCellWidthPx : "像素", |
DlgCellWidthPc : "百分比", |
DlgCellHeight : "高度", |
DlgCellWordWrap : "自动换行", |
DlgCellWordWrapNotSet : "<没有设置>", |
DlgCellWordWrapYes : "是", |
DlgCellWordWrapNo : "否", |
DlgCellHorAlign : "水平对齐", |
DlgCellHorAlignNotSet : "<没有设置>", |
DlgCellHorAlignLeft : "左对齐", |
DlgCellHorAlignCenter : "居中", |
DlgCellHorAlignRight: "右对齐", |
DlgCellVerAlign : "垂直对齐", |
DlgCellVerAlignNotSet : "<没有设置>", |
DlgCellVerAlignTop : "顶端", |
DlgCellVerAlignMiddle : "居中", |
DlgCellVerAlignBottom : "底部", |
DlgCellVerAlignBaseline : "基线", |
DlgCellRowSpan : "纵跨行数", |
DlgCellCollSpan : "横跨列数", |
DlgCellBackColor : "背景颜色", |
DlgCellBorderColor : "边框颜色", |
DlgCellBtnSelect : "选择...", |
// Find Dialog |
DlgFindTitle : "查找", |
DlgFindFindBtn : "查找", |
DlgFindNotFoundMsg : "指定文本没有找到。", |
// Replace Dialog |
DlgReplaceTitle : "替换", |
DlgReplaceFindLbl : "查找:", |
DlgReplaceReplaceLbl : "替换:", |
DlgReplaceCaseChk : "区分大小写", |
DlgReplaceReplaceBtn : "替换", |
DlgReplaceReplAllBtn : "全部替换", |
DlgReplaceWordChk : "全字匹配", |
// Paste Operations / Dialog |
PasteErrorPaste : "您的浏览器安全设置不允许编辑器自动执行粘贴操作,请使用键盘快捷键(Ctrl+V)来完成。", |
PasteErrorCut : "您的浏览器安全设置不允许编辑器自动执行剪切操作,请使用键盘快捷键(Ctrl+X)来完成。", |
PasteErrorCopy : "您的浏览器安全设置不允许编辑器自动执行复制操作,请使用键盘快捷键(Ctrl+C)来完成。", |
PasteAsText : "粘贴为无格式文本", |
PasteFromWord : "从 MS Word 粘贴", |
DlgPasteMsg2 : "请使用键盘快捷键(<STRONG>Ctrl+V</STRONG>)把内容粘贴到下面的方框里,再按 <STRONG>确定</STRONG>。", |
DlgPasteIgnoreFont : "忽略 Font 标签", |
DlgPasteRemoveStyles : "清理 CSS 样式", |
DlgPasteCleanBox : "清空上面内容", |
// Color Picker |
ColorAutomatic : "自动", |
ColorMoreColors : "其它颜色...", |
// Document Properties |
DocProps : "页面属性", |
// Anchor Dialog |
DlgAnchorTitle : "命名锚点", |
DlgAnchorName : "锚点名称", |
DlgAnchorErrorName : "请输入锚点名称", |
// Speller Pages Dialog |
DlgSpellNotInDic : "没有在字典里", |
DlgSpellChangeTo : "更改为", |
DlgSpellBtnIgnore : "忽略", |
DlgSpellBtnIgnoreAll : "全部忽略", |
DlgSpellBtnReplace : "替换", |
DlgSpellBtnReplaceAll : "全部替换", |
DlgSpellBtnUndo : "撤消", |
DlgSpellNoSuggestions : "- 没有建议 -", |
DlgSpellProgress : "正在进行拼写检查...", |
DlgSpellNoMispell : "拼写检查完成:没有发现拼写错误", |
DlgSpellNoChanges : "拼写检查完成:没有更改任何单词", |
DlgSpellOneChange : "拼写检查完成:更改了一个单词", |
DlgSpellManyChanges : "拼写检查完成:更改了 %1 个单词", |
IeSpellDownload : "拼写检查插件还没安装,你是否想现在就下载?", |
// Button Dialog |
DlgButtonText : "标签(值)", |
DlgButtonType : "类型", |
DlgButtonTypeBtn : "Button", //MISSING |
DlgButtonTypeSbm : "Submit", //MISSING |
DlgButtonTypeRst : "Reset", //MISSING |
// Checkbox and Radio Button Dialogs |
DlgCheckboxName : "名称", |
DlgCheckboxValue : "选定值", |
DlgCheckboxSelected : "已勾选", |
// Form Dialog |
DlgFormName : "名称", |
DlgFormAction : "动作", |
DlgFormMethod : "方法", |
// Select Field Dialog |
DlgSelectName : "名称", |
DlgSelectValue : "选定", |
DlgSelectSize : "高度", |
DlgSelectLines : "行", |
DlgSelectChkMulti : "允许多选", |
DlgSelectOpAvail : "列表值", |
DlgSelectOpText : "标签", |
DlgSelectOpValue : "值", |
DlgSelectBtnAdd : "新增", |
DlgSelectBtnModify : "修改", |
DlgSelectBtnUp : "上移", |
DlgSelectBtnDown : "下移", |
DlgSelectBtnSetValue : "设为初始化时选定", |
DlgSelectBtnDelete : "删除", |
// Textarea Dialog |
DlgTextareaName : "名称", |
DlgTextareaCols : "字符宽度", |
DlgTextareaRows : "行数", |
// Text Field Dialog |
DlgTextName : "名称", |
DlgTextValue : "初始值", |
DlgTextCharWidth : "字符宽度", |
DlgTextMaxChars : "最多字符数", |
DlgTextType : "类型", |
DlgTextTypeText : "文本", |
DlgTextTypePass : "密码", |
// Hidden Field Dialog |
DlgHiddenName : "名称", |
DlgHiddenValue : "初始值", |
// Bulleted List Dialog |
BulletedListProp : "项目列表属性", |
NumberedListProp : "编号列表属性", |
DlgLstStart : "Start", //MISSING |
DlgLstType : "列表类型", |
DlgLstTypeCircle : "圆圈", |
DlgLstTypeDisc : "圆点", |
DlgLstTypeSquare : "方块", |
DlgLstTypeNumbers : "数字 (1, 2, 3)", |
DlgLstTypeLCase : "小写字母 (a, b, c)", |
DlgLstTypeUCase : "大写字母 (A, B, C)", |
DlgLstTypeSRoman : "小写罗马数字 (i, ii, iii)", |
DlgLstTypeLRoman : "大写罗马数字 (I, II, III)", |
// Document Properties Dialog |
DlgDocGeneralTab : "常规", |
DlgDocBackTab : "背景", |
DlgDocColorsTab : "颜色和边距", |
DlgDocMetaTab : "Meta 数据", |
DlgDocPageTitle : "页面标题", |
DlgDocLangDir : "语言方向", |
DlgDocLangDirLTR : "从左到右 (LTR)", |
DlgDocLangDirRTL : "从右到左 (RTL)", |
DlgDocLangCode : "语言代码", |
DlgDocCharSet : "字符编码", |
DlgDocCharSetCE : "Central European", //MISSING |
DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING |
DlgDocCharSetCR : "Cyrillic", //MISSING |
DlgDocCharSetGR : "Greek", //MISSING |
DlgDocCharSetJP : "Japanese", //MISSING |
DlgDocCharSetKR : "Korean", //MISSING |
DlgDocCharSetTR : "Turkish", //MISSING |
DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING |
DlgDocCharSetWE : "Western European", //MISSING |
DlgDocCharSetOther : "其它字符编码", |
DlgDocDocType : "文档类型", |
DlgDocDocTypeOther : "其它文档类型", |
DlgDocIncXHTML : "包含 XHTML 声明", |
DlgDocBgColor : "背景颜色", |
DlgDocBgImage : "背景图像", |
DlgDocBgNoScroll : "不滚动背景图像", |
DlgDocCText : "文本", |
DlgDocCLink : "超链接", |
DlgDocCVisited : "已访问的超链接", |
DlgDocCActive : "活动超链接", |
DlgDocMargins : "页面边距", |
DlgDocMaTop : "上", |
DlgDocMaLeft : "左", |
DlgDocMaRight : "右", |
DlgDocMaBottom : "下", |
DlgDocMeIndex : "页面索引关键字 (用半角逗号[,]分隔)", |
DlgDocMeDescr : "页面说明", |
DlgDocMeAuthor : "作者", |
DlgDocMeCopy : "版权", |
DlgDocPreview : "预览", |
// Templates Dialog |
Templates : "模板", |
DlgTemplatesTitle : "内容模板", |
DlgTemplatesSelMsg : "请选择编辑器内容模板<br>(当前内容将会被清除替换):", |
DlgTemplatesLoading : "正在加载模板列表,请稍等...", |
DlgTemplatesNoTpl : "(没有模板)", |
DlgTemplatesReplace : "Replace actual contents", //MISSING |
// About Dialog |
DlgAboutAboutTab : "关于", |
DlgAboutBrowserInfoTab : "浏览器信息", |
DlgAboutLicenseTab : "许可证", |
DlgAboutVersion : "版本", |
DlgAboutLicense : "基于 GNU 通用公共许可证授权发布 ", |
DlgAboutInfo : "要获得更多信息请访问 " |
} |
/branches/v1.0-menes/api/fckeditor/editor/lang/ro.js |
---|
New file |
0,0 → 1,502 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: ro.js |
* Romanian language file. |
* |
* File Authors: |
* Adrian Nicoara |
* Ionut Traian Popa |
*/ |
var FCKLang = |
{ |
// Language direction : "ltr" (left to right) or "rtl" (right to left). |
Dir : "ltr", |
ToolbarCollapse : "Ascunde bara cu opţiuni", |
ToolbarExpand : "Expandează bara cu opţiuni", |
// Toolbar Items and Context Menu |
Save : "Salvează", |
NewPage : "Pagină nouă", |
Preview : "Previzualizare", |
Cut : "Taie", |
Copy : "Copiază", |
Paste : "Adaugă", |
PasteText : "Adaugă ca text simplu", |
PasteWord : "Adaugă din Word", |
Print : "Printează", |
SelectAll : "Selectează tot", |
RemoveFormat : "ÎnlÄturÄ formatarea", |
InsertLinkLbl : "Link (Legătură web)", |
InsertLink : "Inserează/Editează link (legătură web)", |
RemoveLink : "ÎnlÄturÄ link (legÄturÄ web)", |
Anchor : "Inserează/Editează ancoră", |
InsertImageLbl : "Imagine", |
InsertImage : "Inserează/Editează imagine", |
InsertFlashLbl : "Flash", |
InsertFlash : "Inserează/Editează flash", |
InsertTableLbl : "Tabel", |
InsertTable : "Inserează/Editează tabel", |
InsertLineLbl : "Linie", |
InsertLine : "Inserează linie orizontă", |
InsertSpecialCharLbl: "Caracter special", |
InsertSpecialChar : "Inserează caracter special", |
InsertSmileyLbl : "Figură expresivă (Emoticon)", |
InsertSmiley : "Inserează Figură expresivă (Emoticon)", |
About : "Despre FCKeditor", |
Bold : "ÎngroÅat (bold)", |
Italic : "Înclinat (italic)", |
Underline : "Subliniat (underline)", |
StrikeThrough : "Tăiat (strike through)", |
Subscript : "Indice (subscript)", |
Superscript : "Putere (superscript)", |
LeftJustify : "Aliniere la stânga", |
CenterJustify : "Aliniere centrală", |
RightJustify : "Aliniere la dreapta", |
BlockJustify : "Aliniere în bloc (Block Justify)", |
DecreaseIndent : "Scade indentarea", |
IncreaseIndent : "Creşte indentarea", |
Undo : "Starea anterioară (undo)", |
Redo : "Starea ulterioară (redo)", |
NumberedListLbl : "Listă numerotată", |
NumberedList : "Inserează/Şterge listă numerotată", |
BulletedListLbl : "Listă cu puncte", |
BulletedList : "Inserează/Şterge listă cu puncte", |
ShowTableBorders : "Arată marginile tabelului", |
ShowDetails : "Arată detalii", |
Style : "Stil", |
FontFormat : "Formatare", |
Font : "Font", |
FontSize : "Mărime", |
TextColor : "Culoarea textului", |
BGColor : "Coloarea fundalului", |
Source : "Sursa", |
Find : "Găseşte", |
Replace : "ÎnlocuieÅte", |
SpellCheck : "Verifică text", |
UniversalKeyboard : "Tastatură universală", |
PageBreakLbl : "Separator de pagină (Page Break)", |
PageBreak : "Inserează separator de pagină (Page Break)", |
Form : "Formular (Form)", |
Checkbox : "Bifă (Checkbox)", |
RadioButton : "Buton radio (RadioButton)", |
TextField : "Câmp text (TextField)", |
Textarea : "Suprafaţă text (Textarea)", |
HiddenField : "Câmp ascuns (HiddenField)", |
Button : "Buton", |
SelectionField : "Câmp selecÅ£ie (SelectionField)", |
ImageButton : "Buton imagine (ImageButton)", |
FitWindow : "Maximizează mărimea editorului", |
// Context Menu |
EditLink : "Editează Link", |
CellCM : "Celulă", |
RowCM : "Linie", |
ColumnCM : "Coloană", |
InsertRow : "Inserează linie", |
DeleteRows : "Şterge linii", |
InsertColumn : "Inserează coloană", |
DeleteColumns : "Şterge celule", |
InsertCell : "Inserează celulă", |
DeleteCells : "Şterge celule", |
MergeCells : "Uneşte celule", |
SplitCell : "Împarte celulÄ", |
TableDelete : "Şterge tabel", |
CellProperties : "Proprietăţile celulei", |
TableProperties : "Proprietăţile tabelului", |
ImageProperties : "Proprietăţile imaginii", |
FlashProperties : "Proprietăţile flash-ului", |
AnchorProp : "Proprietăţi ancoră", |
ButtonProp : "Proprietăţi buton", |
CheckboxProp : "Proprietăţi bifă (Checkbox)", |
HiddenFieldProp : "ProprietÄÅ£i câmp ascuns (Hidden Field)", |
RadioButtonProp : "Proprietăţi buton radio (Radio Button)", |
ImageButtonProp : "Proprietăţi buton imagine (Image Button)", |
TextFieldProp : "ProprietÄÅ£i câmp text (Text Field)", |
SelectionFieldProp : "ProprietÄÅ£i câmp selecÅ£ie (Selection Field)", |
TextareaProp : "Proprietăţi suprafaţă text (Textarea)", |
FormProp : "Proprietăţi formular (Form)", |
FontFormats : "Normal;Formatat;Adresa;Titlu 1;Titlu 2;Titlu 3;Titlu 4;Titlu 5;Titlu 6;Paragraf (DIV)", |
// Alerts and Messages |
ProcessingXHTML : "Procesăm XHTML. Vă rugăm aşteptaţi...", |
Done : "Am terminat", |
PasteWordConfirm : "Textul pe care doriÅ£i sÄ-l adÄugaÅ£i pare a fi formatat pentru Word. DoriÅ£i sÄ-l curÄÅ£aÅ£i de aceastÄ formatare înainte de a-l adÄuga?", |
NotCompatiblePaste : "AceastÄ facilitate e disponibilÄ doar pentru Microsoft Internet Explorer, versiunea 5.5 sau ulterioarÄ. VreÅ£i sÄ-l adÄugaÅ£i fÄrÄ a-i fi înlÄturat formatarea?", |
UnknownToolbarItem : "Obiectul \"%1\" din bara cu opţiuni necunoscut", |
UnknownCommand : "Comanda \"%1\" necunoscută", |
NotImplemented : "Comandă neimplementată", |
UnknownToolbarSet : "Grupul din bara cu opţiuni \"%1\" nu există", |
NoActiveX : "SetÄrile de securitate ale programului dvs. cu care navigaÅ£i pe internet (browser) pot limita anumite funcÅ£ionalitÄÅ£i ale editorului. Pentru a evita asta, trebuie sÄ activaÅ£i opÅ£iunea \"Run ActiveX controls and plug-ins\". Poate veÅ£i întâlni erori sau veÅ£i observa funcÅ£ionalitÄÅ£i lipsÄ.", |
BrowseServerBlocked : "The resources browser could not be opened. Asiguraţi-vă că nu e activ niciun \"popup blocker\" (funcţionalitate a programului de navigat (browser) sau a unui plug-in al acestuia de a bloca deschiderea unui noi ferestre).", |
DialogBlocked : "Nu a fost posibilă deschiderea unei ferestre de dialog. Asiguraţi-vă că nu e activ niciun \"popup blocker\" (funcţionalitate a programului de navigat (browser) sau a unui plug-in al acestuia de a bloca deschiderea unui noi ferestre).", |
// Dialogs |
DlgBtnOK : "Bine", |
DlgBtnCancel : "Anulare", |
DlgBtnClose : "Închidere", |
DlgBtnBrowseServer : "Răsfoieşte server", |
DlgAdvancedTag : "Avansat", |
DlgOpOther : "<Altul>", |
DlgInfoTab : "Informaţii", |
DlgAlertUrl : "Vă rugăm să scrieţi URL-ul", |
// General Dialogs Labels |
DlgGenNotSet : "<nesetat>", |
DlgGenId : "Id", |
DlgGenLangDir : "Direcţia cuvintelor", |
DlgGenLangDirLtr : "stânga-dreapta (LTR)", |
DlgGenLangDirRtl : "dreapta-stânga (RTL)", |
DlgGenLangCode : "Codul limbii", |
DlgGenAccessKey : "Tasta de acces", |
DlgGenName : "Nume", |
DlgGenTabIndex : "Indexul tabului", |
DlgGenLongDescr : "Descrierea lungă URL", |
DlgGenClass : "Clasele cu stilul paginii (CSS)", |
DlgGenTitle : "Titlul consultativ", |
DlgGenContType : "Tipul consultativ al titlului", |
DlgGenLinkCharset : "Setul de caractere al resursei legate", |
DlgGenStyle : "Stil", |
// Image Dialog |
DlgImgTitle : "Proprietăţile imaginii", |
DlgImgInfoTab : "Informaţii despre imagine", |
DlgImgBtnUpload : "Trimite la server", |
DlgImgURL : "URL", |
DlgImgUpload : "ÎncarcÄ", |
DlgImgAlt : "Text alternativ", |
DlgImgWidth : "Lăţime", |
DlgImgHeight : "ÎnÄlÅ£ime", |
DlgImgLockRatio : "Păstrează proporţiile", |
DlgBtnResetSize : "Resetează mărimea", |
DlgImgBorder : "Margine", |
DlgImgHSpace : "HSpace", |
DlgImgVSpace : "VSpace", |
DlgImgAlign : "Aliniere", |
DlgImgAlignLeft : "Stânga", |
DlgImgAlignAbsBottom: "Jos absolut (Abs Bottom)", |
DlgImgAlignAbsMiddle: "Mijloc absolut (Abs Middle)", |
DlgImgAlignBaseline : "Linia de jos (Baseline)", |
DlgImgAlignBottom : "Jos", |
DlgImgAlignMiddle : "Mijloc", |
DlgImgAlignRight : "Dreapta", |
DlgImgAlignTextTop : "Text sus", |
DlgImgAlignTop : "Sus", |
DlgImgPreview : "Previzualizare", |
DlgImgAlertUrl : "Vă rugăm să scrieţi URL-ul imaginii", |
DlgImgLinkTab : "Link (Legătură web)", |
// Flash Dialog |
DlgFlashTitle : "Proprietăţile flash-ului", |
DlgFlashChkPlay : "Rulează automat", |
DlgFlashChkLoop : "Repetă (Loop)", |
DlgFlashChkMenu : "Activează meniul flash", |
DlgFlashScale : "Scală", |
DlgFlashScaleAll : "Arată tot", |
DlgFlashScaleNoBorder : "Fără margini (No border)", |
DlgFlashScaleFit : "Potriveşte", |
// Link Dialog |
DlgLnkWindowTitle : "Link (Legătură web)", |
DlgLnkInfoTab : "Informaţii despre link (Legătură web)", |
DlgLnkTargetTab : "Ţintă (Target)", |
DlgLnkType : "Tipul link-ului (al legăturii web)", |
DlgLnkTypeURL : "URL", |
DlgLnkTypeAnchor : "AncorÄ în aceastÄ paginÄ", |
DlgLnkTypeEMail : "E-Mail", |
DlgLnkProto : "Protocol", |
DlgLnkProtoOther : "<altul>", |
DlgLnkURL : "URL", |
DlgLnkAnchorSel : "Selectaţi o ancoră", |
DlgLnkAnchorByName : "după numele ancorei", |
DlgLnkAnchorById : "după Id-ul elementului", |
DlgLnkNoAnchors : "<Nicio ancorÄ disponibilÄ în document>", |
DlgLnkEMail : "Adresă de e-mail", |
DlgLnkEMailSubject : "Subiectul mesajului", |
DlgLnkEMailBody : "Conţinutul mesajului", |
DlgLnkUpload : "ÎncarcÄ", |
DlgLnkBtnUpload : "Trimite la server", |
DlgLnkTarget : "Ţintă (Target)", |
DlgLnkTargetFrame : "<frame>", |
DlgLnkTargetPopup : "<fereastra popup>", |
DlgLnkTargetBlank : "Fereastră nouă (_blank)", |
DlgLnkTargetParent : "Fereastra părinte (_parent)", |
DlgLnkTargetSelf : "Aceeaşi fereastră (_self)", |
DlgLnkTargetTop : "Fereastra din topul ierarhiei (_top)", |
DlgLnkTargetFrameName : "Numele frame-ului ţintă", |
DlgLnkPopWinName : "Numele ferestrei popup", |
DlgLnkPopWinFeat : "Proprietăţile ferestrei popup", |
DlgLnkPopResize : "Scalabilă", |
DlgLnkPopLocation : "Bara de locaţie", |
DlgLnkPopMenu : "Bara de meniu", |
DlgLnkPopScroll : "Scroll Bars", |
DlgLnkPopStatus : "Bara de status", |
DlgLnkPopToolbar : "Bara de opţiuni", |
DlgLnkPopFullScrn : "Tot ecranul (Full Screen)(IE)", |
DlgLnkPopDependent : "Dependent (Netscape)", |
DlgLnkPopWidth : "Lăţime", |
DlgLnkPopHeight : "ÎnÄlÅ£ime", |
DlgLnkPopLeft : "PoziÅ£ia la stânga", |
DlgLnkPopTop : "Poziţia la dreapta", |
DlnLnkMsgNoUrl : "Vă rugăm să scrieţi URL-ul", |
DlnLnkMsgNoEMail : "Vă rugăm să scrieţi adresa de e-mail", |
DlnLnkMsgNoAnchor : "Vă rugăm să selectaţi o ancoră", |
DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING |
// Color Dialog |
DlgColorTitle : "Selectează culoare", |
DlgColorBtnClear : "Curăţă", |
DlgColorHighlight : "Subliniază (Highlight)", |
DlgColorSelected : "Selectat", |
// Smiley Dialog |
DlgSmileyTitle : "Inserează o figură expresivă (Emoticon)", |
// Special Character Dialog |
DlgSpecialCharTitle : "Selectează caracter special", |
// Table Dialog |
DlgTableTitle : "Proprietăţile tabelului", |
DlgTableRows : "Linii", |
DlgTableColumns : "Coloane", |
DlgTableBorder : "Mărimea marginii", |
DlgTableAlign : "Aliniament", |
DlgTableAlignNotSet : "<Nesetat>", |
DlgTableAlignLeft : "Stânga", |
DlgTableAlignCenter : "Centru", |
DlgTableAlignRight : "Dreapta", |
DlgTableWidth : "Lăţime", |
DlgTableWidthPx : "pixeli", |
DlgTableWidthPc : "procente", |
DlgTableHeight : "ÎnÄlÅ£ime", |
DlgTableCellSpace : "SpaÅ£iu între celule", |
DlgTableCellPad : "SpaÅ£iu în cadrul celulei", |
DlgTableCaption : "Titlu (Caption)", |
DlgTableSummary : "Rezumat", |
// Table Cell Dialog |
DlgCellTitle : "Proprietăţile celulei", |
DlgCellWidth : "Lăţime", |
DlgCellWidthPx : "pixeli", |
DlgCellWidthPc : "procente", |
DlgCellHeight : "ÎnÄlÅ£ime", |
DlgCellWordWrap : "Desparte cuvintele (Wrap)", |
DlgCellWordWrapNotSet : "<Nesetat>", |
DlgCellWordWrapYes : "Da", |
DlgCellWordWrapNo : "Nu", |
DlgCellHorAlign : "Aliniament orizontal", |
DlgCellHorAlignNotSet : "<Nesetat>", |
DlgCellHorAlignLeft : "Stânga", |
DlgCellHorAlignCenter : "Centru", |
DlgCellHorAlignRight: "Dreapta", |
DlgCellVerAlign : "Aliniament vertical", |
DlgCellVerAlignNotSet : "<Nesetat>", |
DlgCellVerAlignTop : "Sus", |
DlgCellVerAlignMiddle : "Mijloc", |
DlgCellVerAlignBottom : "Jos", |
DlgCellVerAlignBaseline : "Linia de jos (Baseline)", |
DlgCellRowSpan : "Lungimea în linii (Span)", |
DlgCellCollSpan : "Lungimea în coloane (Span)", |
DlgCellBackColor : "Culoarea fundalului", |
DlgCellBorderColor : "Culoarea marginii", |
DlgCellBtnSelect : "Selectaţi...", |
// Find Dialog |
DlgFindTitle : "Găseşte", |
DlgFindFindBtn : "Găseşte", |
DlgFindNotFoundMsg : "Textul specificat nu a fost găsit.", |
// Replace Dialog |
DlgReplaceTitle : "Replace", |
DlgReplaceFindLbl : "Găseşte:", |
DlgReplaceReplaceLbl : "ÎnlocuieÅte cu:", |
DlgReplaceCaseChk : "Deosebeşte majuscule de minuscule (Match case)", |
DlgReplaceReplaceBtn : "ÎnlocuieÅte", |
DlgReplaceReplAllBtn : "ÎnlocuieÅte tot", |
DlgReplaceWordChk : "Doar cuvintele întregi", |
// Paste Operations / Dialog |
PasteErrorPaste : "SetÄrile de securitate ale navigatorului (browser) pe care îl folosiÅ£i nu permit editorului sÄ execute automat operaÅ£iunea de adÄugare. VÄ rugÄm folosiÅ£i tastatura (Ctrl+V).", |
PasteErrorCut : "SetÄrile de securitate ale navigatorului (browser) pe care îl folosiÅ£i nu permit editorului sÄ execute automat operaÅ£iunea de tÄiere. VÄ rugÄm folosiÅ£i tastatura (Ctrl+X).", |
PasteErrorCopy : "SetÄrile de securitate ale navigatorului (browser) pe care îl folosiÅ£i nu permit editorului sÄ execute automat operaÅ£iunea de copiere. VÄ rugÄm folosiÅ£i tastatura (Ctrl+C).", |
PasteAsText : "Adaugă ca text simplu (Plain Text)", |
PasteFromWord : "Adaugă din Word", |
DlgPasteMsg2 : "VÄ rugÄm adÄugaÅ£i în cÄsuÅ£a urmÄtoare folosind tastatura (<STRONG>Ctrl+V</STRONG>) Åi apÄsaÅ£i <STRONG>OK</STRONG>.", |
DlgPasteIgnoreFont : "Ignoră definiţiile Font Face", |
DlgPasteRemoveStyles : "Şterge definiţiile stilurilor", |
DlgPasteCleanBox : "Şterge căsuţa", |
// Color Picker |
ColorAutomatic : "Automatic", |
ColorMoreColors : "Mai multe culori...", |
// Document Properties |
DocProps : "Proprietăţile documentului", |
// Anchor Dialog |
DlgAnchorTitle : "Proprietăţile ancorei", |
DlgAnchorName : "Numele ancorei", |
DlgAnchorErrorName : "Vă rugăm scrieţi numele ancorei", |
// Speller Pages Dialog |
DlgSpellNotInDic : "Nu e în dicÅ£ionar", |
DlgSpellChangeTo : "SchimbÄ în", |
DlgSpellBtnIgnore : "Ignoră", |
DlgSpellBtnIgnoreAll : "Ignoră toate", |
DlgSpellBtnReplace : "ÎnlocuieÅte", |
DlgSpellBtnReplaceAll : "ÎnlocuieÅte tot", |
DlgSpellBtnUndo : "Starea anterioară (undo)", |
DlgSpellNoSuggestions : "- Fără sugestii -", |
DlgSpellProgress : "Verificarea textului în desfÄÅurare...", |
DlgSpellNoMispell : "Verificarea textului terminată: Nicio greşeală găsită", |
DlgSpellNoChanges : "Verificarea textului terminatÄ: Niciun cuvânt modificat", |
DlgSpellOneChange : "Verificarea textului terminatÄ: Un cuvânt modificat", |
DlgSpellManyChanges : "Verificarea textului terminată: 1% cuvinte modificate", |
IeSpellDownload : "Unealta pentru verificat textul (Spell checker) neinstalată. Doriţi să o descărcaţi acum?", |
// Button Dialog |
DlgButtonText : "Text (Valoare)", |
DlgButtonType : "Tip", |
DlgButtonTypeBtn : "Button", //MISSING |
DlgButtonTypeSbm : "Submit", //MISSING |
DlgButtonTypeRst : "Reset", //MISSING |
// Checkbox and Radio Button Dialogs |
DlgCheckboxName : "Nume", |
DlgCheckboxValue : "Valoare", |
DlgCheckboxSelected : "Selectat", |
// Form Dialog |
DlgFormName : "Nume", |
DlgFormAction : "Acţiune", |
DlgFormMethod : "Metodă", |
// Select Field Dialog |
DlgSelectName : "Nume", |
DlgSelectValue : "Valoare", |
DlgSelectSize : "Mărime", |
DlgSelectLines : "linii", |
DlgSelectChkMulti : "Permite selecţii multiple", |
DlgSelectOpAvail : "Opţiuni disponibile", |
DlgSelectOpText : "Text", |
DlgSelectOpValue : "Valoare", |
DlgSelectBtnAdd : "Adaugă", |
DlgSelectBtnModify : "Modifică", |
DlgSelectBtnUp : "Sus", |
DlgSelectBtnDown : "Jos", |
DlgSelectBtnSetValue : "Setează ca valoare selectată", |
DlgSelectBtnDelete : "Şterge", |
// Textarea Dialog |
DlgTextareaName : "Nume", |
DlgTextareaCols : "Coloane", |
DlgTextareaRows : "Linii", |
// Text Field Dialog |
DlgTextName : "Nume", |
DlgTextValue : "Valoare", |
DlgTextCharWidth : "Lărgimea caracterului", |
DlgTextMaxChars : "Caractere maxime", |
DlgTextType : "Tip", |
DlgTextTypeText : "Text", |
DlgTextTypePass : "Parolă", |
// Hidden Field Dialog |
DlgHiddenName : "Nume", |
DlgHiddenValue : "Valoare", |
// Bulleted List Dialog |
BulletedListProp : "Proprietăţile listei punctate (Bulleted List)", |
NumberedListProp : "Proprietăţile listei numerotate (Numbered List)", |
DlgLstStart : "Start", //MISSING |
DlgLstType : "Tip", |
DlgLstTypeCircle : "Cerc", |
DlgLstTypeDisc : "Disc", |
DlgLstTypeSquare : "Pătrat", |
DlgLstTypeNumbers : "Numere (1, 2, 3)", |
DlgLstTypeLCase : "Minuscule-litere mici (a, b, c)", |
DlgLstTypeUCase : "Majuscule (A, B, C)", |
DlgLstTypeSRoman : "Cifre romane mici (i, ii, iii)", |
DlgLstTypeLRoman : "Cifre romane mari (I, II, III)", |
// Document Properties Dialog |
DlgDocGeneralTab : "General", |
DlgDocBackTab : "Fundal", |
DlgDocColorsTab : "Culori si margini", |
DlgDocMetaTab : "Meta Data", |
DlgDocPageTitle : "Titlul paginii", |
DlgDocLangDir : "Descrierea limbii", |
DlgDocLangDirLTR : "stânga-dreapta (LTR)", |
DlgDocLangDirRTL : "dreapta-stânga (RTL)", |
DlgDocLangCode : "Codul limbii", |
DlgDocCharSet : "Encoding setului de caractere", |
DlgDocCharSetCE : "Central European", //MISSING |
DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING |
DlgDocCharSetCR : "Cyrillic", //MISSING |
DlgDocCharSetGR : "Greek", //MISSING |
DlgDocCharSetJP : "Japanese", //MISSING |
DlgDocCharSetKR : "Korean", //MISSING |
DlgDocCharSetTR : "Turkish", //MISSING |
DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING |
DlgDocCharSetWE : "Western European", //MISSING |
DlgDocCharSetOther : "Alt encoding al setului de caractere", |
DlgDocDocType : "Document Type Heading", |
DlgDocDocTypeOther : "Alt Document Type Heading", |
DlgDocIncXHTML : "Include declaraţii XHTML", |
DlgDocBgColor : "Culoarea fundalului (Background Color)", |
DlgDocBgImage : "URL-ul imaginii din fundal (Background Image URL)", |
DlgDocBgNoScroll : "Fundal neflotant, fix (Nonscrolling Background)", |
DlgDocCText : "Text", |
DlgDocCLink : "Link (Legătură web)", |
DlgDocCVisited : "Link (Legătură web) vizitat", |
DlgDocCActive : "Link (Legătură web) activ", |
DlgDocMargins : "Marginile paginii", |
DlgDocMaTop : "Sus", |
DlgDocMaLeft : "Stânga", |
DlgDocMaRight : "Dreapta", |
DlgDocMaBottom : "Jos", |
DlgDocMeIndex : "Cuvinte cheie după care se va indexa documentul (separate prin virgulă)", |
DlgDocMeDescr : "Descrierea documentului", |
DlgDocMeAuthor : "Autor", |
DlgDocMeCopy : "Drepturi de autor", |
DlgDocPreview : "Previzualizare", |
// Templates Dialog |
Templates : "Template-uri (şabloane)", |
DlgTemplatesTitle : "Template-uri (şabloane) de conţinut", |
DlgTemplatesSelMsg : "VÄ rugÄm selectaÅ£i template-ul (Åablonul) ce se va deschide în editor<br>(conÅ£inutul actual va fi pierdut):", |
DlgTemplatesLoading : "Se încarcÄ lista cu template-uri (Åabloane). VÄ rugÄm aÅteptaÅ£i...", |
DlgTemplatesNoTpl : "(Niciun template (şablon) definit)", |
DlgTemplatesReplace : "Replace actual contents", //MISSING |
// About Dialog |
DlgAboutAboutTab : "Despre", |
DlgAboutBrowserInfoTab : "Informaţii browser", |
DlgAboutLicenseTab : "Licenţă", |
DlgAboutVersion : "versiune", |
DlgAboutLicense : "Licenţiat sub termenii GNU Lesser General Public License", |
DlgAboutInfo : "Pentru informaţii amănunţite, vizitaţi" |
} |
/branches/v1.0-menes/api/fckeditor/editor/lang/pt-br.js |
---|
New file |
0,0 → 1,502 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: pt-br.js |
* Brazilian Portuguese language file. |
* |
* File Authors: |
* Carlos Alberto Tomatis Loth (carlos.loth@conectait.com.br) |
* GibaPhp (http://www.xoopstotal.com.br) |
*/ |
var FCKLang = |
{ |
// Language direction : "ltr" (left to right) or "rtl" (right to left). |
Dir : "ltr", |
ToolbarCollapse : "Ocultar Barra de Ferramentas", |
ToolbarExpand : "Exibir Barra de Ferramentas", |
// Toolbar Items and Context Menu |
Save : "Salvar", |
NewPage : "Novo", |
Preview : "Visualizar", |
Cut : "Recortar", |
Copy : "Copiar", |
Paste : "Colar", |
PasteText : "Colar como Texto sem Formatação", |
PasteWord : "Colar do Word", |
Print : "Imprimir", |
SelectAll : "Selecionar Tudo", |
RemoveFormat : "Remover Formatação", |
InsertLinkLbl : "Hiperlink", |
InsertLink : "Inserir/Editar Hiperlink", |
RemoveLink : "Remover Hiperlink", |
Anchor : "Inserir/Editar Âncora", |
InsertImageLbl : "Figura", |
InsertImage : "Inserir/Editar Figura", |
InsertFlashLbl : "Flash", |
InsertFlash : "Insere/Edita Flash", |
InsertTableLbl : "Tabela", |
InsertTable : "Inserir/Editar Tabela", |
InsertLineLbl : "Linha", |
InsertLine : "Inserir Linha Horizontal", |
InsertSpecialCharLbl: "Caracteres Especiais", |
InsertSpecialChar : "Inserir Caractere Especial", |
InsertSmileyLbl : "Emoticon", |
InsertSmiley : "Inserir Emoticon", |
About : "Sobre FCKeditor", |
Bold : "Negrito", |
Italic : "Itálico", |
Underline : "Sublinhado", |
StrikeThrough : "Tachado", |
Subscript : "Subscrito", |
Superscript : "Sobrescrito", |
LeftJustify : "Alinhar Esquerda", |
CenterJustify : "Centralizar", |
RightJustify : "Alinhar Direita", |
BlockJustify : "Justificado", |
DecreaseIndent : "Diminuir Recuo", |
IncreaseIndent : "Aumentar Recuo", |
Undo : "Desfazer", |
Redo : "Refazer", |
NumberedListLbl : "Numeração", |
NumberedList : "Inserir/Remover Numeração", |
BulletedListLbl : "Marcadores", |
BulletedList : "Inserir/Remover Marcadores", |
ShowTableBorders : "Exibir Bordas da Tabela", |
ShowDetails : "Exibir Detalhes", |
Style : "Estilo", |
FontFormat : "Formatação", |
Font : "Fonte", |
FontSize : "Tamanho", |
TextColor : "Cor do Texto", |
BGColor : "Cor do Plano de Fundo", |
Source : "Código-Fonte", |
Find : "Localizar", |
Replace : "Substituir", |
SpellCheck : "Verificar Ortografia", |
UniversalKeyboard : "Teclado Universal", |
PageBreakLbl : "Quebra de Página", |
PageBreak : "Inserir Quebra de Página", |
Form : "Formulário", |
Checkbox : "Caixa de Seleção", |
RadioButton : "Botão de Opção", |
TextField : "Caixa de Texto", |
Textarea : "Área de Texto", |
HiddenField : "Campo Oculto", |
Button : "Botão", |
SelectionField : "Caixa de Listagem", |
ImageButton : "Botão de Imagem", |
FitWindow : "Maximize the editor size", //MISSING |
// Context Menu |
EditLink : "Editar Hiperlink", |
CellCM : "Cell", //MISSING |
RowCM : "Row", //MISSING |
ColumnCM : "Column", //MISSING |
InsertRow : "Inserir Linha", |
DeleteRows : "Remover Linhas", |
InsertColumn : "Inserir Coluna", |
DeleteColumns : "Remover Colunas", |
InsertCell : "Inserir Células", |
DeleteCells : "Remover Células", |
MergeCells : "Mesclar Células", |
SplitCell : "Dividir Célular", |
TableDelete : "Apagar Tabela", |
CellProperties : "Formatar Célula", |
TableProperties : "Formatar Tabela", |
ImageProperties : "Formatar Figura", |
FlashProperties : "Propriedades Flash", |
AnchorProp : "Formatar Âncora", |
ButtonProp : "Formatar Botão", |
CheckboxProp : "Formatar Caixa de Seleção", |
HiddenFieldProp : "Formatar Campo Oculto", |
RadioButtonProp : "Formatar Botão de Opção", |
ImageButtonProp : "Formatar Botão de Imagem", |
TextFieldProp : "Formatar Caixa de Texto", |
SelectionFieldProp : "Formatar Caixa de Listagem", |
TextareaProp : "Formatar Área de Texto", |
FormProp : "Formatar Formulário", |
FontFormats : "Normal;Formatado;Endereço;Título 1;Título 2;Título 3;Título 4;Título 5;Título 6", |
// Alerts and Messages |
ProcessingXHTML : "Processando XHTML. Por favor, aguarde...", |
Done : "Pronto", |
PasteWordConfirm : "O texto que você deseja colar parece ter sido copiado do Word. Você gostaria de remover a formatação antes de colar?", |
NotCompatiblePaste : "Este comando está disponível para o navegador Internet Explorer 5.5 ou superior. Você gostaria de colar sem remover a formatação?", |
UnknownToolbarItem : "O item da barra de ferramentas \"%1\" não é reconhecido", |
UnknownCommand : "O comando \"%1\" não é reconhecido", |
NotImplemented : "O comando não foi implementado", |
UnknownToolbarSet : "A barra de ferramentas \"%1\" não existe", |
NoActiveX : "As configurações de segurança do seu browser podem limitar algumas características do editor. Você precisa habilitar a opção \"Executar controles e plug-ins ActiveX\". Você pode experimentar erros e alertas de características faltantes.", |
BrowseServerBlocked : "Os recursos do browser não puderam ser abertos. Tenha certeza que todos os bloqueadores de popup estão desabilitados.", |
DialogBlocked : "Não foi possível abrir a janela de diálogo. Tenha certeza que todos os bloqueadores de popup estão desabilitados.", |
// Dialogs |
DlgBtnOK : "OK", |
DlgBtnCancel : "Cancelar", |
DlgBtnClose : "Fechar", |
DlgBtnBrowseServer : "Localizar no Servidor", |
DlgAdvancedTag : "Avançado", |
DlgOpOther : "<Outros>", |
DlgInfoTab : "Info", |
DlgAlertUrl : "Inserir a URL", |
// General Dialogs Labels |
DlgGenNotSet : "<não ajustado>", |
DlgGenId : "Id", |
DlgGenLangDir : "Direção do idioma", |
DlgGenLangDirLtr : "Esquerda para Direita (LTR)", |
DlgGenLangDirRtl : "Direita para Esquerda (RTL)", |
DlgGenLangCode : "Idioma", |
DlgGenAccessKey : "Chave de Acesso", |
DlgGenName : "Nome", |
DlgGenTabIndex : "Índice de Tabulação", |
DlgGenLongDescr : "Descrição da URL", |
DlgGenClass : "Classe de Folhas de Estilo", |
DlgGenTitle : "Título", |
DlgGenContType : "Tipo de Conteúdo", |
DlgGenLinkCharset : "Conjunto de Caracteres do Hiperlink", |
DlgGenStyle : "Estilos", |
// Image Dialog |
DlgImgTitle : "Formatar Figura", |
DlgImgInfoTab : "Informações da Figura", |
DlgImgBtnUpload : "Enviar para o Servidor", |
DlgImgURL : "URL", |
DlgImgUpload : "Submeter", |
DlgImgAlt : "Texto Alternativo", |
DlgImgWidth : "Largura", |
DlgImgHeight : "Altura", |
DlgImgLockRatio : "Manter proporções", |
DlgBtnResetSize : "Redefinir para o Tamanho Original", |
DlgImgBorder : "Borda", |
DlgImgHSpace : "Horizontal", |
DlgImgVSpace : "Vertical", |
DlgImgAlign : "Alinhamento", |
DlgImgAlignLeft : "Esquerda", |
DlgImgAlignAbsBottom: "Inferior Absoluto", |
DlgImgAlignAbsMiddle: "Centralizado Absoluto", |
DlgImgAlignBaseline : "Baseline", |
DlgImgAlignBottom : "Inferior", |
DlgImgAlignMiddle : "Centralizado", |
DlgImgAlignRight : "Direita", |
DlgImgAlignTextTop : "Superior Absoluto", |
DlgImgAlignTop : "Superior", |
DlgImgPreview : "Visualização", |
DlgImgAlertUrl : "Por favor, digite o URL da figura.", |
DlgImgLinkTab : "Hiperlink", |
// Flash Dialog |
DlgFlashTitle : "Propriedades Flash", |
DlgFlashChkPlay : "Tocar Automaticamente", |
DlgFlashChkLoop : "Loop", |
DlgFlashChkMenu : "Habilita Menu Flash", |
DlgFlashScale : "Escala", |
DlgFlashScaleAll : "Mostrar tudo", |
DlgFlashScaleNoBorder : "Sem Borda", |
DlgFlashScaleFit : "Escala Exata", |
// Link Dialog |
DlgLnkWindowTitle : "Hiperlink", |
DlgLnkInfoTab : "Informações do hiperlink", |
DlgLnkTargetTab : "Informações de destino", |
DlgLnkType : "Tipo de hiperlink", |
DlgLnkTypeURL : "URL", |
DlgLnkTypeAnchor : "Âncora nesta página", |
DlgLnkTypeEMail : "E-Mail", |
DlgLnkProto : "Protocolo", |
DlgLnkProtoOther : "<outro>", |
DlgLnkURL : "URL do hiperlink", |
DlgLnkAnchorSel : "Selecione uma âncora", |
DlgLnkAnchorByName : "Pelo Nome da âncora", |
DlgLnkAnchorById : "Pelo Id do Elemento", |
DlgLnkNoAnchors : "<Não há âncoras disponíveis neste documento>", |
DlgLnkEMail : "Endereço E-Mail", |
DlgLnkEMailSubject : "Assunto da Mensagem", |
DlgLnkEMailBody : "Corpo da Mensagem", |
DlgLnkUpload : "Enviar ao Servidor", |
DlgLnkBtnUpload : "Enviar ao Servidor", |
DlgLnkTarget : "Destino", |
DlgLnkTargetFrame : "<quadro>", |
DlgLnkTargetPopup : "<janela popup>", |
DlgLnkTargetBlank : "Nova Janela (_blank)", |
DlgLnkTargetParent : "Janela Pai (_parent)", |
DlgLnkTargetSelf : "Mesma Janela (_self)", |
DlgLnkTargetTop : "Janela Superior (_top)", |
DlgLnkTargetFrameName : "Nome do Frame de Destino", |
DlgLnkPopWinName : "Nome da Janela Pop-up", |
DlgLnkPopWinFeat : "Atributos da Janela Pop-up", |
DlgLnkPopResize : "Redimensionável", |
DlgLnkPopLocation : "Barra de Endereços", |
DlgLnkPopMenu : "Barra de Menus", |
DlgLnkPopScroll : "Barras de Rolagem", |
DlgLnkPopStatus : "Barra de Status", |
DlgLnkPopToolbar : "Barra de Ferramentas", |
DlgLnkPopFullScrn : "Modo Tela Cheia (IE)", |
DlgLnkPopDependent : "Dependente (Netscape)", |
DlgLnkPopWidth : "Largura", |
DlgLnkPopHeight : "Altura", |
DlgLnkPopLeft : "Esquerda", |
DlgLnkPopTop : "Superior", |
DlnLnkMsgNoUrl : "Por favor, digite o endereço do Hiperlink", |
DlnLnkMsgNoEMail : "Por favor, digite o endereço de e-mail", |
DlnLnkMsgNoAnchor : "Por favor, selecione uma âncora", |
DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING |
// Color Dialog |
DlgColorTitle : "Selecione uma Cor", |
DlgColorBtnClear : "Limpar", |
DlgColorHighlight : "Visualização", |
DlgColorSelected : "Selecionada", |
// Smiley Dialog |
DlgSmileyTitle : "Inserir Emoticon", |
// Special Character Dialog |
DlgSpecialCharTitle : "Selecione um Caractere Especial", |
// Table Dialog |
DlgTableTitle : "Formatar Tabela", |
DlgTableRows : "Linhas", |
DlgTableColumns : "Colunas", |
DlgTableBorder : "Borda", |
DlgTableAlign : "Alinhamento", |
DlgTableAlignNotSet : "<Não ajustado>", |
DlgTableAlignLeft : "Esquerda", |
DlgTableAlignCenter : "Centralizado", |
DlgTableAlignRight : "Direita", |
DlgTableWidth : "Largura", |
DlgTableWidthPx : "pixels", |
DlgTableWidthPc : "%", |
DlgTableHeight : "Altura", |
DlgTableCellSpace : "Espaçamento", |
DlgTableCellPad : "Enchimento", |
DlgTableCaption : "Legenda", |
DlgTableSummary : "Resumo", |
// Table Cell Dialog |
DlgCellTitle : "Formatar célula", |
DlgCellWidth : "Largura", |
DlgCellWidthPx : "pixels", |
DlgCellWidthPc : "%", |
DlgCellHeight : "Altura", |
DlgCellWordWrap : "Quebra de Linha", |
DlgCellWordWrapNotSet : "<Não ajustado>", |
DlgCellWordWrapYes : "Sim", |
DlgCellWordWrapNo : "Não", |
DlgCellHorAlign : "Alinhamento Horizontal", |
DlgCellHorAlignNotSet : "<Não ajustado>", |
DlgCellHorAlignLeft : "Esquerda", |
DlgCellHorAlignCenter : "Centralizado", |
DlgCellHorAlignRight: "Direita", |
DlgCellVerAlign : "Alinhamento Vertical", |
DlgCellVerAlignNotSet : "<Não ajustado>", |
DlgCellVerAlignTop : "Superior", |
DlgCellVerAlignMiddle : "Centralizado", |
DlgCellVerAlignBottom : "Inferior", |
DlgCellVerAlignBaseline : "Baseline", |
DlgCellRowSpan : "Transpor Linhas", |
DlgCellCollSpan : "Transpor Colunas", |
DlgCellBackColor : "Cor do Plano de Fundo", |
DlgCellBorderColor : "Cor da Borda", |
DlgCellBtnSelect : "Selecionar...", |
// Find Dialog |
DlgFindTitle : "Localizar...", |
DlgFindFindBtn : "Localizar", |
DlgFindNotFoundMsg : "O texto especificado não foi encontrado.", |
// Replace Dialog |
DlgReplaceTitle : "Substituir", |
DlgReplaceFindLbl : "Procurar por:", |
DlgReplaceReplaceLbl : "Substituir por:", |
DlgReplaceCaseChk : "Coincidir Maiúsculas/Minúsculas", |
DlgReplaceReplaceBtn : "Substituir", |
DlgReplaceReplAllBtn : "Substituir Tudo", |
DlgReplaceWordChk : "Coincidir a palavra inteira", |
// Paste Operations / Dialog |
PasteErrorPaste : "As configurações de segurança do seu navegador não permitem que o editor execute operações de colar automaticamente. Por favor, utilize o teclado para colar (Ctrl+V).", |
PasteErrorCut : "As configurações de segurança do seu navegador não permitem que o editor execute operações de recortar automaticamente. Por favor, utilize o teclado para recortar (Ctrl+X).", |
PasteErrorCopy : "As configurações de segurança do seu navegador não permitem que o editor execute operações de copiar automaticamente. Por favor, utilize o teclado para copiar (Ctrl+C).", |
PasteAsText : "Colar como Texto sem Formatação", |
PasteFromWord : "Colar do Word", |
DlgPasteMsg2 : "Transfira o link usado no box usando o teclado com (<STRONG>Ctrl+V</STRONG>) e <STRONG>OK</STRONG>.", |
DlgPasteIgnoreFont : "Ignorar definições de fonte", |
DlgPasteRemoveStyles : "Remove definições de estilo", |
DlgPasteCleanBox : "Limpar Box", |
// Color Picker |
ColorAutomatic : "Automático", |
ColorMoreColors : "Mais Cores...", |
// Document Properties |
DocProps : "Propriedades Documento", |
// Anchor Dialog |
DlgAnchorTitle : "Formatar Âncora", |
DlgAnchorName : "Nome da Âncora", |
DlgAnchorErrorName : "Por favor, digite o nome da âncora", |
// Speller Pages Dialog |
DlgSpellNotInDic : "Não encontrada", |
DlgSpellChangeTo : "Alterar para", |
DlgSpellBtnIgnore : "Ignorar uma vez", |
DlgSpellBtnIgnoreAll : "Ignorar Todas", |
DlgSpellBtnReplace : "Alterar", |
DlgSpellBtnReplaceAll : "Alterar Todas", |
DlgSpellBtnUndo : "Desfazer", |
DlgSpellNoSuggestions : "-sem sugestões de ortografia-", |
DlgSpellProgress : "Verificação ortográfica em andamento...", |
DlgSpellNoMispell : "Verificação encerrada: Não foram encontrados erros de ortografia", |
DlgSpellNoChanges : "Verificação ortográfica encerrada: Não houve alterações", |
DlgSpellOneChange : "Verificação ortográfica encerrada: Uma palavra foi alterada", |
DlgSpellManyChanges : "Verificação ortográfica encerrada: %1 foram alteradas", |
IeSpellDownload : "A verificação ortográfica não foi instalada. Você gostaria de realizar o download agora?", |
// Button Dialog |
DlgButtonText : "Texto (Valor)", |
DlgButtonType : "Tipo", |
DlgButtonTypeBtn : "Button", //MISSING |
DlgButtonTypeSbm : "Submit", //MISSING |
DlgButtonTypeRst : "Reset", //MISSING |
// Checkbox and Radio Button Dialogs |
DlgCheckboxName : "Nome", |
DlgCheckboxValue : "Valor", |
DlgCheckboxSelected : "Selecionado", |
// Form Dialog |
DlgFormName : "Nome", |
DlgFormAction : "Action", |
DlgFormMethod : "Método", |
// Select Field Dialog |
DlgSelectName : "Nome", |
DlgSelectValue : "Valor", |
DlgSelectSize : "Tamanho", |
DlgSelectLines : "linhas", |
DlgSelectChkMulti : "Permitir múltiplas seleções", |
DlgSelectOpAvail : "Opções disponíveis", |
DlgSelectOpText : "Texto", |
DlgSelectOpValue : "Valor", |
DlgSelectBtnAdd : "Adicionar", |
DlgSelectBtnModify : "Modificar", |
DlgSelectBtnUp : "Para cima", |
DlgSelectBtnDown : "Para baixo", |
DlgSelectBtnSetValue : "Definir como selecionado", |
DlgSelectBtnDelete : "Remover", |
// Textarea Dialog |
DlgTextareaName : "Nome", |
DlgTextareaCols : "Colunas", |
DlgTextareaRows : "Linhas", |
// Text Field Dialog |
DlgTextName : "Nome", |
DlgTextValue : "Valor", |
DlgTextCharWidth : "Comprimento (em caracteres)", |
DlgTextMaxChars : "Número Máximo de Caracteres", |
DlgTextType : "Tipo", |
DlgTextTypeText : "Texto", |
DlgTextTypePass : "Senha", |
// Hidden Field Dialog |
DlgHiddenName : "Nome", |
DlgHiddenValue : "Valor", |
// Bulleted List Dialog |
BulletedListProp : "Formatar Marcadores", |
NumberedListProp : "Formatar Numeração", |
DlgLstStart : "Start", //MISSING |
DlgLstType : "Tipo", |
DlgLstTypeCircle : "Círculo", |
DlgLstTypeDisc : "Disco", |
DlgLstTypeSquare : "Quadrado", |
DlgLstTypeNumbers : "Números (1, 2, 3)", |
DlgLstTypeLCase : "Letras Minúsculas (a, b, c)", |
DlgLstTypeUCase : "Letras Maiúsculas (A, B, C)", |
DlgLstTypeSRoman : "Números Romanos Minúsculos (i, ii, iii)", |
DlgLstTypeLRoman : "Números Romanos Maiúsculos (I, II, III)", |
// Document Properties Dialog |
DlgDocGeneralTab : "Geral", |
DlgDocBackTab : "Plano de Fundo", |
DlgDocColorsTab : "Cores e Margens", |
DlgDocMetaTab : "Meta Dados", |
DlgDocPageTitle : "Título da Página", |
DlgDocLangDir : "Direção do Idioma", |
DlgDocLangDirLTR : "Esquerda para Direita (LTR)", |
DlgDocLangDirRTL : "Direita para Esquerda (RTL)", |
DlgDocLangCode : "Código do Idioma", |
DlgDocCharSet : "Codificação de Caracteres", |
DlgDocCharSetCE : "Central European", //MISSING |
DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING |
DlgDocCharSetCR : "Cyrillic", //MISSING |
DlgDocCharSetGR : "Greek", //MISSING |
DlgDocCharSetJP : "Japanese", //MISSING |
DlgDocCharSetKR : "Korean", //MISSING |
DlgDocCharSetTR : "Turkish", //MISSING |
DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING |
DlgDocCharSetWE : "Western European", //MISSING |
DlgDocCharSetOther : "Outra Codificação de Caracteres", |
DlgDocDocType : "Cabeçalho Tipo de Documento", |
DlgDocDocTypeOther : "Other Document Type Heading", |
DlgDocIncXHTML : "Incluir Declarações XHTML", |
DlgDocBgColor : "Cor do Plano de Fundo", |
DlgDocBgImage : "URL da Imagem de Plano de Fundo", |
DlgDocBgNoScroll : "Plano de Fundo Fixo", |
DlgDocCText : "Texto", |
DlgDocCLink : "Hiperlink", |
DlgDocCVisited : "Hiperlink Visitado", |
DlgDocCActive : "Hiperlink Ativo", |
DlgDocMargins : "Margens da Página", |
DlgDocMaTop : "Superior", |
DlgDocMaLeft : "Inferior", |
DlgDocMaRight : "Direita", |
DlgDocMaBottom : "Inferior", |
DlgDocMeIndex : "Palavras-chave de Indexação do Documento (separadas por vírgula)", |
DlgDocMeDescr : "Descrição do Documento", |
DlgDocMeAuthor : "Autor", |
DlgDocMeCopy : "Direitos Autorais", |
DlgDocPreview : "Visualizar", |
// Templates Dialog |
Templates : "Modelos de layout", |
DlgTemplatesTitle : "Modelo de layout do conteúdo", |
DlgTemplatesSelMsg : "Selecione um modelo de layout para ser aberto no editor<br>(o conteúdo atual será perdido):", |
DlgTemplatesLoading : "Carregando a lista de modelos de layout. Aguarde...", |
DlgTemplatesNoTpl : "(Não foram definidos modelos de layout)", |
DlgTemplatesReplace : "Replace actual contents", //MISSING |
// About Dialog |
DlgAboutAboutTab : "Sobre", |
DlgAboutBrowserInfoTab : "Informações do Navegador", |
DlgAboutLicenseTab : "Licença", |
DlgAboutVersion : "versão", |
DlgAboutLicense : "Licenciado sob os termos da GNU Lesser General Public License", |
DlgAboutInfo : "Para maiores informações visite" |
} |
/branches/v1.0-menes/api/fckeditor/editor/lang/ru.js |
---|
New file |
0,0 → 1,501 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: ru.js |
* Russian language file. |
* |
* File Authors: |
* Andrey Grebnev (andrey.grebnev@blandware.com) |
*/ |
var FCKLang = |
{ |
// Language direction : "ltr" (left to right) or "rtl" (right to left). |
Dir : "ltr", |
ToolbarCollapse : "Свернуть панель инструментов", |
ToolbarExpand : "Развернуть панель инструментов", |
// Toolbar Items and Context Menu |
Save : "Сохранить", |
NewPage : "Новая страница", |
Preview : "Предварительный просмотр", |
Cut : "Вырезать", |
Copy : "Копировать", |
Paste : "Вставить", |
PasteText : "Вставить только текст", |
PasteWord : "Вставить из Word", |
Print : "Печать", |
SelectAll : "Выделить все", |
RemoveFormat : "Убрать форматирование", |
InsertLinkLbl : "Ссылка", |
InsertLink : "Вставить/Редактировать ссылку", |
RemoveLink : "Убрать ссылку", |
Anchor : "Вставить/Редактировать якорь", |
InsertImageLbl : "Изображение", |
InsertImage : "Вставить/Редактировать изображение", |
InsertFlashLbl : "Flash", |
InsertFlash : "Вставить/Редактировать Flash", |
InsertTableLbl : "Таблица", |
InsertTable : "Вставить/Редактировать таблицу", |
InsertLineLbl : "Линия", |
InsertLine : "Вставить горизонтальную линию", |
InsertSpecialCharLbl: "Специальный символ", |
InsertSpecialChar : "Вставить специальный символ", |
InsertSmileyLbl : "Смайлик", |
InsertSmiley : "Вставить смайлик", |
About : "О FCKeditor", |
Bold : "Жирный", |
Italic : "Курсив", |
Underline : "Подчеркнутый", |
StrikeThrough : "Зачеркнутый", |
Subscript : "Подстрочный индекс", |
Superscript : "Надстрочный индекс", |
LeftJustify : "По левому краю", |
CenterJustify : "По центру", |
RightJustify : "По правому краю", |
BlockJustify : "По ширине", |
DecreaseIndent : "Уменьшить отступ", |
IncreaseIndent : "Увеличить отступ", |
Undo : "Отменить", |
Redo : "Повторить", |
NumberedListLbl : "Нумерованный список", |
NumberedList : "Вставить/Удалить нумерованный список", |
BulletedListLbl : "Маркированный список", |
BulletedList : "Вставить/Удалить маркированный список", |
ShowTableBorders : "Показать бордюры таблицы", |
ShowDetails : "Показать детали", |
Style : "Стиль", |
FontFormat : "Форматирование", |
Font : "Шрифт", |
FontSize : "Размер", |
TextColor : "Цвет текста", |
BGColor : "Цвет фона", |
Source : "Источник", |
Find : "Найти", |
Replace : "Заменить", |
SpellCheck : "Проверить орфографию", |
UniversalKeyboard : "Универсальная клавиатура", |
PageBreakLbl : "Разрыв страницы", |
PageBreak : "Вставить разрыв страницы", |
Form : "Форма", |
Checkbox : "Флаговая кнопка", |
RadioButton : "Кнопка выбора", |
TextField : "Текстовое поле", |
Textarea : "Текстовая область", |
HiddenField : "Скрытое поле", |
Button : "Кнопка", |
SelectionField : "Список", |
ImageButton : "Кнопка с изображением", |
FitWindow : "Развернуть окно редактора", |
// Context Menu |
EditLink : "Вставить ссылку", |
CellCM : "Ячейка", |
RowCM : "Строка", |
ColumnCM : "Колонка", |
InsertRow : "Вставить строку", |
DeleteRows : "Удалить строки", |
InsertColumn : "Вставить колонку", |
DeleteColumns : "Удалить колонки", |
InsertCell : "Вставить ячейку", |
DeleteCells : "Удалить ячейки", |
MergeCells : "Соединить ячейки", |
SplitCell : "Разбить ячейку", |
TableDelete : "Удалить таблицу", |
CellProperties : "Свойства ячейки", |
TableProperties : "Свойства таблицы", |
ImageProperties : "Свойства изображения", |
FlashProperties : "Свойства Flash", |
AnchorProp : "Свойства якоря", |
ButtonProp : "Свойства кнопки", |
CheckboxProp : "Свойства флаговой кнопки", |
HiddenFieldProp : "Свойства скрытого поля", |
RadioButtonProp : "Свойства кнопки выбора", |
ImageButtonProp : "Свойства кнопки с изображением", |
TextFieldProp : "Свойства текстового поля", |
SelectionFieldProp : "Свойства списка", |
TextareaProp : "Свойства текстовой области", |
FormProp : "Свойства формы", |
FontFormats : "Нормальный;Форматированный;Адрес;Заголовок 1;Заголовок 2;Заголовок 3;Заголовок 4;Заголовок 5;Заголовок 6;Нормальный (DIV)", |
// Alerts and Messages |
ProcessingXHTML : "Обработка XHTML. Пожалуйста подождите...", |
Done : "Сделано", |
PasteWordConfirm : "Текст, который вы хотите вставить, похож на копируемый из Word. Вы хотите очистить его перед вставкой?", |
NotCompatiblePaste : "Эта команда доступна для Internet Explorer версии 5.5 или выше. Вы хотите вставить без очистки?", |
UnknownToolbarItem : "Не известный элемент панели инструментов \"%1\"", |
UnknownCommand : "Не известное имя команды \"%1\"", |
NotImplemented : "Команда не реализована", |
UnknownToolbarSet : "Панель инструментов \"%1\" не существует", |
NoActiveX : "Настройки безопасности вашего браузера могут ограничивать некоторые свойства редактора. Вы должны включить опцию \"Запускать элементы управления ActiveX и плугины\". Вы можете видеть ошибки и замечать отсутствие возможностей.", |
BrowseServerBlocked : "Ресурсы браузера не могут быть открыты. Проверьте что блокировки всплывающих окон выключены.", |
DialogBlocked : "Не возможно открыть окно диалога. Проверьте что блокировки всплывающих окон выключены.", |
// Dialogs |
DlgBtnOK : "ОК", |
DlgBtnCancel : "Отмена", |
DlgBtnClose : "Закрыть", |
DlgBtnBrowseServer : "Просмотреть на сервере", |
DlgAdvancedTag : "Расширенный", |
DlgOpOther : "<Другое>", |
DlgInfoTab : "Информация", |
DlgAlertUrl : "Пожалуйста вставьте URL", |
// General Dialogs Labels |
DlgGenNotSet : "<не определено>", |
DlgGenId : "Идентификатор", |
DlgGenLangDir : "Направление языка", |
DlgGenLangDirLtr : "Слева на право (LTR)", |
DlgGenLangDirRtl : "Справа на лево (RTL)", |
DlgGenLangCode : "Язык", |
DlgGenAccessKey : "Горячая клавиша", |
DlgGenName : "Имя", |
DlgGenTabIndex : "Последовательность перехода", |
DlgGenLongDescr : "Длинное описание URL", |
DlgGenClass : "Класс CSS", |
DlgGenTitle : "Заголовок", |
DlgGenContType : "Тип содержимого", |
DlgGenLinkCharset : "Кодировка", |
DlgGenStyle : "Стиль CSS", |
// Image Dialog |
DlgImgTitle : "Свойства изображения", |
DlgImgInfoTab : "Информация о изображении", |
DlgImgBtnUpload : "Послать на сервер", |
DlgImgURL : "URL", |
DlgImgUpload : "Закачать", |
DlgImgAlt : "Альтернативный текст", |
DlgImgWidth : "Ширина", |
DlgImgHeight : "Высота", |
DlgImgLockRatio : "Сохранять пропорции", |
DlgBtnResetSize : "Сбросить размер", |
DlgImgBorder : "Бордюр", |
DlgImgHSpace : "Горизонтальный отступ", |
DlgImgVSpace : "Вертикальный отступ", |
DlgImgAlign : "Выравнивание", |
DlgImgAlignLeft : "По левому краю", |
DlgImgAlignAbsBottom: "Абс понизу", |
DlgImgAlignAbsMiddle: "Абс посередине", |
DlgImgAlignBaseline : "По базовой линии", |
DlgImgAlignBottom : "Понизу", |
DlgImgAlignMiddle : "Посередине", |
DlgImgAlignRight : "По правому краю", |
DlgImgAlignTextTop : "Текст наверху", |
DlgImgAlignTop : "По верху", |
DlgImgPreview : "Предварительный просмотр", |
DlgImgAlertUrl : "Пожалуйста введите URL изображения", |
DlgImgLinkTab : "Ссылка", |
// Flash Dialog |
DlgFlashTitle : "Свойства Flash", |
DlgFlashChkPlay : "Авто проигрывание", |
DlgFlashChkLoop : "Повтор", |
DlgFlashChkMenu : "Включить меню Flash", |
DlgFlashScale : "Масштабировать", |
DlgFlashScaleAll : "Показывать все", |
DlgFlashScaleNoBorder : "Без бордюра", |
DlgFlashScaleFit : "Точное совпадение", |
// Link Dialog |
DlgLnkWindowTitle : "Ссылка", |
DlgLnkInfoTab : "Информация ссылки", |
DlgLnkTargetTab : "Цель", |
DlgLnkType : "Тип ссылки", |
DlgLnkTypeURL : "URL", |
DlgLnkTypeAnchor : "Якорь на эту страницу", |
DlgLnkTypeEMail : "Эл. почта", |
DlgLnkProto : "Протокол", |
DlgLnkProtoOther : "<другое>", |
DlgLnkURL : "URL", |
DlgLnkAnchorSel : "Выберите якорь", |
DlgLnkAnchorByName : "По имени якоря", |
DlgLnkAnchorById : "По идентификатору элемента", |
DlgLnkNoAnchors : "<Нет якорей доступных в этом документе>", |
DlgLnkEMail : "Адрес эл. почты", |
DlgLnkEMailSubject : "Заголовок сообщения", |
DlgLnkEMailBody : "Тело сообщения", |
DlgLnkUpload : "Закачать", |
DlgLnkBtnUpload : "Послать на сервер", |
DlgLnkTarget : "Цель", |
DlgLnkTargetFrame : "<фрейм>", |
DlgLnkTargetPopup : "<всплывающее окно>", |
DlgLnkTargetBlank : "Новое окно (_blank)", |
DlgLnkTargetParent : "Родительское окно (_parent)", |
DlgLnkTargetSelf : "Тоже окно (_self)", |
DlgLnkTargetTop : "Самое верхнее окно (_top)", |
DlgLnkTargetFrameName : "Имя целевого фрейма", |
DlgLnkPopWinName : "Имя всплывающего окна", |
DlgLnkPopWinFeat : "Свойства всплывающего окна", |
DlgLnkPopResize : "Изменяющееся в размерах", |
DlgLnkPopLocation : "Панель локации", |
DlgLnkPopMenu : "Панель меню", |
DlgLnkPopScroll : "Полосы прокрутки", |
DlgLnkPopStatus : "Строка состояния", |
DlgLnkPopToolbar : "Панель инструментов", |
DlgLnkPopFullScrn : "Полный экран (IE)", |
DlgLnkPopDependent : "Зависимый (Netscape)", |
DlgLnkPopWidth : "Ширина", |
DlgLnkPopHeight : "Высота", |
DlgLnkPopLeft : "Позиция слева", |
DlgLnkPopTop : "Позиция сверху", |
DlnLnkMsgNoUrl : "Пожалуйста введите URL ссылки", |
DlnLnkMsgNoEMail : "Пожалуйста введите адрес эл. почты", |
DlnLnkMsgNoAnchor : "Пожалуйста выберете якорь", |
DlnLnkMsgInvPopName : "Название вспывающего окна должно начинаться буквы и не может содержать пробелов", |
// Color Dialog |
DlgColorTitle : "Выберите цвет", |
DlgColorBtnClear : "Очистить", |
DlgColorHighlight : "Подсвеченный", |
DlgColorSelected : "Выбранный", |
// Smiley Dialog |
DlgSmileyTitle : "Вставить смайлик", |
// Special Character Dialog |
DlgSpecialCharTitle : "Выберите специальный символ", |
// Table Dialog |
DlgTableTitle : "Свойства таблицы", |
DlgTableRows : "Строки", |
DlgTableColumns : "Колонки", |
DlgTableBorder : "Размер бордюра", |
DlgTableAlign : "Выравнивание", |
DlgTableAlignNotSet : "<Не уст.>", |
DlgTableAlignLeft : "Слева", |
DlgTableAlignCenter : "По центру", |
DlgTableAlignRight : "Справа", |
DlgTableWidth : "Ширина", |
DlgTableWidthPx : "пикселей", |
DlgTableWidthPc : "процентов", |
DlgTableHeight : "Высота", |
DlgTableCellSpace : "Промежуток (spacing)", |
DlgTableCellPad : "Отступ (padding)", |
DlgTableCaption : "Заголовок", |
DlgTableSummary : "Резюме", |
// Table Cell Dialog |
DlgCellTitle : "Свойства ячейки", |
DlgCellWidth : "Ширина", |
DlgCellWidthPx : "пикселей", |
DlgCellWidthPc : "процентов", |
DlgCellHeight : "Высота", |
DlgCellWordWrap : "Заворачивание текста", |
DlgCellWordWrapNotSet : "<Не уст.>", |
DlgCellWordWrapYes : "Да", |
DlgCellWordWrapNo : "Нет", |
DlgCellHorAlign : "Гор. выравнивание", |
DlgCellHorAlignNotSet : "<Не уст.>", |
DlgCellHorAlignLeft : "Слева", |
DlgCellHorAlignCenter : "По центру", |
DlgCellHorAlignRight: "Справа", |
DlgCellVerAlign : "Верт. выравнивание", |
DlgCellVerAlignNotSet : "<Не уст.>", |
DlgCellVerAlignTop : "Сверху", |
DlgCellVerAlignMiddle : "Посередине", |
DlgCellVerAlignBottom : "Снизу", |
DlgCellVerAlignBaseline : "По базовой линии", |
DlgCellRowSpan : "Диапазон строк (span)", |
DlgCellCollSpan : "Диапазон колонок (span)", |
DlgCellBackColor : "Цвет фона", |
DlgCellBorderColor : "Цвет бордюра", |
DlgCellBtnSelect : "Выберите...", |
// Find Dialog |
DlgFindTitle : "Найти", |
DlgFindFindBtn : "Найти", |
DlgFindNotFoundMsg : "Указанный текст не найден.", |
// Replace Dialog |
DlgReplaceTitle : "Заменить", |
DlgReplaceFindLbl : "Найти:", |
DlgReplaceReplaceLbl : "Заменить на:", |
DlgReplaceCaseChk : "Учитывать регистр", |
DlgReplaceReplaceBtn : "Заменить", |
DlgReplaceReplAllBtn : "Заменить все", |
DlgReplaceWordChk : "Совпадение целых слов", |
// Paste Operations / Dialog |
PasteErrorPaste : "Настройки безопасности вашего браузера не позволяют редактору автоматически выполнять операции вставки. Пожалуйста используйте клавиатуру для этого (Ctrl+V).", |
PasteErrorCut : "Настройки безопасности вашего браузера не позволяют редактору автоматически выполнять операции вырезания. Пожалуйста используйте клавиатуру для этого (Ctrl+X).", |
PasteErrorCopy : "Настройки безопасности вашего браузера не позволяют редактору автоматически выполнять операции копирования. Пожалуйста используйте клавиатуру для этого (Ctrl+C).", |
PasteAsText : "Вставить только текст", |
PasteFromWord : "Вставить из Word", |
DlgPasteMsg2 : "Пожалуйста вставьте текст в прямоугольник используя сочетание клавиш (<STRONG>Ctrl+V</STRONG>) и нажмите <STRONG>OK</STRONG>.", |
DlgPasteIgnoreFont : "Игнорировать определения гарнитуры", |
DlgPasteRemoveStyles : "Убрать определения стилей", |
DlgPasteCleanBox : "Очистить", |
// Color Picker |
ColorAutomatic : "Автоматический", |
ColorMoreColors : "Цвета...", |
// Document Properties |
DocProps : "Свойства документа", |
// Anchor Dialog |
DlgAnchorTitle : "Свойства якоря", |
DlgAnchorName : "Имя якоря", |
DlgAnchorErrorName : "Пожалуйста введите имя якоря", |
// Speller Pages Dialog |
DlgSpellNotInDic : "Нет в словаре", |
DlgSpellChangeTo : "Заменить на", |
DlgSpellBtnIgnore : "Игнорировать", |
DlgSpellBtnIgnoreAll : "Игнорировать все", |
DlgSpellBtnReplace : "Заменить", |
DlgSpellBtnReplaceAll : "Заменить все", |
DlgSpellBtnUndo : "Отменить", |
DlgSpellNoSuggestions : "- Нет предположений -", |
DlgSpellProgress : "Идет проверка орфографии...", |
DlgSpellNoMispell : "Проверка орфографии закончена: ошибок не найдено", |
DlgSpellNoChanges : "Проверка орфографии закончена: ни одного слова не изменено", |
DlgSpellOneChange : "Проверка орфографии закончена: одно слово изменено", |
DlgSpellManyChanges : "Проверка орфографии закончена: 1% слов изменен", |
IeSpellDownload : "Модуль проверки орфографии не установлен. Хотите скачать его сейчас?", |
// Button Dialog |
DlgButtonText : "Текст (Значение)", |
DlgButtonType : "Тип", |
DlgButtonTypeBtn : "Кнопка", |
DlgButtonTypeSbm : "Отправить", |
DlgButtonTypeRst : "Сбросить", |
// Checkbox and Radio Button Dialogs |
DlgCheckboxName : "Имя", |
DlgCheckboxValue : "Значение", |
DlgCheckboxSelected : "Выбранная", |
// Form Dialog |
DlgFormName : "Имя", |
DlgFormAction : "Действие", |
DlgFormMethod : "Метод", |
// Select Field Dialog |
DlgSelectName : "Имя", |
DlgSelectValue : "Значение", |
DlgSelectSize : "Размер", |
DlgSelectLines : "линии", |
DlgSelectChkMulti : "Разрешить множественный выбор", |
DlgSelectOpAvail : "Доступные варианты", |
DlgSelectOpText : "Текст", |
DlgSelectOpValue : "Значение", |
DlgSelectBtnAdd : "Добавить", |
DlgSelectBtnModify : "Модифицировать", |
DlgSelectBtnUp : "Вверх", |
DlgSelectBtnDown : "Вниз", |
DlgSelectBtnSetValue : "Установить как выбранное значение", |
DlgSelectBtnDelete : "Удалить", |
// Textarea Dialog |
DlgTextareaName : "Имя", |
DlgTextareaCols : "Колонки", |
DlgTextareaRows : "Строки", |
// Text Field Dialog |
DlgTextName : "Имя", |
DlgTextValue : "Значение", |
DlgTextCharWidth : "Ширина", |
DlgTextMaxChars : "Макс. кол-во символов", |
DlgTextType : "Тип", |
DlgTextTypeText : "Текст", |
DlgTextTypePass : "Пароль", |
// Hidden Field Dialog |
DlgHiddenName : "Имя", |
DlgHiddenValue : "Значение", |
// Bulleted List Dialog |
BulletedListProp : "Свойства маркированного списка", |
NumberedListProp : "Свойства нумерованного списка", |
DlgLstStart : "Начало", |
DlgLstType : "Тип", |
DlgLstTypeCircle : "Круг", |
DlgLstTypeDisc : "Диск", |
DlgLstTypeSquare : "Квадрат", |
DlgLstTypeNumbers : "Номера (1, 2, 3)", |
DlgLstTypeLCase : "Буквы нижнего регистра (a, b, c)", |
DlgLstTypeUCase : "Буквы верхнего регистра (A, B, C)", |
DlgLstTypeSRoman : "Малые римские буквы (i, ii, iii)", |
DlgLstTypeLRoman : "Большие римские буквы (I, II, III)", |
// Document Properties Dialog |
DlgDocGeneralTab : "Общие", |
DlgDocBackTab : "Задний фон", |
DlgDocColorsTab : "Цвета и отступы", |
DlgDocMetaTab : "Мета данные", |
DlgDocPageTitle : "Заголовок страницы", |
DlgDocLangDir : "Направление текста", |
DlgDocLangDirLTR : "Слева на право (LTR)", |
DlgDocLangDirRTL : "Справа на лево (RTL)", |
DlgDocLangCode : "Код языка", |
DlgDocCharSet : "Кодировка набора символов", |
DlgDocCharSetCE : "Центрально-европейская", |
DlgDocCharSetCT : "Китайская традиционная (Big5)", |
DlgDocCharSetCR : "Кириллица", |
DlgDocCharSetGR : "Греческая", |
DlgDocCharSetJP : "Японская", |
DlgDocCharSetKR : "Корейская", |
DlgDocCharSetTR : "Турецкая", |
DlgDocCharSetUN : "Юникод (UTF-8)", |
DlgDocCharSetWE : "Западно-европейская", |
DlgDocCharSetOther : "Другая кодировка набора символов", |
DlgDocDocType : "Заголовок типа документа", |
DlgDocDocTypeOther : "Другой заголовок типа документа", |
DlgDocIncXHTML : "Включить XHTML объявления", |
DlgDocBgColor : "Цвет фона", |
DlgDocBgImage : "URL изображения фона", |
DlgDocBgNoScroll : "Нескроллируемый фон", |
DlgDocCText : "Текст", |
DlgDocCLink : "Ссылка", |
DlgDocCVisited : "Посещенная ссылка", |
DlgDocCActive : "Активная ссылка", |
DlgDocMargins : "Отступы страницы", |
DlgDocMaTop : "Верхний", |
DlgDocMaLeft : "Левый", |
DlgDocMaRight : "Правый", |
DlgDocMaBottom : "Нижний", |
DlgDocMeIndex : "Ключевые слова документа (разделенные запятой)", |
DlgDocMeDescr : "Описание документа", |
DlgDocMeAuthor : "Автор", |
DlgDocMeCopy : "Авторские права", |
DlgDocPreview : "Предварительный просмотр", |
// Templates Dialog |
Templates : "Шаблоны", |
DlgTemplatesTitle : "Шаблоны содержимого", |
DlgTemplatesSelMsg : "Пожалуйста выберете шаблон для открытия в редакторе<br>(текущее содержимое будет потеряно):", |
DlgTemplatesLoading : "Загрузка списка шаблонов. Пожалуйста подождите...", |
DlgTemplatesNoTpl : "(Ни одного шаблона не определено)", |
DlgTemplatesReplace : "Заменить текущее содержание", |
// About Dialog |
DlgAboutAboutTab : "О программе", |
DlgAboutBrowserInfoTab : "Информация браузера", |
DlgAboutLicenseTab : "Лицензия", |
DlgAboutVersion : "Версия", |
DlgAboutLicense : "Лицензировано в соответствии с условиями GNU Lesser General Public License", |
DlgAboutInfo : "Для большей информации, посетите" |
} |
/branches/v1.0-menes/api/fckeditor/editor/lang/bn.js |
---|
New file |
0,0 → 1,502 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: bn.js |
* Bengali/Bangla language file. |
* |
* File Authors: |
* Richard Walledge (darkdoctrine@hotmail.com) |
* S M Mahbub Murshed (udvranto@yahoo.com) |
*/ |
var FCKLang = |
{ |
// Language direction : "ltr" (left to right) or "rtl" (right to left). |
Dir : "ltr", |
ToolbarCollapse : "টূলবার গুটিয়ে দাও", |
ToolbarExpand : "টূলবার ছড়িয়ে দাও", |
// Toolbar Items and Context Menu |
Save : "সংরক্ষন কর", |
NewPage : "নতুন পেজ", |
Preview : "প্রিভিউ", |
Cut : "কাট", |
Copy : "কপি", |
Paste : "পেস্ট", |
PasteText : "পেস্ট (সাদা টেক্সট)", |
PasteWord : "পেস্ট (শব্দ)", |
Print : "প্রিন্ট", |
SelectAll : "সব সিলেক্ট কর", |
RemoveFormat : "ফরমেট সরাও", |
InsertLinkLbl : "লিংকের যুক্ত করার লেবেল", |
InsertLink : "লিংক যুক্ত কর", |
RemoveLink : "লিংক সরাও", |
Anchor : "নোঙ্গর", |
InsertImageLbl : "ছবির লেবেল যুক্ত কর", |
InsertImage : "ছবি যুক্ত কর", |
InsertFlashLbl : "ফ্লাশ লেবেল যুক্ত কর", |
InsertFlash : "ফ্লাশ যুক্ত কর", |
InsertTableLbl : "টেবিলের লেবেল যুক্ত কর", |
InsertTable : "টেবিল যুক্ত কর", |
InsertLineLbl : "রেখা যুক্ত কর", |
InsertLine : "রেখা যুক্ত কর", |
InsertSpecialCharLbl: "বিশেষ অক্ষরের লেবেল যুক্ত কর", |
InsertSpecialChar : "বিশেষ অক্ষর যুক্ত কর", |
InsertSmileyLbl : "স্মাইলী", |
InsertSmiley : "স্মাইলী যুক্ত কর", |
About : "FCKeditor কে বানিয়েছে", |
Bold : "বোল্ড", |
Italic : "ইটালিক", |
Underline : "আন্ডারলাইন", |
StrikeThrough : "স্ট্রাইক থ্রু", |
Subscript : "অধোলেখ", |
Superscript : "অভিলেখ", |
LeftJustify : "বা দিকে ঘেঁষা", |
CenterJustify : "মাঝ বরাবর ঘেষা", |
RightJustify : "ডান দিকে ঘেঁষা", |
BlockJustify : "ব্লক জাস্টিফাই", |
DecreaseIndent : "ইনডেন্ট কমাও", |
IncreaseIndent : "ইনডেন্ট বাড়াও", |
Undo : "আনডু", |
Redo : "রি-ডু", |
NumberedListLbl : "সাংখ্যিক লিস্টের লেবেল", |
NumberedList : "সাংখ্যিক লিস্ট", |
BulletedListLbl : "বুলেট লিস্ট লেবেল", |
BulletedList : "বুলেটেড লিস্ট", |
ShowTableBorders : "টেবিল বর্ডার", |
ShowDetails : "সবটুকু দেখাও", |
Style : "স্টাইল", |
FontFormat : "ফন্ট ফরমেট", |
Font : "ফন্ট", |
FontSize : "সাইজ", |
TextColor : "টেক্স্ট রং", |
BGColor : "বেকগ্রাউন্ড রং", |
Source : "সোর্স", |
Find : "খোজো", |
Replace : "রিপ্লেস", |
SpellCheck : "বানান চেক", |
UniversalKeyboard : "সার্বজনীন কিবোর্ড", |
PageBreakLbl : "পেজ ব্রেক লেবেল", |
PageBreak : "পেজ ব্রেক", |
Form : "ফর্ম", |
Checkbox : "চেক বাক্স", |
RadioButton : "রেডিও বাটন", |
TextField : "টেক্সট ফীল্ড", |
Textarea : "টেক্সট এরিয়া", |
HiddenField : "গুপ্ত ফীল্ড", |
Button : "বাটন", |
SelectionField : "বাছাই ফীল্ড", |
ImageButton : "ছবির বাটন", |
FitWindow : "উইন্ডো ফিট কর", |
// Context Menu |
EditLink : "লিংক সম্পাদন", |
CellCM : "সেল", |
RowCM : "রো", |
ColumnCM : "কলাম", |
InsertRow : "রো যুক্ত কর", |
DeleteRows : "রো মুছে দাও", |
InsertColumn : "কলাম যুক্ত কর", |
DeleteColumns : "কলাম মুছে দাও", |
InsertCell : "সেল যুক্ত কর", |
DeleteCells : "সেল মুছে দাও", |
MergeCells : "সেল জোড়া দাও", |
SplitCell : "সেল আলাদা কর", |
TableDelete : "টেবিল ডিলীট কর", |
CellProperties : "সেলের প্রোপার্টিজ", |
TableProperties : "টেবিল প্রোপার্টি", |
ImageProperties : "ছবি প্রোপার্টি", |
FlashProperties : "ফ্লাশ প্রোপার্টি", |
AnchorProp : "নোঙর প্রোপার্টি", |
ButtonProp : "বাটন প্রোপার্টি", |
CheckboxProp : "চেক বক্স প্রোপার্টি", |
HiddenFieldProp : "গুপ্ত ফীল্ড প্রোপার্টি", |
RadioButtonProp : "রেডিও বাটন প্রোপার্টি", |
ImageButtonProp : "ছবি বাটন প্রোপার্টি", |
TextFieldProp : "টেক্সট ফীল্ড প্রোপার্টি", |
SelectionFieldProp : "বাছাই ফীল্ড প্রোপার্টি", |
TextareaProp : "টেক্সট এরিয়া প্রোপার্টি", |
FormProp : "ফর্ম প্রোপার্টি", |
FontFormats : "সাধারণ;ফর্মেটেড;ঠিকানা;শীর্ষক ১;শীর্ষক ২;শীর্ষক ৩;শীর্ষক ৪;শীর্ষক ৫;শীর্ষক ৬;শীর্ষক (DIV)", |
// Alerts and Messages |
ProcessingXHTML : "XHTML প্রসেস করা হচ্ছে", |
Done : "শেষ হয়েছে", |
PasteWordConfirm : "যে টেকস্টটি আপনি পেস্ট করতে চাচ্ছেন মনে হচ্ছে সেটি ওয়ার্ড থেকে কপি করা। আপনি কি পেস্ট করার আগে একে পরিষ্কার করতে চান?", |
NotCompatiblePaste : "এই কমান্ডটি শুধুমাত্র ইন্টারনেট এক্সপ্লোরার ৫.০ বা তার পরের ভার্সনে পাওয়া সম্ভব। আপনি কি পরিষ্কার না করেই পেস্ট করতে চান?", |
UnknownToolbarItem : "অজানা টুলবার আইটেম \"%1\"", |
UnknownCommand : "অজানা কমান্ড \"%1\"", |
NotImplemented : "কমান্ড ইমপ্লিমেন্ট করা হয়নি", |
UnknownToolbarSet : "টুলবার সেট \"%1\" এর অস্তিত্ব নেই", |
NoActiveX : "আপনার ব্রাউজারের সুরক্ষা সেটিংস কারনে এডিটরের কিছু ফিচার পাওয়া নাও যেতে পারে। আপনাকে অবশ্যই \"Run ActiveX controls and plug-ins\" এনাবেল করে নিতে হবে। আপনি ভুলভ্রান্তি কিছু কিছু ফিচারের অনুপস্থিতি উপলব্ধি করতে পারেন।", |
BrowseServerBlocked : "রিসোর্স ব্রাউজার খোলা গেল না। নিশ্চিত করুন যে সব পপআপ ব্লকার বন্ধ করা আছে।", |
DialogBlocked : "ডায়ালগ ইউন্ডো খোলা গেল না। নিশ্চিত করুন যে সব পপআপ ব্লকার বন্ধ করা আছে।", |
// Dialogs |
DlgBtnOK : "ওকে", |
DlgBtnCancel : "বাতিল", |
DlgBtnClose : "বন্ধ কর", |
DlgBtnBrowseServer : "ব্রাউজ সার্ভার", |
DlgAdvancedTag : "এডভান্সড", |
DlgOpOther : "<অন্য>", |
DlgInfoTab : "তথ্য", |
DlgAlertUrl : "দয়া করে URL যুক্ত করুন", |
// General Dialogs Labels |
DlgGenNotSet : "<সেট নেই>", |
DlgGenId : "আইডি", |
DlgGenLangDir : "ভাষা লেখার দিক", |
DlgGenLangDirLtr : "বাম থেকে ডান (LTR)", |
DlgGenLangDirRtl : "ডান থেকে বাম (RTL)", |
DlgGenLangCode : "ভাষা কোড", |
DlgGenAccessKey : "এক্সেস কী", |
DlgGenName : "নাম", |
DlgGenTabIndex : "ট্যাব ইন্ডেক্স", |
DlgGenLongDescr : "URL এর লম্বা বর্ণনা", |
DlgGenClass : "স্টাইল-শীট ক্লাস", |
DlgGenTitle : "পরামর্শ শীর্ষক", |
DlgGenContType : "পরামর্শ কন্টেন্টের প্রকার", |
DlgGenLinkCharset : "লিংক রিসোর্স ক্যারেক্টর সেট", |
DlgGenStyle : "স্টাইল", |
// Image Dialog |
DlgImgTitle : "ছবির প্রোপার্টি", |
DlgImgInfoTab : "ছবির তথ্য", |
DlgImgBtnUpload : "ইহাকে সার্ভারে প্রেরন কর", |
DlgImgURL : "URL", |
DlgImgUpload : "আপলোড", |
DlgImgAlt : "বিকল্প টেক্সট", |
DlgImgWidth : "প্রস্থ", |
DlgImgHeight : "দৈর্ঘ্য", |
DlgImgLockRatio : "অনুপাত লক কর", |
DlgBtnResetSize : "সাইজ পূর্বাবস্থায় ফিরিয়ে দাও", |
DlgImgBorder : "বর্ডার", |
DlgImgHSpace : "হরাইজন্টাল স্পেস", |
DlgImgVSpace : "ভার্টিকেল স্পেস", |
DlgImgAlign : "এলাইন", |
DlgImgAlignLeft : "বামে", |
DlgImgAlignAbsBottom: "Abs নীচে", |
DlgImgAlignAbsMiddle: "Abs উপর", |
DlgImgAlignBaseline : "মূল রেখা", |
DlgImgAlignBottom : "নীচে", |
DlgImgAlignMiddle : "মধ্য", |
DlgImgAlignRight : "ডানে", |
DlgImgAlignTextTop : "টেক্সট উপর", |
DlgImgAlignTop : "উপর", |
DlgImgPreview : "প্রীভিউ", |
DlgImgAlertUrl : "অনুগ্রহক করে ছবির URL টাইপ করুন", |
DlgImgLinkTab : "লিংক", |
// Flash Dialog |
DlgFlashTitle : "ফ্ল্যাশ প্রোপার্টি", |
DlgFlashChkPlay : "অটো প্লে", |
DlgFlashChkLoop : "লূপ", |
DlgFlashChkMenu : "ফ্ল্যাশ মেনু এনাবল কর", |
DlgFlashScale : "স্কেল", |
DlgFlashScaleAll : "সব দেখাও", |
DlgFlashScaleNoBorder : "কোনো বর্ডার নেই", |
DlgFlashScaleFit : "নিখুঁত ফিট", |
// Link Dialog |
DlgLnkWindowTitle : "লিংক", |
DlgLnkInfoTab : "লিংক তথ্য", |
DlgLnkTargetTab : "টার্গেট", |
DlgLnkType : "লিংক প্রকার", |
DlgLnkTypeURL : "URL", |
DlgLnkTypeAnchor : "এই পেজে নোঙর কর", |
DlgLnkTypeEMail : "ইমেইল", |
DlgLnkProto : "প্রোটোকল", |
DlgLnkProtoOther : "<অন্য>", |
DlgLnkURL : "URL", |
DlgLnkAnchorSel : "নোঙর বাছাই", |
DlgLnkAnchorByName : "নোঙরের নাম দিয়ে", |
DlgLnkAnchorById : "নোঙরের আইডি দিয়ে", |
DlgLnkNoAnchors : "<ডকুমেন্টে আর কোন নোঙর নেই>", |
DlgLnkEMail : "ইমেইল ঠিকানা", |
DlgLnkEMailSubject : "মেসেজের বিষয়", |
DlgLnkEMailBody : "মেসেজের দেহ", |
DlgLnkUpload : "আপলোড", |
DlgLnkBtnUpload : "একে সার্ভারে পাঠাও", |
DlgLnkTarget : "টার্গেট", |
DlgLnkTargetFrame : "<ফ্রেম>", |
DlgLnkTargetPopup : "<পপআপ উইন্ডো>", |
DlgLnkTargetBlank : "নতুন উইন্ডো (_blank)", |
DlgLnkTargetParent : "মূল উইন্ডো (_parent)", |
DlgLnkTargetSelf : "এই উইন্ডো (_self)", |
DlgLnkTargetTop : "শীর্ষ উইন্ডো (_top)", |
DlgLnkTargetFrameName : "টার্গেট ফ্রেমের নাম", |
DlgLnkPopWinName : "পপআপ উইন্ডোর নাম", |
DlgLnkPopWinFeat : "পপআপ উইন্ডো ফীচার সমূহ", |
DlgLnkPopResize : "রিসাইজ করা সম্ভব", |
DlgLnkPopLocation : "লোকেশন বার", |
DlgLnkPopMenu : "মেন্যু বার", |
DlgLnkPopScroll : "স্ক্রল বার", |
DlgLnkPopStatus : "স্ট্যাটাস বার", |
DlgLnkPopToolbar : "টুল বার", |
DlgLnkPopFullScrn : "পূর্ণ পর্দা জুড়ে (IE)", |
DlgLnkPopDependent : "ডিপেন্ডেন্ট (Netscape)", |
DlgLnkPopWidth : "প্রস্থ", |
DlgLnkPopHeight : "দৈর্ঘ্য", |
DlgLnkPopLeft : "বামের পজিশন", |
DlgLnkPopTop : "ডানের পজিশন", |
DlnLnkMsgNoUrl : "অনুগ্রহ করে URL লিংক টাইপ করুন", |
DlnLnkMsgNoEMail : "অনুগ্রহ করে ইমেইল এড্রেস টাইপ করুন", |
DlnLnkMsgNoAnchor : "অনুগ্রহ করে নোঙর বাছাই করুন", |
DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING |
// Color Dialog |
DlgColorTitle : "রং বাছাই কর", |
DlgColorBtnClear : "পরিষ্কার কর", |
DlgColorHighlight : "হাইলাইট", |
DlgColorSelected : "সিলেক্টেড", |
// Smiley Dialog |
DlgSmileyTitle : "স্মাইলী যুক্ত কর", |
// Special Character Dialog |
DlgSpecialCharTitle : "বিশেষ ক্যারেক্টার বাছাই কর", |
// Table Dialog |
DlgTableTitle : "টেবিল প্রোপার্টি", |
DlgTableRows : "রো", |
DlgTableColumns : "কলাম", |
DlgTableBorder : "বর্ডার সাইজ", |
DlgTableAlign : "এলাইনমেন্ট", |
DlgTableAlignNotSet : "<সেট নেই>", |
DlgTableAlignLeft : "বামে", |
DlgTableAlignCenter : "মাঝখানে", |
DlgTableAlignRight : "ডানে", |
DlgTableWidth : "প্রস্থ", |
DlgTableWidthPx : "পিক্সেল", |
DlgTableWidthPc : "শতকরা", |
DlgTableHeight : "দৈর্ঘ্য", |
DlgTableCellSpace : "সেল স্পেস", |
DlgTableCellPad : "সেল প্যাডিং", |
DlgTableCaption : "শীর্ষক", |
DlgTableSummary : "সারাংশ", |
// Table Cell Dialog |
DlgCellTitle : "সেল প্রোপার্টি", |
DlgCellWidth : "প্রস্থ", |
DlgCellWidthPx : "পিক্সেল", |
DlgCellWidthPc : "শতকরা", |
DlgCellHeight : "দৈর্ঘ্য", |
DlgCellWordWrap : "ওয়ার্ড রেপ", |
DlgCellWordWrapNotSet : "<সেট নেই>", |
DlgCellWordWrapYes : "হাঁ", |
DlgCellWordWrapNo : "না", |
DlgCellHorAlign : "হরাইজন্টাল এলাইনমেন্ট", |
DlgCellHorAlignNotSet : "<সেট নেই>", |
DlgCellHorAlignLeft : "বামে", |
DlgCellHorAlignCenter : "মাঝখানে", |
DlgCellHorAlignRight: "ডানে", |
DlgCellVerAlign : "ভার্টিক্যাল এলাইনমেন্ট", |
DlgCellVerAlignNotSet : "<সেট নেই>", |
DlgCellVerAlignTop : "উপর", |
DlgCellVerAlignMiddle : "মধ্য", |
DlgCellVerAlignBottom : "নীচে", |
DlgCellVerAlignBaseline : "মূলরেখা", |
DlgCellRowSpan : "রো স্প্যান", |
DlgCellCollSpan : "কলাম স্প্যান", |
DlgCellBackColor : "ব্যাকগ্রাউন্ড রং", |
DlgCellBorderColor : "বর্ডারের রং", |
DlgCellBtnSelect : "বাছাই কর", |
// Find Dialog |
DlgFindTitle : "খোঁজো", |
DlgFindFindBtn : "খোঁজো", |
DlgFindNotFoundMsg : "আপনার উল্লেখিত টেকস্ট পাওয়া যায়নি", |
// Replace Dialog |
DlgReplaceTitle : "বদলে দাও", |
DlgReplaceFindLbl : "যা খুঁজতে হবে:", |
DlgReplaceReplaceLbl : "যার সাথে বদলাতে হবে:", |
DlgReplaceCaseChk : "কেস মিলাও", |
DlgReplaceReplaceBtn : "বদলে দাও", |
DlgReplaceReplAllBtn : "সব বদলে দাও", |
DlgReplaceWordChk : "পুরা শব্দ মেলাও", |
// Paste Operations / Dialog |
PasteErrorPaste : "আপনার ব্রাউজারের সুরক্ষা সেটিংস এডিটরকে অটোমেটিক পেস্ট করার অনুমতি দেয়নি। দয়া করে এই কাজের জন্য কিবোর্ড ব্যবহার করুন (Ctrl+V)।", |
PasteErrorCut : "আপনার ব্রাউজারের সুরক্ষা সেটিংস এডিটরকে অটোমেটিক কাট করার অনুমতি দেয়নি। দয়া করে এই কাজের জন্য কিবোর্ড ব্যবহার করুন (Ctrl+X)।", |
PasteErrorCopy : "আপনার ব্রাউজারের সুরক্ষা সেটিংস এডিটরকে অটোমেটিক কপি করার অনুমতি দেয়নি। দয়া করে এই কাজের জন্য কিবোর্ড ব্যবহার করুন (Ctrl+C)।", |
PasteAsText : "সাদা টেক্সট হিসেবে পেস্ট কর", |
PasteFromWord : "ওয়ার্ড থেকে পেস্ট কর", |
DlgPasteMsg2 : "অনুগ্রহ করে নীচের বাক্সে কিবোর্ড ব্যবহার করে (<STRONG>Ctrl+V</STRONG>) পেস্ট করুন এবং <STRONG>OK</STRONG> চাপ দিন", |
DlgPasteIgnoreFont : "ফন্ট ফেস ডেফিনেশন ইগনোর করুন", |
DlgPasteRemoveStyles : "স্টাইল ডেফিনেশন সরিয়ে দিন", |
DlgPasteCleanBox : "বাক্স পরিষ্কার করুন", |
// Color Picker |
ColorAutomatic : "অটোমেটিক", |
ColorMoreColors : "আরও রং...", |
// Document Properties |
DocProps : "ডক্যুমেন্ট প্রোপার্টি", |
// Anchor Dialog |
DlgAnchorTitle : "নোঙরের প্রোপার্টি", |
DlgAnchorName : "নোঙরের নাম", |
DlgAnchorErrorName : "নোঙরের নাম টাইপ করুন", |
// Speller Pages Dialog |
DlgSpellNotInDic : "শব্দকোষে নেই", |
DlgSpellChangeTo : "এতে বদলাও", |
DlgSpellBtnIgnore : "ইগনোর কর", |
DlgSpellBtnIgnoreAll : "সব ইগনোর কর", |
DlgSpellBtnReplace : "বদলে দাও", |
DlgSpellBtnReplaceAll : "সব বদলে দাও", |
DlgSpellBtnUndo : "আন্ডু", |
DlgSpellNoSuggestions : "- কোন সাজেশন নেই -", |
DlgSpellProgress : "বানান পরীক্ষা চলছে...", |
DlgSpellNoMispell : "বানান পরীক্ষা শেষ: কোন ভুল বানান পাওয়া যায়নি", |
DlgSpellNoChanges : "বানান পরীক্ষা শেষ: কোন শব্দ পরিবর্তন করা হয়নি", |
DlgSpellOneChange : "বানান পরীক্ষা শেষ: একটি মাত্র শব্দ পরিবর্তন করা হয়েছে", |
DlgSpellManyChanges : "বানান পরীক্ষা শেষ: %1 গুলো শব্দ বদলে গ্যাছে", |
IeSpellDownload : "বানান পরীক্ষক ইনস্টল করা নেই। আপনি কি এখনই এটা ডাউনলোড করতে চান?", |
// Button Dialog |
DlgButtonText : "টেক্সট (ভ্যালু)", |
DlgButtonType : "প্রকার", |
DlgButtonTypeBtn : "Button", //MISSING |
DlgButtonTypeSbm : "Submit", //MISSING |
DlgButtonTypeRst : "Reset", //MISSING |
// Checkbox and Radio Button Dialogs |
DlgCheckboxName : "নাম", |
DlgCheckboxValue : "ভ্যালু", |
DlgCheckboxSelected : "সিলেক্টেড", |
// Form Dialog |
DlgFormName : "নাম", |
DlgFormAction : "একশ্যন", |
DlgFormMethod : "পদ্ধতি", |
// Select Field Dialog |
DlgSelectName : "নাম", |
DlgSelectValue : "ভ্যালু", |
DlgSelectSize : "সাইজ", |
DlgSelectLines : "লাইন সমূহ", |
DlgSelectChkMulti : "একাধিক সিলেকশন এলাউ কর", |
DlgSelectOpAvail : "অন্যান্য বিকল্প", |
DlgSelectOpText : "টেক্সট", |
DlgSelectOpValue : "ভ্যালু", |
DlgSelectBtnAdd : "যুক্ত", |
DlgSelectBtnModify : "বদলে দাও", |
DlgSelectBtnUp : "উপর", |
DlgSelectBtnDown : "নীচে", |
DlgSelectBtnSetValue : "বাছাই করা ভ্যালু হিসেবে সেট কর", |
DlgSelectBtnDelete : "ডিলীট", |
// Textarea Dialog |
DlgTextareaName : "নাম", |
DlgTextareaCols : "কলাম", |
DlgTextareaRows : "রো", |
// Text Field Dialog |
DlgTextName : "নাম", |
DlgTextValue : "ভ্যালু", |
DlgTextCharWidth : "ক্যারেক্টার প্রশস্ততা", |
DlgTextMaxChars : "সর্বাধিক ক্যারেক্টার", |
DlgTextType : "টাইপ", |
DlgTextTypeText : "টেক্সট", |
DlgTextTypePass : "পাসওয়ার্ড", |
// Hidden Field Dialog |
DlgHiddenName : "নাম", |
DlgHiddenValue : "ভ্যালু", |
// Bulleted List Dialog |
BulletedListProp : "বুলেটেড সূচী প্রোপার্টি", |
NumberedListProp : "সাংখ্যিক সূচী প্রোপার্টি", |
DlgLstStart : "Start", //MISSING |
DlgLstType : "প্রকার", |
DlgLstTypeCircle : "গোল", |
DlgLstTypeDisc : "ডিস্ক", |
DlgLstTypeSquare : "চৌকোণা", |
DlgLstTypeNumbers : "সংখ্যা (1, 2, 3)", |
DlgLstTypeLCase : "ছোট অক্ষর (a, b, c)", |
DlgLstTypeUCase : "বড় অক্ষর (A, B, C)", |
DlgLstTypeSRoman : "ছোট রোমান সংখ্যা (i, ii, iii)", |
DlgLstTypeLRoman : "বড় রোমান সংখ্যা (I, II, III)", |
// Document Properties Dialog |
DlgDocGeneralTab : "সাধারন", |
DlgDocBackTab : "ব্যাকগ্রাউন্ড", |
DlgDocColorsTab : "রং এবং মার্জিন", |
DlgDocMetaTab : "মেটাডেটা", |
DlgDocPageTitle : "পেজ শীর্ষক", |
DlgDocLangDir : "ভাষা লিখার দিক", |
DlgDocLangDirLTR : "বাম থেকে ডানে (LTR)", |
DlgDocLangDirRTL : "ডান থেকে বামে (RTL)", |
DlgDocLangCode : "ভাষা কোড", |
DlgDocCharSet : "ক্যারেক্টার সেট এনকোডিং", |
DlgDocCharSetCE : "Central European", //MISSING |
DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING |
DlgDocCharSetCR : "Cyrillic", //MISSING |
DlgDocCharSetGR : "Greek", //MISSING |
DlgDocCharSetJP : "Japanese", //MISSING |
DlgDocCharSetKR : "Korean", //MISSING |
DlgDocCharSetTR : "Turkish", //MISSING |
DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING |
DlgDocCharSetWE : "Western European", //MISSING |
DlgDocCharSetOther : "অন্য ক্যারেক্টার সেট এনকোডিং", |
DlgDocDocType : "ডক্যুমেন্ট টাইপ হেডিং", |
DlgDocDocTypeOther : "অন্য ডক্যুমেন্ট টাইপ হেডিং", |
DlgDocIncXHTML : "XHTML ডেক্লারেশন যুক্ত কর", |
DlgDocBgColor : "ব্যাকগ্রাউন্ড রং", |
DlgDocBgImage : "ব্যাকগ্রাউন্ড ছবির URL", |
DlgDocBgNoScroll : "স্ক্রলহীন ব্যাকগ্রাউন্ড", |
DlgDocCText : "টেক্সট", |
DlgDocCLink : "লিংক", |
DlgDocCVisited : "ভিজিট করা লিংক", |
DlgDocCActive : "সক্রিয় লিংক", |
DlgDocMargins : "পেজ মার্জিন", |
DlgDocMaTop : "উপর", |
DlgDocMaLeft : "বামে", |
DlgDocMaRight : "ডানে", |
DlgDocMaBottom : "নীচে", |
DlgDocMeIndex : "ডক্যুমেন্ট ইন্ডেক্স কিওয়ার্ড (কমা দ্বারা বিচ্ছিন্ন)", |
DlgDocMeDescr : "ডক্যূমেন্ট বর্ণনা", |
DlgDocMeAuthor : "লেখক", |
DlgDocMeCopy : "কপীরাইট", |
DlgDocPreview : "প্রীভিউ", |
// Templates Dialog |
Templates : "টেমপ্লেট", |
DlgTemplatesTitle : "কনটেন্ট টেমপ্লেট", |
DlgTemplatesSelMsg : "অনুগ্রহ করে এডিটরে ওপেন করার জন্য টেমপ্লেট বাছাই করুন<br>(আসল কনটেন্ট হারিয়ে যাবে):", |
DlgTemplatesLoading : "টেমপ্লেট লিস্ট হারিয়ে যাবে। অনুগ্রহ করে অপেক্ষা করুন...", |
DlgTemplatesNoTpl : "(কোন টেমপ্লেট ডিফাইন করা নেই)", |
DlgTemplatesReplace : "Replace actual contents", //MISSING |
// About Dialog |
DlgAboutAboutTab : "কে বানিয়েছে", |
DlgAboutBrowserInfoTab : "ব্রাউজারের ব্যাপারে তথ্য", |
DlgAboutLicenseTab : "লাইসেন্স", |
DlgAboutVersion : "ভার্সন", |
DlgAboutLicense : "লাইসেন্স GNU LGPL এর নীতিমালার অধীনে ", |
DlgAboutInfo : "আরও তথ্যের জন্য যান" |
} |
/branches/v1.0-menes/api/fckeditor/editor/lang/nb.js |
---|
New file |
0,0 → 1,501 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: nb.js |
* Norwegian Bokmål language file. |
* |
* File Authors: |
* Martin Kronstad (www.siteman.no) (martin.kronstad@gmail.com) |
*/ |
var FCKLang = |
{ |
// Language direction : "ltr" (left to right) or "rtl" (right to left). |
Dir : "ltr", |
ToolbarCollapse : "Skjul verktøylinje", |
ToolbarExpand : "Vis verktøylinje", |
// Toolbar Items and Context Menu |
Save : "Lagre", |
NewPage : "Ny Side", |
Preview : "Forhåndsvis", |
Cut : "Klipp ut", |
Copy : "Kopier", |
Paste : "Lim inn", |
PasteText : "Lim inn som ren tekst", |
PasteWord : "Lim inn fra Word", |
Print : "Skriv ut", |
SelectAll : "Velg alle", |
RemoveFormat : "Fjern format", |
InsertLinkLbl : "Lenke", |
InsertLink : "Sett inn/Rediger lenke", |
RemoveLink : "Fjern lenke", |
Anchor : "Sett inn/Rediger anker", |
InsertImageLbl : "Bilde", |
InsertImage : "Sett inn/Rediger bilde", |
InsertFlashLbl : "Flash", |
InsertFlash : "Sett inn/Rediger Flash", |
InsertTableLbl : "Tabell", |
InsertTable : "Sett inn/Rediger tabell", |
InsertLineLbl : "Linje", |
InsertLine : "Sett inn horisontal linje", |
InsertSpecialCharLbl: "Spesielt tegn", |
InsertSpecialChar : "Sett inn spesielt tegn", |
InsertSmileyLbl : "Smil", |
InsertSmiley : "Sett inn smil", |
About : "Om FCKeditor", |
Bold : "Fet", |
Italic : "Kursiv", |
Underline : "Understrek", |
StrikeThrough : "Gjennomstrek", |
Subscript : "Senket skrift", |
Superscript : "Hevet skrift", |
LeftJustify : "Venstrejuster", |
CenterJustify : "Midtjuster", |
RightJustify : "Høyrejuster", |
BlockJustify : "Blokkjuster", |
DecreaseIndent : "Senk nivå", |
IncreaseIndent : "Øk nivå", |
Undo : "Angre", |
Redo : "Gjør om", |
NumberedListLbl : "Numrert liste", |
NumberedList : "Sett inn/Fjern numrert liste", |
BulletedListLbl : "Uordnet liste", |
BulletedList : "Sett inn/Fjern uordnet liste", |
ShowTableBorders : "Vis tabellrammer", |
ShowDetails : "Vis detaljer", |
Style : "Stil", |
FontFormat : "Format", |
Font : "Skrift", |
FontSize : "Størrelse", |
TextColor : "Tekstfarge", |
BGColor : "Bakgrunnsfarge", |
Source : "Kilde", |
Find : "Finn", |
Replace : "Erstatt", |
SpellCheck : "Stavekontroll", |
UniversalKeyboard : "Universelt tastatur", |
PageBreakLbl : "Sideskift", |
PageBreak : "Sett inn sideskift", |
Form : "Skjema", |
Checkbox : "Sjekkboks", |
RadioButton : "Radioknapp", |
TextField : "Tekstfelt", |
Textarea : "Tekstområde", |
HiddenField : "Skjult felt", |
Button : "Knapp", |
SelectionField : "Dropdown meny", |
ImageButton : "Bildeknapp", |
FitWindow : "Maksimer størrelsen på redigeringsverktøyet", |
// Context Menu |
EditLink : "Rediger lenke", |
CellCM : "Celle", |
RowCM : "Rader", |
ColumnCM : "Kolonne", |
InsertRow : "Sett inn rad", |
DeleteRows : "Slett rader", |
InsertColumn : "Sett inn kolonne", |
DeleteColumns : "Slett kolonner", |
InsertCell : "Sett inn celle", |
DeleteCells : "Slett celler", |
MergeCells : "Slå sammen celler", |
SplitCell : "Splitt celler", |
TableDelete : "Slett tabell", |
CellProperties : "Celleegenskaper", |
TableProperties : "Tabellegenskaper", |
ImageProperties : "Bildeegenskaper", |
FlashProperties : "Flash Egenskaper", |
AnchorProp : "Ankeregenskaper", |
ButtonProp : "Knappegenskaper", |
CheckboxProp : "Sjekkboksegenskaper", |
HiddenFieldProp : "Skjult felt egenskaper", |
RadioButtonProp : "Radioknappegenskaper", |
ImageButtonProp : "Bildeknappegenskaper", |
TextFieldProp : "Tekstfeltegenskaper", |
SelectionFieldProp : "Dropdown menyegenskaper", |
TextareaProp : "Tekstfeltegenskaper", |
FormProp : "Skjemaegenskaper", |
FontFormats : "Normal;Formatert;Adresse;Tittel 1;Tittel 2;Tittel 3;Tittel 4;Tittel 5;Tittel 6", |
// Alerts and Messages |
ProcessingXHTML : "Lager XHTML. Vennligst vent...", |
Done : "Ferdig", |
PasteWordConfirm : "Teksten du prøver å lime inn ser ut som om den kommer fra word , du bør rense den før du limer inn , vil du gjøre dette?", |
NotCompatiblePaste : "Denne kommandoen er tilgjenglig kun for Internet Explorer version 5.5 eller bedre. Vil du fortsette uten å rense?(Du kan lime inn som ren tekst)", |
UnknownToolbarItem : "Ukjent menyvalg \"%1\"", |
UnknownCommand : "Ukjent kommando \"%1\"", |
NotImplemented : "Kommando ikke ennå implimentert", |
UnknownToolbarSet : "Verktøylinjesett \"%1\" finnes ikke", |
NoActiveX : "Din nettleser's sikkerhetsinstillinger kan begrense noen av funksjonene i redigeringsverktøyet. Du må aktivere \"Kjør ActiveXkontroller og plugins\". Du kan oppleve feil og advarsler om manglende funksjoner", |
BrowseServerBlocked : "Kunne ikke åpne dialogboksen for filarkiv. Pass på at du har slått av popupstoppere.", |
DialogBlocked : "Kunne ikke åpne dialogboksen. Pass på at du har slått av popupstoppere.", |
// Dialogs |
DlgBtnOK : "OK", |
DlgBtnCancel : "Avbryt", |
DlgBtnClose : "Lukk", |
DlgBtnBrowseServer : "Bla igjennom server", |
DlgAdvancedTag : "Avansert", |
DlgOpOther : "<Annet>", |
DlgInfoTab : "Info", |
DlgAlertUrl : "Vennligst skriv inn URL'en", |
// General Dialogs Labels |
DlgGenNotSet : "<ikke satt>", |
DlgGenId : "Id", |
DlgGenLangDir : "Språkretning", |
DlgGenLangDirLtr : "Venstre til høyre (VTH)", |
DlgGenLangDirRtl : "Høyre til venstre (HTV)", |
DlgGenLangCode : "Språk kode", |
DlgGenAccessKey : "Aksessknapp", |
DlgGenName : "Navn", |
DlgGenTabIndex : "Tab Indeks", |
DlgGenLongDescr : "Utvidet beskrivelse", |
DlgGenClass : "Stilarkklasser", |
DlgGenTitle : "Tittel", |
DlgGenContType : "Type", |
DlgGenLinkCharset : "Lenket språkkart", |
DlgGenStyle : "Stil", |
// Image Dialog |
DlgImgTitle : "Bildeegenskaper", |
DlgImgInfoTab : "Bildeinformasjon", |
DlgImgBtnUpload : "Send det til serveren", |
DlgImgURL : "URL", |
DlgImgUpload : "Last opp", |
DlgImgAlt : "Alternativ tekst", |
DlgImgWidth : "Bredde", |
DlgImgHeight : "Høyde", |
DlgImgLockRatio : "Lås forhold", |
DlgBtnResetSize : "Tilbakestill størrelse", |
DlgImgBorder : "Ramme", |
DlgImgHSpace : "HMarg", |
DlgImgVSpace : "VMarg", |
DlgImgAlign : "Juster", |
DlgImgAlignLeft : "Venstre", |
DlgImgAlignAbsBottom: "Abs bunn", |
DlgImgAlignAbsMiddle: "Abs midten", |
DlgImgAlignBaseline : "Bunnlinje", |
DlgImgAlignBottom : "Bunn", |
DlgImgAlignMiddle : "Midten", |
DlgImgAlignRight : "Høyre", |
DlgImgAlignTextTop : "Tekst topp", |
DlgImgAlignTop : "Topp", |
DlgImgPreview : "Forhåndsvis", |
DlgImgAlertUrl : "Vennligst skriv bildeurlen", |
DlgImgLinkTab : "Lenke", |
// Flash Dialog |
DlgFlashTitle : "Flash Egenskaper", |
DlgFlashChkPlay : "Auto Spill", |
DlgFlashChkLoop : "Loop", |
DlgFlashChkMenu : "Slå på Flash meny", |
DlgFlashScale : "Skaler", |
DlgFlashScaleAll : "Vis alt", |
DlgFlashScaleNoBorder : "Ingen ramme", |
DlgFlashScaleFit : "Skaler til å passeExact Fit", |
// Link Dialog |
DlgLnkWindowTitle : "Lenke", |
DlgLnkInfoTab : "Lenkeinfo", |
DlgLnkTargetTab : "Mål", |
DlgLnkType : "Lenketype", |
DlgLnkTypeURL : "URL", |
DlgLnkTypeAnchor : "Bokmerk denne siden", |
DlgLnkTypeEMail : "E-Post", |
DlgLnkProto : "Protokoll", |
DlgLnkProtoOther : "<annet>", |
DlgLnkURL : "URL", |
DlgLnkAnchorSel : "Velg ett anker", |
DlgLnkAnchorByName : "Anker etter navn", |
DlgLnkAnchorById : "Element etter ID", |
DlgLnkNoAnchors : "<Ingen anker i dokumentet>", |
DlgLnkEMail : "E-Post Addresse", |
DlgLnkEMailSubject : "Meldingsemne", |
DlgLnkEMailBody : "Melding", |
DlgLnkUpload : "Last opp", |
DlgLnkBtnUpload : "Send til server", |
DlgLnkTarget : "Mål", |
DlgLnkTargetFrame : "<ramme>", |
DlgLnkTargetPopup : "<popup vindu>", |
DlgLnkTargetBlank : "Nytt vindu (_blank)", |
DlgLnkTargetParent : "Foreldre vindu (_parent)", |
DlgLnkTargetSelf : "Samme vindu (_self)", |
DlgLnkTargetTop : "Hele vindu (_top)", |
DlgLnkTargetFrameName : "Målramme", |
DlgLnkPopWinName : "Popup vindus navn", |
DlgLnkPopWinFeat : "Popup vindus egenskaper", |
DlgLnkPopResize : "Endre størrelse", |
DlgLnkPopLocation : "Adresselinje", |
DlgLnkPopMenu : "Menylinje", |
DlgLnkPopScroll : "Scrollbar", |
DlgLnkPopStatus : "Statuslinje", |
DlgLnkPopToolbar : "Verktøylinje", |
DlgLnkPopFullScrn : "Full skjerm (IE)", |
DlgLnkPopDependent : "Avhenging (Netscape)", |
DlgLnkPopWidth : "Bredde", |
DlgLnkPopHeight : "Høyde", |
DlgLnkPopLeft : "Venstre posisjon", |
DlgLnkPopTop : "Topp posisjon", |
DlnLnkMsgNoUrl : "Vennligst skriv inn lenkens url", |
DlnLnkMsgNoEMail : "Vennligst skriv inn e-postadressen", |
DlnLnkMsgNoAnchor : "Vennligst velg ett anker", |
DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING |
// Color Dialog |
DlgColorTitle : "Velg farge", |
DlgColorBtnClear : "Tøm", |
DlgColorHighlight : "Marker", |
DlgColorSelected : "Velg", |
// Smiley Dialog |
DlgSmileyTitle : "Sett inn smil", |
// Special Character Dialog |
DlgSpecialCharTitle : "Velg spesielt tegn", |
// Table Dialog |
DlgTableTitle : "Tabellegenskaper", |
DlgTableRows : "Rader", |
DlgTableColumns : "Kolonner", |
DlgTableBorder : "Rammestørrelse", |
DlgTableAlign : "Justering", |
DlgTableAlignNotSet : "<Ikke satt>", |
DlgTableAlignLeft : "Venstre", |
DlgTableAlignCenter : "Midtjuster", |
DlgTableAlignRight : "Høyre", |
DlgTableWidth : "Bredde", |
DlgTableWidthPx : "pixler", |
DlgTableWidthPc : "prosent", |
DlgTableHeight : "Høyde", |
DlgTableCellSpace : "Celle marg", |
DlgTableCellPad : "Celle polstring", |
DlgTableCaption : "Tittel", |
DlgTableSummary : "Sammendrag", |
// Table Cell Dialog |
DlgCellTitle : "Celle egenskaper", |
DlgCellWidth : "Bredde", |
DlgCellWidthPx : "pixeler", |
DlgCellWidthPc : "prosent", |
DlgCellHeight : "Høyde", |
DlgCellWordWrap : "Tekstbrytning", |
DlgCellWordWrapNotSet : "<Ikke satt>", |
DlgCellWordWrapYes : "Ja", |
DlgCellWordWrapNo : "Nei", |
DlgCellHorAlign : "Horisontal justering", |
DlgCellHorAlignNotSet : "<Ikke satt>", |
DlgCellHorAlignLeft : "Venstre", |
DlgCellHorAlignCenter : "Midtjuster", |
DlgCellHorAlignRight: "Høyre", |
DlgCellVerAlign : "Vertikal justering", |
DlgCellVerAlignNotSet : "<Ikke satt>", |
DlgCellVerAlignTop : "Topp", |
DlgCellVerAlignMiddle : "Midten", |
DlgCellVerAlignBottom : "Bunn", |
DlgCellVerAlignBaseline : "Bunnlinje", |
DlgCellRowSpan : "Radspenn", |
DlgCellCollSpan : "Kolonnespenn", |
DlgCellBackColor : "Bakgrunnsfarge", |
DlgCellBorderColor : "Rammefarge", |
DlgCellBtnSelect : "Velg...", |
// Find Dialog |
DlgFindTitle : "Finn", |
DlgFindFindBtn : "Finn", |
DlgFindNotFoundMsg : "Den spesifiserte teksten ble ikke funnet.", |
// Replace Dialog |
DlgReplaceTitle : "Erstatt", |
DlgReplaceFindLbl : "Finn hva:", |
DlgReplaceReplaceLbl : "Erstatt med:", |
DlgReplaceCaseChk : "Riktig case", |
DlgReplaceReplaceBtn : "Erstatt", |
DlgReplaceReplAllBtn : "Erstatt alle", |
DlgReplaceWordChk : "Finn hele ordet", |
// Paste Operations / Dialog |
PasteErrorPaste : "Din nettlesers sikkerhetsinstillinger tillater ikke automatisk innliming av tekst. Vennligst brukt snareveien (Ctrl+V).", |
PasteErrorCut : "Din nettlesers sikkerhetsinstillinger tillater ikke automatisk klipping av tekst. Vennligst brukt snareveien (Ctrl+X).", |
PasteErrorCopy : "Din nettlesers sikkerhetsinstillinger tillater ikke automatisk kopiering av tekst. Vennligst brukt snareveien (Ctrl+C).", |
PasteAsText : "Lim inn som ren tekst", |
PasteFromWord : "Lim inn fra word", |
DlgPasteMsg2 : "Vennligst lim inn i den følgende boksen med tastaturet (<STRONG>Ctrl+V</STRONG>) og trykk <STRONG>OK</STRONG>.", |
DlgPasteIgnoreFont : "Ignorer fonter", |
DlgPasteRemoveStyles : "Fjern stildefinisjoner", |
DlgPasteCleanBox : "Tøm boksen", |
// Color Picker |
ColorAutomatic : "Automatisk", |
ColorMoreColors : "Flere farger...", |
// Document Properties |
DocProps : "Dokumentegenskaper", |
// Anchor Dialog |
DlgAnchorTitle : "Ankeregenskaper", |
DlgAnchorName : "Ankernavn", |
DlgAnchorErrorName : "Vennligst skriv inn ankernavnet", |
// Speller Pages Dialog |
DlgSpellNotInDic : "Ikke i ordboken", |
DlgSpellChangeTo : "Endre til", |
DlgSpellBtnIgnore : "Ignorer", |
DlgSpellBtnIgnoreAll : "Ignorer alle", |
DlgSpellBtnReplace : "Erstatt", |
DlgSpellBtnReplaceAll : "Erstatt alle", |
DlgSpellBtnUndo : "Angre", |
DlgSpellNoSuggestions : "- ingen forslag -", |
DlgSpellProgress : "Stavekontroll pågår...", |
DlgSpellNoMispell : "Stavekontroll fullført: ingen feilstavinger funnet", |
DlgSpellNoChanges : "Stavekontroll fullført: ingen ord endret", |
DlgSpellOneChange : "Stavekontroll fullført: Ett ord endret", |
DlgSpellManyChanges : "Stavekontroll fullført: %1 ord endret", |
IeSpellDownload : "Stavekontroll ikke installert, vil du laste den ned nå?", |
// Button Dialog |
DlgButtonText : "Tekst", |
DlgButtonType : "Type", |
DlgButtonTypeBtn : "Button", //MISSING |
DlgButtonTypeSbm : "Submit", //MISSING |
DlgButtonTypeRst : "Reset", //MISSING |
// Checkbox and Radio Button Dialogs |
DlgCheckboxName : "Navn", |
DlgCheckboxValue : "Verdi", |
DlgCheckboxSelected : "Valgt", |
// Form Dialog |
DlgFormName : "Navn", |
DlgFormAction : "Handling", |
DlgFormMethod : "Metode", |
// Select Field Dialog |
DlgSelectName : "Navn", |
DlgSelectValue : "Verdi", |
DlgSelectSize : "Størrelse", |
DlgSelectLines : "Linjer", |
DlgSelectChkMulti : "Tillat flervalg", |
DlgSelectOpAvail : "Tilgjenglige alternativer", |
DlgSelectOpText : "Tekst", |
DlgSelectOpValue : "Verdi", |
DlgSelectBtnAdd : "Legg til", |
DlgSelectBtnModify : "Endre", |
DlgSelectBtnUp : "Opp", |
DlgSelectBtnDown : "Ned", |
DlgSelectBtnSetValue : "Sett som valgt", |
DlgSelectBtnDelete : "Slett", |
// Textarea Dialog |
DlgTextareaName : "Navn", |
DlgTextareaCols : "Kolonner", |
DlgTextareaRows : "Rader", |
// Text Field Dialog |
DlgTextName : "Navn", |
DlgTextValue : "verdi", |
DlgTextCharWidth : "Tegnbredde", |
DlgTextMaxChars : "Maks antall tegn", |
DlgTextType : "Type", |
DlgTextTypeText : "Tekst", |
DlgTextTypePass : "Passord", |
// Hidden Field Dialog |
DlgHiddenName : "Navn", |
DlgHiddenValue : "Verdi", |
// Bulleted List Dialog |
BulletedListProp : "Uordnet listeegenskaper", |
NumberedListProp : "Ordnet listeegenskaper", |
DlgLstStart : "Start", //MISSING |
DlgLstType : "Type", |
DlgLstTypeCircle : "Sirkel", |
DlgLstTypeDisc : "Hel sirkel", |
DlgLstTypeSquare : "Firkant", |
DlgLstTypeNumbers : "Numre(1, 2, 3)", |
DlgLstTypeLCase : "Små bokstaver (a, b, c)", |
DlgLstTypeUCase : "Store bokstaver(A, B, C)", |
DlgLstTypeSRoman : "Små romerske tall(i, ii, iii)", |
DlgLstTypeLRoman : "Store romerske tall(I, II, III)", |
// Document Properties Dialog |
DlgDocGeneralTab : "Generalt", |
DlgDocBackTab : "Bakgrunn", |
DlgDocColorsTab : "Farger og marginer", |
DlgDocMetaTab : "Meta Data", |
DlgDocPageTitle : "Sidetittel", |
DlgDocLangDir : "Språkretning", |
DlgDocLangDirLTR : "Venstre til høyre (LTR)", |
DlgDocLangDirRTL : "Høyre til venstre (RTL)", |
DlgDocLangCode : "Språkkode", |
DlgDocCharSet : "Tegnsett", |
DlgDocCharSetCE : "Central European", //MISSING |
DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING |
DlgDocCharSetCR : "Cyrillic", //MISSING |
DlgDocCharSetGR : "Greek", //MISSING |
DlgDocCharSetJP : "Japanese", //MISSING |
DlgDocCharSetKR : "Korean", //MISSING |
DlgDocCharSetTR : "Turkish", //MISSING |
DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING |
DlgDocCharSetWE : "Western European", //MISSING |
DlgDocCharSetOther : "Annet tegnsett", |
DlgDocDocType : "Dokumenttype header", |
DlgDocDocTypeOther : "Annet dokumenttype header", |
DlgDocIncXHTML : "Inkulder XHTML deklarasjon", |
DlgDocBgColor : "Bakgrunnsfarge", |
DlgDocBgImage : "Bakgrunnsbilde url", |
DlgDocBgNoScroll : "Ikke scroll bakgrunnsbilde", |
DlgDocCText : "Tekst", |
DlgDocCLink : "Link", |
DlgDocCVisited : "Besøkt lenke", |
DlgDocCActive : "Aktiv lenke", |
DlgDocMargins : "Sidemargin", |
DlgDocMaTop : "Topp", |
DlgDocMaLeft : "Venstre", |
DlgDocMaRight : "Høyre", |
DlgDocMaBottom : "Bunn", |
DlgDocMeIndex : "Dokument nøkkelord (kommaseparert)", |
DlgDocMeDescr : "Dokumentbeskrivelse", |
DlgDocMeAuthor : "Forfatter", |
DlgDocMeCopy : "Kopirett", |
DlgDocPreview : "Forhåndsvising", |
// Templates Dialog |
Templates : "Maler", |
DlgTemplatesTitle : "Innholdsmaler", |
DlgTemplatesSelMsg : "Velg malen du vil åpne<br>(innholdet du har skrevet blir tapt!):", |
DlgTemplatesLoading : "Laster malliste. Vennligst vent...", |
DlgTemplatesNoTpl : "(Ingen maler definert)", |
DlgTemplatesReplace : "Replace actual contents", //MISSING |
// About Dialog |
DlgAboutAboutTab : "Om", |
DlgAboutBrowserInfoTab : "Nettleserinfo", |
DlgAboutLicenseTab : "Lisens", |
DlgAboutVersion : "versjon", |
DlgAboutLicense : "Lisensiert under GNU Lesser General Public License", |
DlgAboutInfo : "Oversatt av Siteman AS<br /><a target=\"_blank\" href=\"http://www.siteman.no\">www.siteman.no</a><br /><br />For mer informasjon gå til" |
} |
/branches/v1.0-menes/api/fckeditor/editor/lang/el.js |
---|
New file |
0,0 → 1,502 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: el.js |
* Greek language file. |
* |
* File Authors: |
* Vangelis Bibakis (bibakisv[-a-t-]yahoo.com) |
* Spyros Barbatos (sbarbatos{at}users.sourceforge.net) |
*/ |
var FCKLang = |
{ |
// Language direction : "ltr" (left to right) or "rtl" (right to left). |
Dir : "ltr", |
ToolbarCollapse : "Απόκρυψη Μπάρας Εργαλείων", |
ToolbarExpand : "Εμφάνιση Μπάρας Εργαλείων", |
// Toolbar Items and Context Menu |
Save : "Αποθήκευση", |
NewPage : "Νέα Σελίδα", |
Preview : "Προεπισκόπιση", |
Cut : "Αποκοπή", |
Copy : "Αντιγραφή", |
Paste : "Επικόλληση", |
PasteText : "Επικόλληση (απλό κείμενο)", |
PasteWord : "Επικόλληση από το Word", |
Print : "Εκτύπωση", |
SelectAll : "Επιλογή όλων", |
RemoveFormat : "Αφαίρεση Μορφοποίησης", |
InsertLinkLbl : "Σύνδεσμος (Link)", |
InsertLink : "Εισαγωγή/Μεταβολή Συνδέσμου (Link)", |
RemoveLink : "Αφαίρεση Συνδέσμου (Link)", |
Anchor : "Εισαγωγή/επεξεργασία Anchor", |
InsertImageLbl : "Εικόνα", |
InsertImage : "Εισαγωγή/Μεταβολή Εικόνας", |
InsertFlashLbl : "Εισαγωγή Flash", |
InsertFlash : "Εισαγωγή/επεξεργασία Flash", |
InsertTableLbl : "Πίνακας", |
InsertTable : "Εισαγωγή/Μεταβολή Πίνακα", |
InsertLineLbl : "Γραμμή", |
InsertLine : "Εισαγωγή Οριζόντιας Γραμμής", |
InsertSpecialCharLbl: "Ειδικό Σύμβολο", |
InsertSpecialChar : "Εισαγωγή Ειδικού Συμβόλου", |
InsertSmileyLbl : "Smiley", |
InsertSmiley : "Εισαγωγή Smiley", |
About : "Περί του FCKeditor", |
Bold : "Έντονα", |
Italic : "Πλάγια", |
Underline : "Υπογράμμιση", |
StrikeThrough : "Διαγράμμιση", |
Subscript : "Δείκτης", |
Superscript : "Εκθέτης", |
LeftJustify : "Στοίχιση Αριστερά", |
CenterJustify : "Στοίχιση στο Κέντρο", |
RightJustify : "Στοίχιση Δεξιά", |
BlockJustify : "Πλήρης Στοίχιση (Block)", |
DecreaseIndent : "Μείωση Εσοχής", |
IncreaseIndent : "Αύξηση Εσοχής", |
Undo : "Αναίρεση", |
Redo : "Επαναφορά", |
NumberedListLbl : "Λίστα με Αριθμούς", |
NumberedList : "Εισαγωγή/Διαγραφή Λίστας με Αριθμούς", |
BulletedListLbl : "Λίστα με Bullets", |
BulletedList : "Εισαγωγή/Διαγραφή Λίστας με Bullets", |
ShowTableBorders : "Προβολή Ορίων Πίνακα", |
ShowDetails : "Προβολή Λεπτομερειών", |
Style : "Στυλ", |
FontFormat : "Μορφή Γραμματοσειράς", |
Font : "Γραμματοσειρά", |
FontSize : "Μέγεθος", |
TextColor : "Χρώμα Γραμμάτων", |
BGColor : "Χρώμα Υποβάθρου", |
Source : "HTML κώδικας", |
Find : "Αναζήτηση", |
Replace : "Αντικατάσταση", |
SpellCheck : "Ορθογραφικός έλεγχος", |
UniversalKeyboard : "Διεθνής πληκτρολόγιο", |
PageBreakLbl : "Τέλος σελίδας", |
PageBreak : "Εισαγωγή τέλους σελίδας", |
Form : "Φόρμα", |
Checkbox : "Κουτί επιλογής", |
RadioButton : "Κουμπί Radio", |
TextField : "Πεδίο κειμένου", |
Textarea : "Περιοχή κειμένου", |
HiddenField : "Κρυφό πεδίο", |
Button : "Κουμπί", |
SelectionField : "Πεδίο επιλογής", |
ImageButton : "Κουμπί εικόνας", |
FitWindow : "Μεγιστοποίηση προγράμματος", |
// Context Menu |
EditLink : "Μεταβολή Συνδέσμου (Link)", |
CellCM : "Κελί", |
RowCM : "Σειρά", |
ColumnCM : "Στήλη", |
InsertRow : "Εισαγωγή Γραμμής", |
DeleteRows : "Διαγραφή Γραμμών", |
InsertColumn : "Εισαγωγή Κολώνας", |
DeleteColumns : "Διαγραφή Κολωνών", |
InsertCell : "Εισαγωγή Κελιού", |
DeleteCells : "Διαγραφή Κελιών", |
MergeCells : "Ενοποίηση Κελιών", |
SplitCell : "Διαχωρισμός Κελιού", |
TableDelete : "Διαγραφή πίνακα", |
CellProperties : "Ιδιότητες Κελιού", |
TableProperties : "Ιδιότητες Πίνακα", |
ImageProperties : "Ιδιότητες Εικόνας", |
FlashProperties : "Ιδιότητες Flash", |
AnchorProp : "Ιδιότητες άγκυρας", |
ButtonProp : "Ιδιότητες κουμπιού", |
CheckboxProp : "Ιδιότητες κουμπιού επιλογής", |
HiddenFieldProp : "Ιδιότητες κρυφού πεδίου", |
RadioButtonProp : "Ιδιότητες κουμπιού radio", |
ImageButtonProp : "Ιδιότητες κουμπιού εικόνας", |
TextFieldProp : "Ιδιότητες πεδίου κειμένου", |
SelectionFieldProp : "Ιδιότητες πεδίου επιλογής", |
TextareaProp : "Ιδιότητες περιοχής κειμένου", |
FormProp : "Ιδιότητες φόρμας", |
FontFormats : "Κανονικό;Μορφοποιημένο;Διεύθυνση;Επικεφαλίδα 1;Επικεφαλίδα 2;Επικεφαλίδα 3;Επικεφαλίδα 4;Επικεφαλίδα 5;Επικεφαλίδα 6", |
// Alerts and Messages |
ProcessingXHTML : "Επεξεργασία XHTML. Παρακαλώ περιμένετε...", |
Done : "Έτοιμο", |
PasteWordConfirm : "Το κείμενο που θέλετε να επικολήσετε, φαίνεται πως προέρχεται από το Word. Θέλετε να καθαριστεί πριν επικοληθεί;", |
NotCompatiblePaste : "Αυτή η επιλογή είναι διαθέσιμη στον Internet Explorer έκδοση 5.5+. Θέλετε να γίνει η επικόλληση χωρίς καθαρισμό;", |
UnknownToolbarItem : "Άγνωστο αντικείμενο της μπάρας εργαλείων \"%1\"", |
UnknownCommand : "Άγνωστή εντολή \"%1\"", |
NotImplemented : "Η εντολή δεν έχει ενεργοποιηθεί", |
UnknownToolbarSet : "Η μπάρα εργαλείων \"%1\" δεν υπάρχει", |
NoActiveX : "Οι ρυθμίσεις ασφαλείας του browser σας μπορεί να περιορίσουν κάποιες ρυθμίσεις του προγράμματος. Χρειάζεται να ενεργοποιήσετε την επιλογή \"Run ActiveX controls and plug-ins\". Ίσως παρουσιαστούν λάθη και παρατηρήσετε ελειπείς λειτουργίες.", |
BrowseServerBlocked : "Οι πόροι του browser σας δεν είναι προσπελάσιμοι. Σιγουρευτείτε ότι δεν υπάρχουν ενεργοί popup blockers.", |
DialogBlocked : "Δεν ήταν δυνατό να ανοίξει το παράθυρο διαλόγου. Σιγουρευτείτε ότι δεν υπάρχουν ενεργοί popup blockers.", |
// Dialogs |
DlgBtnOK : "OK", |
DlgBtnCancel : "Ακύρωση", |
DlgBtnClose : "Κλείσιμο", |
DlgBtnBrowseServer : "Εξερεύνηση διακομιστή", |
DlgAdvancedTag : "Για προχωρημένους", |
DlgOpOther : "<Άλλα>", |
DlgInfoTab : "Πληροφορίες", |
DlgAlertUrl : "Παρακαλώ εισάγετε URL", |
// General Dialogs Labels |
DlgGenNotSet : "<χωρίς>", |
DlgGenId : "Id", |
DlgGenLangDir : "Κατεύθυνση κειμένου", |
DlgGenLangDirLtr : "Αριστερά προς Δεξιά (LTR)", |
DlgGenLangDirRtl : "Δεξιά προς Αριστερά (RTL)", |
DlgGenLangCode : "Κωδικός Γλώσσας", |
DlgGenAccessKey : "Συντόμευση (Access Key)", |
DlgGenName : "Όνομα", |
DlgGenTabIndex : "Tab Index", |
DlgGenLongDescr : "Αναλυτική περιγραφή URL", |
DlgGenClass : "Stylesheet Classes", |
DlgGenTitle : "Συμβουλευτικός τίτλος", |
DlgGenContType : "Συμβουλευτικός τίτλος περιεχομένου", |
DlgGenLinkCharset : "Linked Resource Charset", |
DlgGenStyle : "Στύλ", |
// Image Dialog |
DlgImgTitle : "Ιδιότητες Εικόνας", |
DlgImgInfoTab : "Πληροφορίες Εικόνας", |
DlgImgBtnUpload : "Αποστολή στον Διακομιστή", |
DlgImgURL : "URL", |
DlgImgUpload : "Αποστολή", |
DlgImgAlt : "Εναλλακτικό Κείμενο (ALT)", |
DlgImgWidth : "Πλάτος", |
DlgImgHeight : "Ύψος", |
DlgImgLockRatio : "Κλείδωμα Αναλογίας", |
DlgBtnResetSize : "Επαναφορά Αρχικού Μεγέθους", |
DlgImgBorder : "Περιθώριο", |
DlgImgHSpace : "Οριζόντιος Χώρος (HSpace)", |
DlgImgVSpace : "Κάθετος Χώρος (VSpace)", |
DlgImgAlign : "Ευθυγράμμιση (Align)", |
DlgImgAlignLeft : "Αριστερά", |
DlgImgAlignAbsBottom: "Απόλυτα Κάτω (Abs Bottom)", |
DlgImgAlignAbsMiddle: "Απόλυτα στη Μέση (Abs Middle)", |
DlgImgAlignBaseline : "Γραμμή Βάσης (Baseline)", |
DlgImgAlignBottom : "Κάτω (Bottom)", |
DlgImgAlignMiddle : "Μέση (Middle)", |
DlgImgAlignRight : "Δεξιά (Right)", |
DlgImgAlignTextTop : "Κορυφή Κειμένου (Text Top)", |
DlgImgAlignTop : "Πάνω (Top)", |
DlgImgPreview : "Προεπισκόπιση", |
DlgImgAlertUrl : "Εισάγετε την τοποθεσία (URL) της εικόνας", |
DlgImgLinkTab : "Σύνδεσμος", |
// Flash Dialog |
DlgFlashTitle : "Ιδιότητες flash", |
DlgFlashChkPlay : "Αυτόματη έναρξη", |
DlgFlashChkLoop : "Επανάληψη", |
DlgFlashChkMenu : "Ενεργοποίηση Flash Menu", |
DlgFlashScale : "Κλίμακα", |
DlgFlashScaleAll : "Εμφάνιση όλων", |
DlgFlashScaleNoBorder : "Χωρίς όρια", |
DlgFlashScaleFit : "Ακριβής εφαρμογή", |
// Link Dialog |
DlgLnkWindowTitle : "Σύνδεσμος (Link)", |
DlgLnkInfoTab : "Link", |
DlgLnkTargetTab : "Παράθυρο Στόχος (Target)", |
DlgLnkType : "Τύπος συνδέσμου (Link)", |
DlgLnkTypeURL : "URL", |
DlgLnkTypeAnchor : "Άγκυρα σε αυτή τη σελίδα", |
DlgLnkTypeEMail : "E-Mail", |
DlgLnkProto : "Προτόκολο", |
DlgLnkProtoOther : "<άλλο>", |
DlgLnkURL : "URL", |
DlgLnkAnchorSel : "Επιλέξτε μια άγκυρα", |
DlgLnkAnchorByName : "Βάσει του Ονόματος (Name) της άγκυρας", |
DlgLnkAnchorById : "Βάσει του Element Id", |
DlgLnkNoAnchors : "<Δεν υπάρχουν άγκυρες στο κείμενο>", |
DlgLnkEMail : "Διεύθυνση Ηλεκτρονικού Ταχυδρομείου", |
DlgLnkEMailSubject : "Θέμα Μηνύματος", |
DlgLnkEMailBody : "Κείμενο Μηνύματος", |
DlgLnkUpload : "Αποστολή", |
DlgLnkBtnUpload : "Αποστολή στον Διακομιστή", |
DlgLnkTarget : "Παράθυρο Στόχος (Target)", |
DlgLnkTargetFrame : "<πλαίσιο>", |
DlgLnkTargetPopup : "<παράθυρο popup>", |
DlgLnkTargetBlank : "Νέο Παράθυρο (_blank)", |
DlgLnkTargetParent : "Γονικό Παράθυρο (_parent)", |
DlgLnkTargetSelf : "Ίδιο Παράθυρο (_self)", |
DlgLnkTargetTop : "Ανώτατο Παράθυρο (_top)", |
DlgLnkTargetFrameName : "Όνομα πλαισίου στόχου", |
DlgLnkPopWinName : "Όνομα Popup Window", |
DlgLnkPopWinFeat : "Επιλογές Popup Window", |
DlgLnkPopResize : "Με αλλαγή Μεγέθους", |
DlgLnkPopLocation : "Μπάρα Τοποθεσίας", |
DlgLnkPopMenu : "Μπάρα Menu", |
DlgLnkPopScroll : "Μπάρες Κύλισης", |
DlgLnkPopStatus : "Μπάρα Status", |
DlgLnkPopToolbar : "Μπάρα Εργαλείων", |
DlgLnkPopFullScrn : "Ολόκληρη η Οθόνη (IE)", |
DlgLnkPopDependent : "Dependent (Netscape)", |
DlgLnkPopWidth : "Πλάτος", |
DlgLnkPopHeight : "Ύψος", |
DlgLnkPopLeft : "Τοποθεσία Αριστερής Άκρης", |
DlgLnkPopTop : "Τοποθεσία Πάνω Άκρης", |
DlnLnkMsgNoUrl : "Εισάγετε την τοποθεσία (URL) του υπερσυνδέσμου (Link)", |
DlnLnkMsgNoEMail : "Εισάγετε την διεύθυνση ηλεκτρονικού ταχυδρομείου", |
DlnLnkMsgNoAnchor : "Επιλέξτε ένα Anchor", |
DlnLnkMsgInvPopName : "Το όνομα του popup πρέπει να αρχίζει με χαρακτήρα της αλφαβήτου και να μην περιέχει κενά", |
// Color Dialog |
DlgColorTitle : "Επιλογή χρώματος", |
DlgColorBtnClear : "Καθαρισμός", |
DlgColorHighlight : "Προεπισκόπιση", |
DlgColorSelected : "Επιλεγμένο", |
// Smiley Dialog |
DlgSmileyTitle : "Επιλέξτε ένα Smiley", |
// Special Character Dialog |
DlgSpecialCharTitle : "Επιλέξτε ένα Ειδικό Σύμβολο", |
// Table Dialog |
DlgTableTitle : "Ιδιότητες Πίνακα", |
DlgTableRows : "Γραμμές", |
DlgTableColumns : "Κολώνες", |
DlgTableBorder : "Μέγεθος Περιθωρίου", |
DlgTableAlign : "Στοίχιση", |
DlgTableAlignNotSet : "<χωρίς>", |
DlgTableAlignLeft : "Αριστερά", |
DlgTableAlignCenter : "Κέντρο", |
DlgTableAlignRight : "Δεξιά", |
DlgTableWidth : "Πλάτος", |
DlgTableWidthPx : "pixels", |
DlgTableWidthPc : "\%", |
DlgTableHeight : "Ύψος", |
DlgTableCellSpace : "Απόσταση κελιών", |
DlgTableCellPad : "Γέμισμα κελιών", |
DlgTableCaption : "Υπέρτιτλος", |
DlgTableSummary : "Περίληψη", |
// Table Cell Dialog |
DlgCellTitle : "Ιδιότητες Κελιού", |
DlgCellWidth : "Πλάτος", |
DlgCellWidthPx : "pixels", |
DlgCellWidthPc : "\%", |
DlgCellHeight : "Ύψος", |
DlgCellWordWrap : "Με αλλαγή γραμμής", |
DlgCellWordWrapNotSet : "<χωρίς>", |
DlgCellWordWrapYes : "Ναι", |
DlgCellWordWrapNo : "Όχι", |
DlgCellHorAlign : "Οριζόντια Στοίχιση", |
DlgCellHorAlignNotSet : "<χωρίς>", |
DlgCellHorAlignLeft : "Αριστερά", |
DlgCellHorAlignCenter : "Κέντρο", |
DlgCellHorAlignRight: "Δεξιά", |
DlgCellVerAlign : "Κάθετη Στοίχιση", |
DlgCellVerAlignNotSet : "<χωρίς>", |
DlgCellVerAlignTop : "Πάνω (Top)", |
DlgCellVerAlignMiddle : "Μέση (Middle)", |
DlgCellVerAlignBottom : "Κάτω (Bottom)", |
DlgCellVerAlignBaseline : "Γραμμή Βάσης (Baseline)", |
DlgCellRowSpan : "Αριθμός Γραμμών (Rows Span)", |
DlgCellCollSpan : "Αριθμός Κολωνών (Columns Span)", |
DlgCellBackColor : "Χρώμα Υποβάθρου", |
DlgCellBorderColor : "Χρώμα Περιθωρίου", |
DlgCellBtnSelect : "Επιλογή...", |
// Find Dialog |
DlgFindTitle : "Αναζήτηση", |
DlgFindFindBtn : "Αναζήτηση", |
DlgFindNotFoundMsg : "Το κείμενο δεν βρέθηκε.", |
// Replace Dialog |
DlgReplaceTitle : "Αντικατάσταση", |
DlgReplaceFindLbl : "Αναζήτηση:", |
DlgReplaceReplaceLbl : "Αντικατάσταση με:", |
DlgReplaceCaseChk : "Έλεγχος πεζών/κεφαλαίων", |
DlgReplaceReplaceBtn : "Αντικατάσταση", |
DlgReplaceReplAllBtn : "Αντικατάσταση Όλων", |
DlgReplaceWordChk : "Εύρεση πλήρους λέξης", |
// Paste Operations / Dialog |
PasteErrorPaste : "Οι ρυθμίσεις ασφαλείας του φυλλομετρητή σας δεν επιτρέπουν την επιλεγμένη εργασία επικόλλησης. Χρησιμοποιείστε το πληκτρολόγιο (Ctrl+V).", |
PasteErrorCut : "Οι ρυθμίσεις ασφαλείας του φυλλομετρητή σας δεν επιτρέπουν την επιλεγμένη εργασία αποκοπής. Χρησιμοποιείστε το πληκτρολόγιο (Ctrl+X).", |
PasteErrorCopy : "Οι ρυθμίσεις ασφαλείας του φυλλομετρητή σας δεν επιτρέπουν την επιλεγμένη εργασία αντιγραφής. Χρησιμοποιείστε το πληκτρολόγιο (Ctrl+C).", |
PasteAsText : "Επικόλληση ως Απλό Κείμενο", |
PasteFromWord : "Επικόλληση από το Word", |
DlgPasteMsg2 : "Παρακαλώ επικολήστε στο ακόλουθο κουτί χρησιμοποιόντας το πληκτρολόγιο (<STRONG>Ctrl+V</STRONG>) και πατήστε <STRONG>OK</STRONG>.", |
DlgPasteIgnoreFont : "Αγνόηση προδιαγραφών γραμματοσειράς", |
DlgPasteRemoveStyles : "Αφαίρεση προδιαγραφών στύλ", |
DlgPasteCleanBox : "Κουτί εκαθάρισης", |
// Color Picker |
ColorAutomatic : "Αυτόματο", |
ColorMoreColors : "Περισσότερα χρώματα...", |
// Document Properties |
DocProps : "Ιδιότητες εγγράφου", |
// Anchor Dialog |
DlgAnchorTitle : "Ιδιότητες άγκυρας", |
DlgAnchorName : "Όνομα άγκυρας", |
DlgAnchorErrorName : "Παρακαλούμε εισάγετε όνομα άγκυρας", |
// Speller Pages Dialog |
DlgSpellNotInDic : "Δεν υπάρχει στο λεξικό", |
DlgSpellChangeTo : "Αλλαγή σε", |
DlgSpellBtnIgnore : "Αγνόηση", |
DlgSpellBtnIgnoreAll : "Αγνόηση όλων", |
DlgSpellBtnReplace : "Αντικατάσταση", |
DlgSpellBtnReplaceAll : "Αντικατάσταση όλων", |
DlgSpellBtnUndo : "Αναίρεση", |
DlgSpellNoSuggestions : "- Δεν υπάρχουν προτάσεις -", |
DlgSpellProgress : "Ορθογραφικός έλεγχος σε εξέλιξη...", |
DlgSpellNoMispell : "Ο ορθογραφικός έλεγχος ολοκληρώθηκε: Δεν βρέθηκαν λάθη", |
DlgSpellNoChanges : "Ο ορθογραφικός έλεγχος ολοκληρώθηκε: Δεν άλλαξαν λέξεις", |
DlgSpellOneChange : "Ο ορθογραφικός έλεγχος ολοκληρώθηκε: Μια λέξη άλλαξε", |
DlgSpellManyChanges : "Ο ορθογραφικός έλεγχος ολοκληρώθηκε: %1 λέξεις άλλαξαν", |
IeSpellDownload : "Δεν υπάρχει εγκατεστημένος ορθογράφος. Θέλετε να τον κατεβάσετε τώρα;", |
// Button Dialog |
DlgButtonText : "Κείμενο (Τιμή)", |
DlgButtonType : "Τύπος", |
DlgButtonTypeBtn : "Κουμπί", |
DlgButtonTypeSbm : "Καταχώρηση", |
DlgButtonTypeRst : "Επαναφορά", |
// Checkbox and Radio Button Dialogs |
DlgCheckboxName : "Όνομα", |
DlgCheckboxValue : "Τιμή", |
DlgCheckboxSelected : "Επιλεγμένο", |
// Form Dialog |
DlgFormName : "Όνομα", |
DlgFormAction : "Δράση", |
DlgFormMethod : "Μάθοδος", |
// Select Field Dialog |
DlgSelectName : "Όνομα", |
DlgSelectValue : "Τιμή", |
DlgSelectSize : "Μέγεθος", |
DlgSelectLines : "γραμμές", |
DlgSelectChkMulti : "Πολλαπλές επιλογές", |
DlgSelectOpAvail : "Διαθέσιμες επιλογές", |
DlgSelectOpText : "Κείμενο", |
DlgSelectOpValue : "Τιμή", |
DlgSelectBtnAdd : "Προσθήκη", |
DlgSelectBtnModify : "Αλλαγή", |
DlgSelectBtnUp : "Πάνω", |
DlgSelectBtnDown : "Κάτω", |
DlgSelectBtnSetValue : "Προεπιλεγμένη επιλογή", |
DlgSelectBtnDelete : "Διαγραφή", |
// Textarea Dialog |
DlgTextareaName : "Όνομα", |
DlgTextareaCols : "Στήλες", |
DlgTextareaRows : "Σειρές", |
// Text Field Dialog |
DlgTextName : "Όνομα", |
DlgTextValue : "Τιμή", |
DlgTextCharWidth : "Μήκος χαρακτήρων", |
DlgTextMaxChars : "Μέγιστοι χαρακτήρες", |
DlgTextType : "Τύπος", |
DlgTextTypeText : "Κείμενο", |
DlgTextTypePass : "Κωδικός", |
// Hidden Field Dialog |
DlgHiddenName : "Όνομα", |
DlgHiddenValue : "Τιμή", |
// Bulleted List Dialog |
BulletedListProp : "Ιδιότητες λίστας Bulleted", |
NumberedListProp : "Ιδιότητες αριθμημένης λίστας ", |
DlgLstStart : "Αρχή", |
DlgLstType : "Τύπος", |
DlgLstTypeCircle : "Κύκλος", |
DlgLstTypeDisc : "Δίσκος", |
DlgLstTypeSquare : "Τετράγωνο", |
DlgLstTypeNumbers : "Αριθμοί (1, 2, 3)", |
DlgLstTypeLCase : "Πεζά γράμματα (a, b, c)", |
DlgLstTypeUCase : "Κεφαλαία γράμματα (A, B, C)", |
DlgLstTypeSRoman : "Μικρά λατινικά αριθμητικά (i, ii, iii)", |
DlgLstTypeLRoman : "Μεγάλα λατινικά αριθμητικά (I, II, III)", |
// Document Properties Dialog |
DlgDocGeneralTab : "Γενικά", |
DlgDocBackTab : "Φόντο", |
DlgDocColorsTab : "Χρώματα και περιθώρια", |
DlgDocMetaTab : "Δεδομένα Meta", |
DlgDocPageTitle : "Τίτλος σελίδας", |
DlgDocLangDir : "Κατεύθυνση γραφής", |
DlgDocLangDirLTR : "αριστερά προς δεξιά (LTR)", |
DlgDocLangDirRTL : "δεξιά προς αριστερά (RTL)", |
DlgDocLangCode : "Κωδικός γλώσσας", |
DlgDocCharSet : "Κωδικοποίηση χαρακτήρων", |
DlgDocCharSetCE : "Κεντρικής Ευρώπης", |
DlgDocCharSetCT : "Παραδοσιακά κινέζικα (Big5)", |
DlgDocCharSetCR : "Κυριλλική", |
DlgDocCharSetGR : "Ελληνική", |
DlgDocCharSetJP : "Ιαπωνική", |
DlgDocCharSetKR : "Κορεάτικη", |
DlgDocCharSetTR : "Τουρκική", |
DlgDocCharSetUN : "Διεθνής (UTF-8)", |
DlgDocCharSetWE : "Δυτικής Ευρώπης", |
DlgDocCharSetOther : "Άλλη κωδικοποίηση χαρακτήρων", |
DlgDocDocType : "Επικεφαλίδα τύπου εγγράφου", |
DlgDocDocTypeOther : "Άλλη επικεφαλίδα τύπου εγγράφου", |
DlgDocIncXHTML : "Να συμπεριληφθούν οι δηλώσεις XHTML", |
DlgDocBgColor : "Χρώμα φόντου", |
DlgDocBgImage : "Διεύθυνση εικόνας φόντου", |
DlgDocBgNoScroll : "Φόντο χωρίς κύλιση", |
DlgDocCText : "Κείμενο", |
DlgDocCLink : "Σύνδεσμος", |
DlgDocCVisited : "Σύνδεσμος που έχει επισκευθεί", |
DlgDocCActive : "Ενεργός σύνδεσμος", |
DlgDocMargins : "Περιθώρια σελίδας", |
DlgDocMaTop : "Κορυφή", |
DlgDocMaLeft : "Αριστερά", |
DlgDocMaRight : "Δεξιά", |
DlgDocMaBottom : "Κάτω", |
DlgDocMeIndex : "Λέξεις κλειδιά δείκτες εγγράφου (διαχωρισμός με κόμμα)", |
DlgDocMeDescr : "Περιγραφή εγγράφου", |
DlgDocMeAuthor : "Συγγραφέας", |
DlgDocMeCopy : "Πνευματικά δικαιώματα", |
DlgDocPreview : "Προεπισκόπηση", |
// Templates Dialog |
Templates : "Πρότυπα", |
DlgTemplatesTitle : "Πρότυπα περιεχομένου", |
DlgTemplatesSelMsg : "Παρακαλώ επιλέξτε πρότυπο για εισαγωγή στο πρόγραμμα<br>(τα υπάρχοντα περιεχόμενα θα χαθούν):", |
DlgTemplatesLoading : "Φόρτωση καταλόγου προτύπων. Παρακαλώ περιμένετε...", |
DlgTemplatesNoTpl : "(Δεν έχουν καθοριστεί πρότυπα)", |
DlgTemplatesReplace : "Αντικατάσταση υπάρχοντων περιεχομένων", |
// About Dialog |
DlgAboutAboutTab : "Σχετικά", |
DlgAboutBrowserInfoTab : "Πληροφορίες Browser", |
DlgAboutLicenseTab : "Άδεια", |
DlgAboutVersion : "έκδοση", |
DlgAboutLicense : "Άδεια χρήσης υπό τους όρους της GNU Lesser General Public License", |
DlgAboutInfo : "Για περισσότερες πληροφορίες" |
} |
/branches/v1.0-menes/api/fckeditor/editor/lang/gl.js |
---|
New file |
0,0 → 1,501 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: gl.js |
* Galician language file. |
* |
* File Authors: |
* Fernando Riveiro Lopez |
*/ |
var FCKLang = |
{ |
// Language direction : "ltr" (left to right) or "rtl" (right to left). |
Dir : "ltr", |
ToolbarCollapse : "Ocultar Ferramentas", |
ToolbarExpand : "Mostrar Ferramentas", |
// Toolbar Items and Context Menu |
Save : "Gardar", |
NewPage : "Nova Páxina", |
Preview : "Vista Previa", |
Cut : "Cortar", |
Copy : "Copiar", |
Paste : "Pegar", |
PasteText : "Pegar como texto plano", |
PasteWord : "Pegar dende Word", |
Print : "Imprimir", |
SelectAll : "Seleccionar todo", |
RemoveFormat : "Eliminar Formato", |
InsertLinkLbl : "Ligazón", |
InsertLink : "Inserir/Editar Ligazón", |
RemoveLink : "Eliminar Ligazón", |
Anchor : "Inserir/Editar Referencia", |
InsertImageLbl : "Imaxe", |
InsertImage : "Inserir/Editar Imaxe", |
InsertFlashLbl : "Flash", |
InsertFlash : "Inserir/Editar Flash", |
InsertTableLbl : "Tabla", |
InsertTable : "Inserir/Editar Tabla", |
InsertLineLbl : "Liña", |
InsertLine : "Inserir Liña Horizontal", |
InsertSpecialCharLbl: "Carácter Special", |
InsertSpecialChar : "Inserir Carácter Especial", |
InsertSmileyLbl : "Smiley", |
InsertSmiley : "Inserir Smiley", |
About : "Acerca de FCKeditor", |
Bold : "Negrita", |
Italic : "Cursiva", |
Underline : "Sub-raiado", |
StrikeThrough : "Tachado", |
Subscript : "Subíndice", |
Superscript : "Superíndice", |
LeftJustify : "Aliñar á Esquerda", |
CenterJustify : "Centrado", |
RightJustify : "Aliñar á Dereita", |
BlockJustify : "Xustificado", |
DecreaseIndent : "Disminuir Sangría", |
IncreaseIndent : "Aumentar Sangría", |
Undo : "Desfacer", |
Redo : "Refacer", |
NumberedListLbl : "Lista Numerada", |
NumberedList : "Inserir/Eliminar Lista Numerada", |
BulletedListLbl : "Marcas", |
BulletedList : "Inserir/Eliminar Marcas", |
ShowTableBorders : "Mostrar Bordes das Táboas", |
ShowDetails : "Mostrar Marcas Parágrafo", |
Style : "Estilo", |
FontFormat : "Formato", |
Font : "Tipo", |
FontSize : "Tamaño", |
TextColor : "Cor do Texto", |
BGColor : "Cor do Fondo", |
Source : "Código Fonte", |
Find : "Procurar", |
Replace : "Substituir", |
SpellCheck : "Corrección Ortográfica", |
UniversalKeyboard : "Teclado Universal", |
PageBreakLbl : "Salto de Páxina", |
PageBreak : "Inserir Salto de Páxina", |
Form : "Formulario", |
Checkbox : "Cadro de Verificación", |
RadioButton : "Botón de Radio", |
TextField : "Campo de Texto", |
Textarea : "Área de Texto", |
HiddenField : "Campo Oculto", |
Button : "Botón", |
SelectionField : "Campo de Selección", |
ImageButton : "Botón de Imaxe", |
FitWindow : "Maximizar o tamaño do editor", |
// Context Menu |
EditLink : "Editar Ligazón", |
CellCM : "Cela", |
RowCM : "Fila", |
ColumnCM : "Columna", |
InsertRow : "Inserir Fila", |
DeleteRows : "Borrar Filas", |
InsertColumn : "Inserir Columna", |
DeleteColumns : "Borrar Columnas", |
InsertCell : "Inserir Cela", |
DeleteCells : "Borrar Cela", |
MergeCells : "Unir Celas", |
SplitCell : "Partir Celas", |
TableDelete : "Borrar Táboa", |
CellProperties : "Propriedades da Cela", |
TableProperties : "Propriedades da Táboa", |
ImageProperties : "Propriedades Imaxe", |
FlashProperties : "Propriedades Flash", |
AnchorProp : "Propriedades da Referencia", |
ButtonProp : "Propriedades do Botón", |
CheckboxProp : "Propriedades do Cadro de Verificación", |
HiddenFieldProp : "Propriedades do Campo Oculto", |
RadioButtonProp : "Propriedades do Botón de Radio", |
ImageButtonProp : "Propriedades do Botón de Imaxe", |
TextFieldProp : "Propriedades do Campo de Texto", |
SelectionFieldProp : "Propriedades do Campo de Selección", |
TextareaProp : "Propriedades da Área de Texto", |
FormProp : "Propriedades do Formulario", |
FontFormats : "Normal;Formateado;Enderezo;Enacabezado 1;Encabezado 2;Encabezado 3;Encabezado 4;Encabezado 5;Encabezado 6;Paragraph (DIV)", |
// Alerts and Messages |
ProcessingXHTML : "Procesando XHTML. Por facor, agarde...", |
Done : "Feiro", |
PasteWordConfirm : "Parece que o texto que quere pegar está copiado do Word.¿Quere limpar o formato antes de pegalo?", |
NotCompatiblePaste : "Este comando está disponible para Internet Explorer versión 5.5 ou superior. ¿Quere pegalo sen limpar o formato?", |
UnknownToolbarItem : "Ítem de ferramentas descoñecido \"%1\"", |
UnknownCommand : "Nome de comando descoñecido \"%1\"", |
NotImplemented : "Comando non implementado", |
UnknownToolbarSet : "O conxunto de ferramentas \"%1\" non existe", |
NoActiveX : "As opcións de seguridade do seu navegador poderían limitar algunha das características de editor. Debe activar a opción \"Executar controis ActiveX e plug-ins\". Pode notar que faltan características e experimentar erros", |
BrowseServerBlocked : "Non se poido abrir o navegador de recursos. Asegúrese de que están desactivados os bloqueadores de xanelas emerxentes", |
DialogBlocked : "Non foi posible abrir a xanela de diálogo. Asegúrese de que están desactivados os bloqueadores de xanelas emerxentes", |
// Dialogs |
DlgBtnOK : "OK", |
DlgBtnCancel : "Cancelar", |
DlgBtnClose : "Pechar", |
DlgBtnBrowseServer : "Navegar no Servidor", |
DlgAdvancedTag : "Advanzado", |
DlgOpOther : "<Outro>", |
DlgInfoTab : "Info", |
DlgAlertUrl : "Por favor, insira a URL", |
// General Dialogs Labels |
DlgGenNotSet : "<non definido>", |
DlgGenId : "Id", |
DlgGenLangDir : "Orientación do Idioma", |
DlgGenLangDirLtr : "Esquerda a Dereita (LTR)", |
DlgGenLangDirRtl : "Dereita a Esquerda (RTL)", |
DlgGenLangCode : "Código do Idioma", |
DlgGenAccessKey : "Chave de Acceso", |
DlgGenName : "Nome", |
DlgGenTabIndex : "Índice de Tabulación", |
DlgGenLongDescr : "Descrición Completa da URL", |
DlgGenClass : "Clases da Folla de Estilos", |
DlgGenTitle : "Título", |
DlgGenContType : "Tipo de Contido", |
DlgGenLinkCharset : "Fonte de Caracteres Vinculado", |
DlgGenStyle : "Estilo", |
// Image Dialog |
DlgImgTitle : "Propriedades da Imaxe", |
DlgImgInfoTab : "Información da Imaxe", |
DlgImgBtnUpload : "Enviar ó Servidor", |
DlgImgURL : "URL", |
DlgImgUpload : "Carregar", |
DlgImgAlt : "Texto Alternativo", |
DlgImgWidth : "Largura", |
DlgImgHeight : "Altura", |
DlgImgLockRatio : "Proporcional", |
DlgBtnResetSize : "Tamaño Orixinal", |
DlgImgBorder : "Límite", |
DlgImgHSpace : "Esp. Horiz.", |
DlgImgVSpace : "Esp. Vert.", |
DlgImgAlign : "Aliñamento", |
DlgImgAlignLeft : "Esquerda", |
DlgImgAlignAbsBottom: "Abs Inferior", |
DlgImgAlignAbsMiddle: "Abs Centro", |
DlgImgAlignBaseline : "Liña Base", |
DlgImgAlignBottom : "Pé", |
DlgImgAlignMiddle : "Centro", |
DlgImgAlignRight : "Dereita", |
DlgImgAlignTextTop : "Tope do Texto", |
DlgImgAlignTop : "Tope", |
DlgImgPreview : "Vista Previa", |
DlgImgAlertUrl : "Por favor, escriba a URL da imaxe", |
DlgImgLinkTab : "Ligazón", |
// Flash Dialog |
DlgFlashTitle : "Propriedades Flash", |
DlgFlashChkPlay : "Auto Execución", |
DlgFlashChkLoop : "Bucle", |
DlgFlashChkMenu : "Activar Menú Flash", |
DlgFlashScale : "Escalar", |
DlgFlashScaleAll : "Amosar Todo", |
DlgFlashScaleNoBorder : "Sen Borde", |
DlgFlashScaleFit : "Encaixar axustando", |
// Link Dialog |
DlgLnkWindowTitle : "Ligazón", |
DlgLnkInfoTab : "Información da Ligazón", |
DlgLnkTargetTab : "Referencia a esta páxina", |
DlgLnkType : "Tipo de Ligazón", |
DlgLnkTypeURL : "URL", |
DlgLnkTypeAnchor : "Referencia nesta páxina", |
DlgLnkTypeEMail : "E-Mail", |
DlgLnkProto : "Protocolo", |
DlgLnkProtoOther : "<outro>", |
DlgLnkURL : "URL", |
DlgLnkAnchorSel : "Seleccionar unha Referencia", |
DlgLnkAnchorByName : "Por Nome de Referencia", |
DlgLnkAnchorById : "Por Element Id", |
DlgLnkNoAnchors : "<Non hai referencias disponibles no documento>", |
DlgLnkEMail : "Enderezo de E-Mail", |
DlgLnkEMailSubject : "Asunto do Mensaxe", |
DlgLnkEMailBody : "Corpo do Mensaxe", |
DlgLnkUpload : "Carregar", |
DlgLnkBtnUpload : "Enviar ó servidor", |
DlgLnkTarget : "Destino", |
DlgLnkTargetFrame : "<frame>", |
DlgLnkTargetPopup : "<Xanela Emerxente>", |
DlgLnkTargetBlank : "Nova Xanela (_blank)", |
DlgLnkTargetParent : "Xanela Pai (_parent)", |
DlgLnkTargetSelf : "Mesma Xanela (_self)", |
DlgLnkTargetTop : "Xanela Primaria (_top)", |
DlgLnkTargetFrameName : "Nome do Marco Destino", |
DlgLnkPopWinName : "Nome da Xanela Emerxente", |
DlgLnkPopWinFeat : "Características da Xanela Emerxente", |
DlgLnkPopResize : "Axustable", |
DlgLnkPopLocation : "Barra de Localización", |
DlgLnkPopMenu : "Barra de Menú", |
DlgLnkPopScroll : "Barras de Desplazamento", |
DlgLnkPopStatus : "Barra de Estado", |
DlgLnkPopToolbar : "Barra de Ferramentas", |
DlgLnkPopFullScrn : "A Toda Pantalla (IE)", |
DlgLnkPopDependent : "Dependente (Netscape)", |
DlgLnkPopWidth : "Largura", |
DlgLnkPopHeight : "Altura", |
DlgLnkPopLeft : "Posición Esquerda", |
DlgLnkPopTop : "Posición dende Arriba", |
DlnLnkMsgNoUrl : "Por favor, escriba a ligazón URL", |
DlnLnkMsgNoEMail : "Por favor, escriba o enderezo de e-mail", |
DlnLnkMsgNoAnchor : "Por favor, seleccione un destino", |
DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING |
// Color Dialog |
DlgColorTitle : "Seleccionar Color", |
DlgColorBtnClear : "Nengunha", |
DlgColorHighlight : "Destacado", |
DlgColorSelected : "Seleccionado", |
// Smiley Dialog |
DlgSmileyTitle : "Inserte un Smiley", |
// Special Character Dialog |
DlgSpecialCharTitle : "Seleccione Caracter Especial", |
// Table Dialog |
DlgTableTitle : "Propiedades da Táboa", |
DlgTableRows : "Filas", |
DlgTableColumns : "Columnas", |
DlgTableBorder : "Tamaño do Borde", |
DlgTableAlign : "Aliñamento", |
DlgTableAlignNotSet : "<Non Definido>", |
DlgTableAlignLeft : "Esquerda", |
DlgTableAlignCenter : "Centro", |
DlgTableAlignRight : "Ereita", |
DlgTableWidth : "Largura", |
DlgTableWidthPx : "pixels", |
DlgTableWidthPc : "percent", |
DlgTableHeight : "Altura", |
DlgTableCellSpace : "Marxe entre Celas", |
DlgTableCellPad : "Marxe interior", |
DlgTableCaption : "Título", |
DlgTableSummary : "Sumario", |
// Table Cell Dialog |
DlgCellTitle : "Propriedades da Cela", |
DlgCellWidth : "Largura", |
DlgCellWidthPx : "pixels", |
DlgCellWidthPc : "percent", |
DlgCellHeight : "Altura", |
DlgCellWordWrap : "Axustar Liñas", |
DlgCellWordWrapNotSet : "<Non Definido>", |
DlgCellWordWrapYes : "Si", |
DlgCellWordWrapNo : "Non", |
DlgCellHorAlign : "Aliñamento Horizontal", |
DlgCellHorAlignNotSet : "<Non definido>", |
DlgCellHorAlignLeft : "Esquerda", |
DlgCellHorAlignCenter : "Centro", |
DlgCellHorAlignRight: "Dereita", |
DlgCellVerAlign : "Aliñamento Vertical", |
DlgCellVerAlignNotSet : "<Non definido>", |
DlgCellVerAlignTop : "Arriba", |
DlgCellVerAlignMiddle : "Medio", |
DlgCellVerAlignBottom : "Abaixo", |
DlgCellVerAlignBaseline : "Liña de Base", |
DlgCellRowSpan : "Ocupar Filas", |
DlgCellCollSpan : "Ocupar Columnas", |
DlgCellBackColor : "Color de Fondo", |
DlgCellBorderColor : "Color de Borde", |
DlgCellBtnSelect : "Seleccionar...", |
// Find Dialog |
DlgFindTitle : "Procurar", |
DlgFindFindBtn : "Procurar", |
DlgFindNotFoundMsg : "Non te atopou o texto indicado.", |
// Replace Dialog |
DlgReplaceTitle : "Substituir", |
DlgReplaceFindLbl : "Texto a procurar:", |
DlgReplaceReplaceLbl : "Substituir con:", |
DlgReplaceCaseChk : "Coincidir Mai./min.", |
DlgReplaceReplaceBtn : "Substituir", |
DlgReplaceReplAllBtn : "Substitiur Todo", |
DlgReplaceWordChk : "Coincidir con toda a palabra", |
// Paste Operations / Dialog |
PasteErrorPaste : "Os axustes de seguridade do seu navegador non permiten que o editor realice automáticamente as tarefas de pegado. Por favor, use o teclado para iso (Ctrl+V).", |
PasteErrorCut : "Os axustes de seguridade do seu navegador non permiten que o editor realice automáticamente as tarefas de corte. Por favor, use o teclado para iso (Ctrl+X).", |
PasteErrorCopy : "Os axustes de seguridade do seu navegador non permiten que o editor realice automáticamente as tarefas de copia. Por favor, use o teclado para iso (Ctrl+C).", |
PasteAsText : "Pegar como texto plano", |
PasteFromWord : "Pegar dende Word", |
DlgPasteMsg2 : "Por favor, pegue dentro do seguinte cadro usando o teclado (<STRONG>Ctrl+V</STRONG>) e pulse <STRONG>OK</STRONG>.", |
DlgPasteIgnoreFont : "Ignorar as definicións de Tipografía", |
DlgPasteRemoveStyles : "Eliminar as definicións de Estilos", |
DlgPasteCleanBox : "Limpar o Cadro", |
// Color Picker |
ColorAutomatic : "Automático", |
ColorMoreColors : "Máis Cores...", |
// Document Properties |
DocProps : "Propriedades do Documento", |
// Anchor Dialog |
DlgAnchorTitle : "Propriedades da Referencia", |
DlgAnchorName : "Nome da Referencia", |
DlgAnchorErrorName : "Por favor, escriba o nome da referencia", |
// Speller Pages Dialog |
DlgSpellNotInDic : "Non está no diccionario", |
DlgSpellChangeTo : "Cambiar a", |
DlgSpellBtnIgnore : "Ignorar", |
DlgSpellBtnIgnoreAll : "Ignorar Todas", |
DlgSpellBtnReplace : "Substituir", |
DlgSpellBtnReplaceAll : "Substituir Todas", |
DlgSpellBtnUndo : "Desfacer", |
DlgSpellNoSuggestions : "- Sen candidatos -", |
DlgSpellProgress : "Corrección ortográfica en progreso...", |
DlgSpellNoMispell : "Corrección ortográfica rematada: Non se atoparon erros", |
DlgSpellNoChanges : "Corrección ortográfica rematada: Non se substituiu nengunha verba", |
DlgSpellOneChange : "Corrección ortográfica rematada: Unha verba substituida", |
DlgSpellManyChanges : "Corrección ortográfica rematada: %1 verbas substituidas", |
IeSpellDownload : "O corrector ortográfico non está instalado. ¿Quere descargalo agora?", |
// Button Dialog |
DlgButtonText : "Texto (Valor)", |
DlgButtonType : "Tipo", |
DlgButtonTypeBtn : "Button", //MISSING |
DlgButtonTypeSbm : "Submit", //MISSING |
DlgButtonTypeRst : "Reset", //MISSING |
// Checkbox and Radio Button Dialogs |
DlgCheckboxName : "Nome", |
DlgCheckboxValue : "Valor", |
DlgCheckboxSelected : "Seleccionado", |
// Form Dialog |
DlgFormName : "Nome", |
DlgFormAction : "Acción", |
DlgFormMethod : "Método", |
// Select Field Dialog |
DlgSelectName : "Nome", |
DlgSelectValue : "Valor", |
DlgSelectSize : "Tamaño", |
DlgSelectLines : "liñas", |
DlgSelectChkMulti : "Permitir múltiples seleccións", |
DlgSelectOpAvail : "Opcións Disponibles", |
DlgSelectOpText : "Texto", |
DlgSelectOpValue : "Valor", |
DlgSelectBtnAdd : "Engadir", |
DlgSelectBtnModify : "Modificar", |
DlgSelectBtnUp : "Subir", |
DlgSelectBtnDown : "Baixar", |
DlgSelectBtnSetValue : "Definir como valor por defecto", |
DlgSelectBtnDelete : "Borrar", |
// Textarea Dialog |
DlgTextareaName : "Nome", |
DlgTextareaCols : "Columnas", |
DlgTextareaRows : "Filas", |
// Text Field Dialog |
DlgTextName : "Nome", |
DlgTextValue : "Valor", |
DlgTextCharWidth : "Tamaño do Caracter", |
DlgTextMaxChars : "Máximo de Caracteres", |
DlgTextType : "Tipo", |
DlgTextTypeText : "Texto", |
DlgTextTypePass : "Chave", |
// Hidden Field Dialog |
DlgHiddenName : "Nome", |
DlgHiddenValue : "Valor", |
// Bulleted List Dialog |
BulletedListProp : "Propriedades das Marcas", |
NumberedListProp : "Propriedades da Lista de Numeración", |
DlgLstStart : "Start", //MISSING |
DlgLstType : "Tipo", |
DlgLstTypeCircle : "Círculo", |
DlgLstTypeDisc : "Disco", |
DlgLstTypeSquare : "Cuadrado", |
DlgLstTypeNumbers : "Números (1, 2, 3)", |
DlgLstTypeLCase : "Letras Minúsculas (a, b, c)", |
DlgLstTypeUCase : "Letras Maiúsculas (A, B, C)", |
DlgLstTypeSRoman : "Números Romanos en minúscula (i, ii, iii)", |
DlgLstTypeLRoman : "Números Romanos en Maiúscula (I, II, III)", |
// Document Properties Dialog |
DlgDocGeneralTab : "Xeral", |
DlgDocBackTab : "Fondo", |
DlgDocColorsTab : "Cores e Marxes", |
DlgDocMetaTab : "Meta Data", |
DlgDocPageTitle : "Título da Páxina", |
DlgDocLangDir : "Orientación do Idioma", |
DlgDocLangDirLTR : "Esquerda a Dereita (LTR)", |
DlgDocLangDirRTL : "Dereita a Esquerda (RTL)", |
DlgDocLangCode : "Código de Idioma", |
DlgDocCharSet : "Codificación do Xogo de Caracteres", |
DlgDocCharSetCE : "Central European", //MISSING |
DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING |
DlgDocCharSetCR : "Cyrillic", //MISSING |
DlgDocCharSetGR : "Greek", //MISSING |
DlgDocCharSetJP : "Japanese", //MISSING |
DlgDocCharSetKR : "Korean", //MISSING |
DlgDocCharSetTR : "Turkish", //MISSING |
DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING |
DlgDocCharSetWE : "Western European", //MISSING |
DlgDocCharSetOther : "Outra Codificación do Xogo de Caracteres", |
DlgDocDocType : "Encabezado do Tipo de Documento", |
DlgDocDocTypeOther : "Outro Encabezado do Tipo de Documento", |
DlgDocIncXHTML : "Incluir Declaracións XHTML", |
DlgDocBgColor : "Cor de Fondo", |
DlgDocBgImage : "URL da Imaxe de Fondo", |
DlgDocBgNoScroll : "Fondo Fixo", |
DlgDocCText : "Texto", |
DlgDocCLink : "Ligazóns", |
DlgDocCVisited : "Ligazón Visitada", |
DlgDocCActive : "Ligazón Activa", |
DlgDocMargins : "Marxes da Páxina", |
DlgDocMaTop : "Arriba", |
DlgDocMaLeft : "Esquerda", |
DlgDocMaRight : "Dereita", |
DlgDocMaBottom : "Abaixo", |
DlgDocMeIndex : "Palabras Chave de Indexación do Documento (separadas por comas)", |
DlgDocMeDescr : "Descripción do Documento", |
DlgDocMeAuthor : "Autor", |
DlgDocMeCopy : "Copyright", |
DlgDocPreview : "Vista Previa", |
// Templates Dialog |
Templates : "Plantillas", |
DlgTemplatesTitle : "Plantillas de Contido", |
DlgTemplatesSelMsg : "Por favor, seleccione a plantilla a abrir no editor<br>(o contido actual perderase):", |
DlgTemplatesLoading : "Cargando listado de plantillas. Por favor, espere...", |
DlgTemplatesNoTpl : "(Non hai plantillas definidas)", |
DlgTemplatesReplace : "Replace actual contents", //MISSING |
// About Dialog |
DlgAboutAboutTab : "Acerca de", |
DlgAboutBrowserInfoTab : "Información do Navegador", |
DlgAboutLicenseTab : "Licencia", |
DlgAboutVersion : "versión", |
DlgAboutLicense : "Licencia concedida baixo os termos da GNU Lesser General Public License", |
DlgAboutInfo : "Para máis información visitar:" |
} |
/branches/v1.0-menes/api/fckeditor/editor/lang/ar.js |
---|
New file |
0,0 → 1,502 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: ar.js |
* Arabic language file. |
* |
* File Authors: |
* Abdul-Aziz Abdul-Kareem Al-Oraij (http://aziz.oraij.com) |
* Abu Faisal (http://www.24at24.com) |
*/ |
var FCKLang = |
{ |
// Language direction : "ltr" (left to right) or "rtl" (right to left). |
Dir : "rtl", |
ToolbarCollapse : "ضم شريط الأدوات", |
ToolbarExpand : "تمدد شريط الأدوات", |
// Toolbar Items and Context Menu |
Save : "حفظ", |
NewPage : "صفحة جديدة", |
Preview : "معاينة الصفحة", |
Cut : "قص", |
Copy : "نسخ", |
Paste : "لصق", |
PasteText : "لصق كنص بسيط", |
PasteWord : "لصق من وورد", |
Print : "طباعة", |
SelectAll : "تحديد الكل", |
RemoveFormat : "إزالة التنسيقات", |
InsertLinkLbl : "رابط", |
InsertLink : "إدراج/تحرير رابط", |
RemoveLink : "إزالة رابط", |
Anchor : "إدراج/تحرير إشارة مرجعية", |
InsertImageLbl : "صورة", |
InsertImage : "إدراج/تحرير صورة", |
InsertFlashLbl : "فلاش", |
InsertFlash : "إدراج/تحرير فيلم فلاش", |
InsertTableLbl : "جدول", |
InsertTable : "إدراج/تحرير جدول", |
InsertLineLbl : "خط فاصل", |
InsertLine : "إدراج خط فاصل", |
InsertSpecialCharLbl: "رموز", |
InsertSpecialChar : "إدراج رموز..ِ", |
InsertSmileyLbl : "ابتسامات", |
InsertSmiley : "إدراج ابتسامات", |
About : "حول FCKeditor", |
Bold : "غامق", |
Italic : "مائل", |
Underline : "تسطير", |
StrikeThrough : "يتوسطه خط", |
Subscript : "منخفض", |
Superscript : "مرتفع", |
LeftJustify : "محاذاة إلى اليسار", |
CenterJustify : "توسيط", |
RightJustify : "محاذاة إلى اليمين", |
BlockJustify : "ضبط", |
DecreaseIndent : "إنقاص المسافة البادئة", |
IncreaseIndent : "زيادة المسافة البادئة", |
Undo : "تراجع", |
Redo : "إعادة", |
NumberedListLbl : "تعداد رقمي", |
NumberedList : "إدراج/إلغاء تعداد رقمي", |
BulletedListLbl : "تعداد نقطي", |
BulletedList : "إدراج/إلغاء تعداد نقطي", |
ShowTableBorders : "معاينة حدود الجداول", |
ShowDetails : "معاينة التفاصيل", |
Style : "نمط", |
FontFormat : "تنسيق", |
Font : "خط", |
FontSize : "حجم الخط", |
TextColor : "لون النص", |
BGColor : "لون الخلفية", |
Source : "شفرة المصدر", |
Find : "بحث", |
Replace : "إستبدال", |
SpellCheck : "تدقيق إملائي", |
UniversalKeyboard : "لوحة المفاتيح العالمية", |
PageBreakLbl : "فصل الصفحة", |
PageBreak : "إدخال صفحة جديدة", |
Form : "نموذج", |
Checkbox : "خانة إختيار", |
RadioButton : "زر خيار", |
TextField : "مربع نص", |
Textarea : "ناحية نص", |
HiddenField : "إدراج حقل خفي", |
Button : "زر ضغط", |
SelectionField : "قائمة منسدلة", |
ImageButton : "زر صورة", |
FitWindow : "تكبير حجم المحرر", |
// Context Menu |
EditLink : "تحرير رابط", |
CellCM : "خلية", |
RowCM : "صف", |
ColumnCM : "عمود", |
InsertRow : "إدراج صف", |
DeleteRows : "حذف صفوف", |
InsertColumn : "إدراج عمود", |
DeleteColumns : "حذف أعمدة", |
InsertCell : "إدراج خلية", |
DeleteCells : "حذف خلايا", |
MergeCells : "دمج خلايا", |
SplitCell : "تقسيم خلية", |
TableDelete : "حذف الجدول", |
CellProperties : "خصائص الخلية", |
TableProperties : "خصائص الجدول", |
ImageProperties : "خصائص الصورة", |
FlashProperties : "خصائص فيلم الفلاش", |
AnchorProp : "خصائص الإشارة المرجعية", |
ButtonProp : "خصائص زر الضغط", |
CheckboxProp : "خصائص خانة الإختيار", |
HiddenFieldProp : "خصائص الحقل الخفي", |
RadioButtonProp : "خصائص زر الخيار", |
ImageButtonProp : "خصائص زر الصورة", |
TextFieldProp : "خصائص مربع النص", |
SelectionFieldProp : "خصائص القائمة المنسدلة", |
TextareaProp : "خصائص ناحية النص", |
FormProp : "خصائص النموذج", |
FontFormats : "عادي;منسّق;دوس;العنوان 1;العنوان 2;العنوان 3;العنوان 4;العنوان 5;العنوان 6", |
// Alerts and Messages |
ProcessingXHTML : "إنتظر قليلاً ريثما تتم معالَجة XHTML. لن يستغرق طويلاً...", |
Done : "تم", |
PasteWordConfirm : "يبدو أن النص المراد لصقه منسوخ من برنامج وورد. هل تود تنظيفه قبل الشروع في عملية اللصق؟", |
NotCompatiblePaste : "هذه الميزة تحتاج لمتصفح من النوعInternet Explorer إصدار 5.5 فما فوق. هل تود اللصق دون تنظيف الكود؟", |
UnknownToolbarItem : "عنصر شريط أدوات غير معروف \"%1\"", |
UnknownCommand : "أمر غير معروف \"%1\"", |
NotImplemented : "لم يتم دعم هذا الأمر", |
UnknownToolbarSet : "لم أتمكن من العثور على طقم الأدوات \"%1\" ", |
NoActiveX : "لتأمين متصفحك يجب أن تحدد بعض مميزات المحرر. يتوجب عليك تمكين الخيار \"Run ActiveX controls and plug-ins\". قد تواجة أخطاء وتلاحظ مميزات مفقودة", |
BrowseServerBlocked : "لايمكن فتح مصدر المتصفح. فضلا يجب التأكد بأن جميع موانع النوافذ المنبثقة معطلة", |
DialogBlocked : "لايمكن فتح نافذة الحوار . فضلا تأكد من أن مانع النوافذ المنبثة معطل .", |
// Dialogs |
DlgBtnOK : "موافق", |
DlgBtnCancel : "إلغاء الأمر", |
DlgBtnClose : "إغلاق", |
DlgBtnBrowseServer : "تصفح الخادم", |
DlgAdvancedTag : "متقدم", |
DlgOpOther : "<أخرى>", |
DlgInfoTab : "معلومات", |
DlgAlertUrl : "الرجاء كتابة عنوان الإنترنت", |
// General Dialogs Labels |
DlgGenNotSet : "<بدون تحديد>", |
DlgGenId : "الرقم", |
DlgGenLangDir : "إتجاه النص", |
DlgGenLangDirLtr : "اليسار لليمين (LTR)", |
DlgGenLangDirRtl : "اليمين لليسار (RTL)", |
DlgGenLangCode : "رمز اللغة", |
DlgGenAccessKey : "مفاتيح الإختصار", |
DlgGenName : "الاسم", |
DlgGenTabIndex : "الترتيب", |
DlgGenLongDescr : "عنوان الوصف المفصّل", |
DlgGenClass : "فئات التنسيق", |
DlgGenTitle : "تلميح الشاشة", |
DlgGenContType : "نوع التلميح", |
DlgGenLinkCharset : "ترميز المادة المطلوبة", |
DlgGenStyle : "نمط", |
// Image Dialog |
DlgImgTitle : "خصائص الصورة", |
DlgImgInfoTab : "معلومات الصورة", |
DlgImgBtnUpload : "أرسلها للخادم", |
DlgImgURL : "موقع الصورة", |
DlgImgUpload : "رفع", |
DlgImgAlt : "الوصف", |
DlgImgWidth : "العرض", |
DlgImgHeight : "الإرتفاع", |
DlgImgLockRatio : "تناسق الحجم", |
DlgBtnResetSize : "إستعادة الحجم الأصلي", |
DlgImgBorder : "سمك الحدود", |
DlgImgHSpace : "تباعد أفقي", |
DlgImgVSpace : "تباعد عمودي", |
DlgImgAlign : "محاذاة", |
DlgImgAlignLeft : "يسار", |
DlgImgAlignAbsBottom: "أسفل النص", |
DlgImgAlignAbsMiddle: "وسط السطر", |
DlgImgAlignBaseline : "على السطر", |
DlgImgAlignBottom : "أسفل", |
DlgImgAlignMiddle : "وسط", |
DlgImgAlignRight : "يمين", |
DlgImgAlignTextTop : "أعلى النص", |
DlgImgAlignTop : "أعلى", |
DlgImgPreview : "معاينة", |
DlgImgAlertUrl : "فضلاً أكتب الموقع الذي توجد عليه هذه الصورة.", |
DlgImgLinkTab : "الرابط", |
// Flash Dialog |
DlgFlashTitle : "خصائص فيلم الفلاش", |
DlgFlashChkPlay : "تشغيل تلقائي", |
DlgFlashChkLoop : "تكرار", |
DlgFlashChkMenu : "تمكين قائمة فيلم الفلاش", |
DlgFlashScale : "الحجم", |
DlgFlashScaleAll : "إظهار الكل", |
DlgFlashScaleNoBorder : "بلا حدود", |
DlgFlashScaleFit : "ضبط تام", |
// Link Dialog |
DlgLnkWindowTitle : "إرتباط تشعبي", |
DlgLnkInfoTab : "معلومات الرابط", |
DlgLnkTargetTab : "الهدف", |
DlgLnkType : "نوع الربط", |
DlgLnkTypeURL : "العنوان", |
DlgLnkTypeAnchor : "مكان في هذا المستند", |
DlgLnkTypeEMail : "بريد إلكتروني", |
DlgLnkProto : "البروتوكول", |
DlgLnkProtoOther : "<أخرى>", |
DlgLnkURL : "الموقع", |
DlgLnkAnchorSel : "اختر علامة مرجعية", |
DlgLnkAnchorByName : "حسب اسم العلامة", |
DlgLnkAnchorById : "حسب تعريف العنصر", |
DlgLnkNoAnchors : "<لا يوجد علامات مرجعية في هذا المستند>", |
DlgLnkEMail : "عنوان بريد إلكتروني", |
DlgLnkEMailSubject : "موضوع الرسالة", |
DlgLnkEMailBody : "محتوى الرسالة", |
DlgLnkUpload : "رفع", |
DlgLnkBtnUpload : "أرسلها للخادم", |
DlgLnkTarget : "الهدف", |
DlgLnkTargetFrame : "<إطار>", |
DlgLnkTargetPopup : "<نافذة منبثقة>", |
DlgLnkTargetBlank : "إطار جديد (_blank)", |
DlgLnkTargetParent : "الإطار الأصل (_parent)", |
DlgLnkTargetSelf : "نفس الإطار (_self)", |
DlgLnkTargetTop : "صفحة كاملة (_top)", |
DlgLnkTargetFrameName : "اسم الإطار الهدف", |
DlgLnkPopWinName : "تسمية النافذة المنبثقة", |
DlgLnkPopWinFeat : "خصائص النافذة المنبثقة", |
DlgLnkPopResize : "قابلة للتحجيم", |
DlgLnkPopLocation : "شريط العنوان", |
DlgLnkPopMenu : "القوائم الرئيسية", |
DlgLnkPopScroll : "أشرطة التمرير", |
DlgLnkPopStatus : "شريط الحالة السفلي", |
DlgLnkPopToolbar : "شريط الأدوات", |
DlgLnkPopFullScrn : "ملئ الشاشة (IE)", |
DlgLnkPopDependent : "تابع (Netscape)", |
DlgLnkPopWidth : "العرض", |
DlgLnkPopHeight : "الإرتفاع", |
DlgLnkPopLeft : "التمركز لليسار", |
DlgLnkPopTop : "التمركز للأعلى", |
DlnLnkMsgNoUrl : "فضلاً أدخل عنوان الموقع الذي يشير إليه الرابط", |
DlnLnkMsgNoEMail : "فضلاً أدخل عنوان البريد الإلكتروني", |
DlnLnkMsgNoAnchor : "فضلاً حدد العلامة المرجعية المرغوبة", |
DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING |
// Color Dialog |
DlgColorTitle : "اختر لوناً", |
DlgColorBtnClear : "مسح", |
DlgColorHighlight : "تحديد", |
DlgColorSelected : "إختيار", |
// Smiley Dialog |
DlgSmileyTitle : "إدراج إبتسامات ", |
// Special Character Dialog |
DlgSpecialCharTitle : "إدراج رمز", |
// Table Dialog |
DlgTableTitle : "إدراج جدول", |
DlgTableRows : "صفوف", |
DlgTableColumns : "أعمدة", |
DlgTableBorder : "سمك الحدود", |
DlgTableAlign : "المحاذاة", |
DlgTableAlignNotSet : "<بدون تحديد>", |
DlgTableAlignLeft : "يسار", |
DlgTableAlignCenter : "وسط", |
DlgTableAlignRight : "يمين", |
DlgTableWidth : "العرض", |
DlgTableWidthPx : "بكسل", |
DlgTableWidthPc : "بالمئة", |
DlgTableHeight : "الإرتفاع", |
DlgTableCellSpace : "تباعد الخلايا", |
DlgTableCellPad : "المسافة البادئة", |
DlgTableCaption : "الوصف", |
DlgTableSummary : "الخلاصة", |
// Table Cell Dialog |
DlgCellTitle : "خصائص الخلية", |
DlgCellWidth : "العرض", |
DlgCellWidthPx : "بكسل", |
DlgCellWidthPc : "بالمئة", |
DlgCellHeight : "الإرتفاع", |
DlgCellWordWrap : "التفاف النص", |
DlgCellWordWrapNotSet : "<بدون تحديد>", |
DlgCellWordWrapYes : "نعم", |
DlgCellWordWrapNo : "لا", |
DlgCellHorAlign : "المحاذاة الأفقية", |
DlgCellHorAlignNotSet : "<بدون تحديد>", |
DlgCellHorAlignLeft : "يسار", |
DlgCellHorAlignCenter : "وسط", |
DlgCellHorAlignRight: "يمين", |
DlgCellVerAlign : "المحاذاة العمودية", |
DlgCellVerAlignNotSet : "<بدون تحديد>", |
DlgCellVerAlignTop : "أعلى", |
DlgCellVerAlignMiddle : "وسط", |
DlgCellVerAlignBottom : "أسفل", |
DlgCellVerAlignBaseline : "على السطر", |
DlgCellRowSpan : "إمتداد الصفوف", |
DlgCellCollSpan : "إمتداد الأعمدة", |
DlgCellBackColor : "لون الخلفية", |
DlgCellBorderColor : "لون الحدود", |
DlgCellBtnSelect : "حدّد...", |
// Find Dialog |
DlgFindTitle : "بحث", |
DlgFindFindBtn : "ابحث", |
DlgFindNotFoundMsg : "لم يتم العثور على النص المحدد.", |
// Replace Dialog |
DlgReplaceTitle : "إستبدال", |
DlgReplaceFindLbl : "البحث عن:", |
DlgReplaceReplaceLbl : "إستبدال بـ:", |
DlgReplaceCaseChk : "مطابقة حالة الأحرف", |
DlgReplaceReplaceBtn : "إستبدال", |
DlgReplaceReplAllBtn : "إستبدال الكل", |
DlgReplaceWordChk : "الكلمة بالكامل فقط", |
// Paste Operations / Dialog |
PasteErrorPaste : "الإعدادات الأمنية للمتصفح الذي تستخدمه تمنع اللصق التلقائي. فضلاً إستخدم لوحة المفاتيح لفعل ذلك (Ctrl+V).", |
PasteErrorCut : "الإعدادات الأمنية للمتصفح الذي تستخدمه تمنع القص التلقائي. فضلاً إستخدم لوحة المفاتيح لفعل ذلك (Ctrl+X).", |
PasteErrorCopy : "الإعدادات الأمنية للمتصفح الذي تستخدمه تمنع النسخ التلقائي. فضلاً إستخدم لوحة المفاتيح لفعل ذلك (Ctrl+C).", |
PasteAsText : "لصق كنص بسيط", |
PasteFromWord : "لصق من وورد", |
DlgPasteMsg2 : "الصق داخل الصندوق بإستخدام زرّي (<STRONG>Ctrl+V</STRONG>) في لوحة المفاتيح، ثم اضغط زر <STRONG>موافق</STRONG>.", |
DlgPasteIgnoreFont : "تجاهل تعريفات أسماء الخطوط", |
DlgPasteRemoveStyles : "إزالة تعريفات الأنماط", |
DlgPasteCleanBox : "نظّف محتوى الصندوق", |
// Color Picker |
ColorAutomatic : "تلقائي", |
ColorMoreColors : "ألوان إضافية...", |
// Document Properties |
DocProps : "خصائص الصفحة", |
// Anchor Dialog |
DlgAnchorTitle : "خصائص إشارة مرجعية", |
DlgAnchorName : "اسم الإشارة المرجعية", |
DlgAnchorErrorName : "الرجاء كتابة اسم الإشارة المرجعية", |
// Speller Pages Dialog |
DlgSpellNotInDic : "ليست في القاموس", |
DlgSpellChangeTo : "التغيير إلى", |
DlgSpellBtnIgnore : "تجاهل", |
DlgSpellBtnIgnoreAll : "تجاهل الكل", |
DlgSpellBtnReplace : "تغيير", |
DlgSpellBtnReplaceAll : "تغيير الكل", |
DlgSpellBtnUndo : "تراجع", |
DlgSpellNoSuggestions : "- لا توجد إقتراحات -", |
DlgSpellProgress : "جاري التدقيق إملائياً", |
DlgSpellNoMispell : "تم إكمال التدقيق الإملائي: لم يتم العثور على أي أخطاء إملائية", |
DlgSpellNoChanges : "تم إكمال التدقيق الإملائي: لم يتم تغيير أي كلمة", |
DlgSpellOneChange : "تم إكمال التدقيق الإملائي: تم تغيير كلمة واحدة فقط", |
DlgSpellManyChanges : "تم إكمال التدقيق الإملائي: تم تغيير %1 كلمات\كلمة", |
IeSpellDownload : "المدقق الإملائي (الإنجليزي) غير مثبّت. هل تود تحميله الآن؟", |
// Button Dialog |
DlgButtonText : "القيمة/التسمية", |
DlgButtonType : "نوع الزر", |
DlgButtonTypeBtn : "Button", //MISSING |
DlgButtonTypeSbm : "Submit", //MISSING |
DlgButtonTypeRst : "Reset", //MISSING |
// Checkbox and Radio Button Dialogs |
DlgCheckboxName : "الاسم", |
DlgCheckboxValue : "القيمة", |
DlgCheckboxSelected : "محدد", |
// Form Dialog |
DlgFormName : "الاسم", |
DlgFormAction : "اسم الملف", |
DlgFormMethod : "الأسلوب", |
// Select Field Dialog |
DlgSelectName : "الاسم", |
DlgSelectValue : "القيمة", |
DlgSelectSize : "الحجم", |
DlgSelectLines : "الأسطر", |
DlgSelectChkMulti : "السماح بتحديدات متعددة", |
DlgSelectOpAvail : "الخيارات المتاحة", |
DlgSelectOpText : "النص", |
DlgSelectOpValue : "القيمة", |
DlgSelectBtnAdd : "إضافة", |
DlgSelectBtnModify : "تعديل", |
DlgSelectBtnUp : "تحريك لأعلى", |
DlgSelectBtnDown : "تحريك لأسفل", |
DlgSelectBtnSetValue : "إجعلها محددة", |
DlgSelectBtnDelete : "إزالة", |
// Textarea Dialog |
DlgTextareaName : "الاسم", |
DlgTextareaCols : "الأعمدة", |
DlgTextareaRows : "الصفوف", |
// Text Field Dialog |
DlgTextName : "الاسم", |
DlgTextValue : "القيمة", |
DlgTextCharWidth : "العرض بالأحرف", |
DlgTextMaxChars : "عدد الحروف الأقصى", |
DlgTextType : "نوع المحتوى", |
DlgTextTypeText : "نص", |
DlgTextTypePass : "كلمة مرور", |
// Hidden Field Dialog |
DlgHiddenName : "الاسم", |
DlgHiddenValue : "القيمة", |
// Bulleted List Dialog |
BulletedListProp : "خصائص التعداد النقطي", |
NumberedListProp : "خصائص التعداد الرقمي", |
DlgLstStart : "Start", //MISSING |
DlgLstType : "النوع", |
DlgLstTypeCircle : "دائرة", |
DlgLstTypeDisc : "قرص", |
DlgLstTypeSquare : "مربع", |
DlgLstTypeNumbers : "أرقام (1، 2، 3)َ", |
DlgLstTypeLCase : "حروف صغيرة (a, b, c)َ", |
DlgLstTypeUCase : "حروف كبيرة (A, B, C)َ", |
DlgLstTypeSRoman : "ترقيم روماني صغير (i, ii, iii)َ", |
DlgLstTypeLRoman : "ترقيم روماني كبير (I, II, III)َ", |
// Document Properties Dialog |
DlgDocGeneralTab : "عام", |
DlgDocBackTab : "الخلفية", |
DlgDocColorsTab : "الألوان والهوامش", |
DlgDocMetaTab : "المعرّفات الرأسية", |
DlgDocPageTitle : "عنوان الصفحة", |
DlgDocLangDir : "إتجاه اللغة", |
DlgDocLangDirLTR : "اليسار لليمين (LTR)", |
DlgDocLangDirRTL : "اليمين لليسار (RTL)", |
DlgDocLangCode : "رمز اللغة", |
DlgDocCharSet : "ترميز الحروف", |
DlgDocCharSetCE : "Central European", //MISSING |
DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING |
DlgDocCharSetCR : "Cyrillic", //MISSING |
DlgDocCharSetGR : "Greek", //MISSING |
DlgDocCharSetJP : "Japanese", //MISSING |
DlgDocCharSetKR : "Korean", //MISSING |
DlgDocCharSetTR : "Turkish", //MISSING |
DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING |
DlgDocCharSetWE : "Western European", //MISSING |
DlgDocCharSetOther : "ترميز حروف آخر", |
DlgDocDocType : "ترويسة نوع الصفحة", |
DlgDocDocTypeOther : "ترويسة نوع صفحة أخرى", |
DlgDocIncXHTML : "تضمين إعلانات لغة XHTMLَ", |
DlgDocBgColor : "لون الخلفية", |
DlgDocBgImage : "رابط الصورة الخلفية", |
DlgDocBgNoScroll : "جعلها علامة مائية", |
DlgDocCText : "النص", |
DlgDocCLink : "الروابط", |
DlgDocCVisited : "المزارة", |
DlgDocCActive : "النشطة", |
DlgDocMargins : "هوامش الصفحة", |
DlgDocMaTop : "علوي", |
DlgDocMaLeft : "أيسر", |
DlgDocMaRight : "أيمن", |
DlgDocMaBottom : "سفلي", |
DlgDocMeIndex : "الكلمات الأساسية (مفصولة بفواصل)َ", |
DlgDocMeDescr : "وصف الصفحة", |
DlgDocMeAuthor : "الكاتب", |
DlgDocMeCopy : "المالك", |
DlgDocPreview : "معاينة", |
// Templates Dialog |
Templates : "القوالب", |
DlgTemplatesTitle : "قوالب المحتوى", |
DlgTemplatesSelMsg : "اختر القالب الذي تود وضعه في المحرر <br>(سيتم فقدان المحتوى الحالي):", |
DlgTemplatesLoading : "جاري تحميل قائمة القوالب، الرجاء الإنتظار...", |
DlgTemplatesNoTpl : "(لم يتم تعريف أي قالب)", |
DlgTemplatesReplace : "Replace actual contents", //MISSING |
// About Dialog |
DlgAboutAboutTab : "نبذة", |
DlgAboutBrowserInfoTab : "معلومات متصفحك", |
DlgAboutLicenseTab : "الترخيص", |
DlgAboutVersion : "الإصدار", |
DlgAboutLicense : "مرخّص بحسب قانون GNU LGPL", |
DlgAboutInfo : "لمزيد من المعلومات تفضل بزيارة" |
} |
/branches/v1.0-menes/api/fckeditor/editor/lang/en.js |
---|
New file |
0,0 → 1,501 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: en.js |
* English language file. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
var FCKLang = |
{ |
// Language direction : "ltr" (left to right) or "rtl" (right to left). |
Dir : "ltr", |
ToolbarCollapse : "Collapse Toolbar", |
ToolbarExpand : "Expand Toolbar", |
// Toolbar Items and Context Menu |
Save : "Save", |
NewPage : "New Page", |
Preview : "Preview", |
Cut : "Cut", |
Copy : "Copy", |
Paste : "Paste", |
PasteText : "Paste as plain text", |
PasteWord : "Paste from Word", |
Print : "Print", |
SelectAll : "Select All", |
RemoveFormat : "Remove Format", |
InsertLinkLbl : "Link", |
InsertLink : "Insert/Edit Link", |
RemoveLink : "Remove Link", |
Anchor : "Insert/Edit Anchor", |
InsertImageLbl : "Image", |
InsertImage : "Insert/Edit Image", |
InsertFlashLbl : "Flash", |
InsertFlash : "Insert/Edit Flash", |
InsertTableLbl : "Table", |
InsertTable : "Insert/Edit Table", |
InsertLineLbl : "Line", |
InsertLine : "Insert Horizontal Line", |
InsertSpecialCharLbl: "Special Character", |
InsertSpecialChar : "Insert Special Character", |
InsertSmileyLbl : "Smiley", |
InsertSmiley : "Insert Smiley", |
About : "About FCKeditor", |
Bold : "Bold", |
Italic : "Italic", |
Underline : "Underline", |
StrikeThrough : "Strike Through", |
Subscript : "Subscript", |
Superscript : "Superscript", |
LeftJustify : "Left Justify", |
CenterJustify : "Center Justify", |
RightJustify : "Right Justify", |
BlockJustify : "Block Justify", |
DecreaseIndent : "Decrease Indent", |
IncreaseIndent : "Increase Indent", |
Undo : "Undo", |
Redo : "Redo", |
NumberedListLbl : "Numbered List", |
NumberedList : "Insert/Remove Numbered List", |
BulletedListLbl : "Bulleted List", |
BulletedList : "Insert/Remove Bulleted List", |
ShowTableBorders : "Show Table Borders", |
ShowDetails : "Show Details", |
Style : "Style", |
FontFormat : "Format", |
Font : "Font", |
FontSize : "Size", |
TextColor : "Text Color", |
BGColor : "Background Color", |
Source : "Source", |
Find : "Find", |
Replace : "Replace", |
SpellCheck : "Check Spelling", |
UniversalKeyboard : "Universal Keyboard", |
PageBreakLbl : "Page Break", |
PageBreak : "Insert Page Break", |
Form : "Form", |
Checkbox : "Checkbox", |
RadioButton : "Radio Button", |
TextField : "Text Field", |
Textarea : "Textarea", |
HiddenField : "Hidden Field", |
Button : "Button", |
SelectionField : "Selection Field", |
ImageButton : "Image Button", |
FitWindow : "Maximize the editor size", |
// Context Menu |
EditLink : "Edit Link", |
CellCM : "Cell", |
RowCM : "Row", |
ColumnCM : "Column", |
InsertRow : "Insert Row", |
DeleteRows : "Delete Rows", |
InsertColumn : "Insert Column", |
DeleteColumns : "Delete Columns", |
InsertCell : "Insert Cell", |
DeleteCells : "Delete Cells", |
MergeCells : "Merge Cells", |
SplitCell : "Split Cell", |
TableDelete : "Delete Table", |
CellProperties : "Cell Properties", |
TableProperties : "Table Properties", |
ImageProperties : "Image Properties", |
FlashProperties : "Flash Properties", |
AnchorProp : "Anchor Properties", |
ButtonProp : "Button Properties", |
CheckboxProp : "Checkbox Properties", |
HiddenFieldProp : "Hidden Field Properties", |
RadioButtonProp : "Radio Button Properties", |
ImageButtonProp : "Image Button Properties", |
TextFieldProp : "Text Field Properties", |
SelectionFieldProp : "Selection Field Properties", |
TextareaProp : "Textarea Properties", |
FormProp : "Form Properties", |
FontFormats : "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Normal (DIV)", |
// Alerts and Messages |
ProcessingXHTML : "Processing XHTML. Please wait...", |
Done : "Done", |
PasteWordConfirm : "The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?", |
NotCompatiblePaste : "This command is available for Internet Explorer version 5.5 or more. Do you want to paste without cleaning?", |
UnknownToolbarItem : "Unknown toolbar item \"%1\"", |
UnknownCommand : "Unknown command name \"%1\"", |
NotImplemented : "Command not implemented", |
UnknownToolbarSet : "Toolbar set \"%1\" doesn't exist", |
NoActiveX : "Your browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.", |
BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.", |
DialogBlocked : "It was not possible to open the dialog window. Make sure all popup blockers are disabled.", |
// Dialogs |
DlgBtnOK : "OK", |
DlgBtnCancel : "Cancel", |
DlgBtnClose : "Close", |
DlgBtnBrowseServer : "Browse Server", |
DlgAdvancedTag : "Advanced", |
DlgOpOther : "<Other>", |
DlgInfoTab : "Info", |
DlgAlertUrl : "Please insert the URL", |
// General Dialogs Labels |
DlgGenNotSet : "<not set>", |
DlgGenId : "Id", |
DlgGenLangDir : "Language Direction", |
DlgGenLangDirLtr : "Left to Right (LTR)", |
DlgGenLangDirRtl : "Right to Left (RTL)", |
DlgGenLangCode : "Language Code", |
DlgGenAccessKey : "Access Key", |
DlgGenName : "Name", |
DlgGenTabIndex : "Tab Index", |
DlgGenLongDescr : "Long Description URL", |
DlgGenClass : "Stylesheet Classes", |
DlgGenTitle : "Advisory Title", |
DlgGenContType : "Advisory Content Type", |
DlgGenLinkCharset : "Linked Resource Charset", |
DlgGenStyle : "Style", |
// Image Dialog |
DlgImgTitle : "Image Properties", |
DlgImgInfoTab : "Image Info", |
DlgImgBtnUpload : "Send it to the Server", |
DlgImgURL : "URL", |
DlgImgUpload : "Upload", |
DlgImgAlt : "Alternative Text", |
DlgImgWidth : "Width", |
DlgImgHeight : "Height", |
DlgImgLockRatio : "Lock Ratio", |
DlgBtnResetSize : "Reset Size", |
DlgImgBorder : "Border", |
DlgImgHSpace : "HSpace", |
DlgImgVSpace : "VSpace", |
DlgImgAlign : "Align", |
DlgImgAlignLeft : "Left", |
DlgImgAlignAbsBottom: "Abs Bottom", |
DlgImgAlignAbsMiddle: "Abs Middle", |
DlgImgAlignBaseline : "Baseline", |
DlgImgAlignBottom : "Bottom", |
DlgImgAlignMiddle : "Middle", |
DlgImgAlignRight : "Right", |
DlgImgAlignTextTop : "Text Top", |
DlgImgAlignTop : "Top", |
DlgImgPreview : "Preview", |
DlgImgAlertUrl : "Please type the image URL", |
DlgImgLinkTab : "Link", |
// Flash Dialog |
DlgFlashTitle : "Flash Properties", |
DlgFlashChkPlay : "Auto Play", |
DlgFlashChkLoop : "Loop", |
DlgFlashChkMenu : "Enable Flash Menu", |
DlgFlashScale : "Scale", |
DlgFlashScaleAll : "Show all", |
DlgFlashScaleNoBorder : "No Border", |
DlgFlashScaleFit : "Exact Fit", |
// Link Dialog |
DlgLnkWindowTitle : "Link", |
DlgLnkInfoTab : "Link Info", |
DlgLnkTargetTab : "Target", |
DlgLnkType : "Link Type", |
DlgLnkTypeURL : "URL", |
DlgLnkTypeAnchor : "Link to anchor in the text", |
DlgLnkTypeEMail : "E-Mail", |
DlgLnkProto : "Protocol", |
DlgLnkProtoOther : "<other>", |
DlgLnkURL : "URL", |
DlgLnkAnchorSel : "Select an Anchor", |
DlgLnkAnchorByName : "By Anchor Name", |
DlgLnkAnchorById : "By Element Id", |
DlgLnkNoAnchors : "<No anchors available in the document>", |
DlgLnkEMail : "E-Mail Address", |
DlgLnkEMailSubject : "Message Subject", |
DlgLnkEMailBody : "Message Body", |
DlgLnkUpload : "Upload", |
DlgLnkBtnUpload : "Send it to the Server", |
DlgLnkTarget : "Target", |
DlgLnkTargetFrame : "<frame>", |
DlgLnkTargetPopup : "<popup window>", |
DlgLnkTargetBlank : "New Window (_blank)", |
DlgLnkTargetParent : "Parent Window (_parent)", |
DlgLnkTargetSelf : "Same Window (_self)", |
DlgLnkTargetTop : "Topmost Window (_top)", |
DlgLnkTargetFrameName : "Target Frame Name", |
DlgLnkPopWinName : "Popup Window Name", |
DlgLnkPopWinFeat : "Popup Window Features", |
DlgLnkPopResize : "Resizable", |
DlgLnkPopLocation : "Location Bar", |
DlgLnkPopMenu : "Menu Bar", |
DlgLnkPopScroll : "Scroll Bars", |
DlgLnkPopStatus : "Status Bar", |
DlgLnkPopToolbar : "Toolbar", |
DlgLnkPopFullScrn : "Full Screen (IE)", |
DlgLnkPopDependent : "Dependent (Netscape)", |
DlgLnkPopWidth : "Width", |
DlgLnkPopHeight : "Height", |
DlgLnkPopLeft : "Left Position", |
DlgLnkPopTop : "Top Position", |
DlnLnkMsgNoUrl : "Please type the link URL", |
DlnLnkMsgNoEMail : "Please type the e-mail address", |
DlnLnkMsgNoAnchor : "Please select an anchor", |
DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", |
// Color Dialog |
DlgColorTitle : "Select Color", |
DlgColorBtnClear : "Clear", |
DlgColorHighlight : "Highlight", |
DlgColorSelected : "Selected", |
// Smiley Dialog |
DlgSmileyTitle : "Insert a Smiley", |
// Special Character Dialog |
DlgSpecialCharTitle : "Select Special Character", |
// Table Dialog |
DlgTableTitle : "Table Properties", |
DlgTableRows : "Rows", |
DlgTableColumns : "Columns", |
DlgTableBorder : "Border size", |
DlgTableAlign : "Alignment", |
DlgTableAlignNotSet : "<Not set>", |
DlgTableAlignLeft : "Left", |
DlgTableAlignCenter : "Center", |
DlgTableAlignRight : "Right", |
DlgTableWidth : "Width", |
DlgTableWidthPx : "pixels", |
DlgTableWidthPc : "percent", |
DlgTableHeight : "Height", |
DlgTableCellSpace : "Cell spacing", |
DlgTableCellPad : "Cell padding", |
DlgTableCaption : "Caption", |
DlgTableSummary : "Summary", |
// Table Cell Dialog |
DlgCellTitle : "Cell Properties", |
DlgCellWidth : "Width", |
DlgCellWidthPx : "pixels", |
DlgCellWidthPc : "percent", |
DlgCellHeight : "Height", |
DlgCellWordWrap : "Word Wrap", |
DlgCellWordWrapNotSet : "<Not set>", |
DlgCellWordWrapYes : "Yes", |
DlgCellWordWrapNo : "No", |
DlgCellHorAlign : "Horizontal Alignment", |
DlgCellHorAlignNotSet : "<Not set>", |
DlgCellHorAlignLeft : "Left", |
DlgCellHorAlignCenter : "Center", |
DlgCellHorAlignRight: "Right", |
DlgCellVerAlign : "Vertical Alignment", |
DlgCellVerAlignNotSet : "<Not set>", |
DlgCellVerAlignTop : "Top", |
DlgCellVerAlignMiddle : "Middle", |
DlgCellVerAlignBottom : "Bottom", |
DlgCellVerAlignBaseline : "Baseline", |
DlgCellRowSpan : "Rows Span", |
DlgCellCollSpan : "Columns Span", |
DlgCellBackColor : "Background Color", |
DlgCellBorderColor : "Border Color", |
DlgCellBtnSelect : "Select...", |
// Find Dialog |
DlgFindTitle : "Find", |
DlgFindFindBtn : "Find", |
DlgFindNotFoundMsg : "The specified text was not found.", |
// Replace Dialog |
DlgReplaceTitle : "Replace", |
DlgReplaceFindLbl : "Find what:", |
DlgReplaceReplaceLbl : "Replace with:", |
DlgReplaceCaseChk : "Match case", |
DlgReplaceReplaceBtn : "Replace", |
DlgReplaceReplAllBtn : "Replace All", |
DlgReplaceWordChk : "Match whole word", |
// Paste Operations / Dialog |
PasteErrorPaste : "Your browser security settings don't permit the editor to automatically execute pasting operations. Please use the keyboard for that (Ctrl+V).", |
PasteErrorCut : "Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl+X).", |
PasteErrorCopy : "Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl+C).", |
PasteAsText : "Paste as Plain Text", |
PasteFromWord : "Paste from Word", |
DlgPasteMsg2 : "Please paste inside the following box using the keyboard (<STRONG>Ctrl+V</STRONG>) and hit <STRONG>OK</STRONG>.", |
DlgPasteIgnoreFont : "Ignore Font Face definitions", |
DlgPasteRemoveStyles : "Remove Styles definitions", |
DlgPasteCleanBox : "Clean Up Box", |
// Color Picker |
ColorAutomatic : "Automatic", |
ColorMoreColors : "More Colors...", |
// Document Properties |
DocProps : "Document Properties", |
// Anchor Dialog |
DlgAnchorTitle : "Anchor Properties", |
DlgAnchorName : "Anchor Name", |
DlgAnchorErrorName : "Please type the anchor name", |
// Speller Pages Dialog |
DlgSpellNotInDic : "Not in dictionary", |
DlgSpellChangeTo : "Change to", |
DlgSpellBtnIgnore : "Ignore", |
DlgSpellBtnIgnoreAll : "Ignore All", |
DlgSpellBtnReplace : "Replace", |
DlgSpellBtnReplaceAll : "Replace All", |
DlgSpellBtnUndo : "Undo", |
DlgSpellNoSuggestions : "- No suggestions -", |
DlgSpellProgress : "Spell check in progress...", |
DlgSpellNoMispell : "Spell check complete: No misspellings found", |
DlgSpellNoChanges : "Spell check complete: No words changed", |
DlgSpellOneChange : "Spell check complete: One word changed", |
DlgSpellManyChanges : "Spell check complete: %1 words changed", |
IeSpellDownload : "Spell checker not installed. Do you want to download it now?", |
// Button Dialog |
DlgButtonText : "Text (Value)", |
DlgButtonType : "Type", |
DlgButtonTypeBtn : "Button", |
DlgButtonTypeSbm : "Submit", |
DlgButtonTypeRst : "Reset", |
// Checkbox and Radio Button Dialogs |
DlgCheckboxName : "Name", |
DlgCheckboxValue : "Value", |
DlgCheckboxSelected : "Selected", |
// Form Dialog |
DlgFormName : "Name", |
DlgFormAction : "Action", |
DlgFormMethod : "Method", |
// Select Field Dialog |
DlgSelectName : "Name", |
DlgSelectValue : "Value", |
DlgSelectSize : "Size", |
DlgSelectLines : "lines", |
DlgSelectChkMulti : "Allow multiple selections", |
DlgSelectOpAvail : "Available Options", |
DlgSelectOpText : "Text", |
DlgSelectOpValue : "Value", |
DlgSelectBtnAdd : "Add", |
DlgSelectBtnModify : "Modify", |
DlgSelectBtnUp : "Up", |
DlgSelectBtnDown : "Down", |
DlgSelectBtnSetValue : "Set as selected value", |
DlgSelectBtnDelete : "Delete", |
// Textarea Dialog |
DlgTextareaName : "Name", |
DlgTextareaCols : "Columns", |
DlgTextareaRows : "Rows", |
// Text Field Dialog |
DlgTextName : "Name", |
DlgTextValue : "Value", |
DlgTextCharWidth : "Character Width", |
DlgTextMaxChars : "Maximum Characters", |
DlgTextType : "Type", |
DlgTextTypeText : "Text", |
DlgTextTypePass : "Password", |
// Hidden Field Dialog |
DlgHiddenName : "Name", |
DlgHiddenValue : "Value", |
// Bulleted List Dialog |
BulletedListProp : "Bulleted List Properties", |
NumberedListProp : "Numbered List Properties", |
DlgLstStart : "Start", |
DlgLstType : "Type", |
DlgLstTypeCircle : "Circle", |
DlgLstTypeDisc : "Disc", |
DlgLstTypeSquare : "Square", |
DlgLstTypeNumbers : "Numbers (1, 2, 3)", |
DlgLstTypeLCase : "Lowercase Letters (a, b, c)", |
DlgLstTypeUCase : "Uppercase Letters (A, B, C)", |
DlgLstTypeSRoman : "Small Roman Numerals (i, ii, iii)", |
DlgLstTypeLRoman : "Large Roman Numerals (I, II, III)", |
// Document Properties Dialog |
DlgDocGeneralTab : "General", |
DlgDocBackTab : "Background", |
DlgDocColorsTab : "Colors and Margins", |
DlgDocMetaTab : "Meta Data", |
DlgDocPageTitle : "Page Title", |
DlgDocLangDir : "Language Direction", |
DlgDocLangDirLTR : "Left to Right (LTR)", |
DlgDocLangDirRTL : "Right to Left (RTL)", |
DlgDocLangCode : "Language Code", |
DlgDocCharSet : "Character Set Encoding", |
DlgDocCharSetCE : "Central European", |
DlgDocCharSetCT : "Chinese Traditional (Big5)", |
DlgDocCharSetCR : "Cyrillic", |
DlgDocCharSetGR : "Greek", |
DlgDocCharSetJP : "Japanese", |
DlgDocCharSetKR : "Korean", |
DlgDocCharSetTR : "Turkish", |
DlgDocCharSetUN : "Unicode (UTF-8)", |
DlgDocCharSetWE : "Western European", |
DlgDocCharSetOther : "Other Character Set Encoding", |
DlgDocDocType : "Document Type Heading", |
DlgDocDocTypeOther : "Other Document Type Heading", |
DlgDocIncXHTML : "Include XHTML Declarations", |
DlgDocBgColor : "Background Color", |
DlgDocBgImage : "Background Image URL", |
DlgDocBgNoScroll : "Nonscrolling Background", |
DlgDocCText : "Text", |
DlgDocCLink : "Link", |
DlgDocCVisited : "Visited Link", |
DlgDocCActive : "Active Link", |
DlgDocMargins : "Page Margins", |
DlgDocMaTop : "Top", |
DlgDocMaLeft : "Left", |
DlgDocMaRight : "Right", |
DlgDocMaBottom : "Bottom", |
DlgDocMeIndex : "Document Indexing Keywords (comma separated)", |
DlgDocMeDescr : "Document Description", |
DlgDocMeAuthor : "Author", |
DlgDocMeCopy : "Copyright", |
DlgDocPreview : "Preview", |
// Templates Dialog |
Templates : "Templates", |
DlgTemplatesTitle : "Content Templates", |
DlgTemplatesSelMsg : "Please select the template to open in the editor<br>(the actual contents will be lost):", |
DlgTemplatesLoading : "Loading templates list. Please wait...", |
DlgTemplatesNoTpl : "(No templates defined)", |
DlgTemplatesReplace : "Replace actual contents", |
// About Dialog |
DlgAboutAboutTab : "About", |
DlgAboutBrowserInfoTab : "Browser Info", |
DlgAboutLicenseTab : "License", |
DlgAboutVersion : "version", |
DlgAboutLicense : "Licensed under the terms of the GNU Lesser General Public License", |
DlgAboutInfo : "For further information go to" |
} |
/branches/v1.0-menes/api/fckeditor/editor/lang/_translationstatus.txt |
---|
New file |
0,0 → 1,71 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: _translationstatus.txt |
* Translations Status. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
ar.js Found: 388 Missing: 15 |
bg.js Found: 380 Missing: 23 |
bn.js Found: 388 Missing: 15 |
bs.js Found: 232 Missing: 171 |
ca.js Found: 403 Missing: 0 |
cs.js Found: 388 Missing: 15 |
da.js Found: 388 Missing: 15 |
de.js Found: 403 Missing: 0 |
el.js Found: 403 Missing: 0 |
en-au.js Found: 403 Missing: 0 |
en-ca.js Found: 403 Missing: 0 |
en-uk.js Found: 403 Missing: 0 |
eo.js Found: 352 Missing: 51 |
es.js Found: 388 Missing: 15 |
et.js Found: 388 Missing: 15 |
eu.js Found: 388 Missing: 15 |
fa.js Found: 388 Missing: 15 |
fi.js Found: 388 Missing: 15 |
fo.js Found: 358 Missing: 45 |
fr.js Found: 403 Missing: 0 |
gl.js Found: 388 Missing: 15 |
he.js Found: 388 Missing: 15 |
hi.js Found: 403 Missing: 0 |
hr.js Found: 403 Missing: 0 |
hu.js Found: 402 Missing: 1 |
it.js Found: 388 Missing: 15 |
ja.js Found: 403 Missing: 0 |
km.js Found: 377 Missing: 26 |
ko.js Found: 375 Missing: 28 |
lt.js Found: 383 Missing: 20 |
lv.js Found: 388 Missing: 15 |
mn.js Found: 232 Missing: 171 |
ms.js Found: 358 Missing: 45 |
nb.js Found: 388 Missing: 15 |
nl.js Found: 403 Missing: 0 |
no.js Found: 388 Missing: 15 |
pl.js Found: 388 Missing: 15 |
pt-br.js Found: 384 Missing: 19 |
pt.js Found: 388 Missing: 15 |
ro.js Found: 388 Missing: 15 |
ru.js Found: 403 Missing: 0 |
sk.js Found: 383 Missing: 20 |
sl.js Found: 380 Missing: 23 |
sr-latn.js Found: 375 Missing: 28 |
sr.js Found: 375 Missing: 28 |
sv.js Found: 383 Missing: 20 |
th.js Found: 352 Missing: 51 |
tr.js Found: 388 Missing: 15 |
uk.js Found: 375 Missing: 28 |
vi.js Found: 403 Missing: 0 |
zh-cn.js Found: 388 Missing: 15 |
zh.js Found: 403 Missing: 0 |
/branches/v1.0-menes/api/fckeditor/editor/lang/_getfontformat.html |
---|
New file |
0,0 → 1,66 |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> |
<html> |
<head> |
<title></title> |
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5"> |
</head> |
<script language="javascript"> |
window.onload = function() |
{ |
var oRange = document.selection.createRange() ; |
var sNormal ; |
var sFormats = '' ; |
for ( var i = 1 ; i <= 9 ; i++ ) |
{ |
oRange.moveToElementText( document.getElementById( 'x' + i ) ) ; |
sFormats += oRange.queryCommandValue( 'FormatBlock' ) ; |
if ( i == 1 ) |
sNormal = sFormats ; |
sFormats += ';' ; |
} |
document.getElementById('xFontFormats').innerHTML = sFormats + sNormal + ' (DIV)' ; |
} |
</script> |
<body> |
<table width="70%" align="center"> |
<tr> |
<td> |
<h3>FontFormats Localization</h3> |
<p> |
IE has some limits when handling the "Font Format". It actually uses localized |
strings to retrieve the current format value. This makes it very difficult to |
make a system that works on every single computer in the world. |
</p> |
<p> |
With FCKeditor, this problem impacts in the "Format" toolbar command that |
doesn't reflects the format of the current cursor position. |
</p> |
<p> |
There is only one way to make it work. We must localize FCKeditor using the |
strings used by IE. In this way, we will have the expected behavior at least |
when using FCKeditor in the same language as the browser. So, when localizing |
FCKeditor, go to a computer with IE in the target language, open this page and |
use the following string to the "FontFormats" value: |
</p> |
<div style="white-space: nowrap"> |
FontFormats : "<span id="xFontFormats" style="COLOR: #000099"></span>", |
</div> |
</td> |
</tr> |
</table> |
<div style="DISPLAY: none"> |
<p id="x1"> </p> |
<pre id="x2"> </pre> |
<address id="x3"> </address> |
<h1 id="x4"> </h1> |
<h2 id="x5"> </h2> |
<h3 id="x6"> </h3> |
<h4 id="x7"> </h4> |
<h5 id="x8"> </h5> |
<h6 id="x9"> </h6> |
</div> |
</body> |
</html> |
/branches/v1.0-menes/api/fckeditor/editor/lang/fr.js |
---|
New file |
0,0 → 1,501 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fr.js |
* French language file. |
* |
* File Authors: |
* Hubert Garrido (liane@users.sourceforge.net) |
*/ |
var FCKLang = |
{ |
// Language direction : "ltr" (left to right) or "rtl" (right to left). |
Dir : "ltr", |
ToolbarCollapse : "Masquer Outils", |
ToolbarExpand : "Afficher Outils", |
// Toolbar Items and Context Menu |
Save : "Enregistrer", |
NewPage : "Nouvelle page", |
Preview : "Prévisualisation", |
Cut : "Couper", |
Copy : "Copier", |
Paste : "Coller", |
PasteText : "Coller comme texte", |
PasteWord : "Coller de Word", |
Print : "Imprimer", |
SelectAll : "Tout sélectionner", |
RemoveFormat : "Supprimer le format", |
InsertLinkLbl : "Lien", |
InsertLink : "Insérer/modifier le lien", |
RemoveLink : "Supprimer le lien", |
Anchor : "Insérer/modifier l'ancre", |
InsertImageLbl : "Image", |
InsertImage : "Insérer/modifier l'image", |
InsertFlashLbl : "Animation Flash", |
InsertFlash : "Insérer/modifier l'animation Flash", |
InsertTableLbl : "Tableau", |
InsertTable : "Insérer/modifier le tableau", |
InsertLineLbl : "Séparateur", |
InsertLine : "Insérer un séparateur", |
InsertSpecialCharLbl: "Caractères spéciaux", |
InsertSpecialChar : "Insérer un caractère spécial", |
InsertSmileyLbl : "Smiley", |
InsertSmiley : "Insérer un Smiley", |
About : "A propos de FCKeditor", |
Bold : "Gras", |
Italic : "Italique", |
Underline : "Souligné", |
StrikeThrough : "Barré", |
Subscript : "Indice", |
Superscript : "Exposant", |
LeftJustify : "Aligné à gauche", |
CenterJustify : "Centré", |
RightJustify : "Aligné à Droite", |
BlockJustify : "Texte justifié", |
DecreaseIndent : "Diminuer le retrait", |
IncreaseIndent : "Augmenter le retrait", |
Undo : "Annuler", |
Redo : "Refaire", |
NumberedListLbl : "Liste numérotée", |
NumberedList : "Insérer/supprimer la liste numérotée", |
BulletedListLbl : "Liste à puces", |
BulletedList : "Insérer/supprimer la liste à puces", |
ShowTableBorders : "Afficher les bordures du tableau", |
ShowDetails : "Afficher les caractères invisibles", |
Style : "Style", |
FontFormat : "Format", |
Font : "Police", |
FontSize : "Taille", |
TextColor : "Couleur de caractère", |
BGColor : "Couleur de fond", |
Source : "Source", |
Find : "Chercher", |
Replace : "Remplacer", |
SpellCheck : "Orthographe", |
UniversalKeyboard : "Clavier universel", |
PageBreakLbl : "Saut de page", |
PageBreak : "Insérer un saut de page", |
Form : "Formulaire", |
Checkbox : "Case à cocher", |
RadioButton : "Bouton radio", |
TextField : "Champ texte", |
Textarea : "Zone de texte", |
HiddenField : "Champ caché", |
Button : "Bouton", |
SelectionField : "Liste/menu", |
ImageButton : "Bouton image", |
FitWindow : "Edition pleine page", |
// Context Menu |
EditLink : "Modifier le lien", |
CellCM : "Cellule", |
RowCM : "Ligne", |
ColumnCM : "Colonne", |
InsertRow : "Insérer une ligne", |
DeleteRows : "Supprimer des lignes", |
InsertColumn : "Insérer une colonne", |
DeleteColumns : "Supprimer des colonnes", |
InsertCell : "Insérer une cellule", |
DeleteCells : "Supprimer des cellules", |
MergeCells : "Fusionner les cellules", |
SplitCell : "Scinder les cellules", |
TableDelete : "Supprimer le tableau", |
CellProperties : "Propriétés de cellule", |
TableProperties : "Propriétés du tableau", |
ImageProperties : "Propriétés de l'image", |
FlashProperties : "Propriétés de l'animation Flash", |
AnchorProp : "Propriétés de l'ancre", |
ButtonProp : "Propriétés du bouton", |
CheckboxProp : "Propriétés de la case à cocher", |
HiddenFieldProp : "Propriétés du champ caché", |
RadioButtonProp : "Propriétés du bouton radio", |
ImageButtonProp : "Propriétés du bouton image", |
TextFieldProp : "Propriétés du champ texte", |
SelectionFieldProp : "Propriétés de la liste/du menu", |
TextareaProp : "Propriétés de la zone de texte", |
FormProp : "Propriétés du formulaire", |
FontFormats : "Normal;Formaté;Adresse;En-tête 1;En-tête 2;En-tête 3;En-tête 4;En-tête 5;En-tête 6;Normal (DIV)", |
// Alerts and Messages |
ProcessingXHTML : "Calcul XHTML. Veuillez patienter...", |
Done : "Terminé", |
PasteWordConfirm : "Le texte à coller semble provenir de Word. Désirez-vous le nettoyer avant de coller?", |
NotCompatiblePaste : "Cette commande nécessite Internet Explorer version 5.5 minimum. Souhaitez-vous coller sans nettoyage?", |
UnknownToolbarItem : "Elément de barre d'outil inconnu \"%1\"", |
UnknownCommand : "Nom de commande inconnu \"%1\"", |
NotImplemented : "Commande non encore écrite", |
UnknownToolbarSet : "La barre d'outils \"%1\" n'existe pas", |
NoActiveX : "Les paramètres de sécurité de votre navigateur peuvent limiter quelques fonctionnalités de l'éditeur. Veuillez activer l'option \"Exécuter les contrôles ActiveX et les plug-ins\". Il se peut que vous rencontriez des erreurs et remarquiez quelques limitations.", |
BrowseServerBlocked : "Le navigateur n'a pas pu être ouvert. Assurez-vous que les bloqueurs de popups soient désactivés.", |
DialogBlocked : "La fenêtre de dialogue n'a pas pu s'ouvrir. Assurez-vous que les bloqueurs de popups soient désactivés.", |
// Dialogs |
DlgBtnOK : "OK", |
DlgBtnCancel : "Annuler", |
DlgBtnClose : "Fermer", |
DlgBtnBrowseServer : "Parcourir le serveur", |
DlgAdvancedTag : "Avancé", |
DlgOpOther : "<Autre>", |
DlgInfoTab : "Info", |
DlgAlertUrl : "Veuillez saisir l'URL", |
// General Dialogs Labels |
DlgGenNotSet : "<Par défaut>", |
DlgGenId : "Id", |
DlgGenLangDir : "Sens d'écriture", |
DlgGenLangDirLtr : "De gauche à droite (LTR)", |
DlgGenLangDirRtl : "De droite à gauche (RTL)", |
DlgGenLangCode : "Code langue", |
DlgGenAccessKey : "Equivalent clavier", |
DlgGenName : "Nom", |
DlgGenTabIndex : "Ordre de tabulation", |
DlgGenLongDescr : "URL de description longue", |
DlgGenClass : "Classes de feuilles de style", |
DlgGenTitle : "Titre", |
DlgGenContType : "Type de contenu", |
DlgGenLinkCharset : "Encodage de caractère", |
DlgGenStyle : "Style", |
// Image Dialog |
DlgImgTitle : "Propriétés de l'image", |
DlgImgInfoTab : "Informations sur l'image", |
DlgImgBtnUpload : "Envoyer sur le serveur", |
DlgImgURL : "URL", |
DlgImgUpload : "Télécharger", |
DlgImgAlt : "Texte de remplacement", |
DlgImgWidth : "Largeur", |
DlgImgHeight : "Hauteur", |
DlgImgLockRatio : "Garder les proportions", |
DlgBtnResetSize : "Taille originale", |
DlgImgBorder : "Bordure", |
DlgImgHSpace : "Espacement horizontal", |
DlgImgVSpace : "Espacement vertical", |
DlgImgAlign : "Alignement", |
DlgImgAlignLeft : "Gauche", |
DlgImgAlignAbsBottom: "Abs Bas", |
DlgImgAlignAbsMiddle: "Abs Milieu", |
DlgImgAlignBaseline : "Bas du texte", |
DlgImgAlignBottom : "Bas", |
DlgImgAlignMiddle : "Milieu", |
DlgImgAlignRight : "Droite", |
DlgImgAlignTextTop : "Haut du texte", |
DlgImgAlignTop : "Haut", |
DlgImgPreview : "Prévisualisation", |
DlgImgAlertUrl : "Veuillez saisir l'URL de l'image", |
DlgImgLinkTab : "Lien", |
// Flash Dialog |
DlgFlashTitle : "Propriétés de l'animation Flash", |
DlgFlashChkPlay : "Lecture automatique", |
DlgFlashChkLoop : "Boucle", |
DlgFlashChkMenu : "Activer le menu Flash", |
DlgFlashScale : "Affichage", |
DlgFlashScaleAll : "Par défaut (tout montrer)", |
DlgFlashScaleNoBorder : "Sans bordure", |
DlgFlashScaleFit : "Ajuster aux dimensions", |
// Link Dialog |
DlgLnkWindowTitle : "Propriétés du lien", |
DlgLnkInfoTab : "Informations sur le lien", |
DlgLnkTargetTab : "Destination", |
DlgLnkType : "Type de lien", |
DlgLnkTypeURL : "URL", |
DlgLnkTypeAnchor : "Ancre dans cette page", |
DlgLnkTypeEMail : "E-Mail", |
DlgLnkProto : "Protocole", |
DlgLnkProtoOther : "<autre>", |
DlgLnkURL : "URL", |
DlgLnkAnchorSel : "Sélectionner une ancre", |
DlgLnkAnchorByName : "Par nom", |
DlgLnkAnchorById : "Par id", |
DlgLnkNoAnchors : "<Pas d'ancre disponible dans le document>", |
DlgLnkEMail : "Adresse E-Mail", |
DlgLnkEMailSubject : "Sujet du message", |
DlgLnkEMailBody : "Corps du message", |
DlgLnkUpload : "Télécharger", |
DlgLnkBtnUpload : "Envoyer sur le serveur", |
DlgLnkTarget : "Destination", |
DlgLnkTargetFrame : "<cadre>", |
DlgLnkTargetPopup : "<fenêtre popup>", |
DlgLnkTargetBlank : "Nouvelle fenêtre (_blank)", |
DlgLnkTargetParent : "Fenêtre mère (_parent)", |
DlgLnkTargetSelf : "Même fenêtre (_self)", |
DlgLnkTargetTop : "Fenêtre supérieure (_top)", |
DlgLnkTargetFrameName : "Nom du cadre de destination", |
DlgLnkPopWinName : "Nom de la fenêtre popup", |
DlgLnkPopWinFeat : "Caractéristiques de la fenêtre popup", |
DlgLnkPopResize : "Taille modifiable", |
DlgLnkPopLocation : "Barre d'adresses", |
DlgLnkPopMenu : "Barre de menu", |
DlgLnkPopScroll : "Barres de défilement", |
DlgLnkPopStatus : "Barre d'état", |
DlgLnkPopToolbar : "Barre d'outils", |
DlgLnkPopFullScrn : "Plein écran (IE)", |
DlgLnkPopDependent : "Dépendante (Netscape)", |
DlgLnkPopWidth : "Largeur", |
DlgLnkPopHeight : "Hauteur", |
DlgLnkPopLeft : "Position à partir de la gauche", |
DlgLnkPopTop : "Position à partir du haut", |
DlnLnkMsgNoUrl : "Veuillez saisir l'URL", |
DlnLnkMsgNoEMail : "Veuillez saisir l'adresse e-mail", |
DlnLnkMsgNoAnchor : "Veuillez sélectionner une ancre", |
DlnLnkMsgInvPopName : "Le nom de la fenêtre popup doit commencer par une lettre et ne doit pas contenir d'espace", |
// Color Dialog |
DlgColorTitle : "Sélectionner", |
DlgColorBtnClear : "Effacer", |
DlgColorHighlight : "Prévisualisation", |
DlgColorSelected : "Sélectionné", |
// Smiley Dialog |
DlgSmileyTitle : "Insérer un Smiley", |
// Special Character Dialog |
DlgSpecialCharTitle : "Insérer un caractère spécial", |
// Table Dialog |
DlgTableTitle : "Propriétés du tableau", |
DlgTableRows : "Lignes", |
DlgTableColumns : "Colonnes", |
DlgTableBorder : "Bordure", |
DlgTableAlign : "Alignement", |
DlgTableAlignNotSet : "<Par défaut>", |
DlgTableAlignLeft : "Gauche", |
DlgTableAlignCenter : "Centré", |
DlgTableAlignRight : "Droite", |
DlgTableWidth : "Largeur", |
DlgTableWidthPx : "pixels", |
DlgTableWidthPc : "pourcentage", |
DlgTableHeight : "Hauteur", |
DlgTableCellSpace : "Espacement", |
DlgTableCellPad : "Contour", |
DlgTableCaption : "Titre", |
DlgTableSummary : "Résumé", |
// Table Cell Dialog |
DlgCellTitle : "Propriétés de la cellule", |
DlgCellWidth : "Largeur", |
DlgCellWidthPx : "pixels", |
DlgCellWidthPc : "pourcentage", |
DlgCellHeight : "Hauteur", |
DlgCellWordWrap : "Retour à la ligne", |
DlgCellWordWrapNotSet : "<Par défaut>", |
DlgCellWordWrapYes : "Oui", |
DlgCellWordWrapNo : "Non", |
DlgCellHorAlign : "Alignement horizontal", |
DlgCellHorAlignNotSet : "<Par défaut>", |
DlgCellHorAlignLeft : "Gauche", |
DlgCellHorAlignCenter : "Centré", |
DlgCellHorAlignRight: "Droite", |
DlgCellVerAlign : "Alignement vertical", |
DlgCellVerAlignNotSet : "<Par défaut>", |
DlgCellVerAlignTop : "Haut", |
DlgCellVerAlignMiddle : "Milieu", |
DlgCellVerAlignBottom : "Bas", |
DlgCellVerAlignBaseline : "Bas du texte", |
DlgCellRowSpan : "Lignes fusionnées", |
DlgCellCollSpan : "Colonnes fusionnées", |
DlgCellBackColor : "Fond", |
DlgCellBorderColor : "Bordure", |
DlgCellBtnSelect : "Choisir...", |
// Find Dialog |
DlgFindTitle : "Chercher", |
DlgFindFindBtn : "Chercher", |
DlgFindNotFoundMsg : "Le texte indiqué est introuvable.", |
// Replace Dialog |
DlgReplaceTitle : "Remplacer", |
DlgReplaceFindLbl : "Rechercher:", |
DlgReplaceReplaceLbl : "Remplacer par:", |
DlgReplaceCaseChk : "Respecter la casse", |
DlgReplaceReplaceBtn : "Remplacer", |
DlgReplaceReplAllBtn : "Tout remplacer", |
DlgReplaceWordChk : "Mot entier", |
// Paste Operations / Dialog |
PasteErrorPaste : "Les paramètres de sécurité de votre navigateur empêchent l'éditeur de coller automatiquement vos données. Veuillez utiliser les équivalents claviers (Ctrl+V).", |
PasteErrorCut : "Les paramètres de sécurité de votre navigateur empêchent l'éditeur de couper automatiquement vos données. Veuillez utiliser les équivalents claviers (Ctrl+X).", |
PasteErrorCopy : "Les paramètres de sécurité de votre navigateur empêchent l'éditeur de copier automatiquement vos données. Veuillez utiliser les équivalents claviers (Ctrl+C).", |
PasteAsText : "Coller comme texte", |
PasteFromWord : "Coller à partir de Word", |
DlgPasteMsg2 : "Veuillez coller dans la zone ci-dessous en utilisant le clavier (<STRONG>Ctrl+V</STRONG>) et cliquez sur <STRONG>OK</STRONG>.", |
DlgPasteIgnoreFont : "Ignorer les polices de caractères", |
DlgPasteRemoveStyles : "Supprimer les styles", |
DlgPasteCleanBox : "Effacer le contenu", |
// Color Picker |
ColorAutomatic : "Automatique", |
ColorMoreColors : "Plus de couleurs...", |
// Document Properties |
DocProps : "Propriétés du document", |
// Anchor Dialog |
DlgAnchorTitle : "Propriétés de l'ancre", |
DlgAnchorName : "Nom de l'ancre", |
DlgAnchorErrorName : "Veuillez saisir le nom de l'ancre", |
// Speller Pages Dialog |
DlgSpellNotInDic : "Pas dans le dictionnaire", |
DlgSpellChangeTo : "Changer en", |
DlgSpellBtnIgnore : "Ignorer", |
DlgSpellBtnIgnoreAll : "Ignorer tout", |
DlgSpellBtnReplace : "Remplacer", |
DlgSpellBtnReplaceAll : "Remplacer tout", |
DlgSpellBtnUndo : "Annuler", |
DlgSpellNoSuggestions : "- Aucune suggestion -", |
DlgSpellProgress : "Vérification d'orthographe en cours...", |
DlgSpellNoMispell : "Vérification d'orthographe terminée: Aucune erreur trouvée", |
DlgSpellNoChanges : "Vérification d'orthographe terminée: Pas de modifications", |
DlgSpellOneChange : "Vérification d'orthographe terminée: Un mot modifié", |
DlgSpellManyChanges : "Vérification d'orthographe terminée: %1 mots modifiés", |
IeSpellDownload : "Le Correcteur n'est pas installé. Souhaitez-vous le télécharger maintenant?", |
// Button Dialog |
DlgButtonText : "Texte (valeur)", |
DlgButtonType : "Type", |
DlgButtonTypeBtn : "Bouton", |
DlgButtonTypeSbm : "Envoyer", |
DlgButtonTypeRst : "Réinitialiser", |
// Checkbox and Radio Button Dialogs |
DlgCheckboxName : "Nom", |
DlgCheckboxValue : "Valeur", |
DlgCheckboxSelected : "Sélectionné", |
// Form Dialog |
DlgFormName : "Nom", |
DlgFormAction : "Action", |
DlgFormMethod : "Méthode", |
// Select Field Dialog |
DlgSelectName : "Nom", |
DlgSelectValue : "Valeur", |
DlgSelectSize : "Taille", |
DlgSelectLines : "lignes", |
DlgSelectChkMulti : "Sélection multiple", |
DlgSelectOpAvail : "Options disponibles", |
DlgSelectOpText : "Texte", |
DlgSelectOpValue : "Valeur", |
DlgSelectBtnAdd : "Ajouter", |
DlgSelectBtnModify : "Modifier", |
DlgSelectBtnUp : "Monter", |
DlgSelectBtnDown : "Descendre", |
DlgSelectBtnSetValue : "Valeur sélectionnée", |
DlgSelectBtnDelete : "Supprimer", |
// Textarea Dialog |
DlgTextareaName : "Nom", |
DlgTextareaCols : "Colonnes", |
DlgTextareaRows : "Lignes", |
// Text Field Dialog |
DlgTextName : "Nom", |
DlgTextValue : "Valeur", |
DlgTextCharWidth : "Largeur en caractères", |
DlgTextMaxChars : "Nombre maximum de caractères", |
DlgTextType : "Type", |
DlgTextTypeText : "Texte", |
DlgTextTypePass : "Mot de passe", |
// Hidden Field Dialog |
DlgHiddenName : "Nom", |
DlgHiddenValue : "Valeur", |
// Bulleted List Dialog |
BulletedListProp : "Propriétés de liste à puces", |
NumberedListProp : "Propriétés de liste numérotée", |
DlgLstStart : "Début", |
DlgLstType : "Type", |
DlgLstTypeCircle : "Cercle", |
DlgLstTypeDisc : "Disque", |
DlgLstTypeSquare : "Carré", |
DlgLstTypeNumbers : "Nombres (1, 2, 3)", |
DlgLstTypeLCase : "Lettres minuscules (a, b, c)", |
DlgLstTypeUCase : "Lettres majuscules (A, B, C)", |
DlgLstTypeSRoman : "Chiffres romains minuscules (i, ii, iii)", |
DlgLstTypeLRoman : "Chiffres romains majuscules (I, II, III)", |
// Document Properties Dialog |
DlgDocGeneralTab : "Général", |
DlgDocBackTab : "Fond", |
DlgDocColorsTab : "Couleurs et marges", |
DlgDocMetaTab : "Métadonnées", |
DlgDocPageTitle : "Titre de la page", |
DlgDocLangDir : "Sens d'écriture", |
DlgDocLangDirLTR : "De la gauche vers la droite (LTR)", |
DlgDocLangDirRTL : "De la droite vers la gauche (RTL)", |
DlgDocLangCode : "Code langue", |
DlgDocCharSet : "Encodage de caractère", |
DlgDocCharSetCE : "Europe Centrale", |
DlgDocCharSetCT : "Chinois Traditionnel (Big5)", |
DlgDocCharSetCR : "Cyrillique", |
DlgDocCharSetGR : "Grec", |
DlgDocCharSetJP : "Japanais", |
DlgDocCharSetKR : "Coréen", |
DlgDocCharSetTR : "Turc", |
DlgDocCharSetUN : "Unicode (UTF-8)", |
DlgDocCharSetWE : "Occidental", |
DlgDocCharSetOther : "Autre encodage de caractère", |
DlgDocDocType : "Type de document", |
DlgDocDocTypeOther : "Autre type de document", |
DlgDocIncXHTML : "Inclure les déclarations XHTML", |
DlgDocBgColor : "Couleur de fond", |
DlgDocBgImage : "Image de fond", |
DlgDocBgNoScroll : "Image fixe sans défilement", |
DlgDocCText : "Texte", |
DlgDocCLink : "Lien", |
DlgDocCVisited : "Lien visité", |
DlgDocCActive : "Lien activé", |
DlgDocMargins : "Marges", |
DlgDocMaTop : "Haut", |
DlgDocMaLeft : "Gauche", |
DlgDocMaRight : "Droite", |
DlgDocMaBottom : "Bas", |
DlgDocMeIndex : "Mots-clés (séparés par des virgules)", |
DlgDocMeDescr : "Description", |
DlgDocMeAuthor : "Auteur", |
DlgDocMeCopy : "Copyright", |
DlgDocPreview : "Prévisualisation", |
// Templates Dialog |
Templates : "Modèles", |
DlgTemplatesTitle : "Modèles de contenu", |
DlgTemplatesSelMsg : "Veuillez sélectionner le modèle à ouvrir dans l'éditeur<br>(le contenu actuel sera remplacé):", |
DlgTemplatesLoading : "Chargement de la liste des modèles. Veuillez patienter...", |
DlgTemplatesNoTpl : "(Aucun modèle disponible)", |
DlgTemplatesReplace : "Remplacer tout le contenu", |
// About Dialog |
DlgAboutAboutTab : "A propos de", |
DlgAboutBrowserInfoTab : "Navigateur", |
DlgAboutLicenseTab : "License", |
DlgAboutVersion : "version", |
DlgAboutLicense : "License selon les termes de GNU Lesser General Public License", |
DlgAboutInfo : "Pour plus d'informations, aller à" |
} |
/branches/v1.0-menes/api/fckeditor/editor/lang/et.js |
---|
New file |
0,0 → 1,502 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: et.js |
* Estonian language file. |
* |
* File Authors: |
* Kristjan Kivikangur (kristjan@ttrk.ee) |
* Gustav Kaskema |
*/ |
var FCKLang = |
{ |
// Language direction : "ltr" (left to right) or "rtl" (right to left). |
Dir : "ltr", |
ToolbarCollapse : "Voldi tööriistariba", |
ToolbarExpand : "Laienda tööriistariba", |
// Toolbar Items and Context Menu |
Save : "Salvesta", |
NewPage : "Uus leht", |
Preview : "Eelvaade", |
Cut : "Lõika", |
Copy : "Kopeeri", |
Paste : "Kleebi", |
PasteText : "Kleebi tavalise tekstina", |
PasteWord : "Kleebi Wordist", |
Print : "Prindi", |
SelectAll : "Vali kõik", |
RemoveFormat : "Eemalda vorming", |
InsertLinkLbl : "Link", |
InsertLink : "Sisesta/Muuda link", |
RemoveLink : "Eemalda link", |
Anchor : "Sisesta/Muuda ankur", |
InsertImageLbl : "Pilt", |
InsertImage : "Sisesta/Muuda pilt", |
InsertFlashLbl : "Flash", |
InsertFlash : "Sisesta/Muuda flash", |
InsertTableLbl : "Tabel", |
InsertTable : "Sisesta/Muuda tabel", |
InsertLineLbl : "Joon", |
InsertLine : "Sisesta horisontaaljoon", |
InsertSpecialCharLbl: "Erimärgid", |
InsertSpecialChar : "Sisesta erimärk", |
InsertSmileyLbl : "Emotikon", |
InsertSmiley : "Sisesta emotikon", |
About : "FCKeditor teave", |
Bold : "Rasvane kiri", |
Italic : "Kursiiv kiri", |
Underline : "Allajoonitud kiri", |
StrikeThrough : "Läbijoonitud kiri", |
Subscript : "Allindeks", |
Superscript : "Ülaindeks", |
LeftJustify : "Vasakjoondus", |
CenterJustify : "Keskjoondus", |
RightJustify : "Paremjoondus", |
BlockJustify : "Rööpjoondus", |
DecreaseIndent : "Vähenda taanet", |
IncreaseIndent : "Suurenda taanet", |
Undo : "Võta tagasi", |
Redo : "Korda toimingut", |
NumberedListLbl : "Nummerdatud loetelu", |
NumberedList : "Sisesta/Eemalda nummerdatud loetelu", |
BulletedListLbl : "Punktiseeritud loetelu", |
BulletedList : "Sisesta/Eemalda punktiseeritud loetelu", |
ShowTableBorders : "Näita tabeli jooni", |
ShowDetails : "Näita üksikasju", |
Style : "Laad", |
FontFormat : "Vorming", |
Font : "Kiri", |
FontSize : "Suurus", |
TextColor : "Teksti värv", |
BGColor : "Tausta värv", |
Source : "Lähtekood", |
Find : "Otsi", |
Replace : "Asenda", |
SpellCheck : "Kontrolli õigekirja", |
UniversalKeyboard : "Universaalne klaviatuur", |
PageBreakLbl : "Lehepiir", |
PageBreak : "Sisesta lehevahetus koht", |
Form : "Vorm", |
Checkbox : "Märkeruut", |
RadioButton : "Raadionupp", |
TextField : "Tekstilahter", |
Textarea : "Tekstiala", |
HiddenField : "Varjatud lahter", |
Button : "Nupp", |
SelectionField : "Valiklahter", |
ImageButton : "Piltnupp", |
FitWindow : "Maksimeeri redaktori mõõtmed", |
// Context Menu |
EditLink : "Muuda linki", |
CellCM : "Lahter", |
RowCM : "Rida", |
ColumnCM : "Veerg", |
InsertRow : "Lisa rida", |
DeleteRows : "Eemalda ridu", |
InsertColumn : "Lisa veerg", |
DeleteColumns : "Eemalda veerud", |
InsertCell : "Lisa lahter", |
DeleteCells : "Eemalda lahtrid", |
MergeCells : "Ühenda lahtrid", |
SplitCell : "Lahuta lahtrid", |
TableDelete : "Kustuta tabel", |
CellProperties : "Lahtri atribuudid", |
TableProperties : "Tabeli atribuudid", |
ImageProperties : "Pildi atribuudid", |
FlashProperties : "Flash omadused", |
AnchorProp : "Ankru omadused", |
ButtonProp : "Nupu omadused", |
CheckboxProp : "Märkeruudu omadused", |
HiddenFieldProp : "Varjatud lahtri omadused", |
RadioButtonProp : "Raadionupu omadused", |
ImageButtonProp : "Piltnupu omadused", |
TextFieldProp : "Tekstilahtri omadused", |
SelectionFieldProp : "Valiklahtri omadused", |
TextareaProp : "Tekstiala omadused", |
FormProp : "Vormi omadused", |
FontFormats : "Tavaline;Vormindatud;Aadress;Pealkiri 1;Pealkiri 2;Pealkiri 3;Pealkiri 4;Pealkiri 5;Pealkiri 6", |
// Alerts and Messages |
ProcessingXHTML : "Töötlen XHTML. Palun oota...", |
Done : "Tehtud", |
PasteWordConfirm : "Tekst, mida soovid lisada paistab pärinevat Wordist. Kas soovid seda enne kleepimist puhastada?", |
NotCompatiblePaste : "See käsk on saadaval ainult Internet Explorer versioon 5.5 või uuema puhul. Kas soovid kleepida ilma puhastamata?", |
UnknownToolbarItem : "Tundmatu tööriistariba üksus \"%1\"", |
UnknownCommand : "Tundmatu käsunimi \"%1\"", |
NotImplemented : "Käsku ei täidetud", |
UnknownToolbarSet : "Tööriistariba \"%1\" ei eksisteeri", |
NoActiveX : "Sinu interneti sirvija turvalisuse seaded võivad limiteerida mõningaid tekstirdaktori kasutus võimalusi. Sa peaksid võimaldama valiku \"Run ActiveX controls and plug-ins\" oma sirvija seadetes. Muidu võid sa täheldada vigu tekstiredaktori töös ja märgata puuduvaid funktsioone.", |
BrowseServerBlocked : "Ressursside sirvija avamine ebaõnnestus. Võimalda pop-up akende avanemine.", |
DialogBlocked : "Ei olenud võimalik avada dialoogi akent. Võimalda pop-up akende avanemine.", |
// Dialogs |
DlgBtnOK : "OK", |
DlgBtnCancel : "Loobu", |
DlgBtnClose : "Sulge", |
DlgBtnBrowseServer : "Sirvi serverit", |
DlgAdvancedTag : "Täpsemalt", |
DlgOpOther : "<Teine>", |
DlgInfoTab : "Info", |
DlgAlertUrl : "Palun sisesta URL", |
// General Dialogs Labels |
DlgGenNotSet : "<määramata>", |
DlgGenId : "Id", |
DlgGenLangDir : "Keele suund", |
DlgGenLangDirLtr : "Vasakult paremale (LTR)", |
DlgGenLangDirRtl : "Paremalt vasakule (RTL)", |
DlgGenLangCode : "Keele kood", |
DlgGenAccessKey : "Juurdepääsu võti", |
DlgGenName : "Nimi", |
DlgGenTabIndex : "Tab indeks", |
DlgGenLongDescr : "Pikk kirjeldus URL", |
DlgGenClass : "Stiilistiku klassid", |
DlgGenTitle : "Juhendav tiitel", |
DlgGenContType : "Juhendava sisu tüüp", |
DlgGenLinkCharset : "Lingitud ressurssi märgistik", |
DlgGenStyle : "Laad", |
// Image Dialog |
DlgImgTitle : "Pildi atribuudid", |
DlgImgInfoTab : "Pildi info", |
DlgImgBtnUpload : "Saada serverissee", |
DlgImgURL : "URL", |
DlgImgUpload : "Lae üles", |
DlgImgAlt : "Alternatiivne tekst", |
DlgImgWidth : "Laius", |
DlgImgHeight : "Kõrgus", |
DlgImgLockRatio : "Lukusta kuvasuhe", |
DlgBtnResetSize : "Lähtesta suurus", |
DlgImgBorder : "Joon", |
DlgImgHSpace : "H. vaheruum", |
DlgImgVSpace : "V. vaheruum", |
DlgImgAlign : "Joondus", |
DlgImgAlignLeft : "Vasak", |
DlgImgAlignAbsBottom: "Abs alla", |
DlgImgAlignAbsMiddle: "Abs keskele", |
DlgImgAlignBaseline : "Baasjoonele", |
DlgImgAlignBottom : "Alla", |
DlgImgAlignMiddle : "Keskele", |
DlgImgAlignRight : "Paremale", |
DlgImgAlignTextTop : "Tekstit üles", |
DlgImgAlignTop : "Üles", |
DlgImgPreview : "Eelvaade", |
DlgImgAlertUrl : "Palun kirjuta pildi URL", |
DlgImgLinkTab : "Link", |
// Flash Dialog |
DlgFlashTitle : "Flash omadused", |
DlgFlashChkPlay : "Automaatne start ", |
DlgFlashChkLoop : "Korduv", |
DlgFlashChkMenu : "Võimalda flash menüü", |
DlgFlashScale : "Mastaap", |
DlgFlashScaleAll : "Näita kõike", |
DlgFlashScaleNoBorder : "Äärist ei ole", |
DlgFlashScaleFit : "Täpne sobivus", |
// Link Dialog |
DlgLnkWindowTitle : "Link", |
DlgLnkInfoTab : "Lingi info", |
DlgLnkTargetTab : "Sihtkoht", |
DlgLnkType : "Lingi tüüp", |
DlgLnkTypeURL : "URL", |
DlgLnkTypeAnchor : "Ankur sellel lehel", |
DlgLnkTypeEMail : "E-post", |
DlgLnkProto : "Protokoll", |
DlgLnkProtoOther : "<muu>", |
DlgLnkURL : "URL", |
DlgLnkAnchorSel : "Vali ankur", |
DlgLnkAnchorByName : "Ankru nime järgi", |
DlgLnkAnchorById : "Elemendi id järgi", |
DlgLnkNoAnchors : "<Selles dokumendis ei ole ankruid>", |
DlgLnkEMail : "E-posti aadress", |
DlgLnkEMailSubject : "Sõnumi teema", |
DlgLnkEMailBody : "Sõnumi tekst", |
DlgLnkUpload : "Lae üles", |
DlgLnkBtnUpload : "Saada serverisse", |
DlgLnkTarget : "Sihtkoht", |
DlgLnkTargetFrame : "<raam>", |
DlgLnkTargetPopup : "<hüpikaken>", |
DlgLnkTargetBlank : "Uus aken (_blank)", |
DlgLnkTargetParent : "Vanem aken (_parent)", |
DlgLnkTargetSelf : "Sama aken (_self)", |
DlgLnkTargetTop : "Pealmine aken (_top)", |
DlgLnkTargetFrameName : "Sihtmärk raami nimi", |
DlgLnkPopWinName : "Hüpikakna nimi", |
DlgLnkPopWinFeat : "Hüpikakna omadused", |
DlgLnkPopResize : "Suurendatav", |
DlgLnkPopLocation : "Aadressiriba", |
DlgLnkPopMenu : "Menüüriba", |
DlgLnkPopScroll : "Kerimisribad", |
DlgLnkPopStatus : "Olekuriba", |
DlgLnkPopToolbar : "Tööriistariba", |
DlgLnkPopFullScrn : "Täisekraan (IE)", |
DlgLnkPopDependent : "Sõltuv (Netscape)", |
DlgLnkPopWidth : "Laius", |
DlgLnkPopHeight : "Kõrgus", |
DlgLnkPopLeft : "Vasak asukoht", |
DlgLnkPopTop : "Ülemine asukoht", |
DlnLnkMsgNoUrl : "Palun kirjuta lingi URL", |
DlnLnkMsgNoEMail : "Palun kirjuta E-Posti aadress", |
DlnLnkMsgNoAnchor : "Palun vali ankur", |
DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING |
// Color Dialog |
DlgColorTitle : "Vali värv", |
DlgColorBtnClear : "Tühjenda", |
DlgColorHighlight : "Märgi", |
DlgColorSelected : "Valitud", |
// Smiley Dialog |
DlgSmileyTitle : "Sisesta emotikon", |
// Special Character Dialog |
DlgSpecialCharTitle : "Vali erimärk", |
// Table Dialog |
DlgTableTitle : "Tabeli atribuudid", |
DlgTableRows : "Read", |
DlgTableColumns : "Veerud", |
DlgTableBorder : "Joone suurus", |
DlgTableAlign : "Joondus", |
DlgTableAlignNotSet : "<Määramata>", |
DlgTableAlignLeft : "Vasak", |
DlgTableAlignCenter : "Kesk", |
DlgTableAlignRight : "Parem", |
DlgTableWidth : "Laius", |
DlgTableWidthPx : "pikslit", |
DlgTableWidthPc : "protsenti", |
DlgTableHeight : "Kõrgus", |
DlgTableCellSpace : "Lahtri vahe", |
DlgTableCellPad : "Lahtri täidis", |
DlgTableCaption : "Tabeli tiitel", |
DlgTableSummary : "Kokkuvõte", |
// Table Cell Dialog |
DlgCellTitle : "Lahtri atribuudid", |
DlgCellWidth : "Laius", |
DlgCellWidthPx : "pikslit", |
DlgCellWidthPc : "protsenti", |
DlgCellHeight : "Kõrgus", |
DlgCellWordWrap : "Sõna ülekanne", |
DlgCellWordWrapNotSet : "<Määramata>", |
DlgCellWordWrapYes : "Jah", |
DlgCellWordWrapNo : "Ei", |
DlgCellHorAlign : "Horisontaaljoondus", |
DlgCellHorAlignNotSet : "<Määramata>", |
DlgCellHorAlignLeft : "Vasak", |
DlgCellHorAlignCenter : "Kesk", |
DlgCellHorAlignRight: "Parem", |
DlgCellVerAlign : "Vertikaaljoondus", |
DlgCellVerAlignNotSet : "<Määramata>", |
DlgCellVerAlignTop : "Üles", |
DlgCellVerAlignMiddle : "Keskele", |
DlgCellVerAlignBottom : "Alla", |
DlgCellVerAlignBaseline : "Baasjoonele", |
DlgCellRowSpan : "Reaulatus", |
DlgCellCollSpan : "Veeruulatus", |
DlgCellBackColor : "Tausta värv", |
DlgCellBorderColor : "Joone värv", |
DlgCellBtnSelect : "Vali...", |
// Find Dialog |
DlgFindTitle : "Otsi", |
DlgFindFindBtn : "Otsi", |
DlgFindNotFoundMsg : "Valitud teksti ei leitud.", |
// Replace Dialog |
DlgReplaceTitle : "Asenda", |
DlgReplaceFindLbl : "Leia mida:", |
DlgReplaceReplaceLbl : "Asenda millega:", |
DlgReplaceCaseChk : "Erista suur- ja väiketähti", |
DlgReplaceReplaceBtn : "Asenda", |
DlgReplaceReplAllBtn : "Asenda kõik", |
DlgReplaceWordChk : "Otsi terviklike sõnu", |
// Paste Operations / Dialog |
PasteErrorPaste : "Sinu interneti sirvija turvaseaded ei luba redaktoril automaatselt kleepida. Palun kasutage selleks klaviatuuri klahvikombinatsiooni (Ctrl+V).", |
PasteErrorCut : "Sinu interneti sirvija turvaseaded ei luba redaktoril automaatselt lõigata. Palun kasutage selleks klaviatuuri klahvikombinatsiooni (Ctrl+X).", |
PasteErrorCopy : "Sinu interneti sirvija turvaseaded ei luba redaktoril automaatselt kopeerida. Palun kasutage selleks klaviatuuri klahvikombinatsiooni (Ctrl+C).", |
PasteAsText : "Kleebi tavalise tekstina", |
PasteFromWord : "Kleebi Wordist", |
DlgPasteMsg2 : "Palun kleebi järgnevasse kasti kasutades klaviatuuri klahvikombinatsiooni (<STRONG>Ctrl+V</STRONG>) ja vajuta seejärel <STRONG>OK</STRONG>.", |
DlgPasteIgnoreFont : "Ignoreeri kirja definitsioone", |
DlgPasteRemoveStyles : "Eemalda stiilide definitsioonid", |
DlgPasteCleanBox : "Puhasta ära kast", |
// Color Picker |
ColorAutomatic : "Automaatne", |
ColorMoreColors : "Rohkem värve...", |
// Document Properties |
DocProps : "Dokumendi omadused", |
// Anchor Dialog |
DlgAnchorTitle : "Ankru omadused", |
DlgAnchorName : "Ankru nimi", |
DlgAnchorErrorName : "Palun sisest ankru nimi", |
// Speller Pages Dialog |
DlgSpellNotInDic : "Puudub sõnastikust", |
DlgSpellChangeTo : "Muuda", |
DlgSpellBtnIgnore : "Ignoreeri", |
DlgSpellBtnIgnoreAll : "Ignoreeri kõiki", |
DlgSpellBtnReplace : "Asenda", |
DlgSpellBtnReplaceAll : "Asenda kõik", |
DlgSpellBtnUndo : "Võta tagasi", |
DlgSpellNoSuggestions : "- Soovitused puuduvad -", |
DlgSpellProgress : "Toimub õigekirja kontroll...", |
DlgSpellNoMispell : "Õigekirja kontroll sooritatud: õigekirjuvigu ei leitud", |
DlgSpellNoChanges : "Õigekirja kontroll sooritatud: ühtegi sõna ei muudetud", |
DlgSpellOneChange : "Õigekirja kontroll sooritatud: üks sõna muudeti", |
DlgSpellManyChanges : "Õigekirja kontroll sooritatud: %1 sõna muudetud", |
IeSpellDownload : "Õigekirja kontrollija ei ole installeeritud. Soovid sa selle alla laadida?", |
// Button Dialog |
DlgButtonText : "Tekst (väärtus)", |
DlgButtonType : "Tüüp", |
DlgButtonTypeBtn : "Button", //MISSING |
DlgButtonTypeSbm : "Submit", //MISSING |
DlgButtonTypeRst : "Reset", //MISSING |
// Checkbox and Radio Button Dialogs |
DlgCheckboxName : "Nimi", |
DlgCheckboxValue : "Väärtus", |
DlgCheckboxSelected : "Valitud", |
// Form Dialog |
DlgFormName : "Nimi", |
DlgFormAction : "Toiming", |
DlgFormMethod : "Meetod", |
// Select Field Dialog |
DlgSelectName : "Nimi", |
DlgSelectValue : "Väärtus", |
DlgSelectSize : "Suurus", |
DlgSelectLines : "ridu", |
DlgSelectChkMulti : "Võimalda mitu valikut", |
DlgSelectOpAvail : "Võimalikud valikud", |
DlgSelectOpText : "Tekst", |
DlgSelectOpValue : "Väärtus", |
DlgSelectBtnAdd : "Lisa", |
DlgSelectBtnModify : "Muuda", |
DlgSelectBtnUp : "Üles", |
DlgSelectBtnDown : "Alla", |
DlgSelectBtnSetValue : "Sea valitud olekuna", |
DlgSelectBtnDelete : "Kustuta", |
// Textarea Dialog |
DlgTextareaName : "Nimi", |
DlgTextareaCols : "Veerge", |
DlgTextareaRows : "Ridu", |
// Text Field Dialog |
DlgTextName : "Nimi", |
DlgTextValue : "Väärtus", |
DlgTextCharWidth : "Laius (tähemärkides)", |
DlgTextMaxChars : "Maksimaalselt tähemärke", |
DlgTextType : "Tüüp", |
DlgTextTypeText : "Tekst", |
DlgTextTypePass : "Parool", |
// Hidden Field Dialog |
DlgHiddenName : "Nimi", |
DlgHiddenValue : "Väärtus", |
// Bulleted List Dialog |
BulletedListProp : "Täpitud loetelu omadused", |
NumberedListProp : "Nummerdatud loetelu omadused", |
DlgLstStart : "Start", //MISSING |
DlgLstType : "Tüüp", |
DlgLstTypeCircle : "Ring", |
DlgLstTypeDisc : "Ketas", |
DlgLstTypeSquare : "Ruut", |
DlgLstTypeNumbers : "Numbrid (1, 2, 3)", |
DlgLstTypeLCase : "Väiketähed (a, b, c)", |
DlgLstTypeUCase : "Suurtähed (A, B, C)", |
DlgLstTypeSRoman : "Väiksed Rooma numbrid (i, ii, iii)", |
DlgLstTypeLRoman : "Suured Rooma numbrid (I, II, III)", |
// Document Properties Dialog |
DlgDocGeneralTab : "Üldine", |
DlgDocBackTab : "Taust", |
DlgDocColorsTab : "Värvid ja veerised", |
DlgDocMetaTab : "Meta andmed", |
DlgDocPageTitle : "Lehekülje tiitel", |
DlgDocLangDir : "Kirja suund", |
DlgDocLangDirLTR : "Vasakult paremale (LTR)", |
DlgDocLangDirRTL : "Paremalt vasakule (RTL)", |
DlgDocLangCode : "Keele kood", |
DlgDocCharSet : "Märgistiku kodeering", |
DlgDocCharSetCE : "Central European", //MISSING |
DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING |
DlgDocCharSetCR : "Cyrillic", //MISSING |
DlgDocCharSetGR : "Greek", //MISSING |
DlgDocCharSetJP : "Japanese", //MISSING |
DlgDocCharSetKR : "Korean", //MISSING |
DlgDocCharSetTR : "Turkish", //MISSING |
DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING |
DlgDocCharSetWE : "Western European", //MISSING |
DlgDocCharSetOther : "Ülejäänud märgistike kodeeringud", |
DlgDocDocType : "Dokumendi tüüppäis", |
DlgDocDocTypeOther : "Teised dokumendi tüüppäised", |
DlgDocIncXHTML : "Arva kaasa XHTML deklaratsioonid", |
DlgDocBgColor : "Taustavärv", |
DlgDocBgImage : "Taustapildi URL", |
DlgDocBgNoScroll : "Mittekeritav tagataust", |
DlgDocCText : "Tekst", |
DlgDocCLink : "Link", |
DlgDocCVisited : "Külastatud link", |
DlgDocCActive : "Aktiivne link", |
DlgDocMargins : "Lehekülje äärised", |
DlgDocMaTop : "Ülaserv", |
DlgDocMaLeft : "Vasakserv", |
DlgDocMaRight : "Paremserv", |
DlgDocMaBottom : "Alaserv", |
DlgDocMeIndex : "Dokumendi võtmesõnad (eraldatud komadega)", |
DlgDocMeDescr : "Dokumendi kirjeldus", |
DlgDocMeAuthor : "Autor", |
DlgDocMeCopy : "Autoriõigus", |
DlgDocPreview : "Eelvaade", |
// Templates Dialog |
Templates : "Šabloon", |
DlgTemplatesTitle : "Sisu šabloonid", |
DlgTemplatesSelMsg : "Palun vali Å¡abloon, et avada see redaktoris<br />(praegune sisu läheb kaotsi):", |
DlgTemplatesLoading : "Laen šabloonide nimekirja. Palun oota...", |
DlgTemplatesNoTpl : "(Ühtegi Å¡ablooni ei ole defineeritud)", |
DlgTemplatesReplace : "Replace actual contents", //MISSING |
// About Dialog |
DlgAboutAboutTab : "Teave", |
DlgAboutBrowserInfoTab : "Interneti sirvija info", |
DlgAboutLicenseTab : "Litsents", |
DlgAboutVersion : "versioon", |
DlgAboutLicense : "Litsenseeritud GNU Lesser General Public License litsentsiga", |
DlgAboutInfo : "Täpsema info saamiseks mine" |
} |
/branches/v1.0-menes/api/fckeditor/editor/lang/hr.js |
---|
New file |
0,0 → 1,501 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: hr.js |
* Croatian language file. |
* |
* File Authors: |
* Alex Varga (avarga@globaldizajn.hr) |
*/ |
var FCKLang = |
{ |
// Language direction : "ltr" (left to right) or "rtl" (right to left). |
Dir : "ltr", |
ToolbarCollapse : "Smanji trake s alatima", |
ToolbarExpand : "Proširi trake s alatima", |
// Toolbar Items and Context Menu |
Save : "Snimi", |
NewPage : "Nova stranica", |
Preview : "Pregledaj", |
Cut : "Izreži", |
Copy : "Kopiraj", |
Paste : "Zalijepi", |
PasteText : "Zalijepi kao čisti tekst", |
PasteWord : "Zalijepi iz Worda", |
Print : "Ispiši", |
SelectAll : "Odaberi sve", |
RemoveFormat : "Ukloni formatiranje", |
InsertLinkLbl : "Link", |
InsertLink : "Ubaci/promijeni link", |
RemoveLink : "Ukloni link", |
Anchor : "Ubaci/promijeni sidro", |
InsertImageLbl : "Slika", |
InsertImage : "Ubaci/promijeni sliku", |
InsertFlashLbl : "Flash", |
InsertFlash : "Ubaci/promijeni Flash", |
InsertTableLbl : "Tablica", |
InsertTable : "Ubaci/promijeni tablicu", |
InsertLineLbl : "Linija", |
InsertLine : "Ubaci vodoravnu liniju", |
InsertSpecialCharLbl: "Posebni karakteri", |
InsertSpecialChar : "Ubaci posebne znakove", |
InsertSmileyLbl : "Smješko", |
InsertSmiley : "Ubaci smješka", |
About : "O FCKeditoru", |
Bold : "Podebljaj", |
Italic : "Ukosi", |
Underline : "Potcrtano", |
StrikeThrough : "Precrtano", |
Subscript : "Subscript", |
Superscript : "Superscript", |
LeftJustify : "Lijevo poravnanje", |
CenterJustify : "Središnje poravnanje", |
RightJustify : "Desno poravnanje", |
BlockJustify : "Blok poravnanje", |
DecreaseIndent : "Pomakni ulijevo", |
IncreaseIndent : "Pomakni udesno", |
Undo : "Poništi", |
Redo : "Ponovi", |
NumberedListLbl : "Brojčana lista", |
NumberedList : "Ubaci/ukloni brojčanu listu", |
BulletedListLbl : "Obična lista", |
BulletedList : "Ubaci/ukloni običnu listu", |
ShowTableBorders : "Prikaži okvir tablice", |
ShowDetails : "Prikaži detalje", |
Style : "Stil", |
FontFormat : "Format", |
Font : "Font", |
FontSize : "Veličina", |
TextColor : "Boja teksta", |
BGColor : "Boja pozadine", |
Source : "Kôd", |
Find : "Pronađi", |
Replace : "Zamijeni", |
SpellCheck : "Provjeri pravopis", |
UniversalKeyboard : "Univerzalna tipkovnica", |
PageBreakLbl : "Prijelom stranice", |
PageBreak : "Ubaci prijelom stranice", |
Form : "Form", |
Checkbox : "Checkbox", |
RadioButton : "Radio Button", |
TextField : "Text Field", |
Textarea : "Textarea", |
HiddenField : "Hidden Field", |
Button : "Button", |
SelectionField : "Selection Field", |
ImageButton : "Image Button", |
FitWindow : "Povećaj veličinu editora", |
// Context Menu |
EditLink : "Promijeni link", |
CellCM : "Ćelija", |
RowCM : "Red", |
ColumnCM : "Kolona", |
InsertRow : "Ubaci red", |
DeleteRows : "Izbriši redove", |
InsertColumn : "Ubaci kolonu", |
DeleteColumns : "Izbriši kolone", |
InsertCell : "Ubaci ćelije", |
DeleteCells : "Izbriši ćelije", |
MergeCells : "Spoji ćelije", |
SplitCell : "Razdvoji ćelije", |
TableDelete : "Izbriši tablicu", |
CellProperties : "Svojstva ćelije", |
TableProperties : "Svojstva tablice", |
ImageProperties : "Svojstva slike", |
FlashProperties : "Flash svojstva", |
AnchorProp : "Svojstva sidra", |
ButtonProp : "Image Button svojstva", |
CheckboxProp : "Checkbox svojstva", |
HiddenFieldProp : "Hidden Field svojstva", |
RadioButtonProp : "Radio Button svojstva", |
ImageButtonProp : "Image Button svojstva", |
TextFieldProp : "Text Field svojstva", |
SelectionFieldProp : "Selection svojstva", |
TextareaProp : "Textarea svojstva", |
FormProp : "Form svojstva", |
FontFormats : "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Normal (DIV)", |
// Alerts and Messages |
ProcessingXHTML : "Obrađujem XHTML. Molimo pričekajte...", |
Done : "Završio", |
PasteWordConfirm : "Tekst koji želite zalijepiti čini se da je kopiran iz Worda. Želite li prije očistiti tekst?", |
NotCompatiblePaste : "Ova naredba je dostupna samo u Internet Exploreru 5.5 ili novijem. Želite li nastaviti bez čišćenja?", |
UnknownToolbarItem : "Nepoznati član trake s alatima \"%1\"", |
UnknownCommand : "Nepoznata naredba \"%1\"", |
NotImplemented : "Naredba nije implementirana", |
UnknownToolbarSet : "Traka s alatima \"%1\" ne postoji", |
NoActiveX : "Vaše postavke pretraživača mogle bi ograničiti neke od mogućnosti editora. Morate uključiti opciju \"Run ActiveX controls and plug-ins\" u postavkama. Ukoliko to ne učinite, moguće su razliite greške tijekom rada.", |
BrowseServerBlocked : "Pretraivač nije moguće otvoriti. Provjerite da li je uključeno blokiranje pop-up prozora.", |
DialogBlocked : "Nije moguće otvoriti novi prozor. Provjerite da li je uključeno blokiranje pop-up prozora.", |
// Dialogs |
DlgBtnOK : "OK", |
DlgBtnCancel : "Poništi", |
DlgBtnClose : "Zatvori", |
DlgBtnBrowseServer : "Pretraži server", |
DlgAdvancedTag : "Napredno", |
DlgOpOther : "<Drugo>", |
DlgInfoTab : "Info", |
DlgAlertUrl : "Molimo unesite URL", |
// General Dialogs Labels |
DlgGenNotSet : "<nije postavljeno>", |
DlgGenId : "Id", |
DlgGenLangDir : "Smjer jezika", |
DlgGenLangDirLtr : "S lijeva na desno (LTR)", |
DlgGenLangDirRtl : "S desna na lijevo (RTL)", |
DlgGenLangCode : "Kôd jezika", |
DlgGenAccessKey : "Pristupna tipka", |
DlgGenName : "Naziv", |
DlgGenTabIndex : "Tab Indeks", |
DlgGenLongDescr : "Dugački opis URL", |
DlgGenClass : "Stylesheet klase", |
DlgGenTitle : "Advisory naslov", |
DlgGenContType : "Advisory vrsta sadržaja", |
DlgGenLinkCharset : "Kodna stranica povezanih resursa", |
DlgGenStyle : "Stil", |
// Image Dialog |
DlgImgTitle : "Svojstva slika", |
DlgImgInfoTab : "Info slike", |
DlgImgBtnUpload : "Pošalji na server", |
DlgImgURL : "URL", |
DlgImgUpload : "Pošalji", |
DlgImgAlt : "Alternativni tekst", |
DlgImgWidth : "Širina", |
DlgImgHeight : "Visina", |
DlgImgLockRatio : "Zaključaj odnos", |
DlgBtnResetSize : "Obriši veličinu", |
DlgImgBorder : "Okvir", |
DlgImgHSpace : "HSpace", |
DlgImgVSpace : "VSpace", |
DlgImgAlign : "Poravnaj", |
DlgImgAlignLeft : "Lijevo", |
DlgImgAlignAbsBottom: "Abs dolje", |
DlgImgAlignAbsMiddle: "Abs sredina", |
DlgImgAlignBaseline : "Bazno", |
DlgImgAlignBottom : "Dolje", |
DlgImgAlignMiddle : "Sredina", |
DlgImgAlignRight : "Desno", |
DlgImgAlignTextTop : "Vrh teksta", |
DlgImgAlignTop : "Vrh", |
DlgImgPreview : "Pregledaj", |
DlgImgAlertUrl : "Unesite URL slike", |
DlgImgLinkTab : "Link", |
// Flash Dialog |
DlgFlashTitle : "Flash svojstva", |
DlgFlashChkPlay : "Auto Play", |
DlgFlashChkLoop : "Ponavljaj", |
DlgFlashChkMenu : "Omogući Flash izbornik", |
DlgFlashScale : "Omjer", |
DlgFlashScaleAll : "Prikaži sve", |
DlgFlashScaleNoBorder : "Bez okvira", |
DlgFlashScaleFit : "Točna veličina", |
// Link Dialog |
DlgLnkWindowTitle : "Link", |
DlgLnkInfoTab : "Link Info", |
DlgLnkTargetTab : "Meta", |
DlgLnkType : "Link vrsta", |
DlgLnkTypeURL : "URL", |
DlgLnkTypeAnchor : "Sidro na ovoj stranici", |
DlgLnkTypeEMail : "E-Mail", |
DlgLnkProto : "Protokol", |
DlgLnkProtoOther : "<drugo>", |
DlgLnkURL : "URL", |
DlgLnkAnchorSel : "Odaberi sidro", |
DlgLnkAnchorByName : "Po nazivu sidra", |
DlgLnkAnchorById : "Po Id elementa", |
DlgLnkNoAnchors : "<Nema dostupnih sidra>", |
DlgLnkEMail : "E-Mail adresa", |
DlgLnkEMailSubject : "Naslov", |
DlgLnkEMailBody : "Sadržaj poruke", |
DlgLnkUpload : "Pošalji", |
DlgLnkBtnUpload : "Pošalji na server", |
DlgLnkTarget : "Meta", |
DlgLnkTargetFrame : "<okvir>", |
DlgLnkTargetPopup : "<popup prozor>", |
DlgLnkTargetBlank : "Novi prozor (_blank)", |
DlgLnkTargetParent : "Roditeljski prozor (_parent)", |
DlgLnkTargetSelf : "Isti prozor (_self)", |
DlgLnkTargetTop : "Vršni prozor (_top)", |
DlgLnkTargetFrameName : "Ime ciljnog okvira", |
DlgLnkPopWinName : "Naziv popup prozora", |
DlgLnkPopWinFeat : "Mogućnosti popup prozora", |
DlgLnkPopResize : "Promjenljive veličine", |
DlgLnkPopLocation : "Traka za lokaciju", |
DlgLnkPopMenu : "Izborna traka", |
DlgLnkPopScroll : "Scroll traka", |
DlgLnkPopStatus : "Statusna traka", |
DlgLnkPopToolbar : "Traka s alatima", |
DlgLnkPopFullScrn : "Cijeli ekran (IE)", |
DlgLnkPopDependent : "Ovisno (Netscape)", |
DlgLnkPopWidth : "Širina", |
DlgLnkPopHeight : "Visina", |
DlgLnkPopLeft : "Lijeva pozicija", |
DlgLnkPopTop : "Gornja pozicija", |
DlnLnkMsgNoUrl : "Molimo upišite URL link", |
DlnLnkMsgNoEMail : "Molimo upišite e-mail adresu", |
DlnLnkMsgNoAnchor : "Molimo odaberite sidro", |
DlnLnkMsgInvPopName : "Ime popup prozora mora početi sa slovom i ne smije sadržavati razmake", |
// Color Dialog |
DlgColorTitle : "Odaberite boju", |
DlgColorBtnClear : "Obriši", |
DlgColorHighlight : "Osvijetli", |
DlgColorSelected : "Odaberi", |
// Smiley Dialog |
DlgSmileyTitle : "Ubaci smješka", |
// Special Character Dialog |
DlgSpecialCharTitle : "Odaberite posebni karakter", |
// Table Dialog |
DlgTableTitle : "Svojstva tablice", |
DlgTableRows : "Redova", |
DlgTableColumns : "Kolona", |
DlgTableBorder : "Veličina okvira", |
DlgTableAlign : "Poravnanje", |
DlgTableAlignNotSet : "<nije postavljeno>", |
DlgTableAlignLeft : "Lijevo", |
DlgTableAlignCenter : "Središnje", |
DlgTableAlignRight : "Desno", |
DlgTableWidth : "Širina", |
DlgTableWidthPx : "piksela", |
DlgTableWidthPc : "postotaka", |
DlgTableHeight : "Visina", |
DlgTableCellSpace : "Prostornost ćelija", |
DlgTableCellPad : "Razmak ćelija", |
DlgTableCaption : "Naslov", |
DlgTableSummary : "Sažetak", |
// Table Cell Dialog |
DlgCellTitle : "Svojstva ćelije", |
DlgCellWidth : "Širina", |
DlgCellWidthPx : "piksela", |
DlgCellWidthPc : "postotaka", |
DlgCellHeight : "Visina", |
DlgCellWordWrap : "Word Wrap", |
DlgCellWordWrapNotSet : "<nije postavljeno>", |
DlgCellWordWrapYes : "Da", |
DlgCellWordWrapNo : "Ne", |
DlgCellHorAlign : "Vodoravno poravnanje", |
DlgCellHorAlignNotSet : "<nije postavljeno>", |
DlgCellHorAlignLeft : "Lijevo", |
DlgCellHorAlignCenter : "Središnje", |
DlgCellHorAlignRight: "Desno", |
DlgCellVerAlign : "Okomito poravnanje", |
DlgCellVerAlignNotSet : "<nije postavljeno>", |
DlgCellVerAlignTop : "Gornje", |
DlgCellVerAlignMiddle : "Srednišnje", |
DlgCellVerAlignBottom : "Donje", |
DlgCellVerAlignBaseline : "Bazno", |
DlgCellRowSpan : "Spajanje redova", |
DlgCellCollSpan : "Spajanje kolona", |
DlgCellBackColor : "Boja pozadine", |
DlgCellBorderColor : "Boja okvira", |
DlgCellBtnSelect : "Odaberi...", |
// Find Dialog |
DlgFindTitle : "Pronađi", |
DlgFindFindBtn : "Pronađi", |
DlgFindNotFoundMsg : "Traženi tekst nije pronađen.", |
// Replace Dialog |
DlgReplaceTitle : "Zamijeni", |
DlgReplaceFindLbl : "Pronađi:", |
DlgReplaceReplaceLbl : "Zamijeni s:", |
DlgReplaceCaseChk : "Usporedi mala/velika slova", |
DlgReplaceReplaceBtn : "Zamijeni", |
DlgReplaceReplAllBtn : "Zamijeni sve", |
DlgReplaceWordChk : "Usporedi cijele riječi", |
// Paste Operations / Dialog |
PasteErrorPaste : "Sigurnosne postavke Vašeg pretraživača ne dozvoljavaju operacije automatskog ljepljenja. Molimo koristite kraticu na tipkovnici (Ctrl+V).", |
PasteErrorCut : "Sigurnosne postavke Vašeg pretraživača ne dozvoljavaju operacije automatskog izrezivanja. Molimo koristite kraticu na tipkovnici (Ctrl+X).", |
PasteErrorCopy : "Sigurnosne postavke Vašeg pretraživača ne dozvoljavaju operacije automatskog kopiranja. Molimo koristite kraticu na tipkovnici (Ctrl+C).", |
PasteAsText : "Zalijepi kao čisti tekst", |
PasteFromWord : "Zalijepi iz Worda", |
DlgPasteMsg2 : "Molimo zaljepite unutar doljnjeg okvira koristeći tipkovnicu (<STRONG>Ctrl+V</STRONG>) i kliknite <STRONG>OK</STRONG>.", |
DlgPasteIgnoreFont : "Zanemari definiciju vrste fonta", |
DlgPasteRemoveStyles : "Ukloni definicije stilova", |
DlgPasteCleanBox : "Očisti okvir", |
// Color Picker |
ColorAutomatic : "Automatski", |
ColorMoreColors : "Više boja...", |
// Document Properties |
DocProps : "Svojstva dokumenta", |
// Anchor Dialog |
DlgAnchorTitle : "Svojstva sidra", |
DlgAnchorName : "Ime sidra", |
DlgAnchorErrorName : "Molimo unesite ime sidra", |
// Speller Pages Dialog |
DlgSpellNotInDic : "Nije u rječniku", |
DlgSpellChangeTo : "Promijeni u", |
DlgSpellBtnIgnore : "Zanemari", |
DlgSpellBtnIgnoreAll : "Zanemari sve", |
DlgSpellBtnReplace : "Zamijeni", |
DlgSpellBtnReplaceAll : "Zamijeni sve", |
DlgSpellBtnUndo : "Vrati", |
DlgSpellNoSuggestions : "-Nema preporuke-", |
DlgSpellProgress : "Provjera u tijeku...", |
DlgSpellNoMispell : "Provjera završena: Nema grešaka", |
DlgSpellNoChanges : "Provjera završena: Nije napravljena promjena", |
DlgSpellOneChange : "Provjera završena: Jedna riječ promjenjena", |
DlgSpellManyChanges : "Provjera završena: Promijenjeno %1 riječi", |
IeSpellDownload : "Provjera pravopisa nije instalirana. Želite li skinuti provjeru pravopisa?", |
// Button Dialog |
DlgButtonText : "Tekst (vrijednost)", |
DlgButtonType : "Vrsta", |
DlgButtonTypeBtn : "Gumb", |
DlgButtonTypeSbm : "Pošalji", |
DlgButtonTypeRst : "Poništi", |
// Checkbox and Radio Button Dialogs |
DlgCheckboxName : "Ime", |
DlgCheckboxValue : "Vrijednost", |
DlgCheckboxSelected : "Odabrano", |
// Form Dialog |
DlgFormName : "Ime", |
DlgFormAction : "Akcija", |
DlgFormMethod : "Metoda", |
// Select Field Dialog |
DlgSelectName : "Ime", |
DlgSelectValue : "Vrijednost", |
DlgSelectSize : "Veličina", |
DlgSelectLines : "linija", |
DlgSelectChkMulti : "Dozvoli višestruki odabir", |
DlgSelectOpAvail : "Dostupne opcije", |
DlgSelectOpText : "Tekst", |
DlgSelectOpValue : "Vrijednost", |
DlgSelectBtnAdd : "Dodaj", |
DlgSelectBtnModify : "Promijeni", |
DlgSelectBtnUp : "Gore", |
DlgSelectBtnDown : "Dolje", |
DlgSelectBtnSetValue : "Postavi kao odabranu vrijednost", |
DlgSelectBtnDelete : "Obriši", |
// Textarea Dialog |
DlgTextareaName : "Ime", |
DlgTextareaCols : "Kolona", |
DlgTextareaRows : "Redova", |
// Text Field Dialog |
DlgTextName : "Ime", |
DlgTextValue : "Vrijednost", |
DlgTextCharWidth : "Širina", |
DlgTextMaxChars : "Najviše karaktera", |
DlgTextType : "Vrsta", |
DlgTextTypeText : "Tekst", |
DlgTextTypePass : "Šifra", |
// Hidden Field Dialog |
DlgHiddenName : "Ime", |
DlgHiddenValue : "Vrijednost", |
// Bulleted List Dialog |
BulletedListProp : "Svojstva liste", |
NumberedListProp : "Svojstva brojčane liste", |
DlgLstStart : "Početak", |
DlgLstType : "Vrsta", |
DlgLstTypeCircle : "Krug", |
DlgLstTypeDisc : "Disk", |
DlgLstTypeSquare : "Kvadrat", |
DlgLstTypeNumbers : "Brojevi (1, 2, 3)", |
DlgLstTypeLCase : "Mala slova (a, b, c)", |
DlgLstTypeUCase : "Velika slova (A, B, C)", |
DlgLstTypeSRoman : "Male rimske brojke (i, ii, iii)", |
DlgLstTypeLRoman : "Velike rimske brojke (I, II, III)", |
// Document Properties Dialog |
DlgDocGeneralTab : "Općenito", |
DlgDocBackTab : "Pozadina", |
DlgDocColorsTab : "Boje i margine", |
DlgDocMetaTab : "Meta Data", |
DlgDocPageTitle : "Naslov stranice", |
DlgDocLangDir : "Smjer jezika", |
DlgDocLangDirLTR : "S lijeva na desno", |
DlgDocLangDirRTL : "S desna na lijevo", |
DlgDocLangCode : "Kôd jezika", |
DlgDocCharSet : "Enkodiranje znakova", |
DlgDocCharSetCE : "Središnja Europa", |
DlgDocCharSetCT : "Tradicionalna kineska (Big5)", |
DlgDocCharSetCR : "Ćirilica", |
DlgDocCharSetGR : "Grčka", |
DlgDocCharSetJP : "Japanska", |
DlgDocCharSetKR : "Koreanska", |
DlgDocCharSetTR : "Turska", |
DlgDocCharSetUN : "Unicode (UTF-8)", |
DlgDocCharSetWE : "Zapadna Europa", |
DlgDocCharSetOther : "Ostalo enkodiranje znakova", |
DlgDocDocType : "Zaglavlje vrste dokumenta", |
DlgDocDocTypeOther : "Ostalo zaglavlje vrste dokumenta", |
DlgDocIncXHTML : "Ubaci XHTML deklaracije", |
DlgDocBgColor : "Boja pozadine", |
DlgDocBgImage : "URL slike pozadine", |
DlgDocBgNoScroll : "Pozadine se ne pomiče", |
DlgDocCText : "Tekst", |
DlgDocCLink : "Link", |
DlgDocCVisited : "Posjećeni link", |
DlgDocCActive : "Aktivni link", |
DlgDocMargins : "Margine stranice", |
DlgDocMaTop : "Vrh", |
DlgDocMaLeft : "Lijevo", |
DlgDocMaRight : "Desno", |
DlgDocMaBottom : "Dolje", |
DlgDocMeIndex : "Ključne riječi dokumenta (odvojene zarezom)", |
DlgDocMeDescr : "Opis dokumenta", |
DlgDocMeAuthor : "Autor", |
DlgDocMeCopy : "Autorska prava", |
DlgDocPreview : "Pregledaj", |
// Templates Dialog |
Templates : "Predlošci", |
DlgTemplatesTitle : "Predlošci sadržaja", |
DlgTemplatesSelMsg : "Molimo odaberite predložak koji želite otvoriti<br>(stvarni sadržaj će biti izgubljen):", |
DlgTemplatesLoading : "Učitavam listu predložaka. Molimo pričekajte...", |
DlgTemplatesNoTpl : "(Nema definiranih predložaka)", |
DlgTemplatesReplace : "Zamijeni trenutne sadržaje", |
// About Dialog |
DlgAboutAboutTab : "O FCKEditoru", |
DlgAboutBrowserInfoTab : "Podaci o pretraživaču", |
DlgAboutLicenseTab : "Licenca", |
DlgAboutVersion : "inačica", |
DlgAboutLicense : "Licencirano pod uvjetima GNU Lesser General Public License", |
DlgAboutInfo : "Za više informacija posjetite" |
} |
/branches/v1.0-menes/api/fckeditor/editor/lang/nl.js |
---|
New file |
0,0 → 1,502 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: nl.js |
* Dutch language file. |
* |
* File Authors: |
* Bram Crins (bcrins@realdesign.nl) |
* Aaron van Geffen (aaron@aaronweb.net) |
*/ |
var FCKLang = |
{ |
// Language direction : "ltr" (left to right) or "rtl" (right to left). |
Dir : "ltr", |
ToolbarCollapse : "Menubalk inklappen", |
ToolbarExpand : "Menubalk uitklappen", |
// Toolbar Items and Context Menu |
Save : "Opslaan", |
NewPage : "Nieuwe pagina", |
Preview : "Voorbeeld", |
Cut : "Knippen", |
Copy : "Kopiëren", |
Paste : "Plakken", |
PasteText : "Plakken als platte tekst", |
PasteWord : "Plakken als Word-gegevens", |
Print : "Printen", |
SelectAll : "Alles selecteren", |
RemoveFormat : "Opmaak verwijderen", |
InsertLinkLbl : "Link", |
InsertLink : "Invoegen/Wijzigen link", |
RemoveLink : "Verwijderen link", |
Anchor : "Interne link", |
InsertImageLbl : "Afbeelding", |
InsertImage : "Invoegen/Wijzigen afbeelding", |
InsertFlashLbl : "Flash", |
InsertFlash : "Invoegen/Wijzigen Flash", |
InsertTableLbl : "Tabel", |
InsertTable : "Invoegen/Wijzigen tabel", |
InsertLineLbl : "Lijn", |
InsertLine : "Invoegen horizontale lijn", |
InsertSpecialCharLbl: "Speciale tekens", |
InsertSpecialChar : "Speciaal teken invoegen", |
InsertSmileyLbl : "Smiley", |
InsertSmiley : "Smiley invoegen", |
About : "Over FCKeditor", |
Bold : "Vet", |
Italic : "Schuingedrukt", |
Underline : "Onderstreept", |
StrikeThrough : "Doorhalen", |
Subscript : "Subscript", |
Superscript : "Superscript", |
LeftJustify : "Links uitlijnen", |
CenterJustify : "Centreren", |
RightJustify : "Rechts uitlijnen", |
BlockJustify : "Uitvullen", |
DecreaseIndent : "Oplopenend", |
IncreaseIndent : "Aflopend", |
Undo : "Ongedaan maken", |
Redo : "Opnieuw", |
NumberedListLbl : "Genummerde lijst", |
NumberedList : "Invoegen/Verwijderen genummerde lijst", |
BulletedListLbl : "Opsomming", |
BulletedList : "Invoegen/Verwijderen opsomming", |
ShowTableBorders : "Randen tabel weergeven", |
ShowDetails : "Details weergeven", |
Style : "Stijl", |
FontFormat : "Opmaak", |
Font : "Lettertype", |
FontSize : "Grootte", |
TextColor : "Tekstkleur", |
BGColor : "Achtergrondkleur", |
Source : "Code", |
Find : "Zoeken", |
Replace : "Vervangen", |
SpellCheck : "Spellingscontrole", |
UniversalKeyboard : "Universeel toetsenbord", |
PageBreakLbl : "Pagina-einde", |
PageBreak : "Pagina-einde invoegen", |
Form : "Formulier", |
Checkbox : "Aanvinkvakje", |
RadioButton : "Selectievakje", |
TextField : "Tekstveld", |
Textarea : "Tekstvak", |
HiddenField : "Verborgen veld", |
Button : "Knop", |
SelectionField : "Selectieveld", |
ImageButton : "Afbeeldingsknop", |
FitWindow : "De editor maximaliseren", |
// Context Menu |
EditLink : "Link wijzigen", |
CellCM : "Cel", |
RowCM : "Rij", |
ColumnCM : "Kolom", |
InsertRow : "Rij invoegen", |
DeleteRows : "Rijen verwijderen", |
InsertColumn : "Kolom invoegen", |
DeleteColumns : "Kolommen verwijderen", |
InsertCell : "Cel", |
DeleteCells : "Cellen verwijderen", |
MergeCells : "Cellen samenvoegen", |
SplitCell : "Cellen splitsen", |
TableDelete : "Tabel verwijderen", |
CellProperties : "Eigenschappen cel", |
TableProperties : "Eigenschappen tabel", |
ImageProperties : "Eigenschappen afbeelding", |
FlashProperties : "Eigenschappen Flash", |
AnchorProp : "Eigenschappen interne link", |
ButtonProp : "Eigenschappen knop", |
CheckboxProp : "Eigenschappen aanvinkvakje", |
HiddenFieldProp : "Eigenschappen verborgen veld", |
RadioButtonProp : "Eigenschappen selectievakje", |
ImageButtonProp : "Eigenschappen afbeeldingsknop", |
TextFieldProp : "Eigenschappen tekstveld", |
SelectionFieldProp : "Eigenschappen selectieveld", |
TextareaProp : "Eigenschappen tekstvak", |
FormProp : "Eigenschappen formulier", |
FontFormats : "Normaal;Met opmaak;Adres;Kop 1;Kop 2;Kop 3;Kop 4;Kop 5;Kop 6;Normaal (DIV)", |
// Alerts and Messages |
ProcessingXHTML : "Verwerken XHTML. Even geduld aub...", |
Done : "Klaar", |
PasteWordConfirm : "De tekst die je plakte lijkt gekopieerd uit te zijn Word. Wil je de tekst opschonen voordat deze geplakt wordt?", |
NotCompatiblePaste : "Deze opdracht is beschikbaar voor Internet Explorer versie 5.5 of hoger. Wil je plakken zonder op te schonen?", |
UnknownToolbarItem : "Onbekend item op menubalk \"%1\"", |
UnknownCommand : "Onbekende opdrachtnaam: \"%1\"", |
NotImplemented : "Opdracht niet geïmplementeerd.", |
UnknownToolbarSet : "Menubalk \"%1\" bestaat niet.", |
NoActiveX : "De beveilingsinstellingen van je browser zouden sommige functies van de editor kunnen beperken. De optie \"Activeer ActiveX-elementen en plug-ins\" dient ingeschakeld te worden. Het kan zijn dat er nu functies ontbreken of niet werken.", |
BrowseServerBlocked : "De bestandsbrowser kon niet geopend worden. Zorg ervoor dat pop-up-blokkeerders uit staan.", |
DialogBlocked : "Kan het dialoogvenster niet weergeven. Zorg ervoor dat pop-up-blokkeerders uit staan.", |
// Dialogs |
DlgBtnOK : "OK", |
DlgBtnCancel : "Annuleren", |
DlgBtnClose : "Afsluiten", |
DlgBtnBrowseServer : "Bladeren op server", |
DlgAdvancedTag : "Geavanceerd", |
DlgOpOther : "<Anders>", |
DlgInfoTab : "Informatie", |
DlgAlertUrl : "Geef URL op", |
// General Dialogs Labels |
DlgGenNotSet : "<niet ingevuld>", |
DlgGenId : "Kenmerk", |
DlgGenLangDir : "Schrijfrichting", |
DlgGenLangDirLtr : "Links naar rechts (LTR)", |
DlgGenLangDirRtl : "Rechts naar links (RTL)", |
DlgGenLangCode : "Codetaal", |
DlgGenAccessKey : "Toegangstoets", |
DlgGenName : "Naam", |
DlgGenTabIndex : "Tabvolgorde", |
DlgGenLongDescr : "Lange URL-omschrijving", |
DlgGenClass : "Stylesheet-klassen", |
DlgGenTitle : "Aanbevolen titel", |
DlgGenContType : "Aanbevolen content-type", |
DlgGenLinkCharset : "Karakterset van gelinkte bron", |
DlgGenStyle : "Stijl", |
// Image Dialog |
DlgImgTitle : "Eigenschappen afbeelding", |
DlgImgInfoTab : "Informatie afbeelding", |
DlgImgBtnUpload : "Naar server verzenden", |
DlgImgURL : "URL", |
DlgImgUpload : "Upload", |
DlgImgAlt : "Alternatieve tekst", |
DlgImgWidth : "Breedte", |
DlgImgHeight : "Hoogte", |
DlgImgLockRatio : "Afmetingen vergrendelen", |
DlgBtnResetSize : "Afmetingen resetten", |
DlgImgBorder : "Rand", |
DlgImgHSpace : "HSpace", |
DlgImgVSpace : "VSpace", |
DlgImgAlign : "Uitlijning", |
DlgImgAlignLeft : "Links", |
DlgImgAlignAbsBottom: "Absoluut-onder", |
DlgImgAlignAbsMiddle: "Absoluut-midden", |
DlgImgAlignBaseline : "Basislijn", |
DlgImgAlignBottom : "Beneden", |
DlgImgAlignMiddle : "Midden", |
DlgImgAlignRight : "Rechts", |
DlgImgAlignTextTop : "Boven tekst", |
DlgImgAlignTop : "Boven", |
DlgImgPreview : "Voorbeeld", |
DlgImgAlertUrl : "Geef de URL van de afbeelding", |
DlgImgLinkTab : "Link", |
// Flash Dialog |
DlgFlashTitle : "Eigenschappen Flash", |
DlgFlashChkPlay : "Automatisch afspelen", |
DlgFlashChkLoop : "Herhalen", |
DlgFlashChkMenu : "Flashmenu\'s inschakelen", |
DlgFlashScale : "Schaal", |
DlgFlashScaleAll : "Alles tonen", |
DlgFlashScaleNoBorder : "Geen rand", |
DlgFlashScaleFit : "Precies passend", |
// Link Dialog |
DlgLnkWindowTitle : "Link", |
DlgLnkInfoTab : "Linkomschrijving", |
DlgLnkTargetTab : "Doel", |
DlgLnkType : "Linktype", |
DlgLnkTypeURL : "URL", |
DlgLnkTypeAnchor : "Interne link in pagina", |
DlgLnkTypeEMail : "E-mail", |
DlgLnkProto : "Protocol", |
DlgLnkProtoOther : "<anders>", |
DlgLnkURL : "URL", |
DlgLnkAnchorSel : "Kies een interne link", |
DlgLnkAnchorByName : "Op naam interne link", |
DlgLnkAnchorById : "Op kenmerk interne link", |
DlgLnkNoAnchors : "<Geen interne links in document gevonden.>", |
DlgLnkEMail : "E-mailadres", |
DlgLnkEMailSubject : "Onderwerp bericht", |
DlgLnkEMailBody : "Inhoud bericht", |
DlgLnkUpload : "Upload", |
DlgLnkBtnUpload : "Naar de server versturen", |
DlgLnkTarget : "Doel", |
DlgLnkTargetFrame : "<frame>", |
DlgLnkTargetPopup : "<popup window>", |
DlgLnkTargetBlank : "Nieuw venster (_blank)", |
DlgLnkTargetParent : "Origineel venster (_parent)", |
DlgLnkTargetSelf : "Zelfde venster (_self)", |
DlgLnkTargetTop : "Hele venster (_top)", |
DlgLnkTargetFrameName : "Naam doelframe", |
DlgLnkPopWinName : "Naam popupvenster", |
DlgLnkPopWinFeat : "Instellingen popupvenster", |
DlgLnkPopResize : "Grootte wijzigen", |
DlgLnkPopLocation : "Locatiemenu", |
DlgLnkPopMenu : "Menubalk", |
DlgLnkPopScroll : "Schuifbalken", |
DlgLnkPopStatus : "Statusbalk", |
DlgLnkPopToolbar : "Menubalk", |
DlgLnkPopFullScrn : "Volledig scherm (IE)", |
DlgLnkPopDependent : "Afhankelijk (Netscape)", |
DlgLnkPopWidth : "Breedte", |
DlgLnkPopHeight : "Hoogte", |
DlgLnkPopLeft : "Positie links", |
DlgLnkPopTop : "Positie boven", |
DlnLnkMsgNoUrl : "Geef de link van de URL", |
DlnLnkMsgNoEMail : "Geef een e-mailadres", |
DlnLnkMsgNoAnchor : "Selecteer een interne link", |
DlnLnkMsgInvPopName : "De naam van de popup moet met een alfa-numerieke waarde beginnen, en mag geen spaties bevatten.", |
// Color Dialog |
DlgColorTitle : "Selecteer kleur", |
DlgColorBtnClear : "Opschonen", |
DlgColorHighlight : "Accentueren", |
DlgColorSelected : "Geselecteerd", |
// Smiley Dialog |
DlgSmileyTitle : "Smiley invoegen", |
// Special Character Dialog |
DlgSpecialCharTitle : "Selecteer speciaal teken", |
// Table Dialog |
DlgTableTitle : "Eigenschappen tabel", |
DlgTableRows : "Rijen", |
DlgTableColumns : "Kolommen", |
DlgTableBorder : "Breedte rand", |
DlgTableAlign : "Uitlijning", |
DlgTableAlignNotSet : "<Niet ingevoerd>", |
DlgTableAlignLeft : "Links", |
DlgTableAlignCenter : "Centreren", |
DlgTableAlignRight : "Rechts", |
DlgTableWidth : "Breedte", |
DlgTableWidthPx : "pixels", |
DlgTableWidthPc : "procent", |
DlgTableHeight : "Hoogte", |
DlgTableCellSpace : "Afstand tussen cellen", |
DlgTableCellPad : "Afstand vanaf rand cel", |
DlgTableCaption : "Naam", |
DlgTableSummary : "Samenvatting", |
// Table Cell Dialog |
DlgCellTitle : "Eigenschappen cel", |
DlgCellWidth : "Breedte", |
DlgCellWidthPx : "pixels", |
DlgCellWidthPc : "procent", |
DlgCellHeight : "Hoogte", |
DlgCellWordWrap : "Afbreken woorden", |
DlgCellWordWrapNotSet : "<Niet ingevoerd>", |
DlgCellWordWrapYes : "Ja", |
DlgCellWordWrapNo : "Nee", |
DlgCellHorAlign : "Horizontale uitlijning", |
DlgCellHorAlignNotSet : "<Niet ingevoerd>", |
DlgCellHorAlignLeft : "Links", |
DlgCellHorAlignCenter : "Centreren", |
DlgCellHorAlignRight: "Rechts", |
DlgCellVerAlign : "Verticale uitlijning", |
DlgCellVerAlignNotSet : "<Niet ingevoerd>", |
DlgCellVerAlignTop : "Boven", |
DlgCellVerAlignMiddle : "Midden", |
DlgCellVerAlignBottom : "Beneden", |
DlgCellVerAlignBaseline : "Basislijn", |
DlgCellRowSpan : "Overkoepeling rijen", |
DlgCellCollSpan : "Overkoepeling kolommen", |
DlgCellBackColor : "Achtergrondkleur", |
DlgCellBorderColor : "Randkleur", |
DlgCellBtnSelect : "Selecteren...", |
// Find Dialog |
DlgFindTitle : "Zoeken", |
DlgFindFindBtn : "Zoeken", |
DlgFindNotFoundMsg : "De opgegeven tekst is niet gevonden.", |
// Replace Dialog |
DlgReplaceTitle : "Vervangen", |
DlgReplaceFindLbl : "Zoeken naar:", |
DlgReplaceReplaceLbl : "Vervangen met:", |
DlgReplaceCaseChk : "Hoofdlettergevoelig", |
DlgReplaceReplaceBtn : "Vervangen", |
DlgReplaceReplAllBtn : "Alles vervangen", |
DlgReplaceWordChk : "Hele woord moet voorkomen", |
// Paste Operations / Dialog |
PasteErrorPaste : "De beveiligingsinstelling van de browser verhinderen het automatisch plakken. Gebruik de sneltoets Ctrl+V van het toetsenbord.", |
PasteErrorCut : "De beveiligingsinstelling van de browser verhinderen het automatisch knippen. Gebruik de sneltoets Ctrl+X van het toetsenbord.", |
PasteErrorCopy : "De beveiligingsinstelling van de browser verhinderen het automatisch kopiëren. Gebruik de sneltoets Ctrl+C van het toetsenbord.", |
PasteAsText : "Plakken als platte tekst", |
PasteFromWord : "Plakken als Word-gegevens", |
DlgPasteMsg2 : "Plak de tekst in het volgende vak gebruik makend van je toetstenbord (<STRONG>Ctrl+V</STRONG>) en klik op <STRONG>OK</STRONG>.", |
DlgPasteIgnoreFont : "Negeer \"Font Face\"-definities", |
DlgPasteRemoveStyles : "Verwijder \"Style\"-definities", |
DlgPasteCleanBox : "Vak opschonen", |
// Color Picker |
ColorAutomatic : "Automatisch", |
ColorMoreColors : "Meer kleuren...", |
// Document Properties |
DocProps : "Eigenschappen document", |
// Anchor Dialog |
DlgAnchorTitle : "Eigenschappen interne link", |
DlgAnchorName : "Naam interne link", |
DlgAnchorErrorName : "Geef de naam van de interne link op", |
// Speller Pages Dialog |
DlgSpellNotInDic : "Niet in het woordenboek", |
DlgSpellChangeTo : "Wijzig in", |
DlgSpellBtnIgnore : "Negeren", |
DlgSpellBtnIgnoreAll : "Alles negeren", |
DlgSpellBtnReplace : "Vervangen", |
DlgSpellBtnReplaceAll : "Alles vervangen", |
DlgSpellBtnUndo : "Ongedaan maken", |
DlgSpellNoSuggestions : "-Geen suggesties-", |
DlgSpellProgress : "Bezig met spellingscontrole...", |
DlgSpellNoMispell : "Klaar met spellingscontrole: geen fouten gevonden", |
DlgSpellNoChanges : "Klaar met spellingscontrole: geen woorden aangepast", |
DlgSpellOneChange : "Klaar met spellingscontrole: één woord aangepast", |
DlgSpellManyChanges : "Klaar met spellingscontrole: %1 woorden aangepast", |
IeSpellDownload : "De spellingscontrole niet geïnstalleerd. Wil je deze nu downloaden?", |
// Button Dialog |
DlgButtonText : "Tekst (waarde)", |
DlgButtonType : "Soort", |
DlgButtonTypeBtn : "Knop", |
DlgButtonTypeSbm : "Versturen", |
DlgButtonTypeRst : "Leegmaken", |
// Checkbox and Radio Button Dialogs |
DlgCheckboxName : "Naam", |
DlgCheckboxValue : "Waarde", |
DlgCheckboxSelected : "Geselecteerd", |
// Form Dialog |
DlgFormName : "Naam", |
DlgFormAction : "Actie", |
DlgFormMethod : "Methode", |
// Select Field Dialog |
DlgSelectName : "Naam", |
DlgSelectValue : "Waarde", |
DlgSelectSize : "Grootte", |
DlgSelectLines : "Regels", |
DlgSelectChkMulti : "Gecombineerde selecties toestaan", |
DlgSelectOpAvail : "Beschikbare opties", |
DlgSelectOpText : "Tekst", |
DlgSelectOpValue : "Waarde", |
DlgSelectBtnAdd : "Toevoegen", |
DlgSelectBtnModify : "Wijzigen", |
DlgSelectBtnUp : "Omhoog", |
DlgSelectBtnDown : "Omlaag", |
DlgSelectBtnSetValue : "Als geselecteerde waarde instellen", |
DlgSelectBtnDelete : "Verwijderen", |
// Textarea Dialog |
DlgTextareaName : "Naam", |
DlgTextareaCols : "Kolommen", |
DlgTextareaRows : "Rijen", |
// Text Field Dialog |
DlgTextName : "Naam", |
DlgTextValue : "Waarde", |
DlgTextCharWidth : "Breedte (tekens)", |
DlgTextMaxChars : "Maximum aantal tekens", |
DlgTextType : "Soort", |
DlgTextTypeText : "Tekst", |
DlgTextTypePass : "Wachtwoord", |
// Hidden Field Dialog |
DlgHiddenName : "Naam", |
DlgHiddenValue : "Waarde", |
// Bulleted List Dialog |
BulletedListProp : "Eigenschappen opsommingslijst", |
NumberedListProp : "Eigenschappen genummerde opsommingslijst", |
DlgLstStart : "Start", |
DlgLstType : "Soort", |
DlgLstTypeCircle : "Cirkel", |
DlgLstTypeDisc : "Schijf", |
DlgLstTypeSquare : "Vierkant", |
DlgLstTypeNumbers : "Nummers (1, 2, 3)", |
DlgLstTypeLCase : "Kleine letters (a, b, c)", |
DlgLstTypeUCase : "Hoofdletters (A, B, C)", |
DlgLstTypeSRoman : "Klein Romeins (i, ii, iii)", |
DlgLstTypeLRoman : "Groot Romeins (I, II, III)", |
// Document Properties Dialog |
DlgDocGeneralTab : "Algemeen", |
DlgDocBackTab : "Achtergrond", |
DlgDocColorsTab : "Kleuring en marges", |
DlgDocMetaTab : "META-data", |
DlgDocPageTitle : "Paginatitel", |
DlgDocLangDir : "Schrijfrichting", |
DlgDocLangDirLTR : "Links naar rechts", |
DlgDocLangDirRTL : "Rechts naar links", |
DlgDocLangCode : "Taalcode", |
DlgDocCharSet : "Karakterset-encoding", |
DlgDocCharSetCE : "Centraal Europees", |
DlgDocCharSetCT : "Traditioneel Chinees (Big5)", |
DlgDocCharSetCR : "Cyriliaans", |
DlgDocCharSetGR : "Grieks", |
DlgDocCharSetJP : "Japans", |
DlgDocCharSetKR : "Koreaans", |
DlgDocCharSetTR : "Turks", |
DlgDocCharSetUN : "Unicode (UTF-8)", |
DlgDocCharSetWE : "West europees", |
DlgDocCharSetOther : "Andere karakterset-encoding", |
DlgDocDocType : "Opschrift documentsoort", |
DlgDocDocTypeOther : "Ander opschrift documentsoort", |
DlgDocIncXHTML : "XHTML-declaraties meenemen", |
DlgDocBgColor : "Achtergrondkleur", |
DlgDocBgImage : "URL achtergrondplaatje", |
DlgDocBgNoScroll : "Vaste achtergrond", |
DlgDocCText : "Tekst", |
DlgDocCLink : "Link", |
DlgDocCVisited : "Bezochte link", |
DlgDocCActive : "Active link", |
DlgDocMargins : "Afstandsinstellingen document", |
DlgDocMaTop : "Boven", |
DlgDocMaLeft : "Links", |
DlgDocMaRight : "Rechts", |
DlgDocMaBottom : "Onder", |
DlgDocMeIndex : "Trefwoorden betreffende document (kommagescheiden)", |
DlgDocMeDescr : "Beschrijving document", |
DlgDocMeAuthor : "Auteur", |
DlgDocMeCopy : "Copyright", |
DlgDocPreview : "Voorbeeld", |
// Templates Dialog |
Templates : "Sjablonen", |
DlgTemplatesTitle : "Inhoud sjabonen", |
DlgTemplatesSelMsg : "Selecteer het sjabloon dat in de editor geopend moet worden (de actuele inhoud gaat verloren):", |
DlgTemplatesLoading : "Bezig met laden sjabonen. Even geduld alstublieft...", |
DlgTemplatesNoTpl : "(Geen sjablonen gedefinieerd)", |
DlgTemplatesReplace : "Vervang de huidige inhoud", |
// About Dialog |
DlgAboutAboutTab : "Over", |
DlgAboutBrowserInfoTab : "Browserinformatie", |
DlgAboutLicenseTab : "Licentie", |
DlgAboutVersion : "Versie", |
DlgAboutLicense : "Gelicenceerd onder de condities van het GNU Lesser General Public License", |
DlgAboutInfo : "Voor meer informatie ga naar " |
} |
/branches/v1.0-menes/api/fckeditor/editor/lang/mn.js |
---|
New file |
0,0 → 1,501 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: mn.js |
* Mongolian language file. |
* |
* File Authors: |
* Lkamtseren ODONBAATAR (odonbaatarl@yahoo.com) |
*/ |
var FCKLang = |
{ |
// Language direction : "ltr" (left to right) or "rtl" (right to left). |
Dir : "ltr", |
ToolbarCollapse : "Багажны хэсэг эвдэх", |
ToolbarExpand : "Багажны хэсэг өргөтгөх", |
// Toolbar Items and Context Menu |
Save : "Хадгалах", |
NewPage : "Шинэ хуудас", |
Preview : "Уридчлан харах", |
Cut : "Хайчлах", |
Copy : "Хуулах", |
Paste : "Буулгах", |
PasteText : "plain text-ээс буулгах", |
PasteWord : "Word-оос буулгах", |
Print : "Хэвлэх", |
SelectAll : "Бүгдийг нь сонгох", |
RemoveFormat : "Формат авч хаях", |
InsertLinkLbl : "Линк", |
InsertLink : "Линк Оруулах/Засварлах", |
RemoveLink : "Линк авч хаях", |
Anchor : "Insert/Edit Anchor", //MISSING |
InsertImageLbl : "Зураг", |
InsertImage : "Зураг Оруулах/Засварлах", |
InsertFlashLbl : "Flash", //MISSING |
InsertFlash : "Insert/Edit Flash", //MISSING |
InsertTableLbl : "Хүснэгт", |
InsertTable : "Хүснэгт Оруулах/Засварлах", |
InsertLineLbl : "Зураас", |
InsertLine : "Хөндлөн зураас оруулах", |
InsertSpecialCharLbl: "Онцгой тэмдэгт", |
InsertSpecialChar : "Онцгой тэмдэгт оруулах", |
InsertSmileyLbl : "Тодорхойлолт", |
InsertSmiley : "Тодорхойлолт оруулах", |
About : "FCKeditor-н тухай", |
Bold : "Тод бүдүүн", |
Italic : "Налуу", |
Underline : "Доогуур нь зураастай болгох", |
StrikeThrough : "Дундуур нь зураастай болгох", |
Subscript : "Суурь болгох", |
Superscript : "Зэрэг болгох", |
LeftJustify : "Зүүн талд байрлуулах", |
CenterJustify : "Төвд байрлуулах", |
RightJustify : "Баруун талд байрлуулах", |
BlockJustify : "Блок хэлбэрээр байрлуулах", |
DecreaseIndent : "Догол мөр нэмэх", |
IncreaseIndent : "Догол мөр хасах", |
Undo : "Хүчингүй болгох", |
Redo : "Өмнөх үйлдлээ сэргээх", |
NumberedListLbl : "Дугаарлагдсан жагсаалт", |
NumberedList : "Дугаарлагдсан жагсаалт Оруулах/Авах", |
BulletedListLbl : "Цэгтэй жагсаалт", |
BulletedList : "Цэгтэй жагсаалт Оруулах/Авах", |
ShowTableBorders : "Хүснэгтийн хүрээг үзүүлэх", |
ShowDetails : "Деталчлан үзүүлэх", |
Style : "Загвар", |
FontFormat : "Формат", |
Font : "Фонт", |
FontSize : "Хэмжээ", |
TextColor : "Фонтны өнгө", |
BGColor : "Фонны өнгө", |
Source : "Код", |
Find : "Хайх", |
Replace : "Солих", |
SpellCheck : "Check Spelling", //MISSING |
UniversalKeyboard : "Universal Keyboard", //MISSING |
PageBreakLbl : "Page Break", //MISSING |
PageBreak : "Insert Page Break", //MISSING |
Form : "Form", //MISSING |
Checkbox : "Checkbox", //MISSING |
RadioButton : "Radio Button", //MISSING |
TextField : "Text Field", //MISSING |
Textarea : "Textarea", //MISSING |
HiddenField : "Hidden Field", //MISSING |
Button : "Button", //MISSING |
SelectionField : "Selection Field", //MISSING |
ImageButton : "Image Button", //MISSING |
FitWindow : "Maximize the editor size", //MISSING |
// Context Menu |
EditLink : "Холбоос засварлах", |
CellCM : "Cell", //MISSING |
RowCM : "Row", //MISSING |
ColumnCM : "Column", //MISSING |
InsertRow : "Мөр оруулах", |
DeleteRows : "Мөр устгах", |
InsertColumn : "Багана оруулах", |
DeleteColumns : "Багана устгах", |
InsertCell : "Нүх оруулах", |
DeleteCells : "Нүх устгах", |
MergeCells : "Нүх нэгтэх", |
SplitCell : "Нүх тусгайрлах", |
TableDelete : "Delete Table", //MISSING |
CellProperties : "Хоосон зайн шинж чанар", |
TableProperties : "Хүснэгт", |
ImageProperties : "Зураг", |
FlashProperties : "Flash Properties", //MISSING |
AnchorProp : "Anchor Properties", //MISSING |
ButtonProp : "Button Properties", //MISSING |
CheckboxProp : "Checkbox Properties", //MISSING |
HiddenFieldProp : "Hidden Field Properties", //MISSING |
RadioButtonProp : "Radio Button Properties", //MISSING |
ImageButtonProp : "Image Button Properties", //MISSING |
TextFieldProp : "Text Field Properties", //MISSING |
SelectionFieldProp : "Selection Field Properties", //MISSING |
TextareaProp : "Textarea Properties", //MISSING |
FormProp : "Form Properties", //MISSING |
FontFormats : "Хэвийн;Formatted;Хаяг;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Paragraph (DIV)", |
// Alerts and Messages |
ProcessingXHTML : "XHTML үйл явц явагдаж байна. Хүлээнэ үү...", |
Done : "Хийх", |
PasteWordConfirm : "Word-оос хуулсан текстээ санаж байгааг нь буулгахыг та хүсч байна уу. Та текст-ээ буулгахын өмнө цэвэрлэх үү?", |
NotCompatiblePaste : "Энэ комманд Internet Explorer-ын 5.5 буюу түүнээс дээш хувилбарт идвэхшинэ. Та цэвэрлэхгүйгээр буулгахыг хүсч байна?", |
UnknownToolbarItem : "Багажны хэсгийн \"%1\" item мэдэгдэхгүй байна", |
UnknownCommand : "\"%1\" комманд нэр мэдагдэхгүй байна", |
NotImplemented : "Зөвшөөрөгдөхгүй комманд", |
UnknownToolbarSet : "Багажны хэсэгт \"%1\" оноох, үүсээгүй байна", |
NoActiveX : "Your browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.", //MISSING |
BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.", //MISSING |
DialogBlocked : "It was not possible to open the dialog window. Make sure all popup blockers are disabled.", //MISSING |
// Dialogs |
DlgBtnOK : "OK", |
DlgBtnCancel : "Болих", |
DlgBtnClose : "Хаах", |
DlgBtnBrowseServer : "Browse Server", //MISSING |
DlgAdvancedTag : "Нэмэлт", |
DlgOpOther : "<Other>", //MISSING |
DlgInfoTab : "Info", //MISSING |
DlgAlertUrl : "Please insert the URL", //MISSING |
// General Dialogs Labels |
DlgGenNotSet : "<Оноохгүй>", |
DlgGenId : "Id", |
DlgGenLangDir : "Хэлний чиглэл", |
DlgGenLangDirLtr : "Зүүнээс баруун (LTR)", |
DlgGenLangDirRtl : "Баруунаас зүүн (RTL)", |
DlgGenLangCode : "Хэлний код", |
DlgGenAccessKey : "Холбох түлхүүр", |
DlgGenName : "Нэр", |
DlgGenTabIndex : "Tab индекс", |
DlgGenLongDescr : "URL-ын тайлбар", |
DlgGenClass : "Stylesheet классууд", |
DlgGenTitle : "Зөвлөлдөх гарчиг", |
DlgGenContType : "Зөвлөлдөх төрлийн агуулга", |
DlgGenLinkCharset : "Тэмдэгт оноох нөөцөд холбогдсон", |
DlgGenStyle : "Загвар", |
// Image Dialog |
DlgImgTitle : "Зураг", |
DlgImgInfoTab : "Зурагны мэдээлэл", |
DlgImgBtnUpload : "Үүнийг сервэррүү илгээ", |
DlgImgURL : "URL", |
DlgImgUpload : "Хуулах", |
DlgImgAlt : "Тайлбар текст", |
DlgImgWidth : "Өргөн", |
DlgImgHeight : "Өндөр", |
DlgImgLockRatio : "Lock Ratio", |
DlgBtnResetSize : "хэмжээ дахин оноох", |
DlgImgBorder : "Хүрээ", |
DlgImgHSpace : "Хөндлөн зай", |
DlgImgVSpace : "Босоо зай", |
DlgImgAlign : "Эгнээ", |
DlgImgAlignLeft : "Зүүн", |
DlgImgAlignAbsBottom: "Abs доод талд", |
DlgImgAlignAbsMiddle: "Abs Дунд талд", |
DlgImgAlignBaseline : "Baseline", |
DlgImgAlignBottom : "Доод талд", |
DlgImgAlignMiddle : "Дунд талд", |
DlgImgAlignRight : "Баруун", |
DlgImgAlignTextTop : "Текст дээр", |
DlgImgAlignTop : "Дээд талд", |
DlgImgPreview : "Уридчлан харах", |
DlgImgAlertUrl : "Зурагны URL-ын төрлийн сонгоно уу", |
DlgImgLinkTab : "Link", //MISSING |
// Flash Dialog |
DlgFlashTitle : "Flash Properties", //MISSING |
DlgFlashChkPlay : "Auto Play", //MISSING |
DlgFlashChkLoop : "Loop", //MISSING |
DlgFlashChkMenu : "Enable Flash Menu", //MISSING |
DlgFlashScale : "Scale", //MISSING |
DlgFlashScaleAll : "Show all", //MISSING |
DlgFlashScaleNoBorder : "No Border", //MISSING |
DlgFlashScaleFit : "Exact Fit", //MISSING |
// Link Dialog |
DlgLnkWindowTitle : "Линк", |
DlgLnkInfoTab : "Линкийн мэдээлэл", |
DlgLnkTargetTab : "Байрлал", |
DlgLnkType : "Линкийн төрөл", |
DlgLnkTypeURL : "URL", |
DlgLnkTypeAnchor : "Энэ хуудасандах холбоос", |
DlgLnkTypeEMail : "E-Mail", |
DlgLnkProto : "Протокол", |
DlgLnkProtoOther : "<бусад>", |
DlgLnkURL : "URL", |
DlgLnkAnchorSel : "Холбоос сонгох", |
DlgLnkAnchorByName : "Холбоосын нэрээр", |
DlgLnkAnchorById : "Элемэнт Id-гаар", |
DlgLnkNoAnchors : "<Баримт бичиг холбоосгүй байна>", |
DlgLnkEMail : "E-Mail Хаяг", |
DlgLnkEMailSubject : "Message Subject", |
DlgLnkEMailBody : "Message-ийн агуулга", |
DlgLnkUpload : "Хуулах", |
DlgLnkBtnUpload : "Үүнийг серверрүү илгээ", |
DlgLnkTarget : "Байрлал", |
DlgLnkTargetFrame : "<Агуулах хүрээ>", |
DlgLnkTargetPopup : "<popup цонх>", |
DlgLnkTargetBlank : "Шинэ цонх (_blank)", |
DlgLnkTargetParent : "Эцэг цонх (_parent)", |
DlgLnkTargetSelf : "Төстэй цонх (_self)", |
DlgLnkTargetTop : "Хамгийн түрүүн байх цонх (_top)", |
DlgLnkTargetFrameName : "Target Frame Name", //MISSING |
DlgLnkPopWinName : "Popup цонхны нэр", |
DlgLnkPopWinFeat : "Popup цонхны онцлог", |
DlgLnkPopResize : "Хэмжээ өөрчлөх", |
DlgLnkPopLocation : "Location хэсэг", |
DlgLnkPopMenu : "Meню хэсэг", |
DlgLnkPopScroll : "Скрол хэсэгүүд", |
DlgLnkPopStatus : "Статус хэсэг", |
DlgLnkPopToolbar : "Багажны хэсэг", |
DlgLnkPopFullScrn : "Цонх дүүргэх (IE)", |
DlgLnkPopDependent : "Хамаатай (Netscape)", |
DlgLnkPopWidth : "Өргөн", |
DlgLnkPopHeight : "Өндөр", |
DlgLnkPopLeft : "Зүүн байрлал", |
DlgLnkPopTop : "Дээд байрлал", |
DlnLnkMsgNoUrl : "Линк URL-ээ төрөлжүүлнэ үү", |
DlnLnkMsgNoEMail : "Е-mail хаягаа төрөлжүүлнэ үү", |
DlnLnkMsgNoAnchor : "Холбоосоо сонгоно уу", |
DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING |
// Color Dialog |
DlgColorTitle : "Өнгө сонгох", |
DlgColorBtnClear : "Цэвэрлэх", |
DlgColorHighlight : "Өнгө", |
DlgColorSelected : "Сонгогдсон", |
// Smiley Dialog |
DlgSmileyTitle : "Тодорхойлолт оруулах", |
// Special Character Dialog |
DlgSpecialCharTitle : "Онцгой тэмдэгт сонгох", |
// Table Dialog |
DlgTableTitle : "Хүснэгт", |
DlgTableRows : "Мөр", |
DlgTableColumns : "Багана", |
DlgTableBorder : "Хүрээний хэмжээ", |
DlgTableAlign : "Эгнээ", |
DlgTableAlignNotSet : "<Оноохгүй>", |
DlgTableAlignLeft : "Зүүн талд", |
DlgTableAlignCenter : "Төвд", |
DlgTableAlignRight : "Баруун талд", |
DlgTableWidth : "Өргөн", |
DlgTableWidthPx : "цэг", |
DlgTableWidthPc : "хувь", |
DlgTableHeight : "Өндөр", |
DlgTableCellSpace : "Нүх хоорондын зай", |
DlgTableCellPad : "Нүх доторлох", |
DlgTableCaption : "Тайлбар", |
DlgTableSummary : "Summary", //MISSING |
// Table Cell Dialog |
DlgCellTitle : "Хоосон зайн шинж чанар", |
DlgCellWidth : "Өргөн", |
DlgCellWidthPx : "цэг", |
DlgCellWidthPc : "хувь", |
DlgCellHeight : "Өндөр", |
DlgCellWordWrap : "Үг таслах", |
DlgCellWordWrapNotSet : "<Оноохгүй>", |
DlgCellWordWrapYes : "Тийм", |
DlgCellWordWrapNo : "Үгүй", |
DlgCellHorAlign : "Босоо эгнээ", |
DlgCellHorAlignNotSet : "<Оноохгүй>", |
DlgCellHorAlignLeft : "Зүүн", |
DlgCellHorAlignCenter : "Төв", |
DlgCellHorAlignRight: "Баруун", |
DlgCellVerAlign : "Хөндлөн эгнээ", |
DlgCellVerAlignNotSet : "<Оноохгүй>", |
DlgCellVerAlignTop : "Дээд тал", |
DlgCellVerAlignMiddle : "Дунд", |
DlgCellVerAlignBottom : "Доод тал", |
DlgCellVerAlignBaseline : "Baseline", |
DlgCellRowSpan : "Нийт мөр", |
DlgCellCollSpan : "Нийт багана", |
DlgCellBackColor : "Фонны өнгө", |
DlgCellBorderColor : "Хүрээний өнгө", |
DlgCellBtnSelect : "Сонго...", |
// Find Dialog |
DlgFindTitle : "Хайх", |
DlgFindFindBtn : "Хайх", |
DlgFindNotFoundMsg : "Хайсан текст олсонгүй.", |
// Replace Dialog |
DlgReplaceTitle : "Солих", |
DlgReplaceFindLbl : "Хайх үг/үсэг:", |
DlgReplaceReplaceLbl : "Солих үг:", |
DlgReplaceCaseChk : "Тэнцэх төлөв", |
DlgReplaceReplaceBtn : "Солих", |
DlgReplaceReplAllBtn : "Бүгдийг нь Солих", |
DlgReplaceWordChk : "Тэнцэх бүтэн үг", |
// Paste Operations / Dialog |
PasteErrorPaste : "Таны browser-ын хамгаалалтын тохиргоо editor-д автоматаар буулгах үйлдэлийг зөвшөөрөхгүй байна. (Ctrl+V) товчны хослолыг ашиглана уу.", |
PasteErrorCut : "Таны browser-ын хамгаалалтын тохиргоо editor-д автоматаар хайчлах үйлдэлийг зөвшөөрөхгүй байна. (Ctrl+X) товчны хослолыг ашиглана уу.", |
PasteErrorCopy : "Таны browser-ын хамгаалалтын тохиргоо editor-д автоматаар хуулах үйлдэлийг зөвшөөрөхгүй байна. (Ctrl+C) товчны хослолыг ашиглана уу.", |
PasteAsText : "Plain Text-ээс буулгах", |
PasteFromWord : "Word-оос буулгах", |
DlgPasteMsg2 : "Please paste inside the following box using the keyboard (<STRONG>Ctrl+V</STRONG>) and hit <STRONG>OK</STRONG>.", //MISSING |
DlgPasteIgnoreFont : "Ignore Font Face definitions", //MISSING |
DlgPasteRemoveStyles : "Remove Styles definitions", //MISSING |
DlgPasteCleanBox : "Clean Up Box", //MISSING |
// Color Picker |
ColorAutomatic : "Автоматаар", |
ColorMoreColors : "Нэмэлт өнгөнүүд...", |
// Document Properties |
DocProps : "Document Properties", //MISSING |
// Anchor Dialog |
DlgAnchorTitle : "Anchor Properties", //MISSING |
DlgAnchorName : "Anchor Name", //MISSING |
DlgAnchorErrorName : "Please type the anchor name", //MISSING |
// Speller Pages Dialog |
DlgSpellNotInDic : "Not in dictionary", //MISSING |
DlgSpellChangeTo : "Change to", //MISSING |
DlgSpellBtnIgnore : "Ignore", //MISSING |
DlgSpellBtnIgnoreAll : "Ignore All", //MISSING |
DlgSpellBtnReplace : "Replace", //MISSING |
DlgSpellBtnReplaceAll : "Replace All", //MISSING |
DlgSpellBtnUndo : "Undo", //MISSING |
DlgSpellNoSuggestions : "- No suggestions -", //MISSING |
DlgSpellProgress : "Spell check in progress...", //MISSING |
DlgSpellNoMispell : "Spell check complete: No misspellings found", //MISSING |
DlgSpellNoChanges : "Spell check complete: No words changed", //MISSING |
DlgSpellOneChange : "Spell check complete: One word changed", //MISSING |
DlgSpellManyChanges : "Spell check complete: %1 words changed", //MISSING |
IeSpellDownload : "Spell checker not installed. Do you want to download it now?", //MISSING |
// Button Dialog |
DlgButtonText : "Text (Value)", //MISSING |
DlgButtonType : "Type", //MISSING |
DlgButtonTypeBtn : "Button", //MISSING |
DlgButtonTypeSbm : "Submit", //MISSING |
DlgButtonTypeRst : "Reset", //MISSING |
// Checkbox and Radio Button Dialogs |
DlgCheckboxName : "Name", //MISSING |
DlgCheckboxValue : "Value", //MISSING |
DlgCheckboxSelected : "Selected", //MISSING |
// Form Dialog |
DlgFormName : "Name", //MISSING |
DlgFormAction : "Action", //MISSING |
DlgFormMethod : "Method", //MISSING |
// Select Field Dialog |
DlgSelectName : "Name", //MISSING |
DlgSelectValue : "Value", //MISSING |
DlgSelectSize : "Size", //MISSING |
DlgSelectLines : "lines", //MISSING |
DlgSelectChkMulti : "Allow multiple selections", //MISSING |
DlgSelectOpAvail : "Available Options", //MISSING |
DlgSelectOpText : "Text", //MISSING |
DlgSelectOpValue : "Value", //MISSING |
DlgSelectBtnAdd : "Add", //MISSING |
DlgSelectBtnModify : "Modify", //MISSING |
DlgSelectBtnUp : "Up", //MISSING |
DlgSelectBtnDown : "Down", //MISSING |
DlgSelectBtnSetValue : "Set as selected value", //MISSING |
DlgSelectBtnDelete : "Delete", //MISSING |
// Textarea Dialog |
DlgTextareaName : "Name", //MISSING |
DlgTextareaCols : "Columns", //MISSING |
DlgTextareaRows : "Rows", //MISSING |
// Text Field Dialog |
DlgTextName : "Name", //MISSING |
DlgTextValue : "Value", //MISSING |
DlgTextCharWidth : "Character Width", //MISSING |
DlgTextMaxChars : "Maximum Characters", //MISSING |
DlgTextType : "Type", //MISSING |
DlgTextTypeText : "Text", //MISSING |
DlgTextTypePass : "Password", //MISSING |
// Hidden Field Dialog |
DlgHiddenName : "Name", //MISSING |
DlgHiddenValue : "Value", //MISSING |
// Bulleted List Dialog |
BulletedListProp : "Bulleted List Properties", //MISSING |
NumberedListProp : "Numbered List Properties", //MISSING |
DlgLstStart : "Start", //MISSING |
DlgLstType : "Type", //MISSING |
DlgLstTypeCircle : "Circle", //MISSING |
DlgLstTypeDisc : "Disc", //MISSING |
DlgLstTypeSquare : "Square", //MISSING |
DlgLstTypeNumbers : "Numbers (1, 2, 3)", //MISSING |
DlgLstTypeLCase : "Lowercase Letters (a, b, c)", //MISSING |
DlgLstTypeUCase : "Uppercase Letters (A, B, C)", //MISSING |
DlgLstTypeSRoman : "Small Roman Numerals (i, ii, iii)", //MISSING |
DlgLstTypeLRoman : "Large Roman Numerals (I, II, III)", //MISSING |
// Document Properties Dialog |
DlgDocGeneralTab : "General", //MISSING |
DlgDocBackTab : "Background", //MISSING |
DlgDocColorsTab : "Colors and Margins", //MISSING |
DlgDocMetaTab : "Meta Data", //MISSING |
DlgDocPageTitle : "Page Title", //MISSING |
DlgDocLangDir : "Language Direction", //MISSING |
DlgDocLangDirLTR : "Left to Right (LTR)", //MISSING |
DlgDocLangDirRTL : "Right to Left (RTL)", //MISSING |
DlgDocLangCode : "Language Code", //MISSING |
DlgDocCharSet : "Character Set Encoding", //MISSING |
DlgDocCharSetCE : "Central European", //MISSING |
DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING |
DlgDocCharSetCR : "Cyrillic", //MISSING |
DlgDocCharSetGR : "Greek", //MISSING |
DlgDocCharSetJP : "Japanese", //MISSING |
DlgDocCharSetKR : "Korean", //MISSING |
DlgDocCharSetTR : "Turkish", //MISSING |
DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING |
DlgDocCharSetWE : "Western European", //MISSING |
DlgDocCharSetOther : "Other Character Set Encoding", //MISSING |
DlgDocDocType : "Document Type Heading", //MISSING |
DlgDocDocTypeOther : "Other Document Type Heading", //MISSING |
DlgDocIncXHTML : "Include XHTML Declarations", //MISSING |
DlgDocBgColor : "Background Color", //MISSING |
DlgDocBgImage : "Background Image URL", //MISSING |
DlgDocBgNoScroll : "Nonscrolling Background", //MISSING |
DlgDocCText : "Text", //MISSING |
DlgDocCLink : "Link", //MISSING |
DlgDocCVisited : "Visited Link", //MISSING |
DlgDocCActive : "Active Link", //MISSING |
DlgDocMargins : "Page Margins", //MISSING |
DlgDocMaTop : "Top", //MISSING |
DlgDocMaLeft : "Left", //MISSING |
DlgDocMaRight : "Right", //MISSING |
DlgDocMaBottom : "Bottom", //MISSING |
DlgDocMeIndex : "Document Indexing Keywords (comma separated)", //MISSING |
DlgDocMeDescr : "Document Description", //MISSING |
DlgDocMeAuthor : "Author", //MISSING |
DlgDocMeCopy : "Copyright", //MISSING |
DlgDocPreview : "Preview", //MISSING |
// Templates Dialog |
Templates : "Templates", //MISSING |
DlgTemplatesTitle : "Content Templates", //MISSING |
DlgTemplatesSelMsg : "Please select the template to open in the editor<br>(the actual contents will be lost):", //MISSING |
DlgTemplatesLoading : "Loading templates list. Please wait...", //MISSING |
DlgTemplatesNoTpl : "(No templates defined)", //MISSING |
DlgTemplatesReplace : "Replace actual contents", //MISSING |
// About Dialog |
DlgAboutAboutTab : "About", //MISSING |
DlgAboutBrowserInfoTab : "Browser Info", //MISSING |
DlgAboutLicenseTab : "License", //MISSING |
DlgAboutVersion : "Хувилбар", |
DlgAboutLicense : "GNU цөөн ерөнхий нийтийн лицензийн ангилалд багтсан зөвшөөрөлтэй", |
DlgAboutInfo : "Мэдээллээр туслах" |
} |
/branches/v1.0-menes/api/fckeditor/editor/lang/th.js |
---|
New file |
0,0 → 1,502 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: th.js |
* Thai language file. |
* |
* File Authors: |
* Audy Charin Arsakit (arsakit@gmail.com) |
* Joy Piyanoot Promnuan (piyanoot@gmail.com) |
*/ |
var FCKLang = |
{ |
// Language direction : "ltr" (left to right) or "rtl" (right to left). |
Dir : "ltr", |
ToolbarCollapse : "ซ่อนแถบเครื่องมือ", |
ToolbarExpand : "แสดงแถบเครื่องมือ", |
// Toolbar Items and Context Menu |
Save : "บันทึก", |
NewPage : "สร้างหน้าเอกสารใหม่", |
Preview : "ดูหน้าเอกสารตัวอย่าง", |
Cut : "ตัด", |
Copy : "สำเนา", |
Paste : "วาง", |
PasteText : "วางสำเนาจากตัวอักษรธรรมดา", |
PasteWord : "วางสำเนาจากตัวอักษรเวิร์ด", |
Print : "สั่งพิมพ์", |
SelectAll : "เลือกทั้งหมด", |
RemoveFormat : "ล้างรูปแบบ", |
InsertLinkLbl : "ลิงค์เชื่อมโยงเว็บ อีเมล์ รูปภาพ หรือไฟล์อื่นๆ", |
InsertLink : "แทรก/แก้ไข ลิงค์", |
RemoveLink : "ลบ ลิงค์", |
Anchor : "แทรก/แก้ไข Anchor", |
InsertImageLbl : "รูปภาพ", |
InsertImage : "แทรก/แก้ไข รูปภาพ", |
InsertFlashLbl : "Flash", //MISSING |
InsertFlash : "Insert/Edit Flash", //MISSING |
InsertTableLbl : "ตาราง", |
InsertTable : "แทรก/แก้ไข ตาราง", |
InsertLineLbl : "เส้นคั่นบรรทัด", |
InsertLine : "แทรกเส้นคั่นบรรทัด", |
InsertSpecialCharLbl: "ตัวอักษรพิเศษ", |
InsertSpecialChar : "แทรกตัวอักษรพิเศษ", |
InsertSmileyLbl : "รูปสื่ออารมณ์", |
InsertSmiley : "แทรกรูปสื่ออารมณ์", |
About : "เกี่ยวกับโปรแกรม FCKeditor", |
Bold : "ตัวหนา", |
Italic : "ตัวเอียง", |
Underline : "ตัวขีดเส้นใต้", |
StrikeThrough : "ตัวขีดเส้นทับ", |
Subscript : "ตัวห้อย", |
Superscript : "ตัวยก", |
LeftJustify : "จัดชิดซ้าย", |
CenterJustify : "จัดกึ่งกลาง", |
RightJustify : "จัดชิดขวา", |
BlockJustify : "จัดพอดีหน้ากระดาษ", |
DecreaseIndent : "ลดระยะย่อหน้า", |
IncreaseIndent : "เพิ่มระยะย่อหน้า", |
Undo : "ยกเลิกคำสั่ง", |
Redo : "ทำซ้ำคำสั่ง", |
NumberedListLbl : "ลำดับรายการแบบตัวเลข", |
NumberedList : "แทรก/แก้ไข ลำดับรายการแบบตัวเลข", |
BulletedListLbl : "ลำดับรายการแบบสัญลักษณ์", |
BulletedList : "แทรก/แก้ไข ลำดับรายการแบบสัญลักษณ์", |
ShowTableBorders : "แสดงขอบของตาราง", |
ShowDetails : "แสดงรายละเอียด", |
Style : "ลักษณะ", |
FontFormat : "รูปแบบ", |
Font : "แบบอักษร", |
FontSize : "ขนาด", |
TextColor : "สีตัวอักษร", |
BGColor : "สีพื้นหลัง", |
Source : "ดูรหัส HTML", |
Find : "ค้นหา", |
Replace : "ค้นหาและแทนที่", |
SpellCheck : "ตรวจการสะกดคำ", |
UniversalKeyboard : "คีย์บอร์ดหลากภาษา", |
PageBreakLbl : "Page Break", //MISSING |
PageBreak : "Insert Page Break", //MISSING |
Form : "แบบฟอร์ม", |
Checkbox : "เช็คบ๊อก", |
RadioButton : "เรดิโอบัตตอน", |
TextField : "เท็กซ์ฟิลด์", |
Textarea : "เท็กซ์แอเรีย", |
HiddenField : "ฮิดเดนฟิลด์", |
Button : "ปุ่ม", |
SelectionField : "แถบตัวเลือก", |
ImageButton : "ปุ่มแบบรูปภาพ", |
FitWindow : "Maximize the editor size", //MISSING |
// Context Menu |
EditLink : "แก้ไข ลิงค์", |
CellCM : "Cell", //MISSING |
RowCM : "Row", //MISSING |
ColumnCM : "Column", //MISSING |
InsertRow : "แทรกแถว", |
DeleteRows : "ลบแถว", |
InsertColumn : "แทรกสดมน์", |
DeleteColumns : "ลบสดมน์", |
InsertCell : "แทรกช่อง", |
DeleteCells : "ลบช่อง", |
MergeCells : "ผสานช่อง", |
SplitCell : "แยกช่อง", |
TableDelete : "Delete Table", //MISSING |
CellProperties : "คุณสมบัติของช่อง", |
TableProperties : "คุณสมบัติของตาราง", |
ImageProperties : "คุณสมบัติของรูปภาพ", |
FlashProperties : "Flash Properties", //MISSING |
AnchorProp : "รายละเอียด Anchor", |
ButtonProp : "รายละเอียดของ ปุ่ม", |
CheckboxProp : "คุณสมบัติของ เช็คบ๊อก", |
HiddenFieldProp : "คุณสมบัติของ ฮิดเดนฟิลด์", |
RadioButtonProp : "คุณสมบัติของ เรดิโอบัตตอน", |
ImageButtonProp : "คุณสมบัติของ ปุ่มแบบรูปภาพ", |
TextFieldProp : "คุณสมบัติของ เท็กซ์ฟิลด์", |
SelectionFieldProp : "คุณสมบัติของ แถบตัวเลือก", |
TextareaProp : "คุณสมบัติของ เท็กแอเรีย", |
FormProp : "คุณสมบัติของ แบบฟอร์ม", |
FontFormats : "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Paragraph (DIV)", |
// Alerts and Messages |
ProcessingXHTML : "โปรแกรมกำลังทำงานด้วยเทคโนโลยี XHTML กรุณารอสักครู่...", |
Done : "โปรแกรมทำงานเสร็จสมบูรณ์", |
PasteWordConfirm : "ข้อมูลที่ท่านต้องการวางลงในแผ่นงาน ถูกจัดรูปแบบจากโปรแกรมเวิร์ด. ท่านต้องการล้างรูปแบบที่มาจากโปรแกรมเวิร์ดหรือไม่?", |
NotCompatiblePaste : "คำสั่งนี้ทำงานในโปรแกรมท่องเว็บ Internet Explorer version รุ่น 5.5 หรือใหม่กว่าเท่านั้น. ท่านต้องการวางตัวอักษรโดยไม่ล้างรูปแบบที่มาจากโปรแกรมเวิร์ดหรือไม่?", |
UnknownToolbarItem : "ไม่สามารถระบุปุ่มเครื่องมือได้ \"%1\"", |
UnknownCommand : "ไม่สามารถระบุชื่อคำสั่งได้ \"%1\"", |
NotImplemented : "ไม่สามารถใช้งานคำสั่งได้", |
UnknownToolbarSet : "ไม่มีการติดตั้งชุดคำสั่งในแถบเครื่องมือ \"%1\" กรุณาติดต่อผู้ดูแลระบบ", |
NoActiveX : "Your browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.", //MISSING |
BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.", //MISSING |
DialogBlocked : "It was not possible to open the dialog window. Make sure all popup blockers are disabled.", //MISSING |
// Dialogs |
DlgBtnOK : "ตกลง", |
DlgBtnCancel : "ยกเลิก", |
DlgBtnClose : "ปิด", |
DlgBtnBrowseServer : "เปิดหน้าต่างจัดการไฟล์อัพโหลด", |
DlgAdvancedTag : "ขั้นสูง", |
DlgOpOther : "<อื่นๆ>", |
DlgInfoTab : "Info", //MISSING |
DlgAlertUrl : "Please insert the URL", //MISSING |
// General Dialogs Labels |
DlgGenNotSet : "<ไม่ระบุ>", |
DlgGenId : "ไอดี", |
DlgGenLangDir : "การเขียน-อ่านภาษา", |
DlgGenLangDirLtr : "จากซ้ายไปขวา (LTR)", |
DlgGenLangDirRtl : "จากขวามาซ้าย (RTL)", |
DlgGenLangCode : "รหัสภาษา", |
DlgGenAccessKey : "แอคเซส คีย์", |
DlgGenName : "ชื่อ", |
DlgGenTabIndex : "ลำดับของ แท็บ", |
DlgGenLongDescr : "คำอธิบายประกอบ URL", |
DlgGenClass : "คลาสของไฟล์กำหนดลักษณะการแสดงผล", |
DlgGenTitle : "คำเกริ่นนำ", |
DlgGenContType : "ชนิดของคำเกริ่นนำ", |
DlgGenLinkCharset : "ลิงค์เชื่อมโยงไปยังชุดตัวอักษร", |
DlgGenStyle : "ลักษณะการแสดงผล", |
// Image Dialog |
DlgImgTitle : "คุณสมบัติของ รูปภาพ", |
DlgImgInfoTab : "ข้อมูลของรูปภาพ", |
DlgImgBtnUpload : "อัพโหลดไฟล์ไปเก็บไว้ที่เครื่องแม่ข่าย (เซิร์ฟเวอร์)", |
DlgImgURL : "ที่อยู่อ้างอิง URL", |
DlgImgUpload : "อัพโหลดไฟล์", |
DlgImgAlt : "คำประกอบรูปภาพ", |
DlgImgWidth : "ความกว้าง", |
DlgImgHeight : "ความสูง", |
DlgImgLockRatio : "กำหนดอัตราส่วน กว้าง-สูง แบบคงที่", |
DlgBtnResetSize : "กำหนดรูปเท่าขนาดจริง", |
DlgImgBorder : "ขนาดขอบรูป", |
DlgImgHSpace : "ระยะแนวนอน", |
DlgImgVSpace : "ระยะแนวตั้ง", |
DlgImgAlign : "การจัดวาง", |
DlgImgAlignLeft : "ชิดซ้าย", |
DlgImgAlignAbsBottom: "ชิดด้านล่างสุด", |
DlgImgAlignAbsMiddle: "กึ่งกลาง", |
DlgImgAlignBaseline : "ชิดบรรทัด", |
DlgImgAlignBottom : "ชิดด้านล่าง", |
DlgImgAlignMiddle : "กึ่งกลางแนวตั้ง", |
DlgImgAlignRight : "ชิดขวา", |
DlgImgAlignTextTop : "ใต้ตัวอักษร", |
DlgImgAlignTop : "บนสุด", |
DlgImgPreview : "หน้าเอกสารตัวอย่าง", |
DlgImgAlertUrl : "กรุณาระบุที่อยู่อ้างอิงออนไลน์ของไฟล์รูปภาพ (URL)", |
DlgImgLinkTab : "Link", //MISSING |
// Flash Dialog |
DlgFlashTitle : "Flash Properties", //MISSING |
DlgFlashChkPlay : "Auto Play", //MISSING |
DlgFlashChkLoop : "Loop", //MISSING |
DlgFlashChkMenu : "Enable Flash Menu", //MISSING |
DlgFlashScale : "Scale", //MISSING |
DlgFlashScaleAll : "Show all", //MISSING |
DlgFlashScaleNoBorder : "No Border", //MISSING |
DlgFlashScaleFit : "Exact Fit", //MISSING |
// Link Dialog |
DlgLnkWindowTitle : "ลิงค์เชื่อมโยงเว็บ อีเมล์ รูปภาพ หรือไฟล์อื่นๆ", |
DlgLnkInfoTab : "รายละเอียด", |
DlgLnkTargetTab : "การเปิดหน้าจอ", |
DlgLnkType : "ประเภทของลิงค์", |
DlgLnkTypeURL : "ที่อยู่อ้างอิงออนไลน์ (URL)", |
DlgLnkTypeAnchor : "จุดเชื่อมโยง (Anchor)", |
DlgLnkTypeEMail : "ส่งอีเมล์ (E-Mail)", |
DlgLnkProto : "โปรโตคอล", |
DlgLnkProtoOther : "<อื่นๆ>", |
DlgLnkURL : "ที่อยู่อ้างอิงออนไลน์ (URL)", |
DlgLnkAnchorSel : "ระบุข้อมูลของจุดเชื่อมโยง (Anchor)", |
DlgLnkAnchorByName : "ชื่อ", |
DlgLnkAnchorById : "ไอดี", |
DlgLnkNoAnchors : "<ยังไม่มีจุดเชื่อมโยงภายในหน้าเอกสารนี้>", |
DlgLnkEMail : "อีเมล์ (E-Mail)", |
DlgLnkEMailSubject : "หัวเรื่อง", |
DlgLnkEMailBody : "ข้อความ", |
DlgLnkUpload : "อัพโหลดไฟล์", |
DlgLnkBtnUpload : "บันทึกไฟล์ไว้บนเซิร์ฟเวอร์", |
DlgLnkTarget : "การเปิดหน้าลิงค์", |
DlgLnkTargetFrame : "<เปิดในเฟรม>", |
DlgLnkTargetPopup : "<เปิดหน้าจอเล็ก (Pop-up)>", |
DlgLnkTargetBlank : "เปิดหน้าจอใหม่ (_blank)", |
DlgLnkTargetParent : "เปิดในหน้าหลัก (_parent)", |
DlgLnkTargetSelf : "เปิดในหน้าปัจจุบัน (_self)", |
DlgLnkTargetTop : "เปิดในหน้าบนสุด (_top)", |
DlgLnkTargetFrameName : "ชื่อทาร์เก็ตเฟรม", |
DlgLnkPopWinName : "ระบุชื่อหน้าจอเล็ก (Pop-up)", |
DlgLnkPopWinFeat : "คุณสมบัติของหน้าจอเล็ก (Pop-up)", |
DlgLnkPopResize : "ปรับขนาดหน้าจอ", |
DlgLnkPopLocation : "แสดงที่อยู่ของไฟล์", |
DlgLnkPopMenu : "แสดงแถบเมนู", |
DlgLnkPopScroll : "แสดงแถบเลื่อน", |
DlgLnkPopStatus : "แสดงแถบสถานะ", |
DlgLnkPopToolbar : "แสดงแถบเครื่องมือ", |
DlgLnkPopFullScrn : "แสดงเต็มหน้าจอ (IE5.5++ เท่านั้น)", |
DlgLnkPopDependent : "แสดงเต็มหน้าจอ (Netscape)", |
DlgLnkPopWidth : "กว้าง", |
DlgLnkPopHeight : "สูง", |
DlgLnkPopLeft : "พิกัดซ้าย (Left Position)", |
DlgLnkPopTop : "พิกัดบน (Top Position)", |
DlnLnkMsgNoUrl : "กรุณาระบุที่อยู่อ้างอิงออนไลน์ (URL)", |
DlnLnkMsgNoEMail : "กรุณาระบุอีเมล์ (E-mail)", |
DlnLnkMsgNoAnchor : "กรุณาระบุจุดเชื่อมโยง (Anchor)", |
DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING |
// Color Dialog |
DlgColorTitle : "เลือกสี", |
DlgColorBtnClear : "ล้างค่ารหัสสี", |
DlgColorHighlight : "ตัวอย่างสี", |
DlgColorSelected : "สีที่เลือก", |
// Smiley Dialog |
DlgSmileyTitle : "แทรกสัญักษณ์สื่ออารมณ์", |
// Special Character Dialog |
DlgSpecialCharTitle : "แทรกตัวอักษรพิเศษ", |
// Table Dialog |
DlgTableTitle : "คุณสมบัติของ ตาราง", |
DlgTableRows : "แถว", |
DlgTableColumns : "สดมน์", |
DlgTableBorder : "ขนาดเส้นขอบ", |
DlgTableAlign : "การจัดตำแหน่ง", |
DlgTableAlignNotSet : "<ไม่ระบุ>", |
DlgTableAlignLeft : "ชิดซ้าย", |
DlgTableAlignCenter : "กึ่งกลาง", |
DlgTableAlignRight : "ชิดขวา", |
DlgTableWidth : "กว้าง", |
DlgTableWidthPx : "จุดสี", |
DlgTableWidthPc : "เปอร์เซ็น", |
DlgTableHeight : "สูง", |
DlgTableCellSpace : "ระยะแนวนอนน", |
DlgTableCellPad : "ระยะแนวตั้ง", |
DlgTableCaption : "หัวเรื่องของตาราง", |
DlgTableSummary : "Summary", //MISSING |
// Table Cell Dialog |
DlgCellTitle : "คุณสมบัติของ ช่อง", |
DlgCellWidth : "กว้าง", |
DlgCellWidthPx : "จุดสี", |
DlgCellWidthPc : "เปอร์เซ็น", |
DlgCellHeight : "สูง", |
DlgCellWordWrap : "ตัดบรรทัดอัตโนมัติ", |
DlgCellWordWrapNotSet : "<ไม่ระบุ>", |
DlgCellWordWrapYes : "ใ่ช่", |
DlgCellWordWrapNo : "ไม่", |
DlgCellHorAlign : "การจัดวางแนวนอน", |
DlgCellHorAlignNotSet : "<ไม่ระบุ>", |
DlgCellHorAlignLeft : "ชิดซ้าย", |
DlgCellHorAlignCenter : "กึ่งกลาง", |
DlgCellHorAlignRight: "ชิดขวา", |
DlgCellVerAlign : "การจัดวางแนวตั้ง", |
DlgCellVerAlignNotSet : "<ไม่ระบุ>", |
DlgCellVerAlignTop : "บนสุด", |
DlgCellVerAlignMiddle : "กึ่งกลาง", |
DlgCellVerAlignBottom : "ล่างสุด", |
DlgCellVerAlignBaseline : "อิงบรรทัด", |
DlgCellRowSpan : "จำนวนแถวที่คร่อมกัน", |
DlgCellCollSpan : "จำนวนสดมน์ที่คร่อมกัน", |
DlgCellBackColor : "สีพื้นหลัง", |
DlgCellBorderColor : "สีเส้นขอบ", |
DlgCellBtnSelect : "เลือก..", |
// Find Dialog |
DlgFindTitle : "ค้นหา", |
DlgFindFindBtn : "ค้นหา", |
DlgFindNotFoundMsg : "ไม่พบคำที่ค้นหา.", |
// Replace Dialog |
DlgReplaceTitle : "ค้นหาและแทนที่", |
DlgReplaceFindLbl : "ค้นหาคำว่า:", |
DlgReplaceReplaceLbl : "แทนที่ด้วย:", |
DlgReplaceCaseChk : "ตัวโหญ่-เล็ก ต้องตรงกัน", |
DlgReplaceReplaceBtn : "แทนที่", |
DlgReplaceReplAllBtn : "แทนที่ทั้งหมดที่พบ", |
DlgReplaceWordChk : "ต้องตรงกันทุกคำ", |
// Paste Operations / Dialog |
PasteErrorPaste : "ไม่สามารถวางข้อความที่สำเนามาได้เนื่องจากการกำหนดค่าระดับความปลอดภัย. กรุณาใช้ปุ่มลัดเพื่อวางข้อความแทน (กดปุ่ม Ctrl และตัว V พร้อมกัน).", |
PasteErrorCut : "ไม่สามารถตัดข้อความที่เลือกไว้ได้เนื่องจากการกำหนดค่าระดับความปลอดภัย. กรุณาใช้ปุ่มลัดเพื่อวางข้อความแทน (กดปุ่ม Ctrl และตัว X พร้อมกัน).", |
PasteErrorCopy : "ไม่สามารถสำเนาข้อความที่เลือกไว้ได้เนื่องจากการกำหนดค่าระดับความปลอดภัย. กรุณาใช้ปุ่มลัดเพื่อวางข้อความแทน (กดปุ่ม Ctrl และตัว C พร้อมกัน).", |
PasteAsText : "วางแบบตัวอักษรธรรมดา", |
PasteFromWord : "วางแบบตัวอักษรจากโปรแกรมเวิร์ด", |
DlgPasteMsg2 : "Please paste inside the following box using the keyboard (<STRONG>Ctrl+V</STRONG>) and hit <STRONG>OK</STRONG>.", //MISSING |
DlgPasteIgnoreFont : "Ignore Font Face definitions", //MISSING |
DlgPasteRemoveStyles : "Remove Styles definitions", //MISSING |
DlgPasteCleanBox : "Clean Up Box", //MISSING |
// Color Picker |
ColorAutomatic : "สีอัตโนมัติ", |
ColorMoreColors : "เลือกสีอื่นๆ...", |
// Document Properties |
DocProps : "คุณสมบัติของเอกสาร", |
// Anchor Dialog |
DlgAnchorTitle : "คุณสมบัติของ Anchor", |
DlgAnchorName : "ชื่อ Anchor", |
DlgAnchorErrorName : "กรุณาระบุชื่อของ Anchor", |
// Speller Pages Dialog |
DlgSpellNotInDic : "ไม่พบในดิกชันนารี", |
DlgSpellChangeTo : "แก้ไขเป็น", |
DlgSpellBtnIgnore : "ยกเว้น", |
DlgSpellBtnIgnoreAll : "ยกเว้นทั้งหมด", |
DlgSpellBtnReplace : "แทนที่", |
DlgSpellBtnReplaceAll : "แทนที่ทั้งหมด", |
DlgSpellBtnUndo : "ยกเลิก", |
DlgSpellNoSuggestions : "- ไม่มีคำแนะนำใดๆ -", |
DlgSpellProgress : "กำลังตรวจสอบคำสะกด...", |
DlgSpellNoMispell : "ตรวจสอบคำสะกดเสร็จสิ้น: ไม่พบคำสะกดผิด", |
DlgSpellNoChanges : "ตรวจสอบคำสะกดเสร็จสิ้น: ไม่มีการแก้คำใดๆ", |
DlgSpellOneChange : "ตรวจสอบคำสะกดเสร็จสิ้น: แก้ไข1คำ", |
DlgSpellManyChanges : "ตรวจสอบคำสะกดเสร็จสิ้น:: แก้ไข %1 คำ", |
IeSpellDownload : "ไม่ได้ติดตั้งระบบตรวจสอบคำสะกด. ต้องการติดตั้งไหมครับ?", |
// Button Dialog |
DlgButtonText : "ข้อความ (ค่าตัวแปร)", |
DlgButtonType : "ข้อความ", |
DlgButtonTypeBtn : "Button", //MISSING |
DlgButtonTypeSbm : "Submit", //MISSING |
DlgButtonTypeRst : "Reset", //MISSING |
// Checkbox and Radio Button Dialogs |
DlgCheckboxName : "ชื่อ", |
DlgCheckboxValue : "ค่าตัวแปร", |
DlgCheckboxSelected : "เลือกเป็นค่าเริ่มต้น", |
// Form Dialog |
DlgFormName : "ชื่อ", |
DlgFormAction : "แอคชั่น", |
DlgFormMethod : "เมธอด", |
// Select Field Dialog |
DlgSelectName : "ชื่อ", |
DlgSelectValue : "ค่าตัวแปร", |
DlgSelectSize : "ขนาด", |
DlgSelectLines : "บรรทัด", |
DlgSelectChkMulti : "เลือกหลายค่าได้", |
DlgSelectOpAvail : "รายการตัวเลือก", |
DlgSelectOpText : "ข้อความ", |
DlgSelectOpValue : "ค่าตัวแปร", |
DlgSelectBtnAdd : "เพิ่ม", |
DlgSelectBtnModify : "แก้ไข", |
DlgSelectBtnUp : "บน", |
DlgSelectBtnDown : "ล่าง", |
DlgSelectBtnSetValue : "เลือกเป็นค่าเริ่มต้น", |
DlgSelectBtnDelete : "ลบ", |
// Textarea Dialog |
DlgTextareaName : "ชื่อ", |
DlgTextareaCols : "สดมภ์", |
DlgTextareaRows : "แถว", |
// Text Field Dialog |
DlgTextName : "ชื่อ", |
DlgTextValue : "ค่าตัวแปร", |
DlgTextCharWidth : "ความกว้าง", |
DlgTextMaxChars : "จำนวนตัวอักษรสูงสุด", |
DlgTextType : "ชนิด", |
DlgTextTypeText : "ข้อความ", |
DlgTextTypePass : "รหัสผ่าน", |
// Hidden Field Dialog |
DlgHiddenName : "ชื่อ", |
DlgHiddenValue : "ค่าตัวแปร", |
// Bulleted List Dialog |
BulletedListProp : "คุณสมบัติของ บูลเล็ตลิสต์", |
NumberedListProp : "คุณสมบัติของ นัมเบอร์ลิสต์", |
DlgLstStart : "Start", //MISSING |
DlgLstType : "ชนิด", |
DlgLstTypeCircle : "รูปวงกลม", |
DlgLstTypeDisc : "Disc", //MISSING |
DlgLstTypeSquare : "รูปสี่เหลี่ยม", |
DlgLstTypeNumbers : "หมายเลข (1, 2, 3)", |
DlgLstTypeLCase : "ตัวพิมพ์เล็ก (a, b, c)", |
DlgLstTypeUCase : "ตัวพิมพ์ใหญ่ (A, B, C)", |
DlgLstTypeSRoman : "เลขโรมันพิมพ์เล็ก (i, ii, iii)", |
DlgLstTypeLRoman : "เลขโรมันพิมพ์ใหญ่ (I, II, III)", |
// Document Properties Dialog |
DlgDocGeneralTab : "ลักษณะทั่วไปของเอกสาร", |
DlgDocBackTab : "พื้นหลัง", |
DlgDocColorsTab : "สีและระยะขอบ", |
DlgDocMetaTab : "ข้อมูลสำหรับเสิร์ชเอนจิ้น", |
DlgDocPageTitle : "ชื่อไตเติ้ล", |
DlgDocLangDir : "การอ่านภาษา", |
DlgDocLangDirLTR : "จากซ้ายไปขวา (LTR)", |
DlgDocLangDirRTL : "จากขวาไปซ้าย (RTL)", |
DlgDocLangCode : "รหัสภาษา", |
DlgDocCharSet : "ชุดตัวอักษร", |
DlgDocCharSetCE : "Central European", //MISSING |
DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING |
DlgDocCharSetCR : "Cyrillic", //MISSING |
DlgDocCharSetGR : "Greek", //MISSING |
DlgDocCharSetJP : "Japanese", //MISSING |
DlgDocCharSetKR : "Korean", //MISSING |
DlgDocCharSetTR : "Turkish", //MISSING |
DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING |
DlgDocCharSetWE : "Western European", //MISSING |
DlgDocCharSetOther : "ชุดตัวอักษรอื่นๆ", |
DlgDocDocType : "ประเภทของเอกสาร", |
DlgDocDocTypeOther : "ประเภทเอกสารอื่นๆ", |
DlgDocIncXHTML : "รวมเอา XHTML Declarations ไว้ด้วย", |
DlgDocBgColor : "สีพื้นหลัง", |
DlgDocBgImage : "ที่อยู่อ้างอิงออนไลน์ของรูปพื้นหลัง (Image URL)", |
DlgDocBgNoScroll : "พื้นหลังแบบไม่มีแถบเลื่อน", |
DlgDocCText : "ข้อความ", |
DlgDocCLink : "ลิงค์", |
DlgDocCVisited : "ลิงค์ที่เคยคลิ้กแล้ว Visited Link", |
DlgDocCActive : "ลิงค์ที่กำลังคลิ้ก Active Link", |
DlgDocMargins : "ระยะขอบของหน้าเอกสาร", |
DlgDocMaTop : "ด้านบน", |
DlgDocMaLeft : "ด้านซ้าย", |
DlgDocMaRight : "ด้านขวา", |
DlgDocMaBottom : "ด้านล่าง", |
DlgDocMeIndex : "คำสำคัญอธิบายเอกสาร (คั่นคำด้วย คอมม่า)", |
DlgDocMeDescr : "ประโยคอธิบายเกี่ยวกับเอกสาร", |
DlgDocMeAuthor : "ผู้สร้างเอกสาร", |
DlgDocMeCopy : "สงวนลิขสิทธิ์", |
DlgDocPreview : "ตัวอย่างหน้าเอกสาร", |
// Templates Dialog |
Templates : "Templates", //MISSING |
DlgTemplatesTitle : "Content Templates", //MISSING |
DlgTemplatesSelMsg : "Please select the template to open in the editor<br>(the actual contents will be lost):", //MISSING |
DlgTemplatesLoading : "Loading templates list. Please wait...", //MISSING |
DlgTemplatesNoTpl : "(No templates defined)", //MISSING |
DlgTemplatesReplace : "Replace actual contents", //MISSING |
// About Dialog |
DlgAboutAboutTab : "เกี่ยวกับโปรแกรม", |
DlgAboutBrowserInfoTab : "โปรแกรมท่องเว็บที่ท่านใช้", |
DlgAboutLicenseTab : "License", //MISSING |
DlgAboutVersion : "รุ่น", |
DlgAboutLicense : "สงวนลิขสิทธิ์ โดยนโยบายลิขสิทธิ์แบบ GNU Lesser General Public License", |
DlgAboutInfo : "ข้อมูลเพิ่มเติมภาษาไทยติดต่อ</BR>นาย ชรินทร์ อาษากิจ (อู้ด)</BR><A HREF='mailto:arsakit@gmail.com'>arsakit@gmail.com</A> tel. (+66) 06-9241924</BR>หรือดาวน์โหลดรุ่นภาษาไทยได้ที่เว็บไซต์</BR><A HREF='http://www.thaimall4u.com'>www.Thaimall4u.com</A></BR>ข้อมูลเพิ่มเติมภาษาอังกฤษ กรุณาไปที่นี่" |
} |
/branches/v1.0-menes/api/fckeditor/editor/lang/pl.js |
---|
New file |
0,0 → 1,502 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: pl.js |
* Polish language file. |
* |
* File Authors: |
* Jakub Boesche (jboesche@gazeta.pl) |
* Maciej Bochynski (maciej.bochynski@lubman.pl) |
*/ |
var FCKLang = |
{ |
// Language direction : "ltr" (left to right) or "rtl" (right to left). |
Dir : "ltr", |
ToolbarCollapse : "Zwiń pasek narzędzi", |
ToolbarExpand : "Rozwiń pasek narzędzi", |
// Toolbar Items and Context Menu |
Save : "Zapisz", |
NewPage : "Nowa strona", |
Preview : "Podgląd", |
Cut : "Wytnij", |
Copy : "Kopiuj", |
Paste : "Wklej", |
PasteText : "Wklej jako czysty tekst", |
PasteWord : "Wklej z Worda", |
Print : "Drukuj", |
SelectAll : "Zaznacz wszystko", |
RemoveFormat : "Usuń formatowanie", |
InsertLinkLbl : "Hiperłącze", |
InsertLink : "Wstaw/edytuj hiperłącze", |
RemoveLink : "Usuń hiperłącze", |
Anchor : "Wstaw/edytuj kotwicę", |
InsertImageLbl : "Obrazek", |
InsertImage : "Wstaw/edytuj obrazek", |
InsertFlashLbl : "Flash", |
InsertFlash : "Dodaj/Edytuj element Flash", |
InsertTableLbl : "Tabela", |
InsertTable : "Wstaw/edytuj tabelę", |
InsertLineLbl : "Linia pozioma", |
InsertLine : "Wstaw poziomą linię", |
InsertSpecialCharLbl: "Znak specjalny", |
InsertSpecialChar : "Wstaw znak specjalny", |
InsertSmileyLbl : "Emotikona", |
InsertSmiley : "Wstaw emotikonę", |
About : "O programie FCKeditor", |
Bold : "Pogrubienie", |
Italic : "Kursywa", |
Underline : "Podkreślenie", |
StrikeThrough : "Przekreślenie", |
Subscript : "Indeks dolny", |
Superscript : "Indeks górny", |
LeftJustify : "Wyrównaj do lewej", |
CenterJustify : "Wyrównaj do Årodka", |
RightJustify : "Wyrównaj do prawej", |
BlockJustify : "Wyrównaj do lewej i prawej", |
DecreaseIndent : "Zmniejsz wcięcie", |
IncreaseIndent : "Zwiększ wcięcie", |
Undo : "Cofnij", |
Redo : "Ponów", |
NumberedListLbl : "Lista numerowana", |
NumberedList : "Wstaw/usuń numerowanie listy", |
BulletedListLbl : "Lista wypunktowana", |
BulletedList : "Wstaw/usuń wypunktowanie listy", |
ShowTableBorders : "Pokazuj ramkę tabeli", |
ShowDetails : "Pokaż szczegóÅy", |
Style : "Styl", |
FontFormat : "Format", |
Font : "Czcionka", |
FontSize : "Rozmiar", |
TextColor : "Kolor tekstu", |
BGColor : "Kolor tła", |
Source : "ŹródÅo dokumentu", |
Find : "Znajdź", |
Replace : "Zamień", |
SpellCheck : "Sprawdź pisownię", |
UniversalKeyboard : "Klawiatura Uniwersalna", |
PageBreakLbl : "Odstęp", |
PageBreak : "Wstaw odstęp", |
Form : "Formularz", |
Checkbox : "Checkbox", |
RadioButton : "Pole wyboru", |
TextField : "Pole tekstowe", |
Textarea : "Obszar tekstowy", |
HiddenField : "Pole ukryte", |
Button : "Przycisk", |
SelectionField : "Lista wyboru", |
ImageButton : "Przycisk obrazek", |
FitWindow : "Maksymalizuj rozmiar edytora", |
// Context Menu |
EditLink : "Edytuj hiperłącze", |
CellCM : "Komórka", |
RowCM : "Wiersz", |
ColumnCM : "Kolumna", |
InsertRow : "Wstaw wiersz", |
DeleteRows : "Usuń wiersze", |
InsertColumn : "Wstaw kolumnę", |
DeleteColumns : "Usuń kolumny", |
InsertCell : "Wstaw komórkÄ", |
DeleteCells : "UsuÅ komórki", |
MergeCells : "PoÅÄ cz komórki", |
SplitCell : "Podziel komórkÄ", |
TableDelete : "Usuń tabelę", |
CellProperties : "WÅaÅciwoÅci komórki", |
TableProperties : "Właściwości tabeli", |
ImageProperties : "Właściwości obrazka", |
FlashProperties : "Właściwości elementu Flash", |
AnchorProp : "Właściwości kotwicy", |
ButtonProp : "Właściwości przycisku", |
CheckboxProp : "Checkbox - właściwości", |
HiddenFieldProp : "Właściwości pola ukrytego", |
RadioButtonProp : "Właściwości pola wyboru", |
ImageButtonProp : "Właściwości przycisku obrazka", |
TextFieldProp : "Właściwości pola tekstowego", |
SelectionFieldProp : "Właściwości listy wyboru", |
TextareaProp : "Właściwości obszaru tekstowego", |
FormProp : "Właściwości formularza", |
FontFormats : "Normalny;Tekst sformatowany;Adres;NagÅówek 1;NagÅówek 2;NagÅówek 3;NagÅówek 4;NagÅówek 5;NagÅówek 6", |
// Alerts and Messages |
ProcessingXHTML : "Przetwarzanie XHTML. Proszę czekać...", |
Done : "Gotowe", |
PasteWordConfirm : "Tekst, który chcesz wkleiÄ, prawdopodobnie pochodzi z programu Word. Czy chcesz go wyczyÅcic przed wklejeniem?", |
NotCompatiblePaste : "Ta funkcja jest dostępna w programie Internet Explorer w wersji 5.5 lub wyższej. Czy chcesz wkleić tekst bez czyszczenia?", |
UnknownToolbarItem : "Nieznany element paska narzędzi \"%1\"", |
UnknownCommand : "Nieznana komenda \"%1\"", |
NotImplemented : "Komenda niezaimplementowana", |
UnknownToolbarSet : "Pasek narzędzi \"%1\" nie istnieje", |
NoActiveX : "Ustawienia zabezpieczeÅ twojej przeglÄ darki mogÄ ograniczyÄ niektóre funkcje edytora. Musisz wÅÄ czyÄ opcjÄ \"Uruchamianie formantów Activex i dodatków plugin\". W przeciwnym wypadku mogÄ pojawiaÄ siÄ bÅÄdy.", |
BrowseServerBlocked : "Okno menadżera plików nie może zostaÄ otwarte. Upewnij siÄ, że wszystkie blokady popup sÄ wyÅÄ czone.", |
DialogBlocked : "Nie można otworzyć okna dialogowego. Upewnij się, że wszystkie blokady popup są wyłączone.", |
// Dialogs |
DlgBtnOK : "OK", |
DlgBtnCancel : "Anuluj", |
DlgBtnClose : "Zamknij", |
DlgBtnBrowseServer : "Przeglądaj", |
DlgAdvancedTag : "Zaawansowane", |
DlgOpOther : "<Inny>", |
DlgInfoTab : "Informacje", |
DlgAlertUrl : "Proszę podać URL", |
// General Dialogs Labels |
DlgGenNotSet : "<nieustawione>", |
DlgGenId : "Id", |
DlgGenLangDir : "Kierunek tekstu", |
DlgGenLangDirLtr : "Od lewej do prawej (LTR)", |
DlgGenLangDirRtl : "Od prawej do lewej (RTL)", |
DlgGenLangCode : "Kod języka", |
DlgGenAccessKey : "Klawisz dostępu", |
DlgGenName : "Nazwa", |
DlgGenTabIndex : "Indeks tabeli", |
DlgGenLongDescr : "Long Description URL", |
DlgGenClass : "Stylesheet Classes", |
DlgGenTitle : "Advisory Title", |
DlgGenContType : "Advisory Content Type", |
DlgGenLinkCharset : "Linked Resource Charset", |
DlgGenStyle : "Styl", |
// Image Dialog |
DlgImgTitle : "Właściwości obrazka", |
DlgImgInfoTab : "Informacje o obrazku", |
DlgImgBtnUpload : "Syślij", |
DlgImgURL : "Adres URL", |
DlgImgUpload : "Wyślij", |
DlgImgAlt : "Tekst zastępczy", |
DlgImgWidth : "Szerokość", |
DlgImgHeight : "Wysokość", |
DlgImgLockRatio : "Zablokuj proporcje", |
DlgBtnResetSize : "PrzywróÄ rozmiar", |
DlgImgBorder : "Ramka", |
DlgImgHSpace : "Odstęp poziomy", |
DlgImgVSpace : "Odstęp pionowy", |
DlgImgAlign : "Wyrównaj", |
DlgImgAlignLeft : "Do lewej", |
DlgImgAlignAbsBottom: "Do dołu", |
DlgImgAlignAbsMiddle: "Do środka w pionie", |
DlgImgAlignBaseline : "Do linii bazowej", |
DlgImgAlignBottom : "Do dołu", |
DlgImgAlignMiddle : "Do środka", |
DlgImgAlignRight : "Do prawej", |
DlgImgAlignTextTop : "Do góry tekstu", |
DlgImgAlignTop : "Do góry", |
DlgImgPreview : "Podgląd", |
DlgImgAlertUrl : "Podaj adres obrazka.", |
DlgImgLinkTab : "Link", |
// Flash Dialog |
DlgFlashTitle : "Właściwości elementu Flash", |
DlgFlashChkPlay : "Auto Odtwarzanie", |
DlgFlashChkLoop : "Pętla", |
DlgFlashChkMenu : "Włącz menu", |
DlgFlashScale : "Skaluj", |
DlgFlashScaleAll : "Pokaż wszystko", |
DlgFlashScaleNoBorder : "Bez Ramki", |
DlgFlashScaleFit : "Dokładne dopasowanie", |
// Link Dialog |
DlgLnkWindowTitle : "Hiperłącze", |
DlgLnkInfoTab : "Informacje ", |
DlgLnkTargetTab : "Cel", |
DlgLnkType : "Typ hiperłącza", |
DlgLnkTypeURL : "Adres URL", |
DlgLnkTypeAnchor : "Odnośnik wewnątrz strony", |
DlgLnkTypeEMail : "Adres e-mail", |
DlgLnkProto : "ProtokóÅ", |
DlgLnkProtoOther : "<inny>", |
DlgLnkURL : "Adres URL", |
DlgLnkAnchorSel : "Wybierz etykietę", |
DlgLnkAnchorByName : "Wg etykiety", |
DlgLnkAnchorById : "Wg identyfikatora elementu", |
DlgLnkNoAnchors : "<W dokumencie nie zdefiniowano żadnych etykiet>", |
DlgLnkEMail : "Adres e-mail", |
DlgLnkEMailSubject : "Temat", |
DlgLnkEMailBody : "Treść", |
DlgLnkUpload : "Upload", |
DlgLnkBtnUpload : "Wyślij", |
DlgLnkTarget : "Cel", |
DlgLnkTargetFrame : "<ramka>", |
DlgLnkTargetPopup : "<wyskakujące okno>", |
DlgLnkTargetBlank : "Nowe okno (_blank)", |
DlgLnkTargetParent : "Okno nadrzędne (_parent)", |
DlgLnkTargetSelf : "To samo okno (_self)", |
DlgLnkTargetTop : "Okno najwyższe w hierarchii (_top)", |
DlgLnkTargetFrameName : "Nazwa Ramki Docelowej", |
DlgLnkPopWinName : "Nazwa wyskakującego okna", |
DlgLnkPopWinFeat : "Właściwości wyskakującego okna", |
DlgLnkPopResize : "Możliwa zmiana rozmiaru", |
DlgLnkPopLocation : "Pasek adresu", |
DlgLnkPopMenu : "Pasek menu", |
DlgLnkPopScroll : "Paski przewijania", |
DlgLnkPopStatus : "Pasek statusu", |
DlgLnkPopToolbar : "Pasek narzędzi", |
DlgLnkPopFullScrn : "Pełny ekran (IE)", |
DlgLnkPopDependent : "Okno zależne (Netscape)", |
DlgLnkPopWidth : "Szerokość", |
DlgLnkPopHeight : "Wysokość", |
DlgLnkPopLeft : "Pozycja w poziomie", |
DlgLnkPopTop : "Pozycja w pionie", |
DlnLnkMsgNoUrl : "Podaj adres URL", |
DlnLnkMsgNoEMail : "Podaj adres e-mail", |
DlnLnkMsgNoAnchor : "Wybierz etykietę", |
DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING |
// Color Dialog |
DlgColorTitle : "Wybierz kolor", |
DlgColorBtnClear : "Wyczyść", |
DlgColorHighlight : "Podgląd", |
DlgColorSelected : "Wybrane", |
// Smiley Dialog |
DlgSmileyTitle : "Wstaw emotikonę", |
// Special Character Dialog |
DlgSpecialCharTitle : "Wybierz znak specjalny", |
// Table Dialog |
DlgTableTitle : "Właściwości tabeli", |
DlgTableRows : "Liczba wierszy", |
DlgTableColumns : "Liczba kolumn", |
DlgTableBorder : "Grubość ramki", |
DlgTableAlign : "Wyrównanie", |
DlgTableAlignNotSet : "<brak ustawień>", |
DlgTableAlignLeft : "Do lewej", |
DlgTableAlignCenter : "Do środka", |
DlgTableAlignRight : "Do prawej", |
DlgTableWidth : "Szerokość", |
DlgTableWidthPx : "piksele", |
DlgTableWidthPc : "%", |
DlgTableHeight : "Wysokość", |
DlgTableCellSpace : "OdstÄp pomiÄdzy komórkami", |
DlgTableCellPad : "Margines wewnÄtrzny komórek", |
DlgTableCaption : "Tytuł", |
DlgTableSummary : "Podsumowanie", |
// Table Cell Dialog |
DlgCellTitle : "WÅaÅciwoÅci komórki", |
DlgCellWidth : "Szerokość", |
DlgCellWidthPx : "piksele", |
DlgCellWidthPc : "%", |
DlgCellHeight : "Wysokość", |
DlgCellWordWrap : "Zawijanie tekstu", |
DlgCellWordWrapNotSet : "<brak ustawień>", |
DlgCellWordWrapYes : "Tak", |
DlgCellWordWrapNo : "Nie", |
DlgCellHorAlign : "Wyrównanie poziome", |
DlgCellHorAlignNotSet : "<brak ustawień>", |
DlgCellHorAlignLeft : "Do lewej", |
DlgCellHorAlignCenter : "Do środka", |
DlgCellHorAlignRight: "Do prawej", |
DlgCellVerAlign : "Wyrównanie pionowe", |
DlgCellVerAlignNotSet : "<brak ustawień>", |
DlgCellVerAlignTop : "Do góry", |
DlgCellVerAlignMiddle : "Do środka", |
DlgCellVerAlignBottom : "Do dołu", |
DlgCellVerAlignBaseline : "Do linii bazowej", |
DlgCellRowSpan : "Zajętość wierszy", |
DlgCellCollSpan : "Zajętość kolumn", |
DlgCellBackColor : "Kolor tła", |
DlgCellBorderColor : "Kolor ramki", |
DlgCellBtnSelect : "Wybierz...", |
// Find Dialog |
DlgFindTitle : "Znajdź", |
DlgFindFindBtn : "Znajdź", |
DlgFindNotFoundMsg : "Nie znaleziono szukanego hasła.", |
// Replace Dialog |
DlgReplaceTitle : "Zamień", |
DlgReplaceFindLbl : "Znajdź:", |
DlgReplaceReplaceLbl : "Zastąp przez:", |
DlgReplaceCaseChk : "Uwzględnij wielkość liter", |
DlgReplaceReplaceBtn : "Zastąp", |
DlgReplaceReplAllBtn : "Zastąp wszystko", |
DlgReplaceWordChk : "Całe słowa", |
// Paste Operations / Dialog |
PasteErrorPaste : "Ustawienia bezpieczeÅstwa Twojej przeglÄ darki nie pozwalajÄ na automatyczne wklejanie tekstu. Użyj skrótu klawiszowego Ctrl+V.", |
PasteErrorCut : "Ustawienia bezpieczeÅstwa Twojej przeglÄ darki nie pozwalajÄ na automatyczne wycinanie tekstu. Użyj skrótu klawiszowego Ctrl+X.", |
PasteErrorCopy : "Ustawienia bezpieczeÅstwa Twojej przeglÄ darki nie pozwalajÄ na automatyczne kopiowanie tekstu. Użyj skrótu klawiszowego Ctrl+C.", |
PasteAsText : "Wklej jako czysty tekst", |
PasteFromWord : "Wklej z Worda", |
DlgPasteMsg2 : "ProszÄ wkleiÄ w poniższym polu używajÄ c klawiaturowego skrótu (<STRONG>Ctrl+V</STRONG>) i kliknÄ Ä <STRONG>OK</STRONG>.", |
DlgPasteIgnoreFont : "Ignoruj definicje 'Font Face'", |
DlgPasteRemoveStyles : "UsuÅ definicje Stylów", |
DlgPasteCleanBox : "Wyczyść", |
// Color Picker |
ColorAutomatic : "Automatycznie", |
ColorMoreColors : "WiÄcej kolorów...", |
// Document Properties |
DocProps : "Właściwości dokumentu", |
// Anchor Dialog |
DlgAnchorTitle : "Właściwości kotwicy", |
DlgAnchorName : "Nazwa kotwicy", |
DlgAnchorErrorName : "Wpisz nazwę kotwicy", |
// Speller Pages Dialog |
DlgSpellNotInDic : "Słowa nie ma w słowniku", |
DlgSpellChangeTo : "Zmień na", |
DlgSpellBtnIgnore : "Ignoruj", |
DlgSpellBtnIgnoreAll : "Ignoruj wszystkie", |
DlgSpellBtnReplace : "Zmień", |
DlgSpellBtnReplaceAll : "Zmień wszystkie", |
DlgSpellBtnUndo : "Undo", |
DlgSpellNoSuggestions : "- Brak sugestii -", |
DlgSpellProgress : "Trwa sprawdzanie ...", |
DlgSpellNoMispell : "Sprawdzanie zakoÅczone: nie znaleziono bÅÄdów", |
DlgSpellNoChanges : "Sprawdzanie zakończone: nie zmieniono żadnego słowa", |
DlgSpellOneChange : "Sprawdzanie zakończone: zmieniono jedno słowo", |
DlgSpellManyChanges : "Sprawdzanie zakoÅczone: zmieniono %l sÅów", |
IeSpellDownload : "Słownik nie jest zainstalowany. Chcesz go ściągnąć?", |
// Button Dialog |
DlgButtonText : "Tekst (Wartość)", |
DlgButtonType : "Typ", |
DlgButtonTypeBtn : "Button", //MISSING |
DlgButtonTypeSbm : "Submit", //MISSING |
DlgButtonTypeRst : "Reset", //MISSING |
// Checkbox and Radio Button Dialogs |
DlgCheckboxName : "Nazwa", |
DlgCheckboxValue : "Wartość", |
DlgCheckboxSelected : "Zaznaczony", |
// Form Dialog |
DlgFormName : "Nazwa", |
DlgFormAction : "Akcja", |
DlgFormMethod : "Metoda", |
// Select Field Dialog |
DlgSelectName : "Nazwa", |
DlgSelectValue : "Wartość", |
DlgSelectSize : "Rozmiar", |
DlgSelectLines : "linii", |
DlgSelectChkMulti : "Wielokrotny wybór", |
DlgSelectOpAvail : "Dostępne opcje", |
DlgSelectOpText : "Tekst", |
DlgSelectOpValue : "Wartość", |
DlgSelectBtnAdd : "Dodaj", |
DlgSelectBtnModify : "Zmień", |
DlgSelectBtnUp : "Do góry", |
DlgSelectBtnDown : "Do dołu", |
DlgSelectBtnSetValue : "Ustaw wartość zaznaczoną", |
DlgSelectBtnDelete : "Usuń", |
// Textarea Dialog |
DlgTextareaName : "Nazwa", |
DlgTextareaCols : "Kolumnu", |
DlgTextareaRows : "Wiersze", |
// Text Field Dialog |
DlgTextName : "Nazwa", |
DlgTextValue : "Wartość", |
DlgTextCharWidth : "Szerokość w znakach", |
DlgTextMaxChars : "Max. szerokość", |
DlgTextType : "Typ", |
DlgTextTypeText : "Tekst", |
DlgTextTypePass : "Hasło", |
// Hidden Field Dialog |
DlgHiddenName : "Nazwa", |
DlgHiddenValue : "Wartość", |
// Bulleted List Dialog |
BulletedListProp : "Właściwości listy punktowanej", |
NumberedListProp : "Właściwości listy numerowanej", |
DlgLstStart : "Start", //MISSING |
DlgLstType : "Typ", |
DlgLstTypeCircle : "Koło", |
DlgLstTypeDisc : "Dysk", |
DlgLstTypeSquare : "Kwadrat", |
DlgLstTypeNumbers : "Cyfry (1, 2, 3)", |
DlgLstTypeLCase : "Małe litery (a, b, c)", |
DlgLstTypeUCase : "Duże litery (A, B, C)", |
DlgLstTypeSRoman : "Numeracja rzymska (i, ii, iii)", |
DlgLstTypeLRoman : "Numeracja rzymska (I, II, III)", |
// Document Properties Dialog |
DlgDocGeneralTab : "Ogólne", |
DlgDocBackTab : "Tło", |
DlgDocColorsTab : "Kolory i marginesy", |
DlgDocMetaTab : "Meta Dane", |
DlgDocPageTitle : "Tytuł strony", |
DlgDocLangDir : "Kierunek pisania", |
DlgDocLangDirLTR : "Od lewej do prawej (LTR)", |
DlgDocLangDirRTL : "Od prawej do lewej (RTL)", |
DlgDocLangCode : "Kod języka", |
DlgDocCharSet : "Kodowanie znaków", |
DlgDocCharSetCE : "Central European", //MISSING |
DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING |
DlgDocCharSetCR : "Cyrillic", //MISSING |
DlgDocCharSetGR : "Greek", //MISSING |
DlgDocCharSetJP : "Japanese", //MISSING |
DlgDocCharSetKR : "Korean", //MISSING |
DlgDocCharSetTR : "Turkish", //MISSING |
DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING |
DlgDocCharSetWE : "Western European", //MISSING |
DlgDocCharSetOther : "Inne kodowanie znaków", |
DlgDocDocType : "Nagłowek typu dokumentu", |
DlgDocDocTypeOther : "Inny typ dokumentu", |
DlgDocIncXHTML : "Dołącz deklarację XHTML", |
DlgDocBgColor : "Kolor tła", |
DlgDocBgImage : "Obrazek tła", |
DlgDocBgNoScroll : "Tło nieruchome", |
DlgDocCText : "Tekst", |
DlgDocCLink : "Hiperłącze", |
DlgDocCVisited : "Odwiedzane hiperłącze", |
DlgDocCActive : "Aktywne hiperłącze", |
DlgDocMargins : "Marginesy strony", |
DlgDocMaTop : "Górny", |
DlgDocMaLeft : "Lewy", |
DlgDocMaRight : "Prawy", |
DlgDocMaBottom : "Dolny", |
DlgDocMeIndex : "Słowa kluczowe (oddzielone przecinkami)", |
DlgDocMeDescr : "Opis dokumentu", |
DlgDocMeAuthor : "Autor", |
DlgDocMeCopy : "Copyright", |
DlgDocPreview : "Podgląd", |
// Templates Dialog |
Templates : "Sablony", |
DlgTemplatesTitle : "Szablony zawartości", |
DlgTemplatesSelMsg : "Wybierz szablon do otwarcia w edytorze<br>(obecna zawartość okna edytora zostanie utracona):", |
DlgTemplatesLoading : "Åadowanie listy szablonów. ProszÄ czekaÄ...", |
DlgTemplatesNoTpl : "(Brak zdefiniowanych szablonów)", |
DlgTemplatesReplace : "Replace actual contents", //MISSING |
// About Dialog |
DlgAboutAboutTab : "O ...", |
DlgAboutBrowserInfoTab : "O przeglądarce", |
DlgAboutLicenseTab : "Licencja", |
DlgAboutVersion : "wersja", |
DlgAboutLicense : "na licencji GNU Lesser General Public License", |
DlgAboutInfo : "Więcej informacji uzyskasz pod adresem" |
} |
/branches/v1.0-menes/api/fckeditor/editor/lang/it.js |
---|
New file |
0,0 → 1,501 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: it.js |
* Italian language file. |
* |
* File Authors: |
* Simone Chiaretta (simone@piyosailing.com) |
*/ |
var FCKLang = |
{ |
// Language direction : "ltr" (left to right) or "rtl" (right to left). |
Dir : "ltr", |
ToolbarCollapse : "Nascondi la barra degli strumenti", |
ToolbarExpand : "Mostra la barra degli strumenti", |
// Toolbar Items and Context Menu |
Save : "Salva", |
NewPage : "Nuova pagina vuota", |
Preview : "Anteprima", |
Cut : "Taglia", |
Copy : "Copia", |
Paste : "Incolla", |
PasteText : "Incolla come testo semplice", |
PasteWord : "Incolla da Word", |
Print : "Stampa", |
SelectAll : "Seleziona tutto", |
RemoveFormat : "Elimina formattazione", |
InsertLinkLbl : "Collegamento", |
InsertLink : "Inserisci/Modifica collegamento", |
RemoveLink : "Elimina collegamento", |
Anchor : "Inserisci/Modifica Ancora", |
InsertImageLbl : "Immagine", |
InsertImage : "Inserisci/Modifica immagine", |
InsertFlashLbl : "Oggetto Flash", |
InsertFlash : "Inserisci/Modifica Oggetto Flash", |
InsertTableLbl : "Tabella", |
InsertTable : "Inserisci/Modifica tabella", |
InsertLineLbl : "Riga orizzontale", |
InsertLine : "Inserisci riga orizzontale", |
InsertSpecialCharLbl: "Caratteri speciali", |
InsertSpecialChar : "Inserisci carattere speciale", |
InsertSmileyLbl : "Emoticon", |
InsertSmiley : "Inserisci emoticon", |
About : "Informazioni su FCKeditor", |
Bold : "Grassetto", |
Italic : "Corsivo", |
Underline : "Sottolineato", |
StrikeThrough : "Barrato", |
Subscript : "Pedice", |
Superscript : "Apice", |
LeftJustify : "Allinea a sinistra", |
CenterJustify : "Centra", |
RightJustify : "Allinea a destra", |
BlockJustify : "Giustifica", |
DecreaseIndent : "Riduci rientro", |
IncreaseIndent : "Aumenta rientro", |
Undo : "Annulla", |
Redo : "Ripristina", |
NumberedListLbl : "Elenco numerato", |
NumberedList : "Inserisci/Modifica elenco numerato", |
BulletedListLbl : "Elenco puntato", |
BulletedList : "Inserisci/Modifica elenco puntato", |
ShowTableBorders : "Mostra bordi tabelle", |
ShowDetails : "Mostra dettagli", |
Style : "Stile", |
FontFormat : "Formato", |
Font : "Font", |
FontSize : "Dimensione", |
TextColor : "Colore testo", |
BGColor : "Colore sfondo", |
Source : "Codice Sorgente", |
Find : "Trova", |
Replace : "Sostituisci", |
SpellCheck : "Correttore ortografico", |
UniversalKeyboard : "Tastiera universale", |
PageBreakLbl : "Interruzione di pagina", |
PageBreak : "Inserisci interruzione di pagina", |
Form : "Modulo", |
Checkbox : "Checkbox", |
RadioButton : "Radio Button", |
TextField : "Campo di testo", |
Textarea : "Area di testo", |
HiddenField : "Campo nascosto", |
Button : "Bottone", |
SelectionField : "Menu di selezione", |
ImageButton : "Bottone immagine", |
FitWindow : "Massimizza l'area dell'editor", |
// Context Menu |
EditLink : "Modifica collegamento", |
CellCM : "Cella", |
RowCM : "Riga", |
ColumnCM : "Colonna", |
InsertRow : "Inserisci riga", |
DeleteRows : "Elimina righe", |
InsertColumn : "Inserisci colonna", |
DeleteColumns : "Elimina colonne", |
InsertCell : "Inserisci cella", |
DeleteCells : "Elimina celle", |
MergeCells : "Unisce celle", |
SplitCell : "Dividi celle", |
TableDelete : "Cancella Tabella", |
CellProperties : "Proprietà cella", |
TableProperties : "Proprietà tabella", |
ImageProperties : "Proprietà immagine", |
FlashProperties : "Proprietà Oggetto Flash", |
AnchorProp : "Proprietà ancora", |
ButtonProp : "Proprietà bottone", |
CheckboxProp : "Proprietà checkbox", |
HiddenFieldProp : "Proprietà campo nascosto", |
RadioButtonProp : "Proprietà radio button", |
ImageButtonProp : "Proprietà bottone immagine", |
TextFieldProp : "Proprietà campo di testo", |
SelectionFieldProp : "Proprietà menu di selezione", |
TextareaProp : "Proprietà area di testo", |
FormProp : "Proprietà modulo", |
FontFormats : "Normale;Formattato;Indirizzo;Titolo 1;Titolo 2;Titolo 3;Titolo 4;Titolo 5;Titolo 6;Paragrafo (DIV)", |
// Alerts and Messages |
ProcessingXHTML : "Elaborazione XHTML in corso. Attendere prego...", |
Done : "Completato", |
PasteWordConfirm : "Il testo da incollare sembra provenire da Word. Desideri pulirlo prima di incollare?", |
NotCompatiblePaste : "Questa funzione è disponibile solo per Internet Explorer 5.5 o superiore. Desideri incollare il testo senza pulirlo?", |
UnknownToolbarItem : "Elemento della barra strumenti sconosciuto \"%1\"", |
UnknownCommand : "Comando sconosciuto \"%1\"", |
NotImplemented : "Comando non implementato", |
UnknownToolbarSet : "La barra di strumenti \"%1\" non esiste", |
NoActiveX : "Le impostazioni di sicurezza del tuo browser potrebbero limitare alcune funzionalità dell'editor. Devi abilitare l'opzione \"Esegui controlli e plug-in ActiveX\". Potresti avere errori e notare funzionalità mancanti.", |
BrowseServerBlocked : "Non è possibile aprire la finestra di espolorazione risorse. Verifica che tutti i blocca popup siano bloccati.", |
DialogBlocked : "Non è possibile aprire la finestra di dialogo. Verifica che tutti i blocca popup siano bloccati.", |
// Dialogs |
DlgBtnOK : "OK", |
DlgBtnCancel : "Annulla", |
DlgBtnClose : "Chiudi", |
DlgBtnBrowseServer : "Cerca sul server", |
DlgAdvancedTag : "Avanzate", |
DlgOpOther : "<Altro>", |
DlgInfoTab : "Info", |
DlgAlertUrl : "Devi inserire l'URL", |
// General Dialogs Labels |
DlgGenNotSet : "<non impostato>", |
DlgGenId : "Id", |
DlgGenLangDir : "Direzione scrittura", |
DlgGenLangDirLtr : "Da Sinistra a Destra (LTR)", |
DlgGenLangDirRtl : "Da Destra a Sinistra (RTL)", |
DlgGenLangCode : "Codice Lingua", |
DlgGenAccessKey : "Scorciatoia<br />da tastiera", |
DlgGenName : "Nome", |
DlgGenTabIndex : "Ordine di tabulazione", |
DlgGenLongDescr : "URL descrizione estesa", |
DlgGenClass : "Nome classe CSS", |
DlgGenTitle : "Titolo", |
DlgGenContType : "Tipo della risorsa collegata", |
DlgGenLinkCharset : "Set di caretteri della risorsa collegata", |
DlgGenStyle : "Stile", |
// Image Dialog |
DlgImgTitle : "Proprietà immagine", |
DlgImgInfoTab : "Informazioni immagine", |
DlgImgBtnUpload : "Invia al server", |
DlgImgURL : "URL", |
DlgImgUpload : "Carica", |
DlgImgAlt : "Testo alternativo", |
DlgImgWidth : "Larghezza", |
DlgImgHeight : "Altezza", |
DlgImgLockRatio : "Blocca rapporto", |
DlgBtnResetSize : "Reimposta dimensione", |
DlgImgBorder : "Bordo", |
DlgImgHSpace : "HSpace", |
DlgImgVSpace : "VSpace", |
DlgImgAlign : "Allineamento", |
DlgImgAlignLeft : "Sinistra", |
DlgImgAlignAbsBottom: "In basso assoluto", |
DlgImgAlignAbsMiddle: "Centrato assoluto", |
DlgImgAlignBaseline : "Linea base", |
DlgImgAlignBottom : "In Basso", |
DlgImgAlignMiddle : "Centrato", |
DlgImgAlignRight : "Destra", |
DlgImgAlignTextTop : "In alto al testo", |
DlgImgAlignTop : "In Alto", |
DlgImgPreview : "Anteprima", |
DlgImgAlertUrl : "Devi inserire l'URL per l'immagine", |
DlgImgLinkTab : "Collegamento", |
// Flash Dialog |
DlgFlashTitle : "Proprietà Oggetto Flash", |
DlgFlashChkPlay : "Avvio Automatico", |
DlgFlashChkLoop : "Cicla", |
DlgFlashChkMenu : "Abilita Menu di Flash", |
DlgFlashScale : "Ridimensiona", |
DlgFlashScaleAll : "Mostra Tutto", |
DlgFlashScaleNoBorder : "Senza Bordo", |
DlgFlashScaleFit : "Dimensione Esatta", |
// Link Dialog |
DlgLnkWindowTitle : "Collegamento", |
DlgLnkInfoTab : "Informazioni collegamento", |
DlgLnkTargetTab : "Destinazione", |
DlgLnkType : "Tipo di Collegamento", |
DlgLnkTypeURL : "URL", |
DlgLnkTypeAnchor : "Ancora nella pagina", |
DlgLnkTypeEMail : "E-Mail", |
DlgLnkProto : "Protocollo", |
DlgLnkProtoOther : "<altro>", |
DlgLnkURL : "URL", |
DlgLnkAnchorSel : "Scegli Ancora", |
DlgLnkAnchorByName : "Per Nome", |
DlgLnkAnchorById : "Per id elemento", |
DlgLnkNoAnchors : "<Nessuna ancora disponibile nel documento>", |
DlgLnkEMail : "Indirizzo E-Mail", |
DlgLnkEMailSubject : "Oggetto del messaggio", |
DlgLnkEMailBody : "Corpo del messaggio", |
DlgLnkUpload : "Carica", |
DlgLnkBtnUpload : "Invia al Server", |
DlgLnkTarget : "Destinazione", |
DlgLnkTargetFrame : "<riquadro>", |
DlgLnkTargetPopup : "<finestra popup>", |
DlgLnkTargetBlank : "Nuova finestra (_blank)", |
DlgLnkTargetParent : "Finestra padre (_parent)", |
DlgLnkTargetSelf : "Stessa finestra (_self)", |
DlgLnkTargetTop : "Finestra superiore (_top)", |
DlgLnkTargetFrameName : "Nome del riquadro di destinazione", |
DlgLnkPopWinName : "Nome finestra popup", |
DlgLnkPopWinFeat : "Caratteristiche finestra popup", |
DlgLnkPopResize : "Ridimensionabile", |
DlgLnkPopLocation : "Barra degli indirizzi", |
DlgLnkPopMenu : "Barra del menu", |
DlgLnkPopScroll : "Barre di scorrimento", |
DlgLnkPopStatus : "Barra di stato", |
DlgLnkPopToolbar : "Barra degli strumenti", |
DlgLnkPopFullScrn : "A tutto schermo (IE)", |
DlgLnkPopDependent : "Dipendente (Netscape)", |
DlgLnkPopWidth : "Larghezza", |
DlgLnkPopHeight : "Altezza", |
DlgLnkPopLeft : "Posizione da sinistra", |
DlgLnkPopTop : "Posizione dall'alto", |
DlnLnkMsgNoUrl : "Devi inserire l'URL del collegamento", |
DlnLnkMsgNoEMail : "Devi inserire un'indirizzo e-mail", |
DlnLnkMsgNoAnchor : "Devi selezionare un'ancora", |
DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING |
// Color Dialog |
DlgColorTitle : "Seleziona colore", |
DlgColorBtnClear : "Vuota", |
DlgColorHighlight : "Evidenziato", |
DlgColorSelected : "Selezionato", |
// Smiley Dialog |
DlgSmileyTitle : "Inserisci emoticon", |
// Special Character Dialog |
DlgSpecialCharTitle : "Seleziona carattere speciale", |
// Table Dialog |
DlgTableTitle : "Proprietà tabella", |
DlgTableRows : "Righe", |
DlgTableColumns : "Colonne", |
DlgTableBorder : "Dimensione bordo", |
DlgTableAlign : "Allineamento", |
DlgTableAlignNotSet : "<non impostato>", |
DlgTableAlignLeft : "Sinistra", |
DlgTableAlignCenter : "Centrato", |
DlgTableAlignRight : "Destra", |
DlgTableWidth : "Larghezza", |
DlgTableWidthPx : "pixel", |
DlgTableWidthPc : "percento", |
DlgTableHeight : "Altezza", |
DlgTableCellSpace : "Spaziatura celle", |
DlgTableCellPad : "Padding celle", |
DlgTableCaption : "Intestazione", |
DlgTableSummary : "Indice", |
// Table Cell Dialog |
DlgCellTitle : "Proprietà cella", |
DlgCellWidth : "Larghezza", |
DlgCellWidthPx : "pixel", |
DlgCellWidthPc : "percento", |
DlgCellHeight : "Altezza", |
DlgCellWordWrap : "A capo automatico", |
DlgCellWordWrapNotSet : "<non impostato>", |
DlgCellWordWrapYes : "Si", |
DlgCellWordWrapNo : "No", |
DlgCellHorAlign : "Allineamento orizzontale", |
DlgCellHorAlignNotSet : "<non impostato>", |
DlgCellHorAlignLeft : "Sinistra", |
DlgCellHorAlignCenter : "Centrato", |
DlgCellHorAlignRight: "Destra", |
DlgCellVerAlign : "Allineamento verticale", |
DlgCellVerAlignNotSet : "<non impostato>", |
DlgCellVerAlignTop : "In Alto", |
DlgCellVerAlignMiddle : "Centrato", |
DlgCellVerAlignBottom : "In Basso", |
DlgCellVerAlignBaseline : "Linea base", |
DlgCellRowSpan : "Righe occupate", |
DlgCellCollSpan : "Colonne occupate", |
DlgCellBackColor : "Colore sfondo", |
DlgCellBorderColor : "Colore bordo", |
DlgCellBtnSelect : "Scegli...", |
// Find Dialog |
DlgFindTitle : "Trova", |
DlgFindFindBtn : "Trova", |
DlgFindNotFoundMsg : "L'elemento cercato non è stato trovato.", |
// Replace Dialog |
DlgReplaceTitle : "Sostituisci", |
DlgReplaceFindLbl : "Trova:", |
DlgReplaceReplaceLbl : "Sostituisci con:", |
DlgReplaceCaseChk : "Maiuscole/minuscole", |
DlgReplaceReplaceBtn : "Sostituisci", |
DlgReplaceReplAllBtn : "Sostituisci tutto", |
DlgReplaceWordChk : "Solo parole intere", |
// Paste Operations / Dialog |
PasteErrorPaste : "Le impostazioni di sicurezza del browser non permettono di incollare automaticamente il testo. Usa la tastiera (Ctrl+V).", |
PasteErrorCut : "Le impostazioni di sicurezza del browser non permettono di tagliare automaticamente il testo. Usa la tastiera (Ctrl+X).", |
PasteErrorCopy : "Le impostazioni di sicurezza del browser non permettono di copiare automaticamente il testo. Usa la tastiera (Ctrl+C).", |
PasteAsText : "Incolla come testo semplice", |
PasteFromWord : "Incolla da Word", |
DlgPasteMsg2 : "Incolla il testo all'interno dell'area sottostante usando la scorciatoia di tastiere (<STRONG>Ctrl+V</STRONG>) e premi <STRONG>OK</STRONG>.", |
DlgPasteIgnoreFont : "Ignora le definizioni di Font", |
DlgPasteRemoveStyles : "Rimuovi le definizioni di Stile", |
DlgPasteCleanBox : "Svuota area di testo", |
// Color Picker |
ColorAutomatic : "Automatico", |
ColorMoreColors : "Altri colori...", |
// Document Properties |
DocProps : "Proprietà del Documento", |
// Anchor Dialog |
DlgAnchorTitle : "Proprietà ancora", |
DlgAnchorName : "Nome ancora", |
DlgAnchorErrorName : "Inserici il nome dell'ancora", |
// Speller Pages Dialog |
DlgSpellNotInDic : "Non nel dizionario", |
DlgSpellChangeTo : "Cambia in", |
DlgSpellBtnIgnore : "Ignora", |
DlgSpellBtnIgnoreAll : "Ignora tutto", |
DlgSpellBtnReplace : "Cambia", |
DlgSpellBtnReplaceAll : "Cambia tutto", |
DlgSpellBtnUndo : "Annulla", |
DlgSpellNoSuggestions : "- Nessun suggerimento -", |
DlgSpellProgress : "Controllo ortografico in corso", |
DlgSpellNoMispell : "Controllo ortografico completato: nessun errore trovato", |
DlgSpellNoChanges : "Controllo ortografico completato: nessuna parola cambiata", |
DlgSpellOneChange : "Controllo ortografico completato: 1 parola cambiata", |
DlgSpellManyChanges : "Controllo ortografico completato: %1 parole cambiate", |
IeSpellDownload : "Contollo ortografico non installato. Lo vuoi scaricare ora?", |
// Button Dialog |
DlgButtonText : "Testo (Value)", |
DlgButtonType : "Tipo", |
DlgButtonTypeBtn : "Button", //MISSING |
DlgButtonTypeSbm : "Submit", //MISSING |
DlgButtonTypeRst : "Reset", //MISSING |
// Checkbox and Radio Button Dialogs |
DlgCheckboxName : "Nome", |
DlgCheckboxValue : "Valore", |
DlgCheckboxSelected : "Selezionato", |
// Form Dialog |
DlgFormName : "Nome", |
DlgFormAction : "Azione", |
DlgFormMethod : "Metodo", |
// Select Field Dialog |
DlgSelectName : "Nome", |
DlgSelectValue : "Valore", |
DlgSelectSize : "Dimensione", |
DlgSelectLines : "righe", |
DlgSelectChkMulti : "Permetti selezione multipla", |
DlgSelectOpAvail : "Opzioni disponibili", |
DlgSelectOpText : "Testo", |
DlgSelectOpValue : "Valore", |
DlgSelectBtnAdd : "Aggiungi", |
DlgSelectBtnModify : "Modifica", |
DlgSelectBtnUp : "Su", |
DlgSelectBtnDown : "Gi", |
DlgSelectBtnSetValue : "Imposta come predefinito", |
DlgSelectBtnDelete : "Rimuovi", |
// Textarea Dialog |
DlgTextareaName : "Nome", |
DlgTextareaCols : "Colonne", |
DlgTextareaRows : "Righe", |
// Text Field Dialog |
DlgTextName : "Nome", |
DlgTextValue : "Valore", |
DlgTextCharWidth : "Larghezza", |
DlgTextMaxChars : "Numero massimo di caratteri", |
DlgTextType : "Tipo", |
DlgTextTypeText : "Testo", |
DlgTextTypePass : "Password", |
// Hidden Field Dialog |
DlgHiddenName : "Nome", |
DlgHiddenValue : "Valore", |
// Bulleted List Dialog |
BulletedListProp : "Proprietà lista puntata", |
NumberedListProp : "Proprietà lista numerata", |
DlgLstStart : "Start", //MISSING |
DlgLstType : "Tipo", |
DlgLstTypeCircle : "Tondo", |
DlgLstTypeDisc : "Disco", |
DlgLstTypeSquare : "Quadrato", |
DlgLstTypeNumbers : "Numeri (1, 2, 3)", |
DlgLstTypeLCase : "Caratteri minuscoli (a, b, c)", |
DlgLstTypeUCase : "Caratteri maiuscoli (A, B, C)", |
DlgLstTypeSRoman : "Numeri Romani minuscoli (i, ii, iii)", |
DlgLstTypeLRoman : "Numeri Romani maiuscoli (I, II, III)", |
// Document Properties Dialog |
DlgDocGeneralTab : "Genarale", |
DlgDocBackTab : "Sfondo", |
DlgDocColorsTab : "Colori e margini", |
DlgDocMetaTab : "Meta Data", |
DlgDocPageTitle : "Titolo pagina", |
DlgDocLangDir : "Direzione scrittura", |
DlgDocLangDirLTR : "Da Sinistra a Destra (LTR)", |
DlgDocLangDirRTL : "Da Destra a Sinistra (RTL)", |
DlgDocLangCode : "Codice Lingua", |
DlgDocCharSet : "Set di caretteri", |
DlgDocCharSetCE : "Central European", //MISSING |
DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING |
DlgDocCharSetCR : "Cyrillic", //MISSING |
DlgDocCharSetGR : "Greek", //MISSING |
DlgDocCharSetJP : "Japanese", //MISSING |
DlgDocCharSetKR : "Korean", //MISSING |
DlgDocCharSetTR : "Turkish", //MISSING |
DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING |
DlgDocCharSetWE : "Western European", //MISSING |
DlgDocCharSetOther : "Altro set di caretteri", |
DlgDocDocType : "Intestazione DocType", |
DlgDocDocTypeOther : "Altra intestazione DocType", |
DlgDocIncXHTML : "Includi dichiarazione XHTML", |
DlgDocBgColor : "Colore di sfondo", |
DlgDocBgImage : "Immagine di sfondo", |
DlgDocBgNoScroll : "Sfondo fissato", |
DlgDocCText : "Testo", |
DlgDocCLink : "Collegamento", |
DlgDocCVisited : "Collegamento visitato", |
DlgDocCActive : "Collegamento attivo", |
DlgDocMargins : "Margini", |
DlgDocMaTop : "In Alto", |
DlgDocMaLeft : "A Sinistra", |
DlgDocMaRight : "A Destra", |
DlgDocMaBottom : "In Basso", |
DlgDocMeIndex : "Chiavi di indicizzazione documento (separate da virgola)", |
DlgDocMeDescr : "Descrizione documento", |
DlgDocMeAuthor : "Autore", |
DlgDocMeCopy : "Copyright", |
DlgDocPreview : "Anteprima", |
// Templates Dialog |
Templates : "Modelli", |
DlgTemplatesTitle : "Contenuto dei modelli", |
DlgTemplatesSelMsg : "Seleziona il modello da aprire nell'editor<br />(il contenuto attuale verrà eliminato):", |
DlgTemplatesLoading : "Caricamento modelli in corso. Attendere prego...", |
DlgTemplatesNoTpl : "(Nessun modello definito)", |
DlgTemplatesReplace : "Replace actual contents", //MISSING |
// About Dialog |
DlgAboutAboutTab : "Informazioni", |
DlgAboutBrowserInfoTab : "Informazioni Browser", |
DlgAboutLicenseTab : "Licenza", |
DlgAboutVersion : "versione", |
DlgAboutLicense : "Rilasciato sotto la licensa GNU Lesser General Public License", |
DlgAboutInfo : "Localizzazione in Italiano realizzata da Simone Chiaretta<br /><a target=\"_blank\" href=\"http://www.piyosailing.com/S/\">www.piyosailing.com</a><br /><br />Per maggiori informazioni visitare" |
} |
/branches/v1.0-menes/api/fckeditor/editor/lang/sl.js |
---|
New file |
0,0 → 1,501 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: sl.js |
* Slovenian language file. |
* |
* File Authors: |
* Boris Volarič (vol@rutka.net) |
*/ |
var FCKLang = |
{ |
// Language direction : "ltr" (left to right) or "rtl" (right to left). |
Dir : "ltr", |
ToolbarCollapse : "Zloži orodno vrstico", |
ToolbarExpand : "Razširi orodno vrstico", |
// Toolbar Items and Context Menu |
Save : "Shrani", |
NewPage : "Nova stran", |
Preview : "Predogled", |
Cut : "Izreži", |
Copy : "Kopiraj", |
Paste : "Prilepi", |
PasteText : "Prilepi kot golo besedilo", |
PasteWord : "Prilepi iz Worda", |
Print : "Natisni", |
SelectAll : "Izberi vse", |
RemoveFormat : "Odstrani oblikovanje", |
InsertLinkLbl : "Povezava", |
InsertLink : "Vstavi/uredi povezavo", |
RemoveLink : "Odstrani povezavo", |
Anchor : "Vstavi/uredi zaznamek", |
InsertImageLbl : "Slika", |
InsertImage : "Vstavi/uredi sliko", |
InsertFlashLbl : "Flash", |
InsertFlash : "Vstavi/Uredi Flash", |
InsertTableLbl : "Tabela", |
InsertTable : "Vstavi/uredi tabelo", |
InsertLineLbl : "Črta", |
InsertLine : "Vstavi vodoravno črto", |
InsertSpecialCharLbl: "Posebni znak", |
InsertSpecialChar : "Vstavi posebni znak", |
InsertSmileyLbl : "Smeško", |
InsertSmiley : "Vstavi smeška", |
About : "O FCKeditorju", |
Bold : "Krepko", |
Italic : "Ležeče", |
Underline : "Podčrtano", |
StrikeThrough : "Prečrtano", |
Subscript : "Podpisano", |
Superscript : "Nadpisano", |
LeftJustify : "Leva poravnava", |
CenterJustify : "Sredinska poravnava", |
RightJustify : "Desna poravnava", |
BlockJustify : "Obojestranska poravnava", |
DecreaseIndent : "Zmanjšaj zamik", |
IncreaseIndent : "Povečaj zamik", |
Undo : "Razveljavi", |
Redo : "Ponovi", |
NumberedListLbl : "Oštevilčen seznam", |
NumberedList : "Vstavi/odstrani oštevilčevanje", |
BulletedListLbl : "Označen seznam", |
BulletedList : "Vstavi/odstrani označevanje", |
ShowTableBorders : "Pokaži meje tabele", |
ShowDetails : "Pokaži podrobnosti", |
Style : "Slog", |
FontFormat : "Oblika", |
Font : "Pisava", |
FontSize : "Velikost", |
TextColor : "Barva besedila", |
BGColor : "Barva ozadja", |
Source : "Izvorna koda", |
Find : "Najdi", |
Replace : "Zamenjaj", |
SpellCheck : "Preveri črkovanje", |
UniversalKeyboard : "Večjezična tipkovnica", |
PageBreakLbl : "Prelom strani", |
PageBreak : "Vstavi prelom strani", |
Form : "Obrazec", |
Checkbox : "Potrditveno polje", |
RadioButton : "Izbirno polje", |
TextField : "Vnosno polje", |
Textarea : "Vnosno območje", |
HiddenField : "Skrito polje", |
Button : "Gumb", |
SelectionField : "Spustni seznam", |
ImageButton : "Gumb s sliko", |
FitWindow : "Maximize the editor size", //MISSING |
// Context Menu |
EditLink : "Uredi povezavo", |
CellCM : "Cell", //MISSING |
RowCM : "Row", //MISSING |
ColumnCM : "Column", //MISSING |
InsertRow : "Vstavi vrstico", |
DeleteRows : "Izbriši vrstice", |
InsertColumn : "Vstavi stolpec", |
DeleteColumns : "Izbriši stolpce", |
InsertCell : "Vstavi celico", |
DeleteCells : "Izbriši celice", |
MergeCells : "Združi celice", |
SplitCell : "Razdeli celico", |
TableDelete : "Izbriši tabelo", |
CellProperties : "Lastnosti celice", |
TableProperties : "Lastnosti tabele", |
ImageProperties : "Lastnosti slike", |
FlashProperties : "Lastnosti Flash", |
AnchorProp : "Lastnosti zaznamka", |
ButtonProp : "Lastnosti gumba", |
CheckboxProp : "Lastnosti potrditvenega polja", |
HiddenFieldProp : "Lastnosti skritega polja", |
RadioButtonProp : "Lastnosti izbirnega polja", |
ImageButtonProp : "Lastnosti gumba s sliko", |
TextFieldProp : "Lastnosti vnosnega polja", |
SelectionFieldProp : "Lastnosti spustnega seznama", |
TextareaProp : "Lastnosti vnosnega območja", |
FormProp : "Lastnosti obrazca", |
FontFormats : "Navaden;Oblikovan;Napis;Naslov 1;Naslov 2;Naslov 3;Naslov 4;Naslov 5;Naslov 6", |
// Alerts and Messages |
ProcessingXHTML : "Obdelujem XHTML. Prosim počakajte...", |
Done : "Narejeno", |
PasteWordConfirm : "Izgleda, da želite prilepiti besedilo iz Worda. Ali ga želite očistiti, preden ga prilepite?", |
NotCompatiblePaste : "Ta ukaz deluje le v Internet Explorerje različice 5.5 ali višje. Ali želite prilepiti brez čiščenja?", |
UnknownToolbarItem : "Neznan element orodne vrstice \"%1\"", |
UnknownCommand : "Neznano ime ukaza \"%1\"", |
NotImplemented : "Ukaz ni izdelan", |
UnknownToolbarSet : "Skupina orodnih vrstic \"%1\" ne obstoja", |
NoActiveX : "Your browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.", //MISSING |
BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.", //MISSING |
DialogBlocked : "It was not possible to open the dialog window. Make sure all popup blockers are disabled.", //MISSING |
// Dialogs |
DlgBtnOK : "V redu", |
DlgBtnCancel : "Prekliči", |
DlgBtnClose : "Zapri", |
DlgBtnBrowseServer : "Prebrskaj na strežniku", |
DlgAdvancedTag : "Napredno", |
DlgOpOther : "<Ostalo>", |
DlgInfoTab : "Podatki", |
DlgAlertUrl : "Prosim vpiši spletni naslov", |
// General Dialogs Labels |
DlgGenNotSet : "<ni postavljen>", |
DlgGenId : "Id", |
DlgGenLangDir : "Smer jezika", |
DlgGenLangDirLtr : "Od leve proti desni (LTR)", |
DlgGenLangDirRtl : "Od desne proti levi (RTL)", |
DlgGenLangCode : "Oznaka jezika", |
DlgGenAccessKey : "Vstopno geslo", |
DlgGenName : "Ime", |
DlgGenTabIndex : "Številka tabulatorja", |
DlgGenLongDescr : "Dolg opis URL-ja", |
DlgGenClass : "Razred stilne predloge", |
DlgGenTitle : "Predlagani naslov", |
DlgGenContType : "Predlagani tip vsebine (content-type)", |
DlgGenLinkCharset : "Kodna tabela povezanega vira", |
DlgGenStyle : "Slog", |
// Image Dialog |
DlgImgTitle : "Lastnosti slike", |
DlgImgInfoTab : "Podatki o sliki", |
DlgImgBtnUpload : "Pošlji na strežnik", |
DlgImgURL : "URL", |
DlgImgUpload : "Pošlji", |
DlgImgAlt : "Nadomestno besedilo", |
DlgImgWidth : "Širina", |
DlgImgHeight : "Višina", |
DlgImgLockRatio : "Zakleni razmerje", |
DlgBtnResetSize : "Ponastavi velikost", |
DlgImgBorder : "Obroba", |
DlgImgHSpace : "Vodoravni razmik", |
DlgImgVSpace : "Navpični razmik", |
DlgImgAlign : "Poravnava", |
DlgImgAlignLeft : "Levo", |
DlgImgAlignAbsBottom: "Popolnoma na dno", |
DlgImgAlignAbsMiddle: "Popolnoma v sredino", |
DlgImgAlignBaseline : "Na osnovno črto", |
DlgImgAlignBottom : "Na dno", |
DlgImgAlignMiddle : "V sredino", |
DlgImgAlignRight : "Desno", |
DlgImgAlignTextTop : "Besedilo na vrh", |
DlgImgAlignTop : "Na vrh", |
DlgImgPreview : "Predogled", |
DlgImgAlertUrl : "Vnesite URL slike", |
DlgImgLinkTab : "Povezava", |
// Flash Dialog |
DlgFlashTitle : "Lastnosti Flash", |
DlgFlashChkPlay : "Samodejno predvajaj", |
DlgFlashChkLoop : "Ponavljanje", |
DlgFlashChkMenu : "Omogoči Flash Meni", |
DlgFlashScale : "Povečava", |
DlgFlashScaleAll : "Pokaži vse", |
DlgFlashScaleNoBorder : "Brez obrobe", |
DlgFlashScaleFit : "Natančno prileganje", |
// Link Dialog |
DlgLnkWindowTitle : "Povezava", |
DlgLnkInfoTab : "Podatki o povezavi", |
DlgLnkTargetTab : "Cilj", |
DlgLnkType : "Vrsta povezave", |
DlgLnkTypeURL : "URL", |
DlgLnkTypeAnchor : "Zaznamek na tej strani", |
DlgLnkTypeEMail : "Elektronski naslov", |
DlgLnkProto : "Protokol", |
DlgLnkProtoOther : "<drugo>", |
DlgLnkURL : "URL", |
DlgLnkAnchorSel : "Izberi zaznamek", |
DlgLnkAnchorByName : "Po imenu zaznamka", |
DlgLnkAnchorById : "Po ID-ju elementa", |
DlgLnkNoAnchors : "<V tem dokumentu ni zaznamkov>", |
DlgLnkEMail : "Elektronski naslov", |
DlgLnkEMailSubject : "Predmet sporočila", |
DlgLnkEMailBody : "Vsebina sporočila", |
DlgLnkUpload : "Prenesi", |
DlgLnkBtnUpload : "Pošlji na strežnik", |
DlgLnkTarget : "Cilj", |
DlgLnkTargetFrame : "<okvir>", |
DlgLnkTargetPopup : "<pojavno okno>", |
DlgLnkTargetBlank : "Novo okno (_blank)", |
DlgLnkTargetParent : "Starševsko okno (_parent)", |
DlgLnkTargetSelf : "Isto okno (_self)", |
DlgLnkTargetTop : "Najvišje okno (_top)", |
DlgLnkTargetFrameName : "Ime ciljnega okvirja", |
DlgLnkPopWinName : "Ime pojavnega okna", |
DlgLnkPopWinFeat : "Značilnosti pojavnega okna", |
DlgLnkPopResize : "Spremenljive velikosti", |
DlgLnkPopLocation : "Naslovna vrstica", |
DlgLnkPopMenu : "Menijska vrstica", |
DlgLnkPopScroll : "Drsniki", |
DlgLnkPopStatus : "Vrstica stanja", |
DlgLnkPopToolbar : "Orodna vrstica", |
DlgLnkPopFullScrn : "Celozaslonska slika (IE)", |
DlgLnkPopDependent : "Podokno (Netscape)", |
DlgLnkPopWidth : "Širina", |
DlgLnkPopHeight : "Višina", |
DlgLnkPopLeft : "Lega levo", |
DlgLnkPopTop : "Lega na vrhu", |
DlnLnkMsgNoUrl : "Vnesite URL povezave", |
DlnLnkMsgNoEMail : "Vnesite elektronski naslov", |
DlnLnkMsgNoAnchor : "Izberite zaznamek", |
DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING |
// Color Dialog |
DlgColorTitle : "Izberite barvo", |
DlgColorBtnClear : "Počisti", |
DlgColorHighlight : "Označi", |
DlgColorSelected : "Izbrano", |
// Smiley Dialog |
DlgSmileyTitle : "Vstavi smeška", |
// Special Character Dialog |
DlgSpecialCharTitle : "Izberi posebni znak", |
// Table Dialog |
DlgTableTitle : "Lastnosti tabele", |
DlgTableRows : "Vrstice", |
DlgTableColumns : "Stolpci", |
DlgTableBorder : "Velikost obrobe", |
DlgTableAlign : "Poravnava", |
DlgTableAlignNotSet : "<Ni nastavljeno>", |
DlgTableAlignLeft : "Levo", |
DlgTableAlignCenter : "Sredinsko", |
DlgTableAlignRight : "Desno", |
DlgTableWidth : "Širina", |
DlgTableWidthPx : "pik", |
DlgTableWidthPc : "procentov", |
DlgTableHeight : "Višina", |
DlgTableCellSpace : "Razmik med celicami", |
DlgTableCellPad : "Polnilo med celicami", |
DlgTableCaption : "Naslov", |
DlgTableSummary : "Povzetek", |
// Table Cell Dialog |
DlgCellTitle : "Lastnosti celice", |
DlgCellWidth : "Širina", |
DlgCellWidthPx : "pik", |
DlgCellWidthPc : "procentov", |
DlgCellHeight : "Višina", |
DlgCellWordWrap : "Pomikanje besedila", |
DlgCellWordWrapNotSet : "<Ni nastavljeno>", |
DlgCellWordWrapYes : "Da", |
DlgCellWordWrapNo : "Ne", |
DlgCellHorAlign : "Vodoravna poravnava", |
DlgCellHorAlignNotSet : "<Ni nastavljeno>", |
DlgCellHorAlignLeft : "Levo", |
DlgCellHorAlignCenter : "Sredinsko", |
DlgCellHorAlignRight: "Desno", |
DlgCellVerAlign : "Navpična poravnava", |
DlgCellVerAlignNotSet : "<Ni nastavljeno>", |
DlgCellVerAlignTop : "Na vrh", |
DlgCellVerAlignMiddle : "V sredino", |
DlgCellVerAlignBottom : "Na dno", |
DlgCellVerAlignBaseline : "Na osnovno črto", |
DlgCellRowSpan : "Spojenih vrstic (row-span)", |
DlgCellCollSpan : "Spojenih stolpcev (col-span)", |
DlgCellBackColor : "Barva ozadja", |
DlgCellBorderColor : "Barva obrobe", |
DlgCellBtnSelect : "Izberi...", |
// Find Dialog |
DlgFindTitle : "Najdi", |
DlgFindFindBtn : "Najdi", |
DlgFindNotFoundMsg : "Navedeno besedilo ni bilo najdeno.", |
// Replace Dialog |
DlgReplaceTitle : "Zamenjaj", |
DlgReplaceFindLbl : "Najdi:", |
DlgReplaceReplaceLbl : "Zamenjaj z:", |
DlgReplaceCaseChk : "Razlikuj velike in male črke", |
DlgReplaceReplaceBtn : "Zamenjaj", |
DlgReplaceReplAllBtn : "Zamenjaj vse", |
DlgReplaceWordChk : "Samo cele besede", |
// Paste Operations / Dialog |
PasteErrorPaste : "Varnostne nastavitve brskalnika ne dopuščajo samodejnega lepljenja. Uporabite kombinacijo tipk na tipkovnici (Ctrl+V).", |
PasteErrorCut : "Varnostne nastavitve brskalnika ne dopuščajo samodejnega izrezovanja. Uporabite kombinacijo tipk na tipkovnici (Ctrl+X).", |
PasteErrorCopy : "Varnostne nastavitve brskalnika ne dopuščajo samodejnega kopiranja. Uporabite kombinacijo tipk na tipkovnici (Ctrl+C).", |
PasteAsText : "Prilepi kot golo besedilo", |
PasteFromWord : "Prilepi iz Worda", |
DlgPasteMsg2 : "Prosim prilepite v sleči okvir s pomočjo tipkovnice (<STRONG>Ctrl+V</STRONG>) in pritisnite <STRONG>V redu</STRONG>.", |
DlgPasteIgnoreFont : "Prezri obliko pisave", |
DlgPasteRemoveStyles : "Odstrani nastavitve stila", |
DlgPasteCleanBox : "Počisti okvir", |
// Color Picker |
ColorAutomatic : "Samodejno", |
ColorMoreColors : "Več barv...", |
// Document Properties |
DocProps : "Lastnosti dokumenta", |
// Anchor Dialog |
DlgAnchorTitle : "Lastnosti zaznamka", |
DlgAnchorName : "Ime zaznamka", |
DlgAnchorErrorName : "Prosim vnesite ime zaznamka", |
// Speller Pages Dialog |
DlgSpellNotInDic : "Ni v slovarju", |
DlgSpellChangeTo : "Spremeni v", |
DlgSpellBtnIgnore : "Prezri", |
DlgSpellBtnIgnoreAll : "Prezri vse", |
DlgSpellBtnReplace : "Zamenjaj", |
DlgSpellBtnReplaceAll : "Zamenjaj vse", |
DlgSpellBtnUndo : "Razveljavi", |
DlgSpellNoSuggestions : "- Ni predlogov -", |
DlgSpellProgress : "Preverjanje črkovanja se izvaja...", |
DlgSpellNoMispell : "Črkovanje je končano: Brez napak", |
DlgSpellNoChanges : "Črkovanje je končano: Nobena beseda ni bila spremenjena", |
DlgSpellOneChange : "Črkovanje je končano: Spremenjena je bila ena beseda", |
DlgSpellManyChanges : "Črkovanje je končano: Spremenjenih je bilo %1 besed", |
IeSpellDownload : "Črkovalnik ni nameščen. Ali ga želite prenesti sedaj?", |
// Button Dialog |
DlgButtonText : "Besedilo (Vrednost)", |
DlgButtonType : "Tip", |
DlgButtonTypeBtn : "Button", //MISSING |
DlgButtonTypeSbm : "Submit", //MISSING |
DlgButtonTypeRst : "Reset", //MISSING |
// Checkbox and Radio Button Dialogs |
DlgCheckboxName : "Ime", |
DlgCheckboxValue : "Vrednost", |
DlgCheckboxSelected : "Izbrano", |
// Form Dialog |
DlgFormName : "Ime", |
DlgFormAction : "Akcija", |
DlgFormMethod : "Metoda", |
// Select Field Dialog |
DlgSelectName : "Ime", |
DlgSelectValue : "Vrednost", |
DlgSelectSize : "Velikost", |
DlgSelectLines : "vrstic", |
DlgSelectChkMulti : "Dovoli izbor večih vrstic", |
DlgSelectOpAvail : "Razpoložljive izbire", |
DlgSelectOpText : "Besedilo", |
DlgSelectOpValue : "Vrednost", |
DlgSelectBtnAdd : "Dodaj", |
DlgSelectBtnModify : "Spremeni", |
DlgSelectBtnUp : "Gor", |
DlgSelectBtnDown : "Dol", |
DlgSelectBtnSetValue : "Postavi kot privzeto izbiro", |
DlgSelectBtnDelete : "Izbriši", |
// Textarea Dialog |
DlgTextareaName : "Ime", |
DlgTextareaCols : "Stolpcev", |
DlgTextareaRows : "Vrstic", |
// Text Field Dialog |
DlgTextName : "Ime", |
DlgTextValue : "Vrednost", |
DlgTextCharWidth : "Dolžina", |
DlgTextMaxChars : "Največje število znakov", |
DlgTextType : "Tip", |
DlgTextTypeText : "Besedilo", |
DlgTextTypePass : "Geslo", |
// Hidden Field Dialog |
DlgHiddenName : "Ime", |
DlgHiddenValue : "Vrednost", |
// Bulleted List Dialog |
BulletedListProp : "Lastnosti označenega seznama", |
NumberedListProp : "Lastnosti oštevilčenega seznama", |
DlgLstStart : "Start", //MISSING |
DlgLstType : "Tip", |
DlgLstTypeCircle : "Pikica", |
DlgLstTypeDisc : "Kroglica", |
DlgLstTypeSquare : "Kvadratek", |
DlgLstTypeNumbers : "Številke (1, 2, 3)", |
DlgLstTypeLCase : "Male črke (a, b, c)", |
DlgLstTypeUCase : "Velike črke (A, B, C)", |
DlgLstTypeSRoman : "Male rimske številke (i, ii, iii)", |
DlgLstTypeLRoman : "Velike rimske številke (I, II, III)", |
// Document Properties Dialog |
DlgDocGeneralTab : "Splošno", |
DlgDocBackTab : "Ozadje", |
DlgDocColorsTab : "Barve in zamiki", |
DlgDocMetaTab : "Meta podatki", |
DlgDocPageTitle : "Naslov strani", |
DlgDocLangDir : "Smer jezika", |
DlgDocLangDirLTR : "Od leve proti desni (LTR)", |
DlgDocLangDirRTL : "Od desne proti levi (RTL)", |
DlgDocLangCode : "Oznaka jezika", |
DlgDocCharSet : "Kodna tabela", |
DlgDocCharSetCE : "Central European", //MISSING |
DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING |
DlgDocCharSetCR : "Cyrillic", //MISSING |
DlgDocCharSetGR : "Greek", //MISSING |
DlgDocCharSetJP : "Japanese", //MISSING |
DlgDocCharSetKR : "Korean", //MISSING |
DlgDocCharSetTR : "Turkish", //MISSING |
DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING |
DlgDocCharSetWE : "Western European", //MISSING |
DlgDocCharSetOther : "Druga kodna tabela", |
DlgDocDocType : "Glava tipa dokumenta", |
DlgDocDocTypeOther : "Druga glava tipa dokumenta", |
DlgDocIncXHTML : "Vstavi XHTML deklaracije", |
DlgDocBgColor : "Barva ozadja", |
DlgDocBgImage : "URL slike za ozadje", |
DlgDocBgNoScroll : "Nepremično ozadje", |
DlgDocCText : "Besedilo", |
DlgDocCLink : "Povezava", |
DlgDocCVisited : "Obiskana povezava", |
DlgDocCActive : "Aktivna povezava", |
DlgDocMargins : "Zamiki strani", |
DlgDocMaTop : "Na vrhu", |
DlgDocMaLeft : "Levo", |
DlgDocMaRight : "Desno", |
DlgDocMaBottom : "Spodaj", |
DlgDocMeIndex : "Ključne besede (ločene z vejicami)", |
DlgDocMeDescr : "Opis strani", |
DlgDocMeAuthor : "Avtor", |
DlgDocMeCopy : "Avtorske pravice", |
DlgDocPreview : "Predogled", |
// Templates Dialog |
Templates : "Predloge", |
DlgTemplatesTitle : "Vsebinske predloge", |
DlgTemplatesSelMsg : "Izberite predlogo, ki jo želite odpreti v urejevalniku<br>(trenutna vsebina bo izgubljena):", |
DlgTemplatesLoading : "Nalagam seznam predlog. Prosim počakajte...", |
DlgTemplatesNoTpl : "(Ni pripravljenih predlog)", |
DlgTemplatesReplace : "Replace actual contents", //MISSING |
// About Dialog |
DlgAboutAboutTab : "Vizitka", |
DlgAboutBrowserInfoTab : "Informacije o brskalniku", |
DlgAboutLicenseTab : "License", //MISSING |
DlgAboutVersion : "različica", |
DlgAboutLicense : "Pravica za uporabo pod pogoji GNU Lesser General Public License", |
DlgAboutInfo : "Za več informacij obiščite" |
} |
/branches/v1.0-menes/api/fckeditor/editor/lang/lt.js |
---|
New file |
0,0 → 1,501 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: lt.js |
* Lithuanian language file. |
* |
* File Authors: |
* Tauras Paliulis (tauras.paliulis@tauras.com) |
*/ |
var FCKLang = |
{ |
// Language direction : "ltr" (left to right) or "rtl" (right to left). |
Dir : "ltr", |
ToolbarCollapse : "Sutraukti mygtukų juostą", |
ToolbarExpand : "Išplėsti mygtukų juostą", |
// Toolbar Items and Context Menu |
Save : "Išsaugoti", |
NewPage : "Naujas puslapis", |
Preview : "Peržiūra", |
Cut : "Iškirpti", |
Copy : "Kopijuoti", |
Paste : "Įdėti", |
PasteText : "Įdėti kaip gryną tekstą", |
PasteWord : "Ä®dÄti i¨Word", |
Print : "Spausdinti", |
SelectAll : "Pažymėti viską", |
RemoveFormat : "Panaikinti formatą", |
InsertLinkLbl : "Nuoroda", |
InsertLink : "Įterpti/taisyti nuorodą", |
RemoveLink : "Panaikinti nuorodą", |
Anchor : "Įterpti/modifikuoti žymę", |
InsertImageLbl : "Vaizdas", |
InsertImage : "Įterpti/taisyti vaizdą", |
InsertFlashLbl : "Flash", |
InsertFlash : "Įterpti/taisyti Flash", |
InsertTableLbl : "Lentelė", |
InsertTable : "Įterpti/taisyti lentelę", |
InsertLineLbl : "Linija", |
InsertLine : "Įterpti horizontalią liniją", |
InsertSpecialCharLbl: "Spec. simbolis", |
InsertSpecialChar : "Įterpti specialų simbolį", |
InsertSmileyLbl : "Veideliai", |
InsertSmiley : "Įterpti veidelį", |
About : "Apie FCKeditor", |
Bold : "Pusjuodis", |
Italic : "Kursyvas", |
Underline : "Pabrauktas", |
StrikeThrough : "Perbrauktas", |
Subscript : "Apatinis indeksas", |
Superscript : "Viršutinis indeksas", |
LeftJustify : "Lygiuoti kairę", |
CenterJustify : "Centruoti", |
RightJustify : "Lygiuoti dešinę", |
BlockJustify : "Lygiuoti abi puses", |
DecreaseIndent : "Sumažinti įtrauką", |
IncreaseIndent : "Padidinti įtrauką", |
Undo : "Atšaukti", |
Redo : "Atstatyti", |
NumberedListLbl : "Numeruotas sąrašas", |
NumberedList : "Įterpti/Panaikinti numeruotą sąrašą", |
BulletedListLbl : "Suženklintas sąrašas", |
BulletedList : "Įterpti/Panaikinti suženklintą sąrašą", |
ShowTableBorders : "Rodyti lentelės rėmus", |
ShowDetails : "Rodyti detales", |
Style : "Stilius", |
FontFormat : "Šrifto formatas", |
Font : "Šriftas", |
FontSize : "Šrifto dydis", |
TextColor : "Teksto spalva", |
BGColor : "Fono spalva", |
Source : "Šaltinis", |
Find : "Rasti", |
Replace : "Pakeisti", |
SpellCheck : "Rašybos tikrinimas", |
UniversalKeyboard : "Universali klaviatūra", |
PageBreakLbl : "Puslapių skirtukas", |
PageBreak : "Įterpti puslapių skirtuką", |
Form : "Forma", |
Checkbox : "Žymimasis langelis", |
RadioButton : "Žymimoji akutė", |
TextField : "Teksto laukas", |
Textarea : "Teksto sritis", |
HiddenField : "Nerodomas laukas", |
Button : "Mygtukas", |
SelectionField : "Atrankos laukas", |
ImageButton : "Vaizdinis mygtukas", |
FitWindow : "Maximize the editor size", //MISSING |
// Context Menu |
EditLink : "Taisyti nuorodą", |
CellCM : "Cell", //MISSING |
RowCM : "Row", //MISSING |
ColumnCM : "Column", //MISSING |
InsertRow : "Įterpti eilutę", |
DeleteRows : "Šalinti eilutes", |
InsertColumn : "Įterpti stulpelį", |
DeleteColumns : "Šalinti stulpelius", |
InsertCell : "Įterpti langelį", |
DeleteCells : "Šalinti langelius", |
MergeCells : "Sujungti langelius", |
SplitCell : "Skaidyti langelius", |
TableDelete : "Šalinti lentelę", |
CellProperties : "Langelio savybės", |
TableProperties : "Lentelės savybės", |
ImageProperties : "Vaizdo savybės", |
FlashProperties : "Flash savybės", |
AnchorProp : "Žymės savybės", |
ButtonProp : "Mygtuko savybės", |
CheckboxProp : "Žymimojo langelio savybės", |
HiddenFieldProp : "Nerodomo lauko savybės", |
RadioButtonProp : "Žymimosios akutės savybės", |
ImageButtonProp : "Vaizdinio mygtuko savybės", |
TextFieldProp : "Teksto lauko savybės", |
SelectionFieldProp : "Atrankos lauko savybės", |
TextareaProp : "Teksto srities savybės", |
FormProp : "Formos savybės", |
FontFormats : "Normalus;Formuotas;Kreipinio;Antraštinis 1;Antraštinis 2;Antraštinis 3;Antraštinis 4;Antraštinis 5;Antraštinis 6", |
// Alerts and Messages |
ProcessingXHTML : "Apdorojamas XHTML. Prašome palaukti...", |
Done : "Baigta", |
PasteWordConfirm : "Ä®dedamas tekstas yra panaÅ¡us į kopijÄ i¨Word. Ar JÅ«s norite prie¨Ä¯dÄjimÄ iÅ¡valyti jį?", |
NotCompatiblePaste : "Ši komanda yra prieinama tik per Internet Explorer 5.5 ar aukštesnę versiją. Ar Jūs norite įterpti be valymo?", |
UnknownToolbarItem : "Nežinomas mygtukų juosta elementas \"%1\"", |
UnknownCommand : "Nežinomas komandos vardas \"%1\"", |
NotImplemented : "Komanda nėra įgyvendinta", |
UnknownToolbarSet : "Mygtukų juostos rinkinys \"%1\" neegzistuoja", |
NoActiveX : "Jūsų naršyklės saugumo nuostatos gali riboti kai kurias redaktoriaus savybes. Jūs turite aktyvuoti opciją \"Run ActiveX controls and plug-ins\". Kitu atveju Jums bus pranešama apie klaidas ir trūkstamas savybes.", |
BrowseServerBlocked : "Neįmanoma atidaryti naujo naršyklės lango. Įsitikinkite, kad iškylančių langų blokavimo programos neveiksnios.", |
DialogBlocked : "Neįmanoma atidaryti dialogo lango. Įsitikinkite, kad iškylančių langų blokavimo programos neveiksnios.", |
// Dialogs |
DlgBtnOK : "OK", |
DlgBtnCancel : "Nutraukti", |
DlgBtnClose : "Uždaryti", |
DlgBtnBrowseServer : "Naršyti po serverį", |
DlgAdvancedTag : "Papildomas", |
DlgOpOther : "<Kita>", |
DlgInfoTab : "Informacija", |
DlgAlertUrl : "Prašome įrašyti URL", |
// General Dialogs Labels |
DlgGenNotSet : "<nėra nustatyta>", |
DlgGenId : "Id", |
DlgGenLangDir : "Teksto kryptis", |
DlgGenLangDirLtr : "I¨kairÄs į deÅ¡inÄ (LTR)", |
DlgGenLangDirRtl : "I¨deÅ¡inÄs į kairÄ (RTL)", |
DlgGenLangCode : "Kalbos kodas", |
DlgGenAccessKey : "Prieigos raktas", |
DlgGenName : "Vardas", |
DlgGenTabIndex : "Tabuliavimo indeksas", |
DlgGenLongDescr : "Ilgas aprašymas URL", |
DlgGenClass : "Stilių lentelės klasės", |
DlgGenTitle : "Konsultacinė antraštė", |
DlgGenContType : "Konsultacinio turinio tipas", |
DlgGenLinkCharset : "Susietų išteklių simbolių lentelė", |
DlgGenStyle : "Stilius", |
// Image Dialog |
DlgImgTitle : "Vaizdo savybės", |
DlgImgInfoTab : "Vaizdo informacija", |
DlgImgBtnUpload : "Siųsti į serverį", |
DlgImgURL : "URL", |
DlgImgUpload : "Nusiųsti", |
DlgImgAlt : "Alternatyvus Tekstas", |
DlgImgWidth : "Plotis", |
DlgImgHeight : "Aukštis", |
DlgImgLockRatio : "Išlaikyti proporciją", |
DlgBtnResetSize : "Atstatyti dydį", |
DlgImgBorder : "Rėmelis", |
DlgImgHSpace : "Hor.Erdvė", |
DlgImgVSpace : "Vert.Erdvė", |
DlgImgAlign : "Lygiuoti", |
DlgImgAlignLeft : "Kairę", |
DlgImgAlignAbsBottom: "Absoliučią apačią", |
DlgImgAlignAbsMiddle: "Absoliutų vidurį", |
DlgImgAlignBaseline : "Apatinę liniją", |
DlgImgAlignBottom : "Apačią", |
DlgImgAlignMiddle : "Vidurį", |
DlgImgAlignRight : "Dešinę", |
DlgImgAlignTextTop : "Teksto viršūnę", |
DlgImgAlignTop : "Viršūnę", |
DlgImgPreview : "Peržiūra", |
DlgImgAlertUrl : "Prašome įvesti vaizdo URL", |
DlgImgLinkTab : "Nuoroda", |
// Flash Dialog |
DlgFlashTitle : "Flash savybės", |
DlgFlashChkPlay : "Automatinis paleidimas", |
DlgFlashChkLoop : "Ciklas", |
DlgFlashChkMenu : "Leisti Flash meniu", |
DlgFlashScale : "Mastelis", |
DlgFlashScaleAll : "Rodyti visą", |
DlgFlashScaleNoBorder : "Be rėmelio", |
DlgFlashScaleFit : "Tikslus atitikimas", |
// Link Dialog |
DlgLnkWindowTitle : "Nuoroda", |
DlgLnkInfoTab : "Nuorodos informacija", |
DlgLnkTargetTab : "Paskirtis", |
DlgLnkType : "Nuorodos tipas", |
DlgLnkTypeURL : "URL", |
DlgLnkTypeAnchor : "Žymė šiame puslapyje", |
DlgLnkTypeEMail : "El.paštas", |
DlgLnkProto : "Protokolas", |
DlgLnkProtoOther : "<kitas>", |
DlgLnkURL : "URL", |
DlgLnkAnchorSel : "Pasirinkite žymę", |
DlgLnkAnchorByName : "Pagal žymės vardą", |
DlgLnkAnchorById : "Pagal žymės Id", |
DlgLnkNoAnchors : "<Šiame dokumente žymių nėra>", |
DlgLnkEMail : "El.pašto adresas", |
DlgLnkEMailSubject : "Žinutės tema", |
DlgLnkEMailBody : "Žinutės turinys", |
DlgLnkUpload : "Siųsti", |
DlgLnkBtnUpload : "Siųsti į serverį", |
DlgLnkTarget : "Paskirties vieta", |
DlgLnkTargetFrame : "<kadras>", |
DlgLnkTargetPopup : "<išskleidžiamas langas>", |
DlgLnkTargetBlank : "Naujas langas (_blank)", |
DlgLnkTargetParent : "Pirminis langas (_parent)", |
DlgLnkTargetSelf : "Tas pats langas (_self)", |
DlgLnkTargetTop : "Svarbiausias langas (_top)", |
DlgLnkTargetFrameName : "Paskirties kadro vardas", |
DlgLnkPopWinName : "Paskirties lango vardas", |
DlgLnkPopWinFeat : "Išskleidžiamo lango savybės", |
DlgLnkPopResize : "Keičiamas dydis", |
DlgLnkPopLocation : "Adreso juosta", |
DlgLnkPopMenu : "Meniu juosta", |
DlgLnkPopScroll : "Slinkties juostos", |
DlgLnkPopStatus : "Būsenos juosta", |
DlgLnkPopToolbar : "Mygtukų juosta", |
DlgLnkPopFullScrn : "Visas ekranas (IE)", |
DlgLnkPopDependent : "Priklausomas (Netscape)", |
DlgLnkPopWidth : "Plotis", |
DlgLnkPopHeight : "Aukštis", |
DlgLnkPopLeft : "Kairė pozicija", |
DlgLnkPopTop : "Viršutinė pozicija", |
DlnLnkMsgNoUrl : "Prašome įvesti nuorodos URL", |
DlnLnkMsgNoEMail : "Prašome įvesti el.pašto adresą", |
DlnLnkMsgNoAnchor : "Prašome pasirinkti žymę", |
DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING |
// Color Dialog |
DlgColorTitle : "Pasirinkite spalvą", |
DlgColorBtnClear : "Trinti", |
DlgColorHighlight : "Paryškinta", |
DlgColorSelected : "Pažymėta", |
// Smiley Dialog |
DlgSmileyTitle : "Įterpti veidelį", |
// Special Character Dialog |
DlgSpecialCharTitle : "Pasirinkite specialų simbolį", |
// Table Dialog |
DlgTableTitle : "Lentelės savybės", |
DlgTableRows : "Eilutės", |
DlgTableColumns : "Stulpeliai", |
DlgTableBorder : "Rėmelio dydis", |
DlgTableAlign : "Lygiuoti", |
DlgTableAlignNotSet : "<Nenustatyta>", |
DlgTableAlignLeft : "Kairę", |
DlgTableAlignCenter : "Centrą", |
DlgTableAlignRight : "Dešinę", |
DlgTableWidth : "Plotis", |
DlgTableWidthPx : "taškais", |
DlgTableWidthPc : "procentais", |
DlgTableHeight : "Aukštis", |
DlgTableCellSpace : "Tarpas tarp langelių", |
DlgTableCellPad : "Trapas nuo langelio rėmo iki teksto", |
DlgTableCaption : "Antraštė", |
DlgTableSummary : "Santrauka", |
// Table Cell Dialog |
DlgCellTitle : "Langelio savybės", |
DlgCellWidth : "Plotis", |
DlgCellWidthPx : "taškais", |
DlgCellWidthPc : "procentais", |
DlgCellHeight : "Aukštis", |
DlgCellWordWrap : "Teksto laužymas", |
DlgCellWordWrapNotSet : "<Nenustatyta>", |
DlgCellWordWrapYes : "Taip", |
DlgCellWordWrapNo : "Ne", |
DlgCellHorAlign : "Horizontaliai lygiuoti", |
DlgCellHorAlignNotSet : "<Nenustatyta>", |
DlgCellHorAlignLeft : "Kairę", |
DlgCellHorAlignCenter : "Centrą", |
DlgCellHorAlignRight: "Dešinę", |
DlgCellVerAlign : "Vertikaliai lygiuoti", |
DlgCellVerAlignNotSet : "<Nenustatyta>", |
DlgCellVerAlignTop : "Viršų", |
DlgCellVerAlignMiddle : "Vidurį", |
DlgCellVerAlignBottom : "Apačią", |
DlgCellVerAlignBaseline : "Apatinę liniją", |
DlgCellRowSpan : "Eilučių apjungimas", |
DlgCellCollSpan : "Stulpelių apjungimas", |
DlgCellBackColor : "Fono spalva", |
DlgCellBorderColor : "Rėmelio spalva", |
DlgCellBtnSelect : "Pažymėti...", |
// Find Dialog |
DlgFindTitle : "Paieška", |
DlgFindFindBtn : "Surasti", |
DlgFindNotFoundMsg : "Nurodytas tekstas nerastas.", |
// Replace Dialog |
DlgReplaceTitle : "Pakeisti", |
DlgReplaceFindLbl : "Surasti tekstą:", |
DlgReplaceReplaceLbl : "Pakeisti tekstu:", |
DlgReplaceCaseChk : "Skirti didžiąsias ir mažąsias raides", |
DlgReplaceReplaceBtn : "Pakeisti", |
DlgReplaceReplAllBtn : "Pakeisti viską", |
DlgReplaceWordChk : "Atitikti pilną žodį", |
// Paste Operations / Dialog |
PasteErrorPaste : "Jūsų naršyklės saugumo nustatymai neleidžia redaktoriui automatiškai įvykdyti įdėjimo operacijų. Tam prašome naudoti klaviatūrą (Ctrl+V).", |
PasteErrorCut : "Jūsų naršyklės saugumo nustatymai neleidžia redaktoriui automatiškai įvykdyti iškirpimo operacijų. Tam prašome naudoti klaviatūrą (Ctrl+X).", |
PasteErrorCopy : "Jūsų naršyklės saugumo nustatymai neleidžia redaktoriui automatiškai įvykdyti kopijavimo operacijų. Tam prašome naudoti klaviatūrą (Ctrl+C).", |
PasteAsText : "Įdėti kaip gryną tekstą", |
PasteFromWord : "Ä®dÄti i¨Word", |
DlgPasteMsg2 : "Žemiau esančiame įvedimo lauke įdėkite tekstą, naudodami klaviatūrą (<STRONG>Ctrl+V</STRONG>) ir spūstelkite mygtuką <STRONG>OK</STRONG>.", |
DlgPasteIgnoreFont : "Ignoruoti šriftų nustatymus", |
DlgPasteRemoveStyles : "Pašalinti stilių nustatymus", |
DlgPasteCleanBox : "Trinti įvedimo lauką", |
// Color Picker |
ColorAutomatic : "Automatinis", |
ColorMoreColors : "Daugiau spalvų...", |
// Document Properties |
DocProps : "Dokumento savybės", |
// Anchor Dialog |
DlgAnchorTitle : "Žymės savybės", |
DlgAnchorName : "Žymės vardas", |
DlgAnchorErrorName : "Prašome įvesti žymės vardą", |
// Speller Pages Dialog |
DlgSpellNotInDic : "Žodyne nerastas", |
DlgSpellChangeTo : "Pakeisti į", |
DlgSpellBtnIgnore : "Ignoruoti", |
DlgSpellBtnIgnoreAll : "Ignoruoti visus", |
DlgSpellBtnReplace : "Pakeisti", |
DlgSpellBtnReplaceAll : "Pakeisti visus", |
DlgSpellBtnUndo : "Atšaukti", |
DlgSpellNoSuggestions : "- Nėra pasiūlymų -", |
DlgSpellProgress : "Vyksta rašybos tikrinimas...", |
DlgSpellNoMispell : "Rašybos tikrinimas baigtas: Nerasta rašybos klaidų", |
DlgSpellNoChanges : "Rašybos tikrinimas baigtas: Nėra pakeistų žodžių", |
DlgSpellOneChange : "Rašybos tikrinimas baigtas: Vienas žodis pakeistas", |
DlgSpellManyChanges : "Rašybos tikrinimas baigtas: Pakeista %1 žodžių", |
IeSpellDownload : "Rašybos tikrinimas neinstaliuotas. Ar Jūs norite jį dabar atsisiųsti?", |
// Button Dialog |
DlgButtonText : "Tekstas (Reikšmė)", |
DlgButtonType : "Tipas", |
DlgButtonTypeBtn : "Button", //MISSING |
DlgButtonTypeSbm : "Submit", //MISSING |
DlgButtonTypeRst : "Reset", //MISSING |
// Checkbox and Radio Button Dialogs |
DlgCheckboxName : "Vardas", |
DlgCheckboxValue : "Reikšmė", |
DlgCheckboxSelected : "Pažymėtas", |
// Form Dialog |
DlgFormName : "Vardas", |
DlgFormAction : "Veiksmas", |
DlgFormMethod : "Metodas", |
// Select Field Dialog |
DlgSelectName : "Vardas", |
DlgSelectValue : "Reikšmė", |
DlgSelectSize : "Dydis", |
DlgSelectLines : "eilučių", |
DlgSelectChkMulti : "Leisti daugeriopą atranką", |
DlgSelectOpAvail : "Galimos parinktys", |
DlgSelectOpText : "Tekstas", |
DlgSelectOpValue : "Reikšmė", |
DlgSelectBtnAdd : "Įtraukti", |
DlgSelectBtnModify : "Modifikuoti", |
DlgSelectBtnUp : "Aukštyn", |
DlgSelectBtnDown : "Žemyn", |
DlgSelectBtnSetValue : "Laikyti pažymėta reikšme", |
DlgSelectBtnDelete : "Trinti", |
// Textarea Dialog |
DlgTextareaName : "Vardas", |
DlgTextareaCols : "Ilgis", |
DlgTextareaRows : "Plotis", |
// Text Field Dialog |
DlgTextName : "Vardas", |
DlgTextValue : "Reikšmė", |
DlgTextCharWidth : "Ilgis simboliais", |
DlgTextMaxChars : "Maksimalus simbolių skaičius", |
DlgTextType : "Tipas", |
DlgTextTypeText : "Tekstas", |
DlgTextTypePass : "Slaptažodis", |
// Hidden Field Dialog |
DlgHiddenName : "Vardas", |
DlgHiddenValue : "Reikšmė", |
// Bulleted List Dialog |
BulletedListProp : "Suženklinto sąrašo savybės", |
NumberedListProp : "Numeruoto sąrašo savybės", |
DlgLstStart : "Start", //MISSING |
DlgLstType : "Tipas", |
DlgLstTypeCircle : "Apskritimas", |
DlgLstTypeDisc : "Diskas", |
DlgLstTypeSquare : "Kvadratas", |
DlgLstTypeNumbers : "Skaičiai (1, 2, 3)", |
DlgLstTypeLCase : "Mažosios raidės (a, b, c)", |
DlgLstTypeUCase : "Didžiosios raidės (A, B, C)", |
DlgLstTypeSRoman : "Romėnų mažieji skaičiai (i, ii, iii)", |
DlgLstTypeLRoman : "Romėnų didieji skaičiai (I, II, III)", |
// Document Properties Dialog |
DlgDocGeneralTab : "Bendros savybės", |
DlgDocBackTab : "Fonas", |
DlgDocColorsTab : "Spalvos ir kraštinės", |
DlgDocMetaTab : "Meta duomenys", |
DlgDocPageTitle : "Puslapio antraštė", |
DlgDocLangDir : "Kalbos kryptis", |
DlgDocLangDirLTR : "I¨kairÄs į deÅ¡inÄ (LTR)", |
DlgDocLangDirRTL : "I¨deÅ¡inÄs į kairÄ (RTL)", |
DlgDocLangCode : "Kalbos kodas", |
DlgDocCharSet : "Simbolių kodavimo lentelė", |
DlgDocCharSetCE : "Central European", //MISSING |
DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING |
DlgDocCharSetCR : "Cyrillic", //MISSING |
DlgDocCharSetGR : "Greek", //MISSING |
DlgDocCharSetJP : "Japanese", //MISSING |
DlgDocCharSetKR : "Korean", //MISSING |
DlgDocCharSetTR : "Turkish", //MISSING |
DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING |
DlgDocCharSetWE : "Western European", //MISSING |
DlgDocCharSetOther : "Kita simbolių kodavimo lentelė", |
DlgDocDocType : "Dokumento tipo antraštė", |
DlgDocDocTypeOther : "Kita dokumento tipo antraštė", |
DlgDocIncXHTML : "Įtraukti XHTML deklaracijas", |
DlgDocBgColor : "Fono spalva", |
DlgDocBgImage : "Fono paveikslėlio nuoroda (URL)", |
DlgDocBgNoScroll : "Neslenkantis fonas", |
DlgDocCText : "Tekstas", |
DlgDocCLink : "Nuoroda", |
DlgDocCVisited : "Aplankyta nuoroda", |
DlgDocCActive : "Aktyvi nuoroda", |
DlgDocMargins : "Puslapio kraštinės", |
DlgDocMaTop : "Viršuje", |
DlgDocMaLeft : "Kairėje", |
DlgDocMaRight : "Dešinėje", |
DlgDocMaBottom : "Apačioje", |
DlgDocMeIndex : "Dokumento indeksavimo raktiniai žodžiai (atskirti kableliais)", |
DlgDocMeDescr : "Dokumento apibūdinimas", |
DlgDocMeAuthor : "Autorius", |
DlgDocMeCopy : "Autorinės teisės", |
DlgDocPreview : "Peržiūra", |
// Templates Dialog |
Templates : "Šablonai", |
DlgTemplatesTitle : "Turinio šablonai", |
DlgTemplatesSelMsg : "Pasirinkite norimą šabloną<br>(<b>Dėmesio!</b> esamas turinys bus prarastas):", |
DlgTemplatesLoading : "Įkeliamas šablonų sąrašas. Prašome palaukti...", |
DlgTemplatesNoTpl : "(Šablonų sąrašas tuščias)", |
DlgTemplatesReplace : "Replace actual contents", //MISSING |
// About Dialog |
DlgAboutAboutTab : "Apie", |
DlgAboutBrowserInfoTab : "Naršyklės informacija", |
DlgAboutLicenseTab : "License", //MISSING |
DlgAboutVersion : "versija", |
DlgAboutLicense : "Licencijuota pagal GNU mažesnės atsakomybės pagrindinės viešos licencijos sąlygas", |
DlgAboutInfo : "Papildomą informaciją galima gauti" |
} |
/branches/v1.0-menes/api/fckeditor/editor/lang/sr-latn.js |
---|
New file |
0,0 → 1,501 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: sr-latn.js |
* Serbian (Latin) language file. |
* |
* File Authors: |
* Zoran Subic (zoran@tf.zr.ac.yu) |
*/ |
var FCKLang = |
{ |
// Language direction : "ltr" (left to right) or "rtl" (right to left). |
Dir : "ltr", |
ToolbarCollapse : "Smanji liniju sa alatkama", |
ToolbarExpand : "Proiri liniju sa alatkama", |
// Toolbar Items and Context Menu |
Save : "Sačuvaj", |
NewPage : "Nova stranica", |
Preview : "Izgled stranice", |
Cut : "Iseci", |
Copy : "Kopiraj", |
Paste : "Zalepi", |
PasteText : "Zalepi kao neformatiran tekst", |
PasteWord : "Zalepi iz Worda", |
Print : "Štampa", |
SelectAll : "Označi sve", |
RemoveFormat : "Ukloni formatiranje", |
InsertLinkLbl : "Link", |
InsertLink : "Unesi/izmeni link", |
RemoveLink : "Ukloni link", |
Anchor : "Unesi/izmeni sidro", |
InsertImageLbl : "Slika", |
InsertImage : "Unesi/izmeni sliku", |
InsertFlashLbl : "Fleš", |
InsertFlash : "Unesi/izmeni fleš", |
InsertTableLbl : "Tabela", |
InsertTable : "Unesi/izmeni tabelu", |
InsertLineLbl : "Linija", |
InsertLine : "Unesi horizontalnu liniju", |
InsertSpecialCharLbl: "Specijalni karakteri", |
InsertSpecialChar : "Unesi specijalni karakter", |
InsertSmileyLbl : "Smajli", |
InsertSmiley : "Unesi smajlija", |
About : "O FCKeditoru", |
Bold : "Podebljano", |
Italic : "Kurziv", |
Underline : "Podvučeno", |
StrikeThrough : "Precrtano", |
Subscript : "Indeks", |
Superscript : "Stepen", |
LeftJustify : "Levo ravnanje", |
CenterJustify : "Centriran tekst", |
RightJustify : "Desno ravnanje", |
BlockJustify : "Obostrano ravnanje", |
DecreaseIndent : "Smanji levu marginu", |
IncreaseIndent : "Uvećaj levu marginu", |
Undo : "Poniàti akciju", |
Redo : "Ponovi akciju", |
NumberedListLbl : "Nabrojiva lista", |
NumberedList : "Unesi/ukloni nabrojivu listu", |
BulletedListLbl : "Nenabrojiva lista", |
BulletedList : "Unesi/ukloni nenabrojivu listu", |
ShowTableBorders : "Prikaži okvir tabele", |
ShowDetails : "Prikaži detalje", |
Style : "Stil", |
FontFormat : "Format", |
Font : "Font", |
FontSize : "Veličina fonta", |
TextColor : "Boja teksta", |
BGColor : "Boja pozadine", |
Source : "Kôd", |
Find : "Pretraga", |
Replace : "Zamena", |
SpellCheck : "Proveri spelovanje", |
UniversalKeyboard : "Univerzalna tastatura", |
PageBreakLbl : "Page Break", //MISSING |
PageBreak : "Insert Page Break", //MISSING |
Form : "Forma", |
Checkbox : "Polje za potvrdu", |
RadioButton : "Radio-dugme", |
TextField : "Tekstualno polje", |
Textarea : "Zona teksta", |
HiddenField : "Skriveno polje", |
Button : "Dugme", |
SelectionField : "Izborno polje", |
ImageButton : "Dugme sa slikom", |
FitWindow : "Maximize the editor size", //MISSING |
// Context Menu |
EditLink : "Izmeni link", |
CellCM : "Cell", //MISSING |
RowCM : "Row", //MISSING |
ColumnCM : "Column", //MISSING |
InsertRow : "Unesi red", |
DeleteRows : "Obriši redove", |
InsertColumn : "Unesi kolonu", |
DeleteColumns : "Obriši kolone", |
InsertCell : "Unesi ćelije", |
DeleteCells : "Obriši ćelije", |
MergeCells : "Spoj celije", |
SplitCell : "Razdvoji celije", |
TableDelete : "Delete Table", //MISSING |
CellProperties : "Osobine celije", |
TableProperties : "Osobine tabele", |
ImageProperties : "Osobine slike", |
FlashProperties : "Osobine fleša", |
AnchorProp : "Osobine sidra", |
ButtonProp : "Osobine dugmeta", |
CheckboxProp : "Osobine polja za potvrdu", |
HiddenFieldProp : "Osobine skrivenog polja", |
RadioButtonProp : "Osobine radio-dugmeta", |
ImageButtonProp : "Osobine dugmeta sa slikom", |
TextFieldProp : "Osobine tekstualnog polja", |
SelectionFieldProp : "Osobine izbornog polja", |
TextareaProp : "Osobine zone teksta", |
FormProp : "Osobine forme", |
FontFormats : "Normal;Formatirano;Adresa;Naslov 1;Naslov 2;Naslov 3;Naslov 4;Naslov 5;Naslov 6", |
// Alerts and Messages |
ProcessingXHTML : "Obradujem XHTML. Malo strpljenja...", |
Done : "Završio", |
PasteWordConfirm : "Tekst koji želite da nalepite kopiran je iz Worda. Da li želite da bude očišćen od formata pre lepljenja?", |
NotCompatiblePaste : "Ova komanda je dostupna samo za Internet Explorer od verzije 5.5. Da li želite da nalepim tekst bez čišćenja?", |
UnknownToolbarItem : "Nepoznata stavka toolbara \"%1\"", |
UnknownCommand : "Nepoznata naredba \"%1\"", |
NotImplemented : "Naredba nije implementirana", |
UnknownToolbarSet : "Toolbar \"%1\" ne postoji", |
NoActiveX : "Your browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.", //MISSING |
BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.", //MISSING |
DialogBlocked : "It was not possible to open the dialog window. Make sure all popup blockers are disabled.", //MISSING |
// Dialogs |
DlgBtnOK : "OK", |
DlgBtnCancel : "Otkaži", |
DlgBtnClose : "Zatvori", |
DlgBtnBrowseServer : "Pretraži server", |
DlgAdvancedTag : "Napredni tagovi", |
DlgOpOther : "<Ostali>", |
DlgInfoTab : "Info", |
DlgAlertUrl : "Molimo Vas, unesite URL", |
// General Dialogs Labels |
DlgGenNotSet : "<nije postavljeno>", |
DlgGenId : "Id", |
DlgGenLangDir : "Smer jezika", |
DlgGenLangDirLtr : "S leva na desno (LTR)", |
DlgGenLangDirRtl : "S desna na levo (RTL)", |
DlgGenLangCode : "Kôd jezika", |
DlgGenAccessKey : "Pristupni taster", |
DlgGenName : "Naziv", |
DlgGenTabIndex : "Tab indeks", |
DlgGenLongDescr : "Pun opis URL", |
DlgGenClass : "Stylesheet klase", |
DlgGenTitle : "Advisory naslov", |
DlgGenContType : "Advisory vrsta sadržaja", |
DlgGenLinkCharset : "Linked Resource Charset", |
DlgGenStyle : "Stil", |
// Image Dialog |
DlgImgTitle : "Osobine slika", |
DlgImgInfoTab : "Info slike", |
DlgImgBtnUpload : "Pošalji na server", |
DlgImgURL : "URL", |
DlgImgUpload : "Pošalji", |
DlgImgAlt : "Alternativni tekst", |
DlgImgWidth : "Širina", |
DlgImgHeight : "Visina", |
DlgImgLockRatio : "Zaključaj odnos", |
DlgBtnResetSize : "Resetuj veličinu", |
DlgImgBorder : "Okvir", |
DlgImgHSpace : "HSpace", |
DlgImgVSpace : "VSpace", |
DlgImgAlign : "Ravnanje", |
DlgImgAlignLeft : "Levo", |
DlgImgAlignAbsBottom: "Abs dole", |
DlgImgAlignAbsMiddle: "Abs sredina", |
DlgImgAlignBaseline : "Bazno", |
DlgImgAlignBottom : "Dole", |
DlgImgAlignMiddle : "Sredina", |
DlgImgAlignRight : "Desno", |
DlgImgAlignTextTop : "Vrh teksta", |
DlgImgAlignTop : "Vrh", |
DlgImgPreview : "Izgled", |
DlgImgAlertUrl : "Unesite URL slike", |
DlgImgLinkTab : "Link", |
// Flash Dialog |
DlgFlashTitle : "Osobine fleša", |
DlgFlashChkPlay : "Automatski start", |
DlgFlashChkLoop : "Ponavljaj", |
DlgFlashChkMenu : "UkljuÄi fle¨meni", |
DlgFlashScale : "Skaliraj", |
DlgFlashScaleAll : "Prikaži sve", |
DlgFlashScaleNoBorder : "Bez ivice", |
DlgFlashScaleFit : "Popuni površinu", |
// Link Dialog |
DlgLnkWindowTitle : "Link", |
DlgLnkInfoTab : "Link Info", |
DlgLnkTargetTab : "Meta", |
DlgLnkType : "Vrsta linka", |
DlgLnkTypeURL : "URL", |
DlgLnkTypeAnchor : "Sidro na ovoj stranici", |
DlgLnkTypeEMail : "E-Mail", |
DlgLnkProto : "Protokol", |
DlgLnkProtoOther : "<drugo>", |
DlgLnkURL : "URL", |
DlgLnkAnchorSel : "Odaberi sidro", |
DlgLnkAnchorByName : "Po nazivu sidra", |
DlgLnkAnchorById : "Po Id-ju elementa", |
DlgLnkNoAnchors : "<Nema dostupnih sidra>", |
DlgLnkEMail : "E-Mail adresa", |
DlgLnkEMailSubject : "Naslov", |
DlgLnkEMailBody : "Sadržaj poruke", |
DlgLnkUpload : "Pošalji", |
DlgLnkBtnUpload : "Pošalji na server", |
DlgLnkTarget : "Meta", |
DlgLnkTargetFrame : "<okvir>", |
DlgLnkTargetPopup : "<popup prozor>", |
DlgLnkTargetBlank : "Novi prozor (_blank)", |
DlgLnkTargetParent : "Roditeljski prozor (_parent)", |
DlgLnkTargetSelf : "Isti prozor (_self)", |
DlgLnkTargetTop : "Prozor na vrhu (_top)", |
DlgLnkTargetFrameName : "Naziv odredišnog frejma", |
DlgLnkPopWinName : "Naziv popup prozora", |
DlgLnkPopWinFeat : "Mogućnosti popup prozora", |
DlgLnkPopResize : "Promenljiva velicina", |
DlgLnkPopLocation : "Lokacija", |
DlgLnkPopMenu : "Kontekstni meni", |
DlgLnkPopScroll : "Scroll bar", |
DlgLnkPopStatus : "Statusna linija", |
DlgLnkPopToolbar : "Toolbar", |
DlgLnkPopFullScrn : "Prikaz preko celog ekrana (IE)", |
DlgLnkPopDependent : "Zavisno (Netscape)", |
DlgLnkPopWidth : "Širina", |
DlgLnkPopHeight : "Visina", |
DlgLnkPopLeft : "Od leve ivice ekrana (px)", |
DlgLnkPopTop : "Od vrha ekrana (px)", |
DlnLnkMsgNoUrl : "Unesite URL linka", |
DlnLnkMsgNoEMail : "Otkucajte adresu elektronske pote", |
DlnLnkMsgNoAnchor : "Odaberite sidro", |
DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING |
// Color Dialog |
DlgColorTitle : "Odaberite boju", |
DlgColorBtnClear : "Obriši", |
DlgColorHighlight : "Posvetli", |
DlgColorSelected : "Odaberi", |
// Smiley Dialog |
DlgSmileyTitle : "Unesi smajlija", |
// Special Character Dialog |
DlgSpecialCharTitle : "Odaberite specijalni karakter", |
// Table Dialog |
DlgTableTitle : "Osobine tabele", |
DlgTableRows : "Redova", |
DlgTableColumns : "Kolona", |
DlgTableBorder : "Veličina okvira", |
DlgTableAlign : "Ravnanje", |
DlgTableAlignNotSet : "<nije postavljeno>", |
DlgTableAlignLeft : "Levo", |
DlgTableAlignCenter : "Sredina", |
DlgTableAlignRight : "Desno", |
DlgTableWidth : "Širina", |
DlgTableWidthPx : "piksela", |
DlgTableWidthPc : "procenata", |
DlgTableHeight : "Visina", |
DlgTableCellSpace : "Ćelijski prostor", |
DlgTableCellPad : "Razmak ćelija", |
DlgTableCaption : "Naslov tabele", |
DlgTableSummary : "Summary", //MISSING |
// Table Cell Dialog |
DlgCellTitle : "Osobine ćelije", |
DlgCellWidth : "Širina", |
DlgCellWidthPx : "piksela", |
DlgCellWidthPc : "procenata", |
DlgCellHeight : "Visina", |
DlgCellWordWrap : "Deljenje reči", |
DlgCellWordWrapNotSet : "<nije postavljeno>", |
DlgCellWordWrapYes : "Da", |
DlgCellWordWrapNo : "Ne", |
DlgCellHorAlign : "Vodoravno ravnanje", |
DlgCellHorAlignNotSet : "<nije postavljeno>", |
DlgCellHorAlignLeft : "Levo", |
DlgCellHorAlignCenter : "Sredina", |
DlgCellHorAlignRight: "Desno", |
DlgCellVerAlign : "Vertikalno ravnanje", |
DlgCellVerAlignNotSet : "<nije postavljeno>", |
DlgCellVerAlignTop : "Gornje", |
DlgCellVerAlignMiddle : "Sredina", |
DlgCellVerAlignBottom : "Donje", |
DlgCellVerAlignBaseline : "Bazno", |
DlgCellRowSpan : "Spajanje redova", |
DlgCellCollSpan : "Spajanje kolona", |
DlgCellBackColor : "Boja pozadine", |
DlgCellBorderColor : "Boja okvira", |
DlgCellBtnSelect : "Odaberi...", |
// Find Dialog |
DlgFindTitle : "Pronađi", |
DlgFindFindBtn : "Pronađi", |
DlgFindNotFoundMsg : "Traženi tekst nije pronađen.", |
// Replace Dialog |
DlgReplaceTitle : "Zameni", |
DlgReplaceFindLbl : "Pronadi:", |
DlgReplaceReplaceLbl : "Zameni sa:", |
DlgReplaceCaseChk : "Razlikuj mala i velika slova", |
DlgReplaceReplaceBtn : "Zameni", |
DlgReplaceReplAllBtn : "Zameni sve", |
DlgReplaceWordChk : "Uporedi cele reci", |
// Paste Operations / Dialog |
PasteErrorPaste : "Sigurnosna podešavanja Vašeg pretraživača ne dozvoljavaju operacije automatskog lepljenja teksta. Molimo Vas da koristite prečicu sa tastature (Ctrl+V).", |
PasteErrorCut : "Sigurnosna podešavanja Vašeg pretraživača ne dozvoljavaju operacije automatskog isecanja teksta. Molimo Vas da koristite prečicu sa tastature (Ctrl+X).", |
PasteErrorCopy : "Sigurnosna podešavanja Vašeg pretraživača ne dozvoljavaju operacije automatskog kopiranja teksta. Molimo Vas da koristite prečicu sa tastature (Ctrl+C).", |
PasteAsText : "Zalepi kao čist tekst", |
PasteFromWord : "Zalepi iz Worda", |
DlgPasteMsg2 : "Molimo Vas da zalepite unutar donje povrine koristeći tastaturnu prečicu (<STRONG>Ctrl+V</STRONG>) i da pritisnete <STRONG>OK</STRONG>.", |
DlgPasteIgnoreFont : "Ignoriši definicije fontova", |
DlgPasteRemoveStyles : "Ukloni definicije stilova", |
DlgPasteCleanBox : "Obriši sve", |
// Color Picker |
ColorAutomatic : "Automatski", |
ColorMoreColors : "Više boja...", |
// Document Properties |
DocProps : "Osobine dokumenta", |
// Anchor Dialog |
DlgAnchorTitle : "Osobine sidra", |
DlgAnchorName : "Ime sidra", |
DlgAnchorErrorName : "Unesite ime sidra", |
// Speller Pages Dialog |
DlgSpellNotInDic : "Nije u rečniku", |
DlgSpellChangeTo : "Izmeni", |
DlgSpellBtnIgnore : "Ignoriši", |
DlgSpellBtnIgnoreAll : "Ignoriši sve", |
DlgSpellBtnReplace : "Zameni", |
DlgSpellBtnReplaceAll : "Zameni sve", |
DlgSpellBtnUndo : "Vrati akciju", |
DlgSpellNoSuggestions : "- Bez sugestija -", |
DlgSpellProgress : "Provera spelovanja u toku...", |
DlgSpellNoMispell : "Provera spelovanja završena: greške nisu pronadene", |
DlgSpellNoChanges : "Provera spelovanja završena: Nije izmenjena nijedna rec", |
DlgSpellOneChange : "Provera spelovanja završena: Izmenjena je jedna reč", |
DlgSpellManyChanges : "Provera spelovanja završena: %1 reč(i) je izmenjeno", |
IeSpellDownload : "Provera spelovanja nije instalirana. Da li želite da je skinete sa Interneta?", |
// Button Dialog |
DlgButtonText : "Tekst (vrednost)", |
DlgButtonType : "Tip", |
DlgButtonTypeBtn : "Button", //MISSING |
DlgButtonTypeSbm : "Submit", //MISSING |
DlgButtonTypeRst : "Reset", //MISSING |
// Checkbox and Radio Button Dialogs |
DlgCheckboxName : "Naziv", |
DlgCheckboxValue : "Vrednost", |
DlgCheckboxSelected : "Označeno", |
// Form Dialog |
DlgFormName : "Naziv", |
DlgFormAction : "Akcija", |
DlgFormMethod : "Metoda", |
// Select Field Dialog |
DlgSelectName : "Naziv", |
DlgSelectValue : "Vrednost", |
DlgSelectSize : "Veličina", |
DlgSelectLines : "linija", |
DlgSelectChkMulti : "Dozvoli višestruku selekciju", |
DlgSelectOpAvail : "Dostupne opcije", |
DlgSelectOpText : "Tekst", |
DlgSelectOpValue : "Vrednost", |
DlgSelectBtnAdd : "Dodaj", |
DlgSelectBtnModify : "Izmeni", |
DlgSelectBtnUp : "Gore", |
DlgSelectBtnDown : "Dole", |
DlgSelectBtnSetValue : "Podesi kao označenu vrednost", |
DlgSelectBtnDelete : "Obriši", |
// Textarea Dialog |
DlgTextareaName : "Naziv", |
DlgTextareaCols : "Broj kolona", |
DlgTextareaRows : "Broj redova", |
// Text Field Dialog |
DlgTextName : "Naziv", |
DlgTextValue : "Vrednost", |
DlgTextCharWidth : "Širina (karaktera)", |
DlgTextMaxChars : "Maksimalno karaktera", |
DlgTextType : "Tip", |
DlgTextTypeText : "Tekst", |
DlgTextTypePass : "Lozinka", |
// Hidden Field Dialog |
DlgHiddenName : "Naziv", |
DlgHiddenValue : "Vrednost", |
// Bulleted List Dialog |
BulletedListProp : "Osobine nenabrojive liste", |
NumberedListProp : "Osobine nabrojive liste", |
DlgLstStart : "Start", //MISSING |
DlgLstType : "Tip", |
DlgLstTypeCircle : "Krug", |
DlgLstTypeDisc : "Disc", //MISSING |
DlgLstTypeSquare : "Kvadrat", |
DlgLstTypeNumbers : "Brojevi (1, 2, 3)", |
DlgLstTypeLCase : "mala slova (a, b, c)", |
DlgLstTypeUCase : "VELIKA slova (A, B, C)", |
DlgLstTypeSRoman : "Male rimske cifre (i, ii, iii)", |
DlgLstTypeLRoman : "Velike rimske cifre (I, II, III)", |
// Document Properties Dialog |
DlgDocGeneralTab : "Opšte osobine", |
DlgDocBackTab : "Pozadina", |
DlgDocColorsTab : "Boje i margine", |
DlgDocMetaTab : "Metapodaci", |
DlgDocPageTitle : "Naslov stranice", |
DlgDocLangDir : "Smer jezika", |
DlgDocLangDirLTR : "Sleva nadesno (LTR)", |
DlgDocLangDirRTL : "Zdesna nalevo (RTL)", |
DlgDocLangCode : "Šifra jezika", |
DlgDocCharSet : "Kodiranje skupa karaktera", |
DlgDocCharSetCE : "Central European", //MISSING |
DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING |
DlgDocCharSetCR : "Cyrillic", //MISSING |
DlgDocCharSetGR : "Greek", //MISSING |
DlgDocCharSetJP : "Japanese", //MISSING |
DlgDocCharSetKR : "Korean", //MISSING |
DlgDocCharSetTR : "Turkish", //MISSING |
DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING |
DlgDocCharSetWE : "Western European", //MISSING |
DlgDocCharSetOther : "Ostala kodiranja skupa karaktera", |
DlgDocDocType : "Zaglavlje tipa dokumenta", |
DlgDocDocTypeOther : "Ostala zaglavlja tipa dokumenta", |
DlgDocIncXHTML : "Ukljuci XHTML deklaracije", |
DlgDocBgColor : "Boja pozadine", |
DlgDocBgImage : "URL pozadinske slike", |
DlgDocBgNoScroll : "Fiksirana pozadina", |
DlgDocCText : "Tekst", |
DlgDocCLink : "Link", |
DlgDocCVisited : "Posećeni link", |
DlgDocCActive : "Aktivni link", |
DlgDocMargins : "Margine stranice", |
DlgDocMaTop : "Gornja", |
DlgDocMaLeft : "Leva", |
DlgDocMaRight : "Desna", |
DlgDocMaBottom : "Donja", |
DlgDocMeIndex : "Ključne reci za indeksiranje dokumenta (razdvojene zarezima)", |
DlgDocMeDescr : "Opis dokumenta", |
DlgDocMeAuthor : "Autor", |
DlgDocMeCopy : "Autorska prava", |
DlgDocPreview : "Izgled stranice", |
// Templates Dialog |
Templates : "Obrasci", |
DlgTemplatesTitle : "Obrasci za sadržaj", |
DlgTemplatesSelMsg : "Molimo Vas da odaberete obrazac koji ce biti primenjen na stranicu (trenutni sadržaj ce biti obrisan):", |
DlgTemplatesLoading : "Učitavam listu obrazaca. Malo strpljenja...", |
DlgTemplatesNoTpl : "(Nema definisanih obrazaca)", |
DlgTemplatesReplace : "Replace actual contents", //MISSING |
// About Dialog |
DlgAboutAboutTab : "O editoru", |
DlgAboutBrowserInfoTab : "Informacije o pretraživacu", |
DlgAboutLicenseTab : "License", //MISSING |
DlgAboutVersion : "verzija", |
DlgAboutLicense : "Licencirano pod uslovima GNU Lesser General Public License", |
DlgAboutInfo : "Za više informacija posetite" |
} |
/branches/v1.0-menes/api/fckeditor/editor/lang/zh.js |
---|
New file |
0,0 → 1,501 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: zh.js |
* Chinese Traditional language file. |
* |
* File Authors: |
* Zak Fong (zakfong@yahoo.com.tw) |
*/ |
var FCKLang = |
{ |
// Language direction : "ltr" (left to right) or "rtl" (right to left). |
Dir : "ltr", |
ToolbarCollapse : "隱藏面板", |
ToolbarExpand : "顯示面板", |
// Toolbar Items and Context Menu |
Save : "儲存", |
NewPage : "開新檔案", |
Preview : "預覽", |
Cut : "剪下", |
Copy : "複製", |
Paste : "貼上", |
PasteText : "貼為純文字格式", |
PasteWord : "自 Word 貼上", |
Print : "列印", |
SelectAll : "全選", |
RemoveFormat : "清除格式", |
InsertLinkLbl : "超連結", |
InsertLink : "插入/編輯超連結", |
RemoveLink : "移除超連結", |
Anchor : "插入/編輯錨點", |
InsertImageLbl : "影像", |
InsertImage : "插入/編輯影像", |
InsertFlashLbl : "Flash", |
InsertFlash : "插入/編輯 Flash", |
InsertTableLbl : "表格", |
InsertTable : "插入/編輯表格", |
InsertLineLbl : "水平線", |
InsertLine : "插入水平線", |
InsertSpecialCharLbl: "特殊符號", |
InsertSpecialChar : "插入特殊符號", |
InsertSmileyLbl : "表情符號", |
InsertSmiley : "插入表情符號", |
About : "關於 FCKeditor", |
Bold : "粗體", |
Italic : "斜體", |
Underline : "底線", |
StrikeThrough : "刪除線", |
Subscript : "下標", |
Superscript : "上標", |
LeftJustify : "靠左對齊", |
CenterJustify : "置中", |
RightJustify : "靠右對齊", |
BlockJustify : "左右對齊", |
DecreaseIndent : "減少縮排", |
IncreaseIndent : "增加縮排", |
Undo : "復原", |
Redo : "重複", |
NumberedListLbl : "編號清單", |
NumberedList : "插入/移除編號清單", |
BulletedListLbl : "項目清單", |
BulletedList : "插入/移除項目清單", |
ShowTableBorders : "顯示表格邊框", |
ShowDetails : "顯示詳細資料", |
Style : "樣式", |
FontFormat : "格式", |
Font : "字體", |
FontSize : "大小", |
TextColor : "文字顏色", |
BGColor : "背景顏色", |
Source : "原始碼", |
Find : "尋找", |
Replace : "取代", |
SpellCheck : "拼字檢查", |
UniversalKeyboard : "萬國鍵盤", |
PageBreakLbl : "分頁符號", |
PageBreak : "插入分頁符號", |
Form : "表單", |
Checkbox : "核取方塊", |
RadioButton : "選項按鈕", |
TextField : "文字方塊", |
Textarea : "文字區域", |
HiddenField : "隱藏欄位", |
Button : "按鈕", |
SelectionField : "清單/選單", |
ImageButton : "影像按鈕", |
FitWindow : "編輯器最大化", |
// Context Menu |
EditLink : "編輯超連結", |
CellCM : "儲存格", |
RowCM : "列", |
ColumnCM : "欄", |
InsertRow : "插入列", |
DeleteRows : "刪除列", |
InsertColumn : "插入欄", |
DeleteColumns : "刪除欄", |
InsertCell : "插入儲存格", |
DeleteCells : "刪除儲存格", |
MergeCells : "合併儲存格", |
SplitCell : "分割儲存格", |
TableDelete : "刪除表格", |
CellProperties : "儲存格屬性", |
TableProperties : "表格屬性", |
ImageProperties : "影像屬性", |
FlashProperties : "Flash 屬性", |
AnchorProp : "錨點屬性", |
ButtonProp : "按鈕屬性", |
CheckboxProp : "核取方塊屬性", |
HiddenFieldProp : "隱藏欄位屬性", |
RadioButtonProp : "選項按鈕屬性", |
ImageButtonProp : "影像按鈕屬性", |
TextFieldProp : "文字方塊屬性", |
SelectionFieldProp : "清單/選單屬性", |
TextareaProp : "文字區域屬性", |
FormProp : "表單屬性", |
FontFormats : "本文;已格式化;位址;標題 1;標題 2;標題 3;標題 4;標題 5;標題 6;本文 (DIV)", |
// Alerts and Messages |
ProcessingXHTML : "處理 XHTML 中,請稍候…", |
Done : "完成", |
PasteWordConfirm : "您想貼上的文字似乎是自 Word 複製而來,請問您是否要先清除 Word 的格式後再行貼上?", |
NotCompatiblePaste : "此指令僅在 Internet Explorer 5.5 或以上的版本有效。請問您是否同意不清除格式即貼上?", |
UnknownToolbarItem : "未知工具列項目 \"%1\"", |
UnknownCommand : "未知指令名稱 \"%1\"", |
NotImplemented : "尚未安裝此指令", |
UnknownToolbarSet : "工具列設定 \"%1\" 不存在", |
NoActiveX : "瀏覽器的安全性設定限制了本編輯器的某些功能。您必須啟用安全性設定中的「執行ActiveX控制項與外掛程式」項目,否則本編輯器將會出現錯誤並缺少某些功能", |
BrowseServerBlocked : "無法開啟資源瀏覽器,請確定所有快顯視窗封鎖程式是否關閉", |
DialogBlocked : "無法開啟對話視窗,請確定所有快顯視窗封鎖程式是否關閉", |
// Dialogs |
DlgBtnOK : "確定", |
DlgBtnCancel : "取消", |
DlgBtnClose : "關閉", |
DlgBtnBrowseServer : "瀏覽伺服器端", |
DlgAdvancedTag : "進階", |
DlgOpOther : "<其他>", |
DlgInfoTab : "資訊", |
DlgAlertUrl : "請插入 URL", |
// General Dialogs Labels |
DlgGenNotSet : "<尚未設定>", |
DlgGenId : "ID", |
DlgGenLangDir : "語言方向", |
DlgGenLangDirLtr : "由左而右 (LTR)", |
DlgGenLangDirRtl : "由右而左 (RTL)", |
DlgGenLangCode : "語言代碼", |
DlgGenAccessKey : "存取鍵", |
DlgGenName : "名稱", |
DlgGenTabIndex : "定位順序", |
DlgGenLongDescr : "詳細 URL", |
DlgGenClass : "樣式表類別", |
DlgGenTitle : "標題", |
DlgGenContType : "內容類型", |
DlgGenLinkCharset : "連結資源之編碼", |
DlgGenStyle : "樣式", |
// Image Dialog |
DlgImgTitle : "影像屬性", |
DlgImgInfoTab : "影像資訊", |
DlgImgBtnUpload : "上傳至伺服器", |
DlgImgURL : "URL", |
DlgImgUpload : "上傳", |
DlgImgAlt : "替代文字", |
DlgImgWidth : "寬度", |
DlgImgHeight : "高度", |
DlgImgLockRatio : "等比例", |
DlgBtnResetSize : "重設為原大小", |
DlgImgBorder : "邊框", |
DlgImgHSpace : "水平距離", |
DlgImgVSpace : "垂直距離", |
DlgImgAlign : "對齊", |
DlgImgAlignLeft : "靠左對齊", |
DlgImgAlignAbsBottom: "絕對下方", |
DlgImgAlignAbsMiddle: "絕對中間", |
DlgImgAlignBaseline : "基準線", |
DlgImgAlignBottom : "靠下對齊", |
DlgImgAlignMiddle : "置中對齊", |
DlgImgAlignRight : "靠右對齊", |
DlgImgAlignTextTop : "文字上方", |
DlgImgAlignTop : "靠上對齊", |
DlgImgPreview : "預覽", |
DlgImgAlertUrl : "請輸入影像 URL", |
DlgImgLinkTab : "超連結", |
// Flash Dialog |
DlgFlashTitle : "Flash 屬性", |
DlgFlashChkPlay : "自動播放", |
DlgFlashChkLoop : "重複", |
DlgFlashChkMenu : "開啟選單", |
DlgFlashScale : "縮放", |
DlgFlashScaleAll : "全部顯示", |
DlgFlashScaleNoBorder : "無邊框", |
DlgFlashScaleFit : "精確符合", |
// Link Dialog |
DlgLnkWindowTitle : "超連結", |
DlgLnkInfoTab : "超連結資訊", |
DlgLnkTargetTab : "目標", |
DlgLnkType : "超連接類型", |
DlgLnkTypeURL : "URL", |
DlgLnkTypeAnchor : "本頁錨點", |
DlgLnkTypeEMail : "電子郵件", |
DlgLnkProto : "通訊協定", |
DlgLnkProtoOther : "<其他>", |
DlgLnkURL : "URL", |
DlgLnkAnchorSel : "請選擇錨點", |
DlgLnkAnchorByName : "依錨點名稱", |
DlgLnkAnchorById : "依元件 ID", |
DlgLnkNoAnchors : "<本文件尚無可用之錨點>", |
DlgLnkEMail : "電子郵件", |
DlgLnkEMailSubject : "郵件主旨", |
DlgLnkEMailBody : "郵件內容", |
DlgLnkUpload : "上傳", |
DlgLnkBtnUpload : "傳送至伺服器", |
DlgLnkTarget : "目標", |
DlgLnkTargetFrame : "<框架>", |
DlgLnkTargetPopup : "<快顯視窗>", |
DlgLnkTargetBlank : "新視窗 (_blank)", |
DlgLnkTargetParent : "父視窗 (_parent)", |
DlgLnkTargetSelf : "本視窗 (_self)", |
DlgLnkTargetTop : "最上層視窗 (_top)", |
DlgLnkTargetFrameName : "目標框架名稱", |
DlgLnkPopWinName : "快顯視窗名稱", |
DlgLnkPopWinFeat : "快顯視窗屬性", |
DlgLnkPopResize : "可調整大小", |
DlgLnkPopLocation : "網址列", |
DlgLnkPopMenu : "選單列", |
DlgLnkPopScroll : "捲軸", |
DlgLnkPopStatus : "狀態列", |
DlgLnkPopToolbar : "工具列", |
DlgLnkPopFullScrn : "全螢幕 (IE)", |
DlgLnkPopDependent : "從屬 (NS)", |
DlgLnkPopWidth : "寬", |
DlgLnkPopHeight : "高", |
DlgLnkPopLeft : "左", |
DlgLnkPopTop : "右", |
DlnLnkMsgNoUrl : "請輸入欲連結的 URL", |
DlnLnkMsgNoEMail : "請輸入電子郵件位址", |
DlnLnkMsgNoAnchor : "請選擇錨點", |
DlnLnkMsgInvPopName : "快顯名稱必須以「英文字母」為開頭,且不得含有空白", |
// Color Dialog |
DlgColorTitle : "請選擇顏色", |
DlgColorBtnClear : "清除", |
DlgColorHighlight : "預覽", |
DlgColorSelected : "選擇", |
// Smiley Dialog |
DlgSmileyTitle : "插入表情符號", |
// Special Character Dialog |
DlgSpecialCharTitle : "請選擇特殊符號", |
// Table Dialog |
DlgTableTitle : "表格屬性", |
DlgTableRows : "列數", |
DlgTableColumns : "欄數", |
DlgTableBorder : "邊框", |
DlgTableAlign : "對齊", |
DlgTableAlignNotSet : "<未設定>", |
DlgTableAlignLeft : "靠左對齊", |
DlgTableAlignCenter : "置中", |
DlgTableAlignRight : "靠右對齊", |
DlgTableWidth : "寬度", |
DlgTableWidthPx : "像素", |
DlgTableWidthPc : "百分比", |
DlgTableHeight : "高度", |
DlgTableCellSpace : "間距", |
DlgTableCellPad : "內距", |
DlgTableCaption : "標題", |
DlgTableSummary : "摘要", |
// Table Cell Dialog |
DlgCellTitle : "儲存格屬性", |
DlgCellWidth : "寬度", |
DlgCellWidthPx : "像素", |
DlgCellWidthPc : "百分比", |
DlgCellHeight : "高度", |
DlgCellWordWrap : "自動換行", |
DlgCellWordWrapNotSet : "<尚未設定>", |
DlgCellWordWrapYes : "是", |
DlgCellWordWrapNo : "否", |
DlgCellHorAlign : "水平對齊", |
DlgCellHorAlignNotSet : "<尚未設定>", |
DlgCellHorAlignLeft : "靠左對齊", |
DlgCellHorAlignCenter : "置中", |
DlgCellHorAlignRight: "靠右對齊", |
DlgCellVerAlign : "垂直對齊", |
DlgCellVerAlignNotSet : "<尚未設定>", |
DlgCellVerAlignTop : "靠上對齊", |
DlgCellVerAlignMiddle : "置中", |
DlgCellVerAlignBottom : "靠下對齊", |
DlgCellVerAlignBaseline : "基準線", |
DlgCellRowSpan : "合併列數", |
DlgCellCollSpan : "合併欄数", |
DlgCellBackColor : "背景顏色", |
DlgCellBorderColor : "邊框顏色", |
DlgCellBtnSelect : "請選擇…", |
// Find Dialog |
DlgFindTitle : "尋找", |
DlgFindFindBtn : "尋找", |
DlgFindNotFoundMsg : "未找到指定的文字。", |
// Replace Dialog |
DlgReplaceTitle : "取代", |
DlgReplaceFindLbl : "尋找:", |
DlgReplaceReplaceLbl : "取代:", |
DlgReplaceCaseChk : "大小寫須相符", |
DlgReplaceReplaceBtn : "取代", |
DlgReplaceReplAllBtn : "全部取代", |
DlgReplaceWordChk : "全字相符", |
// Paste Operations / Dialog |
PasteErrorPaste : "瀏覽器的安全性設定不允許編輯器自動執行貼上動作。請使用快捷鍵 (Ctrl+V) 貼上。", |
PasteErrorCut : "瀏覽器的安全性設定不允許編輯器自動執行剪下動作。請使用快捷鍵 (Ctrl+X) 剪下。", |
PasteErrorCopy : "瀏覽器的安全性設定不允許編輯器自動執行複製動作。請使用快捷鍵 (Ctrl+C) 複製。", |
PasteAsText : "貼為純文字格式", |
PasteFromWord : "自 Word 貼上", |
DlgPasteMsg2 : "請使用快捷鍵 (<strong>Ctrl+V</strong>) 貼到下方區域中並按下 <strong>確定</strong>", |
DlgPasteIgnoreFont : "移除字型設定", |
DlgPasteRemoveStyles : "移除樣式設定", |
DlgPasteCleanBox : "清除文字區域", |
// Color Picker |
ColorAutomatic : "自動", |
ColorMoreColors : "更多顏色…", |
// Document Properties |
DocProps : "文件屬性", |
// Anchor Dialog |
DlgAnchorTitle : "命名錨點", |
DlgAnchorName : "錨點名稱", |
DlgAnchorErrorName : "請輸入錨點名稱", |
// Speller Pages Dialog |
DlgSpellNotInDic : "不在字典中", |
DlgSpellChangeTo : "更改為", |
DlgSpellBtnIgnore : "忽略", |
DlgSpellBtnIgnoreAll : "全部忽略", |
DlgSpellBtnReplace : "取代", |
DlgSpellBtnReplaceAll : "全部取代", |
DlgSpellBtnUndo : "復原", |
DlgSpellNoSuggestions : "- 無建議值 -", |
DlgSpellProgress : "進行拼字檢查中…", |
DlgSpellNoMispell : "拼字檢查完成:未發現拼字錯誤", |
DlgSpellNoChanges : "拼字檢查完成:未更改任何單字", |
DlgSpellOneChange : "拼字檢查完成:更改了 1 個單字", |
DlgSpellManyChanges : "拼字檢查完成:更改了 %1 個單字", |
IeSpellDownload : "尚未安裝拼字檢查元件。您是否想要現在下載?", |
// Button Dialog |
DlgButtonText : "顯示文字 (值)", |
DlgButtonType : "類型", |
DlgButtonTypeBtn : "按鈕 (Button)", |
DlgButtonTypeSbm : "送出 (Submit)", |
DlgButtonTypeRst : "重設 (Reset)", |
// Checkbox and Radio Button Dialogs |
DlgCheckboxName : "名稱", |
DlgCheckboxValue : "選取值", |
DlgCheckboxSelected : "已選取", |
// Form Dialog |
DlgFormName : "名稱", |
DlgFormAction : "動作", |
DlgFormMethod : "方法", |
// Select Field Dialog |
DlgSelectName : "名稱", |
DlgSelectValue : "選取值", |
DlgSelectSize : "大小", |
DlgSelectLines : "行", |
DlgSelectChkMulti : "可多選", |
DlgSelectOpAvail : "可用選項", |
DlgSelectOpText : "顯示文字", |
DlgSelectOpValue : "值", |
DlgSelectBtnAdd : "新增", |
DlgSelectBtnModify : "修改", |
DlgSelectBtnUp : "上移", |
DlgSelectBtnDown : "下移", |
DlgSelectBtnSetValue : "設為預設值", |
DlgSelectBtnDelete : "刪除", |
// Textarea Dialog |
DlgTextareaName : "名稱", |
DlgTextareaCols : "字元寬度", |
DlgTextareaRows : "列數", |
// Text Field Dialog |
DlgTextName : "名稱", |
DlgTextValue : "值", |
DlgTextCharWidth : "字元寬度", |
DlgTextMaxChars : "最多字元數", |
DlgTextType : "類型", |
DlgTextTypeText : "文字", |
DlgTextTypePass : "密碼", |
// Hidden Field Dialog |
DlgHiddenName : "名稱", |
DlgHiddenValue : "值", |
// Bulleted List Dialog |
BulletedListProp : "項目清單屬性", |
NumberedListProp : "編號清單屬性", |
DlgLstStart : "起始編號", |
DlgLstType : "清單類型", |
DlgLstTypeCircle : "圓圈", |
DlgLstTypeDisc : "圓點", |
DlgLstTypeSquare : "方塊", |
DlgLstTypeNumbers : "數字 (1, 2, 3)", |
DlgLstTypeLCase : "小寫字母 (a, b, c)", |
DlgLstTypeUCase : "大寫字母 (A, B, C)", |
DlgLstTypeSRoman : "小寫羅馬數字 (i, ii, iii)", |
DlgLstTypeLRoman : "大寫羅馬數字 (I, II, III)", |
// Document Properties Dialog |
DlgDocGeneralTab : "一般", |
DlgDocBackTab : "背景", |
DlgDocColorsTab : "顯色與邊界", |
DlgDocMetaTab : "Meta 資料", |
DlgDocPageTitle : "頁面標題", |
DlgDocLangDir : "語言方向", |
DlgDocLangDirLTR : "由左而右 (LTR)", |
DlgDocLangDirRTL : "由右而左 (RTL)", |
DlgDocLangCode : "語言代碼", |
DlgDocCharSet : "字元編碼", |
DlgDocCharSetCE : "中歐語系", |
DlgDocCharSetCT : "正體中文 (Big5)", |
DlgDocCharSetCR : "斯拉夫文", |
DlgDocCharSetGR : "希臘文", |
DlgDocCharSetJP : "日文", |
DlgDocCharSetKR : "韓文", |
DlgDocCharSetTR : "土耳其文", |
DlgDocCharSetUN : "Unicode (UTF-8)", |
DlgDocCharSetWE : "西歐語系", |
DlgDocCharSetOther : "其他字元編碼", |
DlgDocDocType : "文件類型", |
DlgDocDocTypeOther : "其他文件類型", |
DlgDocIncXHTML : "包含 XHTML 定義", |
DlgDocBgColor : "背景顏色", |
DlgDocBgImage : "背景影像", |
DlgDocBgNoScroll : "浮水印", |
DlgDocCText : "文字", |
DlgDocCLink : "超連結", |
DlgDocCVisited : "已瀏覽過的超連結", |
DlgDocCActive : "作用中的超連結", |
DlgDocMargins : "頁面邊界", |
DlgDocMaTop : "上", |
DlgDocMaLeft : "左", |
DlgDocMaRight : "右", |
DlgDocMaBottom : "下", |
DlgDocMeIndex : "文件索引關鍵字 (用半形逗號[,]分隔)", |
DlgDocMeDescr : "文件說明", |
DlgDocMeAuthor : "作者", |
DlgDocMeCopy : "版權所有", |
DlgDocPreview : "預覽", |
// Templates Dialog |
Templates : "樣版", |
DlgTemplatesTitle : "內容樣版", |
DlgTemplatesSelMsg : "請選擇欲開啟的樣版<br> (原有的內容將會被清除):", |
DlgTemplatesLoading : "讀取樣版清單中,請稍候…", |
DlgTemplatesNoTpl : "(無樣版)", |
DlgTemplatesReplace : "取代原有內容", |
// About Dialog |
DlgAboutAboutTab : "關於", |
DlgAboutBrowserInfoTab : "瀏覽器資訊", |
DlgAboutLicenseTab : "許可證", |
DlgAboutVersion : "版本", |
DlgAboutLicense : "依據 GNU 較寬鬆公共許可證(LGPL)發佈", |
DlgAboutInfo : "想獲得更多資訊請至 " |
} |
/branches/v1.0-menes/api/fckeditor/editor/lang/lv.js |
---|
New file |
0,0 → 1,502 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: lv.js |
* Latvian language file. |
* |
* File Authors: |
* JÄnis KļaviŨ(janis@4id.lv) |
* Slowmo (slowmo@inbox.lv) |
*/ |
var FCKLang = |
{ |
// Language direction : "ltr" (left to right) or "rtl" (right to left). |
Dir : "ltr", |
ToolbarCollapse : "Samazināt rīku joslu", |
ToolbarExpand : "Paplašināt rīku joslu", |
// Toolbar Items and Context Menu |
Save : "Saglabāt", |
NewPage : "Jauna lapa", |
Preview : "Pārskatīt", |
Cut : "Izgriezt", |
Copy : "Kopēt", |
Paste : "Ievietot", |
PasteText : "Ievietot kā vienkāršu tekstu", |
PasteWord : "Ievietot no Worda", |
Print : "Drukāt", |
SelectAll : "Iezīmēt visu", |
RemoveFormat : "Noņemt stilus", |
InsertLinkLbl : "Hipersaite", |
InsertLink : "Ievietot/Labot hipersaiti", |
RemoveLink : "Noņemt hipersaiti", |
Anchor : "Ievietot/Labot iezīmi", |
InsertImageLbl : "Attēls", |
InsertImage : "Ievietot/Labot Attēlu", |
InsertFlashLbl : "Flash", |
InsertFlash : "Ievietot/Labot Flash", |
InsertTableLbl : "Tabula", |
InsertTable : "Ievietot/Labot Tabulu", |
InsertLineLbl : "Atdalītājsvītra", |
InsertLine : "Ievietot horizontālu Atdalītājsvītru", |
InsertSpecialCharLbl: "Īpašs simbols", |
InsertSpecialChar : "Ievietot speciālo simbolu", |
InsertSmileyLbl : "Smaidiņi", |
InsertSmiley : "Ievietot smaidiņu", |
About : "Īsumā par FCKeditor", |
Bold : "Treknu šriftu", |
Italic : "Slīprakstā", |
Underline : "Apakšsvītra", |
StrikeThrough : "Pārsvītrots", |
Subscript : "Zemrakstā", |
Superscript : "Augšrakstā", |
LeftJustify : "Izlīdzināt pa kreisi", |
CenterJustify : "Izlīdzināt pret centru", |
RightJustify : "Izlīdzināt pa labi", |
BlockJustify : "Izlīdzināt malas", |
DecreaseIndent : "Samazināt atkāpi", |
IncreaseIndent : "Palielināt atkāpi", |
Undo : "Atcelt", |
Redo : "Atkārtot", |
NumberedListLbl : "Numurēts saraksts", |
NumberedList : "Ievietot/Noņemt numerēto sarakstu", |
BulletedListLbl : "Izcelts saraksts", |
BulletedList : "Ievietot/Noņemt izceltu sarakstu", |
ShowTableBorders : "Parādīt tabulas robežas", |
ShowDetails : "Parādīt sīkāku informāciju", |
Style : "Stils", |
FontFormat : "Formāts", |
Font : "Šrifts", |
FontSize : "Izmērs", |
TextColor : "Teksta krāsa", |
BGColor : "Fona krāsa", |
Source : "HTML kods", |
Find : "Meklēt", |
Replace : "Nomainīt", |
SpellCheck : "Pareizrakstības pārbaude", |
UniversalKeyboard : "Universāla klaviatūra", |
PageBreakLbl : "Lapas pārtraukums", |
PageBreak : "Ievietot lapas pārtraukumu", |
Form : "Forma", |
Checkbox : "Atzīmēšanas kastīte", |
RadioButton : "Izvēles poga", |
TextField : "Teksta rinda", |
Textarea : "Teksta laukums", |
HiddenField : "Paslēpta teksta rinda", |
Button : "Poga", |
SelectionField : "Iezīmēšanas lauks", |
ImageButton : "Attēlpoga", |
FitWindow : "Maksimizēt redaktora izmēru", |
// Context Menu |
EditLink : "Labot hipersaiti", |
CellCM : "Šūna", |
RowCM : "Rinda", |
ColumnCM : "Kolonna", |
InsertRow : "Ievietot rindu", |
DeleteRows : "Dzēst rindas", |
InsertColumn : "Ievietot kolonnu", |
DeleteColumns : "Dzēst kolonnas", |
InsertCell : "Ievietot rūtiņu", |
DeleteCells : "Dzēst rūtiņas", |
MergeCells : "Apvienot rūtiņas", |
SplitCell : "Sadalīt rūtiņu", |
TableDelete : "Dzēst tabulu", |
CellProperties : "Rūtiņas īpašības", |
TableProperties : "Tabulas īpašības", |
ImageProperties : "Attēla īpašības", |
FlashProperties : "Flash īpašības", |
AnchorProp : "Iezīmes īpašības", |
ButtonProp : "Pogas īpašības", |
CheckboxProp : "Atzīmēšanas kastītes īpašības", |
HiddenFieldProp : "Paslēptās teksta rindas īpašības", |
RadioButtonProp : "Izvēles poga īpašības", |
ImageButtonProp : "Attēlpogas īpašības", |
TextFieldProp : "Teksta rindas īpašības", |
SelectionFieldProp : "Iezīmēšanas lauka īpašības", |
TextareaProp : "Teksta laukuma īpašības", |
FormProp : "Formas īpašības", |
FontFormats : "Normāls teksts;Formatēts teksts;Adrese;Virsraksts 1;Virsraksts 2;Virsraksts 3;Virsraksts 4;Virsraksts 5;Virsraksts 6;Rindkopa (DIV)", |
// Alerts and Messages |
ProcessingXHTML : "Tiek apstrādāts XHTML. Lūdzu uzgaidiet...", |
Done : "Darīts", |
PasteWordConfirm : "Teksta fragments, kas tiek ievietots, izskatās, ka būtu sagatavots Word'ā. Vai vēlaties to apstrādāt pirms ievietošanas?", |
NotCompatiblePaste : "Šī darbība ir pieejama Internet Explorer'ī, kas jaunāks par 5.5 versiju. Vai vēlaties ievietot bez apstrādes?", |
UnknownToolbarItem : "Nezināms rīku joslas objekts \"%1\"", |
UnknownCommand : "Nezināmas darbības nosaukums \"%1\"", |
NotImplemented : "Darbība netika paveikta", |
UnknownToolbarSet : "Rīku joslas komplekts \"%1\" neeksistē", |
NoActiveX : "Interneta pārlūkprogrammas drošības uzstādījumi varētu ietekmēt dažas no redaktora īpašībām. Jābūt aktivizētai sadaļai \"Run ActiveX controls and plug-ins\". Savādāk ir iespējamas kļūdas darbībā un kļūdu paziņojumu parādīšanās.", |
BrowseServerBlocked : "Resursu pārlūks nevar tikt atvērts. Pārliecinieties, ka uznirstošo logu bloķētāji ir atslēgti.", |
DialogBlocked : "Nav iespējams atvērt dialoglogu. Pārliecinieties, ka uznirstošo logu bloķētāji ir atslēgti.", |
// Dialogs |
DlgBtnOK : "Darīts!", |
DlgBtnCancel : "Atcelt", |
DlgBtnClose : "Aizvērt", |
DlgBtnBrowseServer : "Skatīt servera saturu", |
DlgAdvancedTag : "Izvērstais", |
DlgOpOther : "<Cits>", |
DlgInfoTab : "Informācija", |
DlgAlertUrl : "Lūdzu, ievietojiet hipersaiti", |
// General Dialogs Labels |
DlgGenNotSet : "<nav iestatīts>", |
DlgGenId : "Id", |
DlgGenLangDir : "Valodas lasīšanas virziens", |
DlgGenLangDirLtr : "No kreisās uz labo (LTR)", |
DlgGenLangDirRtl : "No labās uz kreiso (RTL)", |
DlgGenLangCode : "Valodas kods", |
DlgGenAccessKey : "Pieejas kods", |
DlgGenName : "Nosaukums", |
DlgGenTabIndex : "Ciļņu indekss", |
DlgGenLongDescr : "Gara apraksta Hipersaite", |
DlgGenClass : "Stilu saraksta klases", |
DlgGenTitle : "Konsultatīvs virsraksts", |
DlgGenContType : "Konsultatīvs satura tips", |
DlgGenLinkCharset : "Pievienotā resursa kodu tabula", |
DlgGenStyle : "Stils", |
// Image Dialog |
DlgImgTitle : "Attēla īpašības", |
DlgImgInfoTab : "Informācija par attēlu", |
DlgImgBtnUpload : "Nosūtīt serverim", |
DlgImgURL : "URL", |
DlgImgUpload : "Augšupielādēt", |
DlgImgAlt : "Alternatīvais teksts", |
DlgImgWidth : "Platums", |
DlgImgHeight : "Augstums", |
DlgImgLockRatio : "Nemainīga Augstuma/Platuma attiecība", |
DlgBtnResetSize : "Atjaunot sākotnējo izmēru", |
DlgImgBorder : "Rāmis", |
DlgImgHSpace : "Horizontālā telpa", |
DlgImgVSpace : "Vertikālā telpa", |
DlgImgAlign : "Nolīdzināt", |
DlgImgAlignLeft : "Pa kreisi", |
DlgImgAlignAbsBottom: "Absolūti apakšā", |
DlgImgAlignAbsMiddle: "Absolūti vertikāli centrēts", |
DlgImgAlignBaseline : "Pamatrindā", |
DlgImgAlignBottom : "Apakšā", |
DlgImgAlignMiddle : "Vertikāli centrēts", |
DlgImgAlignRight : "Pa labi", |
DlgImgAlignTextTop : "Teksta augšā", |
DlgImgAlignTop : "Augšā", |
DlgImgPreview : "Pārskats", |
DlgImgAlertUrl : "Lūdzu norādīt attēla hipersaiti", |
DlgImgLinkTab : "Hipersaite", |
// Flash Dialog |
DlgFlashTitle : "Flash īpašības", |
DlgFlashChkPlay : "Automātiska atskaņošana", |
DlgFlashChkLoop : "Nepārtraukti", |
DlgFlashChkMenu : "Atļaut Flash izvēlni", |
DlgFlashScale : "Mainīt izmēru", |
DlgFlashScaleAll : "Rādīt visu", |
DlgFlashScaleNoBorder : "Bez rāmja", |
DlgFlashScaleFit : "Precīzs izmērs", |
// Link Dialog |
DlgLnkWindowTitle : "Hipersaite", |
DlgLnkInfoTab : "Hipersaites informācija", |
DlgLnkTargetTab : "Mērķis", |
DlgLnkType : "Hipersaites tips", |
DlgLnkTypeURL : "URL", |
DlgLnkTypeAnchor : "Iezīme šajā lapā", |
DlgLnkTypeEMail : "E-pasts", |
DlgLnkProto : "Protokols", |
DlgLnkProtoOther : "<cits>", |
DlgLnkURL : "URL", |
DlgLnkAnchorSel : "Izvēlēties iezīmi", |
DlgLnkAnchorByName : "Pēc iezīmes nosaukuma", |
DlgLnkAnchorById : "Pēc elementa ID", |
DlgLnkNoAnchors : "<Šajā dokumentā nav iezīmju>", |
DlgLnkEMail : "E-pasta adrese", |
DlgLnkEMailSubject : "Ziņas tēma", |
DlgLnkEMailBody : "Ziņas saturs", |
DlgLnkUpload : "Augšupielādēt", |
DlgLnkBtnUpload : "Nosūtīt serverim", |
DlgLnkTarget : "Mērķis", |
DlgLnkTargetFrame : "<ietvars>", |
DlgLnkTargetPopup : "<uznirstošā logā>", |
DlgLnkTargetBlank : "Jaunā logā (_blank)", |
DlgLnkTargetParent : "Esošajā logā (_parent)", |
DlgLnkTargetSelf : "Tajā pašā logā (_self)", |
DlgLnkTargetTop : "Visredzamākajā logā (_top)", |
DlgLnkTargetFrameName : "Mērķa ietvara nosaukums", |
DlgLnkPopWinName : "Uznirstošā loga nosaukums", |
DlgLnkPopWinFeat : "Uznirstošā loga nosaukums īpašības", |
DlgLnkPopResize : "Ar maināmu izmēru", |
DlgLnkPopLocation : "Atrašanās vietas josla", |
DlgLnkPopMenu : "Izvēlnes josla", |
DlgLnkPopScroll : "Ritjoslas", |
DlgLnkPopStatus : "Statusa josla", |
DlgLnkPopToolbar : "Rīku josla", |
DlgLnkPopFullScrn : "Pilnā ekrānā (IE)", |
DlgLnkPopDependent : "Atkarīgs (Netscape)", |
DlgLnkPopWidth : "Platums", |
DlgLnkPopHeight : "Augstums", |
DlgLnkPopLeft : "Kreisā koordināte", |
DlgLnkPopTop : "Augšējā koordināte", |
DlnLnkMsgNoUrl : "Lūdzu norādi hipersaiti", |
DlnLnkMsgNoEMail : "Lūdzu norādi e-pasta adresi", |
DlnLnkMsgNoAnchor : "Lūdzu norādi iezīmi", |
DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING |
// Color Dialog |
DlgColorTitle : "Izvēlies krāsu", |
DlgColorBtnClear : "Dzēst", |
DlgColorHighlight : "Izcelt", |
DlgColorSelected : "Iezīmētais", |
// Smiley Dialog |
DlgSmileyTitle : "Ievietot smaidiņu", |
// Special Character Dialog |
DlgSpecialCharTitle : "Ievietot īpašu simbolu", |
// Table Dialog |
DlgTableTitle : "Tabulas īpašības", |
DlgTableRows : "Rindas", |
DlgTableColumns : "Kolonnas", |
DlgTableBorder : "Rāmja izmērs", |
DlgTableAlign : "Novietojums", |
DlgTableAlignNotSet : "<nav norādīts>", |
DlgTableAlignLeft : "Pa kreisi", |
DlgTableAlignCenter : "Centrēti", |
DlgTableAlignRight : "Pa labi", |
DlgTableWidth : "Platums", |
DlgTableWidthPx : "pikseļos", |
DlgTableWidthPc : "procentuāli", |
DlgTableHeight : "Augstums", |
DlgTableCellSpace : "Rūtiņu atstatums", |
DlgTableCellPad : "Rūtiņu nobīde", |
DlgTableCaption : "Leģenda", |
DlgTableSummary : "Anotācija", |
// Table Cell Dialog |
DlgCellTitle : "Rūtiņas īpašības", |
DlgCellWidth : "Platums", |
DlgCellWidthPx : "pikseļi", |
DlgCellWidthPc : "procentos", |
DlgCellHeight : "Augstums", |
DlgCellWordWrap : "Teksta pārnese", |
DlgCellWordWrapNotSet : "<nav norādīta>", |
DlgCellWordWrapYes : "Jā", |
DlgCellWordWrapNo : "Nē", |
DlgCellHorAlign : "Horizontāla novietojums", |
DlgCellHorAlignNotSet : "<Nav norādīts>", |
DlgCellHorAlignLeft : "Pa kreisi", |
DlgCellHorAlignCenter : "Centrēti", |
DlgCellHorAlignRight: "Pa labi", |
DlgCellVerAlign : "Vertikālais novietojums", |
DlgCellVerAlignNotSet : "<nav norādīts>", |
DlgCellVerAlignTop : "Augša", |
DlgCellVerAlignMiddle : "Vidus", |
DlgCellVerAlignBottom : "Apakša", |
DlgCellVerAlignBaseline : "Pamatrindā", |
DlgCellRowSpan : "Rindu pārnese", |
DlgCellCollSpan : "Kolonnu pārnese", |
DlgCellBackColor : "Fona krāsa", |
DlgCellBorderColor : "Rāmja krāsa", |
DlgCellBtnSelect : "Iezīmē...", |
// Find Dialog |
DlgFindTitle : "Meklētājs", |
DlgFindFindBtn : "Meklēt", |
DlgFindNotFoundMsg : "Norādītā frāze netika atrasta.", |
// Replace Dialog |
DlgReplaceTitle : "Aizvietošana", |
DlgReplaceFindLbl : "Meklēt:", |
DlgReplaceReplaceLbl : "Nomainīt uz:", |
DlgReplaceCaseChk : "Reģistrjūtīgs", |
DlgReplaceReplaceBtn : "Aizvietot", |
DlgReplaceReplAllBtn : "Aizvietot visu", |
DlgReplaceWordChk : "Jāsakrīt pilnībā", |
// Paste Operations / Dialog |
PasteErrorPaste : "Jūsu pārlūkprogrammas drošības iestatījumi nepieļauj editoram automātiski veikt ievietošanas darbību. Lūdzu, izmantojiet (Ctrl+V), lai veiktu šo darbību.", |
PasteErrorCut : "Jūsu pārlūkprogrammas drošības iestatījumi nepieļauj editoram automātiski veikt izgriešanas darbību. Lūdzu, izmantojiet (Ctrl+X, lai veiktu šo darbību.", |
PasteErrorCopy : "Jūsu pārlūkprogrammas drošības iestatījumi nepieļauj editoram automātiski veikt kopēšanas darbību. Lūdzu, izmantojiet (Ctrl+C), lai veiktu šo darbību.", |
PasteAsText : "Ievietot kā vienkāršu tekstu", |
PasteFromWord : "Ievietot no Worda", |
DlgPasteMsg2 : "Lūdzu, ievietojiet tekstu šajā laukumā, izmantojot klaviatūru (<STRONG>Ctrl+V</STRONG>) un apstipriniet ar <STRONG>Darīts!</STRONG>.", |
DlgPasteIgnoreFont : "IgnorÄt iepriek¨norÄdÄ«tos fontus", |
DlgPasteRemoveStyles : "Noņemt norādītos stilus", |
DlgPasteCleanBox : "Apstrādāt laukuma saturu", |
// Color Picker |
ColorAutomatic : "Automātiska", |
ColorMoreColors : "Plašāka palete...", |
// Document Properties |
DocProps : "Dokumenta īpašības", |
// Anchor Dialog |
DlgAnchorTitle : "Iezīmes īpašības", |
DlgAnchorName : "Iezīmes nosaukums", |
DlgAnchorErrorName : "Lūdzu norādiet iezīmes nosaukumu", |
// Speller Pages Dialog |
DlgSpellNotInDic : "Netika atrasts vārdnīcā", |
DlgSpellChangeTo : "Nomainīt uz", |
DlgSpellBtnIgnore : "Ignorēt", |
DlgSpellBtnIgnoreAll : "Ignorēt visu", |
DlgSpellBtnReplace : "Aizvietot", |
DlgSpellBtnReplaceAll : "Aizvietot visu", |
DlgSpellBtnUndo : "Atcelt", |
DlgSpellNoSuggestions : "- Nav ieteikumu -", |
DlgSpellProgress : "Notiek pareizrakstības pārbaude...", |
DlgSpellNoMispell : "Pareizrakstības pārbaude pabeigta: kļūdas netika atrastas", |
DlgSpellNoChanges : "Pareizrakstības pārbaude pabeigta: nekas netika labots", |
DlgSpellOneChange : "Pareizrakstības pārbaude pabeigta: 1 vārds izmainīts", |
DlgSpellManyChanges : "Pareizrakstības pārbaude pabeigta: %1 vārdi tika mainīti", |
IeSpellDownload : "Pareizrakstības pārbaudītājs nav pievienots. Vai vēlaties to lejupielādēt tagad?", |
// Button Dialog |
DlgButtonText : "Teksts (vērtība)", |
DlgButtonType : "Tips", |
DlgButtonTypeBtn : "Button", //MISSING |
DlgButtonTypeSbm : "Submit", //MISSING |
DlgButtonTypeRst : "Reset", //MISSING |
// Checkbox and Radio Button Dialogs |
DlgCheckboxName : "Nosaukums", |
DlgCheckboxValue : "Vērtība", |
DlgCheckboxSelected : "Iezīmēts", |
// Form Dialog |
DlgFormName : "Nosaukums", |
DlgFormAction : "Darbība", |
DlgFormMethod : "Metode", |
// Select Field Dialog |
DlgSelectName : "Nosaukums", |
DlgSelectValue : "Vērtība", |
DlgSelectSize : "Izmērs", |
DlgSelectLines : "rindas", |
DlgSelectChkMulti : "Atļaut vairākus iezīmējumus", |
DlgSelectOpAvail : "Pieejamās iespējas", |
DlgSelectOpText : "Teksts", |
DlgSelectOpValue : "Vērtība", |
DlgSelectBtnAdd : "Pievienot", |
DlgSelectBtnModify : "Veikt izmaiņas", |
DlgSelectBtnUp : "Augšup", |
DlgSelectBtnDown : "Lejup", |
DlgSelectBtnSetValue : "Noteikt kā iezīmēto vērtību", |
DlgSelectBtnDelete : "Dzēst", |
// Textarea Dialog |
DlgTextareaName : "Nosaukums", |
DlgTextareaCols : "Kolonnas", |
DlgTextareaRows : "Rindas", |
// Text Field Dialog |
DlgTextName : "Nosaukums", |
DlgTextValue : "Vērtība", |
DlgTextCharWidth : "Simbolu platums", |
DlgTextMaxChars : "Simbolu maksimālais daudzums", |
DlgTextType : "Tips", |
DlgTextTypeText : "Teksts", |
DlgTextTypePass : "Parole", |
// Hidden Field Dialog |
DlgHiddenName : "Nosaukums", |
DlgHiddenValue : "Vērtība", |
// Bulleted List Dialog |
BulletedListProp : "Aizzīmju saraksta īpašības", |
NumberedListProp : "Numerētā saraksta īpašības", |
DlgLstStart : "Start", //MISSING |
DlgLstType : "Tips", |
DlgLstTypeCircle : "Aplis", |
DlgLstTypeDisc : "Disks", |
DlgLstTypeSquare : "Kvadrāts", |
DlgLstTypeNumbers : "Skaitļi (1, 2, 3)", |
DlgLstTypeLCase : "Maziem burtiem (a, b, c)", |
DlgLstTypeUCase : "Lieliem burtiem (A, B, C)", |
DlgLstTypeSRoman : "Maziem romiešu cipariem (i, ii, iii)", |
DlgLstTypeLRoman : "Lieliem romiešu cipariem (I, II, III)", |
// Document Properties Dialog |
DlgDocGeneralTab : "Vispārīga informācija", |
DlgDocBackTab : "Fons", |
DlgDocColorsTab : "Krāsas un robežu nobīdes", |
DlgDocMetaTab : "META dati", |
DlgDocPageTitle : "Dokumenta virsraksts <Title>", |
DlgDocLangDir : "Valodas lasīšanas virziens", |
DlgDocLangDirLTR : "No kreisās uz labo (LTR)", |
DlgDocLangDirRTL : "No labās uz kreiso (RTL)", |
DlgDocLangCode : "Valodas kods", |
DlgDocCharSet : "Simbolu kodējums", |
DlgDocCharSetCE : "Central European", //MISSING |
DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING |
DlgDocCharSetCR : "Cyrillic", //MISSING |
DlgDocCharSetGR : "Greek", //MISSING |
DlgDocCharSetJP : "Japanese", //MISSING |
DlgDocCharSetKR : "Korean", //MISSING |
DlgDocCharSetTR : "Turkish", //MISSING |
DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING |
DlgDocCharSetWE : "Western European", //MISSING |
DlgDocCharSetOther : "Cits simbolu kodējums", |
DlgDocDocType : "Dokumenta tips", |
DlgDocDocTypeOther : "Cits dokumenta tips", |
DlgDocIncXHTML : "Ietvert XHTML deklarācijas", |
DlgDocBgColor : "Fona krāsa", |
DlgDocBgImage : "Fona attēla hipersaite", |
DlgDocBgNoScroll : "Fona attēls ir fiksēts", |
DlgDocCText : "Teksts", |
DlgDocCLink : "Hipersaite", |
DlgDocCVisited : "Apmeklēta hipersaite", |
DlgDocCActive : "Aktīva hipersaite", |
DlgDocMargins : "Lapas robežas", |
DlgDocMaTop : "Augšā", |
DlgDocMaLeft : "Pa kreisi", |
DlgDocMaRight : "Pa labi", |
DlgDocMaBottom : "Apakšā", |
DlgDocMeIndex : "Dokumentu aprakstoši atslēgvārdi (atdalīti ar komatu)", |
DlgDocMeDescr : "Dokumenta apraksts", |
DlgDocMeAuthor : "Autors", |
DlgDocMeCopy : "Autortiesības", |
DlgDocPreview : "Priekšskats", |
// Templates Dialog |
Templates : "Sagataves", |
DlgTemplatesTitle : "Satura sagataves", |
DlgTemplatesSelMsg : "Lūdzu, norādiet sagatavi, ko atvērt editorā<br>(patreizējie dati tiks zaudēti):", |
DlgTemplatesLoading : "Notiek sagatavju saraksta ielāde. Lūdzu, uzgaidiet...", |
DlgTemplatesNoTpl : "(Nav norādītas sagataves)", |
DlgTemplatesReplace : "Replace actual contents", //MISSING |
// About Dialog |
DlgAboutAboutTab : "Par", |
DlgAboutBrowserInfoTab : "Informācija par pārlūkprogrammu", |
DlgAboutLicenseTab : "Licence", |
DlgAboutVersion : "versija", |
DlgAboutLicense : "Programmatūra lietojama saskaņā ar GNU Lesser General Public License", |
DlgAboutInfo : "Papildus informācija ir pieejama" |
} |
/branches/v1.0-menes/api/fckeditor/editor/lang/pt.js |
---|
New file |
0,0 → 1,501 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: pt.js |
* Portuguese language file. |
* |
* File Authors: |
* Francisco Pereira (fjpereira@netcabo.pt) |
*/ |
var FCKLang = |
{ |
// Language direction : "ltr" (left to right) or "rtl" (right to left). |
Dir : "ltr", |
ToolbarCollapse : "Fechar Barra", |
ToolbarExpand : "Expandir Barra", |
// Toolbar Items and Context Menu |
Save : "Guardar", |
NewPage : "Nova Página", |
Preview : "Pré-visualizar", |
Cut : "Cortar", |
Copy : "Copiar", |
Paste : "Colar", |
PasteText : "Colar como texto não formatado", |
PasteWord : "Colar do Word", |
Print : "Imprimir", |
SelectAll : "Seleccionar Tudo", |
RemoveFormat : "Eliminar Formato", |
InsertLinkLbl : "Hiperligação", |
InsertLink : "Inserir/Editar Hiperligação", |
RemoveLink : "Eliminar Hiperligação", |
Anchor : " Inserir/Editar Âncora", |
InsertImageLbl : "Imagem", |
InsertImage : "Inserir/Editar Imagem", |
InsertFlashLbl : "Flash", |
InsertFlash : "Inserir/Editar Flash", |
InsertTableLbl : "Tabela", |
InsertTable : "Inserir/Editar Tabela", |
InsertLineLbl : "Linha", |
InsertLine : "Inserir Linha Horizontal", |
InsertSpecialCharLbl: "Caracter Especial", |
InsertSpecialChar : "Inserir Caracter Especial", |
InsertSmileyLbl : "Emoticons", |
InsertSmiley : "Inserir Emoticons", |
About : "Acerca do FCKeditor", |
Bold : "Negrito", |
Italic : "Itálico", |
Underline : "Sublinhado", |
StrikeThrough : "Rasurado", |
Subscript : "Superior à Linha", |
Superscript : "Inferior à Linha", |
LeftJustify : "Alinhar à Esquerda", |
CenterJustify : "Alinhar ao Centro", |
RightJustify : "Alinhar à Direita", |
BlockJustify : "Justificado", |
DecreaseIndent : "Diminuir Avanço", |
IncreaseIndent : "Aumentar Avanço", |
Undo : "Anular", |
Redo : "Repetir", |
NumberedListLbl : "Numeração", |
NumberedList : "Inserir/Eliminar Numeração", |
BulletedListLbl : "Marcas", |
BulletedList : "Inserir/Eliminar Marcas", |
ShowTableBorders : "Mostrar Limites da Tabelas", |
ShowDetails : "Mostrar Parágrafo", |
Style : "Estilo", |
FontFormat : "Formato", |
Font : "Tipo de Letra", |
FontSize : "Tamanho", |
TextColor : "Cor do Texto", |
BGColor : "Cor de Fundo", |
Source : "Fonte", |
Find : "Procurar", |
Replace : "Substituir", |
SpellCheck : "Verificação Ortográfica", |
UniversalKeyboard : "Teclado Universal", |
PageBreakLbl : "Quebra de Página", |
PageBreak : "Inserir Quebra de Página", |
Form : "Formulário", |
Checkbox : "Caixa de Verificação", |
RadioButton : "Botão de Opção", |
TextField : "Campo de Texto", |
Textarea : "Área de Texto", |
HiddenField : "Campo Escondido", |
Button : "Botão", |
SelectionField : "Caixa de Combinação", |
ImageButton : "Botão de Imagem", |
FitWindow : "Maximizar o tamanho do editor", |
// Context Menu |
EditLink : "Editar Hiperligação", |
CellCM : "Célula", |
RowCM : "Linha", |
ColumnCM : "Coluna", |
InsertRow : "Inserir Linha", |
DeleteRows : "Eliminar Linhas", |
InsertColumn : "Inserir Coluna", |
DeleteColumns : "Eliminar Coluna", |
InsertCell : "Inserir Célula", |
DeleteCells : "Eliminar Célula", |
MergeCells : "Unir Células", |
SplitCell : "Dividir Célula", |
TableDelete : "Eliminar Tabela", |
CellProperties : "Propriedades da Célula", |
TableProperties : "Propriedades da Tabela", |
ImageProperties : "Propriedades da Imagem", |
FlashProperties : "Propriedades do Flash", |
AnchorProp : "Propriedades da Âncora", |
ButtonProp : "Propriedades do Botão", |
CheckboxProp : "Propriedades da Caixa de Verificação", |
HiddenFieldProp : "Propriedades do Campo Escondido", |
RadioButtonProp : "Propriedades do Botão de Opção", |
ImageButtonProp : "Propriedades do Botão de imagens", |
TextFieldProp : "Propriedades do Campo de Texto", |
SelectionFieldProp : "Propriedades da Caixa de Combinação", |
TextareaProp : "Propriedades da Área de Texto", |
FormProp : "Propriedades do Formulário", |
FontFormats : "Normal;Formatado;Endereço;Título 1;Título 2;Título 3;Título 4;Título 5;Título 6", |
// Alerts and Messages |
ProcessingXHTML : "A Processar XHTML. Por favor, espere...", |
Done : "Concluído", |
PasteWordConfirm : "O texto que deseja parece ter sido copiado do Word. Deseja limpar a formatação antes de colar?", |
NotCompatiblePaste : "Este comando só está disponível para Internet Explorer versão 5.5 ou superior. Deseja colar sem limpar a formatação?", |
UnknownToolbarItem : "Item de barra desconhecido \"%1\"", |
UnknownCommand : "Nome de comando desconhecido \"%1\"", |
NotImplemented : "Comando não implementado", |
UnknownToolbarSet : "Nome de barra \"%1\" não definido", |
NoActiveX : "As definições de segurança do navegador podem limitar algumas potencalidades do editr. Deve activar a opção \"Executar controlos e extensões ActiveX\". Pode ocorrer erros ou verificar que faltam potencialidades.", |
BrowseServerBlocked : "Não foi possível abrir o navegador de recursos. Certifique-se que todos os bloqueadores de popup estão desactivados.", |
DialogBlocked : "Não foi possível abrir a janela de diálogo. Certifique-se que todos os bloqueadores de popup estão desactivados.", |
// Dialogs |
DlgBtnOK : "OK", |
DlgBtnCancel : "Cancelar", |
DlgBtnClose : "Fechar", |
DlgBtnBrowseServer : "Navegar no Servidor", |
DlgAdvancedTag : "Avançado", |
DlgOpOther : "<Outro>", |
DlgInfoTab : "Informação", |
DlgAlertUrl : "Por favor introduza o URL", |
// General Dialogs Labels |
DlgGenNotSet : "<Não definido>", |
DlgGenId : "Id", |
DlgGenLangDir : "Orientação de idioma", |
DlgGenLangDirLtr : "Esquerda à Direita (LTR)", |
DlgGenLangDirRtl : "Direita a Esquerda (RTL)", |
DlgGenLangCode : "Código de Idioma", |
DlgGenAccessKey : "Chave de Acesso", |
DlgGenName : "Nome", |
DlgGenTabIndex : "Índice de Tubulação", |
DlgGenLongDescr : "Descrição Completa do URL", |
DlgGenClass : "Classes de Estilo de Folhas Classes", |
DlgGenTitle : "Título", |
DlgGenContType : "Tipo de Conteúdo", |
DlgGenLinkCharset : "Fonte de caracteres vinculado", |
DlgGenStyle : "Estilo", |
// Image Dialog |
DlgImgTitle : "Propriedades da Imagem", |
DlgImgInfoTab : "Informação da Imagem", |
DlgImgBtnUpload : "Enviar para o Servidor", |
DlgImgURL : "URL", |
DlgImgUpload : "Carregar", |
DlgImgAlt : "Texto Alternativo", |
DlgImgWidth : "Largura", |
DlgImgHeight : "Altura", |
DlgImgLockRatio : "Proporcional", |
DlgBtnResetSize : "Tamanho Original", |
DlgImgBorder : "Limite", |
DlgImgHSpace : "Esp.Horiz", |
DlgImgVSpace : "Esp.Vert", |
DlgImgAlign : "Alinhamento", |
DlgImgAlignLeft : "Esquerda", |
DlgImgAlignAbsBottom: "Abs inferior", |
DlgImgAlignAbsMiddle: "Abs centro", |
DlgImgAlignBaseline : "Linha de base", |
DlgImgAlignBottom : "Fundo", |
DlgImgAlignMiddle : "Centro", |
DlgImgAlignRight : "Direita", |
DlgImgAlignTextTop : "Topo do texto", |
DlgImgAlignTop : "Topo", |
DlgImgPreview : "Pré-visualizar", |
DlgImgAlertUrl : "Por favor introduza o URL da imagem", |
DlgImgLinkTab : "Hiperligação", |
// Flash Dialog |
DlgFlashTitle : "Propriedades do Flash", |
DlgFlashChkPlay : "Reproduzir automaticamente", |
DlgFlashChkLoop : "Loop", |
DlgFlashChkMenu : "Permitir Menu do Flash", |
DlgFlashScale : "Escala", |
DlgFlashScaleAll : "Mostrar tudo", |
DlgFlashScaleNoBorder : "Sem Limites", |
DlgFlashScaleFit : "Tamanho Exacto", |
// Link Dialog |
DlgLnkWindowTitle : "Hiperligação", |
DlgLnkInfoTab : "Informação de Hiperligação", |
DlgLnkTargetTab : "Destino", |
DlgLnkType : "Tipo de Hiperligação", |
DlgLnkTypeURL : "URL", |
DlgLnkTypeAnchor : "Referência a esta página", |
DlgLnkTypeEMail : "E-Mail", |
DlgLnkProto : "Protocolo", |
DlgLnkProtoOther : "<outro>", |
DlgLnkURL : "URL", |
DlgLnkAnchorSel : "Seleccionar una referência", |
DlgLnkAnchorByName : "Por Nome de Referência", |
DlgLnkAnchorById : "Por ID de elemento", |
DlgLnkNoAnchors : "<Não há referências disponíveis no documento>", |
DlgLnkEMail : "Endereço de E-Mail", |
DlgLnkEMailSubject : "Título de Mensagem", |
DlgLnkEMailBody : "Corpo da Mensagem", |
DlgLnkUpload : "Carregar", |
DlgLnkBtnUpload : "Enviar ao Servidor", |
DlgLnkTarget : "Destino", |
DlgLnkTargetFrame : "<Frame>", |
DlgLnkTargetPopup : "<Janela de popup>", |
DlgLnkTargetBlank : "Nova Janela(_blank)", |
DlgLnkTargetParent : "Janela Pai (_parent)", |
DlgLnkTargetSelf : "Mesma janela (_self)", |
DlgLnkTargetTop : "Janela primaria (_top)", |
DlgLnkTargetFrameName : "Nome do Frame Destino", |
DlgLnkPopWinName : "Nome da Janela de Popup", |
DlgLnkPopWinFeat : "Características de Janela de Popup", |
DlgLnkPopResize : "Ajustável", |
DlgLnkPopLocation : "Barra de localização", |
DlgLnkPopMenu : "Barra de Menu", |
DlgLnkPopScroll : "Barras de deslocamento", |
DlgLnkPopStatus : "Barra de Estado", |
DlgLnkPopToolbar : "Barra de Ferramentas", |
DlgLnkPopFullScrn : "Janela Completa (IE)", |
DlgLnkPopDependent : "Dependente (Netscape)", |
DlgLnkPopWidth : "Largura", |
DlgLnkPopHeight : "Altura", |
DlgLnkPopLeft : "Posição Esquerda", |
DlgLnkPopTop : "Posição Direita", |
DlnLnkMsgNoUrl : "Por favor introduza a hiperligação URL", |
DlnLnkMsgNoEMail : "Por favor introduza o endereço de e-mail", |
DlnLnkMsgNoAnchor : "Por favor seleccione uma referência", |
DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", //MISSING |
// Color Dialog |
DlgColorTitle : "Seleccionar Cor", |
DlgColorBtnClear : "Nenhuma", |
DlgColorHighlight : "Destacado", |
DlgColorSelected : "Seleccionado", |
// Smiley Dialog |
DlgSmileyTitle : "Inserir um Emoticon", |
// Special Character Dialog |
DlgSpecialCharTitle : "Seleccione um caracter especial", |
// Table Dialog |
DlgTableTitle : "Propriedades da Tabela", |
DlgTableRows : "Linhas", |
DlgTableColumns : "Colunas", |
DlgTableBorder : "Tamanho do Limite", |
DlgTableAlign : "Alinhamento", |
DlgTableAlignNotSet : "<Não definido>", |
DlgTableAlignLeft : "Esquerda", |
DlgTableAlignCenter : "Centrado", |
DlgTableAlignRight : "Direita", |
DlgTableWidth : "Largura", |
DlgTableWidthPx : "pixeis", |
DlgTableWidthPc : "percentagem", |
DlgTableHeight : "Altura", |
DlgTableCellSpace : "Esp. e/células", |
DlgTableCellPad : "Esp. interior", |
DlgTableCaption : "Título", |
DlgTableSummary : "Sumário", |
// Table Cell Dialog |
DlgCellTitle : "Propriedades da Célula", |
DlgCellWidth : "Largura", |
DlgCellWidthPx : "pixeis", |
DlgCellWidthPc : "percentagem", |
DlgCellHeight : "Altura", |
DlgCellWordWrap : "Moldar Texto", |
DlgCellWordWrapNotSet : "<Não definido>", |
DlgCellWordWrapYes : "Sim", |
DlgCellWordWrapNo : "Não", |
DlgCellHorAlign : "Alinhamento Horizontal", |
DlgCellHorAlignNotSet : "<Não definido>", |
DlgCellHorAlignLeft : "Esquerda", |
DlgCellHorAlignCenter : "Centrado", |
DlgCellHorAlignRight: "Direita", |
DlgCellVerAlign : "Alinhamento Vertical", |
DlgCellVerAlignNotSet : "<Não definido>", |
DlgCellVerAlignTop : "Topo", |
DlgCellVerAlignMiddle : "Médio", |
DlgCellVerAlignBottom : "Fundi", |
DlgCellVerAlignBaseline : "Linha de Base", |
DlgCellRowSpan : "Unir Linhas", |
DlgCellCollSpan : "Unir Colunas", |
DlgCellBackColor : "Cor do Fundo", |
DlgCellBorderColor : "Cor do Limite", |
DlgCellBtnSelect : "Seleccione...", |
// Find Dialog |
DlgFindTitle : "Procurar", |
DlgFindFindBtn : "Procurar", |
DlgFindNotFoundMsg : "O texto especificado não foi encontrado.", |
// Replace Dialog |
DlgReplaceTitle : "Substituir", |
DlgReplaceFindLbl : "Texto a Procurar:", |
DlgReplaceReplaceLbl : "Substituir por:", |
DlgReplaceCaseChk : "Maiúsculas/Minúsculas", |
DlgReplaceReplaceBtn : "Substituir", |
DlgReplaceReplAllBtn : "Substituir Tudo", |
DlgReplaceWordChk : "Coincidir com toda a palavra", |
// Paste Operations / Dialog |
PasteErrorPaste : "A configuração de segurança do navegador não permite a execução automática de operações de colar. Por favor use o teclado (Ctrl+V).", |
PasteErrorCut : "A configuração de segurança do navegador não permite a execução automática de operações de cortar. Por favor use o teclado (Ctrl+X).", |
PasteErrorCopy : "A configuração de segurança do navegador não permite a execução automática de operações de copiar. Por favor use o teclado (Ctrl+C).", |
PasteAsText : "Colar como Texto Simples", |
PasteFromWord : "Colar do Word", |
DlgPasteMsg2 : "Por favor, cole dentro da seguinte caixa usando o teclado (<STRONG>Ctrl+V</STRONG>) e prima <STRONG>OK</STRONG>.", |
DlgPasteIgnoreFont : "Ignorar da definições do Tipo de Letra ", |
DlgPasteRemoveStyles : "Remover as definições de Estilos", |
DlgPasteCleanBox : "Caixa de Limpeza", |
// Color Picker |
ColorAutomatic : "Automático", |
ColorMoreColors : "Mais Cores...", |
// Document Properties |
DocProps : "Propriedades do Documento", |
// Anchor Dialog |
DlgAnchorTitle : "Propriedades da Âncora", |
DlgAnchorName : "Nome da Âncora", |
DlgAnchorErrorName : "Por favor, introduza o nome da âncora", |
// Speller Pages Dialog |
DlgSpellNotInDic : "Não está num directório", |
DlgSpellChangeTo : "Mudar para", |
DlgSpellBtnIgnore : "Ignorar", |
DlgSpellBtnIgnoreAll : "Ignorar Tudo", |
DlgSpellBtnReplace : "Substituir", |
DlgSpellBtnReplaceAll : "Substituir Tudo", |
DlgSpellBtnUndo : "Anular", |
DlgSpellNoSuggestions : "- Sem sugestões -", |
DlgSpellProgress : "Verificação ortográfica em progressoâ¦", |
DlgSpellNoMispell : "Verificação ortográfica completa: não foram encontrados erros", |
DlgSpellNoChanges : "Verificação ortográfica completa: não houve alteração de palavras", |
DlgSpellOneChange : "Verificação ortográfica completa: uma palavra alterada", |
DlgSpellManyChanges : "Verificação ortográfica completa: %1 palavras alteradas", |
IeSpellDownload : " Verificação ortográfica não instalada. Quer descarregar agora?", |
// Button Dialog |
DlgButtonText : "Texto (Valor)", |
DlgButtonType : "Tipo", |
DlgButtonTypeBtn : "Button", //MISSING |
DlgButtonTypeSbm : "Submit", //MISSING |
DlgButtonTypeRst : "Reset", //MISSING |
// Checkbox and Radio Button Dialogs |
DlgCheckboxName : "Nome", |
DlgCheckboxValue : "Valor", |
DlgCheckboxSelected : "Seleccionado", |
// Form Dialog |
DlgFormName : "Nome", |
DlgFormAction : "Acção", |
DlgFormMethod : "Método", |
// Select Field Dialog |
DlgSelectName : "Nome", |
DlgSelectValue : "Valor", |
DlgSelectSize : "Tamanho", |
DlgSelectLines : "linhas", |
DlgSelectChkMulti : "Permitir selecções múltiplas", |
DlgSelectOpAvail : "Opções Possíveis", |
DlgSelectOpText : "Texto", |
DlgSelectOpValue : "Valor", |
DlgSelectBtnAdd : "Adicionar", |
DlgSelectBtnModify : "Modificar", |
DlgSelectBtnUp : "Para cima", |
DlgSelectBtnDown : "Para baixo", |
DlgSelectBtnSetValue : "Definir um valor por defeito", |
DlgSelectBtnDelete : "Apagar", |
// Textarea Dialog |
DlgTextareaName : "Nome", |
DlgTextareaCols : "Colunas", |
DlgTextareaRows : "Linhas", |
// Text Field Dialog |
DlgTextName : "Nome", |
DlgTextValue : "Valor", |
DlgTextCharWidth : "Tamanho do caracter", |
DlgTextMaxChars : "Nr. Máximo de Caracteres", |
DlgTextType : "Tipo", |
DlgTextTypeText : "Texto", |
DlgTextTypePass : "Palavra-chave", |
// Hidden Field Dialog |
DlgHiddenName : "Nome", |
DlgHiddenValue : "Valor", |
// Bulleted List Dialog |
BulletedListProp : "Propriedades da Marca", |
NumberedListProp : "Propriedades da Numeração", |
DlgLstStart : "Start", //MISSING |
DlgLstType : "Tipo", |
DlgLstTypeCircle : "Circulo", |
DlgLstTypeDisc : "Disco", |
DlgLstTypeSquare : "Quadrado", |
DlgLstTypeNumbers : "Números (1, 2, 3)", |
DlgLstTypeLCase : "Letras Minúsculas (a, b, c)", |
DlgLstTypeUCase : "Letras Maiúsculas (A, B, C)", |
DlgLstTypeSRoman : "Numeração Romana em Minúsculas (i, ii, iii)", |
DlgLstTypeLRoman : "Numeração Romana em Maiúsculas (I, II, III)", |
// Document Properties Dialog |
DlgDocGeneralTab : "Geral", |
DlgDocBackTab : "Fundo", |
DlgDocColorsTab : "Cores e Margens", |
DlgDocMetaTab : "Meta Data", |
DlgDocPageTitle : "Título da Página", |
DlgDocLangDir : "Orientação de idioma", |
DlgDocLangDirLTR : "Esquerda à Direita (LTR)", |
DlgDocLangDirRTL : "Direita à Esquerda (RTL)", |
DlgDocLangCode : "Código de Idioma", |
DlgDocCharSet : "Codificação de Caracteres", |
DlgDocCharSetCE : "Central European", //MISSING |
DlgDocCharSetCT : "Chinese Traditional (Big5)", //MISSING |
DlgDocCharSetCR : "Cyrillic", //MISSING |
DlgDocCharSetGR : "Greek", //MISSING |
DlgDocCharSetJP : "Japanese", //MISSING |
DlgDocCharSetKR : "Korean", //MISSING |
DlgDocCharSetTR : "Turkish", //MISSING |
DlgDocCharSetUN : "Unicode (UTF-8)", //MISSING |
DlgDocCharSetWE : "Western European", //MISSING |
DlgDocCharSetOther : "Outra Codificação de Caracteres", |
DlgDocDocType : "Tipo de Cabeçalho do Documento", |
DlgDocDocTypeOther : "Outro Tipo de Cabeçalho do Documento", |
DlgDocIncXHTML : "Incluir Declarações XHTML", |
DlgDocBgColor : "Cor de Fundo", |
DlgDocBgImage : "Caminho para a Imagem de Fundo", |
DlgDocBgNoScroll : "Fundo Fixo", |
DlgDocCText : "Texto", |
DlgDocCLink : "Hiperligação", |
DlgDocCVisited : "Hiperligação Visitada", |
DlgDocCActive : "Hiperligação Activa", |
DlgDocMargins : "Margem das Páginas", |
DlgDocMaTop : "Topo", |
DlgDocMaLeft : "Esquerda", |
DlgDocMaRight : "Direita", |
DlgDocMaBottom : "Fundo", |
DlgDocMeIndex : "Palavras de Indexação do Documento (separadas por virgula)", |
DlgDocMeDescr : "Descrição do Documento", |
DlgDocMeAuthor : "Autor", |
DlgDocMeCopy : "Direitos de Autor", |
DlgDocPreview : "Pré-visualizar", |
// Templates Dialog |
Templates : "Modelos", |
DlgTemplatesTitle : "Modelo de Conteúdo", |
DlgTemplatesSelMsg : "Por favor, seleccione o modelo a abrir no editor<br>(o conteúdo actual será perdido):", |
DlgTemplatesLoading : "A carregar a lista de modelos. Aguarde por favor...", |
DlgTemplatesNoTpl : "(Sem modelos definidos)", |
DlgTemplatesReplace : "Replace actual contents", //MISSING |
// About Dialog |
DlgAboutAboutTab : "Acerca", |
DlgAboutBrowserInfoTab : "Informação do Nevegador", |
DlgAboutLicenseTab : "Licença", |
DlgAboutVersion : "versão", |
DlgAboutLicense : "Licenciado segundo os términos de GNU Lesser General Public License", |
DlgAboutInfo : "Para mais informações por favor dirija-se a" |
} |
/branches/v1.0-menes/api/fckeditor/editor/lang/en-ca.js |
---|
New file |
0,0 → 1,502 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: en-ca.js |
* English (Canadian) language file. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
* Kevin Bennett |
*/ |
var FCKLang = |
{ |
// Language direction : "ltr" (left to right) or "rtl" (right to left). |
Dir : "ltr", |
ToolbarCollapse : "Collapse Toolbar", |
ToolbarExpand : "Expand Toolbar", |
// Toolbar Items and Context Menu |
Save : "Save", |
NewPage : "New Page", |
Preview : "Preview", |
Cut : "Cut", |
Copy : "Copy", |
Paste : "Paste", |
PasteText : "Paste as plain text", |
PasteWord : "Paste from Word", |
Print : "Print", |
SelectAll : "Select All", |
RemoveFormat : "Remove Format", |
InsertLinkLbl : "Link", |
InsertLink : "Insert/Edit Link", |
RemoveLink : "Remove Link", |
Anchor : "Insert/Edit Anchor", |
InsertImageLbl : "Image", |
InsertImage : "Insert/Edit Image", |
InsertFlashLbl : "Flash", |
InsertFlash : "Insert/Edit Flash", |
InsertTableLbl : "Table", |
InsertTable : "Insert/Edit Table", |
InsertLineLbl : "Line", |
InsertLine : "Insert Horizontal Line", |
InsertSpecialCharLbl: "Special Character", |
InsertSpecialChar : "Insert Special Character", |
InsertSmileyLbl : "Smiley", |
InsertSmiley : "Insert Smiley", |
About : "About FCKeditor", |
Bold : "Bold", |
Italic : "Italic", |
Underline : "Underline", |
StrikeThrough : "Strike Through", |
Subscript : "Subscript", |
Superscript : "Superscript", |
LeftJustify : "Left Justify", |
CenterJustify : "Centre Justify", |
RightJustify : "Right Justify", |
BlockJustify : "Block Justify", |
DecreaseIndent : "Decrease Indent", |
IncreaseIndent : "Increase Indent", |
Undo : "Undo", |
Redo : "Redo", |
NumberedListLbl : "Numbered List", |
NumberedList : "Insert/Remove Numbered List", |
BulletedListLbl : "Bulleted List", |
BulletedList : "Insert/Remove Bulleted List", |
ShowTableBorders : "Show Table Borders", |
ShowDetails : "Show Details", |
Style : "Style", |
FontFormat : "Format", |
Font : "Font", |
FontSize : "Size", |
TextColor : "Text Colour", |
BGColor : "Background Colour", |
Source : "Source", |
Find : "Find", |
Replace : "Replace", |
SpellCheck : "Check Spelling", |
UniversalKeyboard : "Universal Keyboard", |
PageBreakLbl : "Page Break", |
PageBreak : "Insert Page Break", |
Form : "Form", |
Checkbox : "Checkbox", |
RadioButton : "Radio Button", |
TextField : "Text Field", |
Textarea : "Textarea", |
HiddenField : "Hidden Field", |
Button : "Button", |
SelectionField : "Selection Field", |
ImageButton : "Image Button", |
FitWindow : "Maximize the editor size", |
// Context Menu |
EditLink : "Edit Link", |
CellCM : "Cell", |
RowCM : "Row", |
ColumnCM : "Column", |
InsertRow : "Insert Row", |
DeleteRows : "Delete Rows", |
InsertColumn : "Insert Column", |
DeleteColumns : "Delete Columns", |
InsertCell : "Insert Cell", |
DeleteCells : "Delete Cells", |
MergeCells : "Merge Cells", |
SplitCell : "Split Cell", |
TableDelete : "Delete Table", |
CellProperties : "Cell Properties", |
TableProperties : "Table Properties", |
ImageProperties : "Image Properties", |
FlashProperties : "Flash Properties", |
AnchorProp : "Anchor Properties", |
ButtonProp : "Button Properties", |
CheckboxProp : "Checkbox Properties", |
HiddenFieldProp : "Hidden Field Properties", |
RadioButtonProp : "Radio Button Properties", |
ImageButtonProp : "Image Button Properties", |
TextFieldProp : "Text Field Properties", |
SelectionFieldProp : "Selection Field Properties", |
TextareaProp : "Textarea Properties", |
FormProp : "Form Properties", |
FontFormats : "Normal;Formatted;Address;Heading 1;Heading 2;Heading 3;Heading 4;Heading 5;Heading 6;Normal (DIV)", |
// Alerts and Messages |
ProcessingXHTML : "Processing XHTML. Please wait...", |
Done : "Done", |
PasteWordConfirm : "The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?", |
NotCompatiblePaste : "This command is available for Internet Explorer version 5.5 or more. Do you want to paste without cleaning?", |
UnknownToolbarItem : "Unknown toolbar item \"%1\"", |
UnknownCommand : "Unknown command name \"%1\"", |
NotImplemented : "Command not implemented", |
UnknownToolbarSet : "Toolbar set \"%1\" doesn't exist", |
NoActiveX : "Your browser's security settings could limit some features of the editor. You must enable the option \"Run ActiveX controls and plug-ins\". You may experience errors and notice missing features.", |
BrowseServerBlocked : "The resources browser could not be opened. Make sure that all popup blockers are disabled.", |
DialogBlocked : "It was not possible to open the dialog window. Make sure all popup blockers are disabled.", |
// Dialogs |
DlgBtnOK : "OK", |
DlgBtnCancel : "Cancel", |
DlgBtnClose : "Close", |
DlgBtnBrowseServer : "Browse Server", |
DlgAdvancedTag : "Advanced", |
DlgOpOther : "<Other>", |
DlgInfoTab : "Info", |
DlgAlertUrl : "Please insert the URL", |
// General Dialogs Labels |
DlgGenNotSet : "<not set>", |
DlgGenId : "Id", |
DlgGenLangDir : "Language Direction", |
DlgGenLangDirLtr : "Left to Right (LTR)", |
DlgGenLangDirRtl : "Right to Left (RTL)", |
DlgGenLangCode : "Language Code", |
DlgGenAccessKey : "Access Key", |
DlgGenName : "Name", |
DlgGenTabIndex : "Tab Index", |
DlgGenLongDescr : "Long Description URL", |
DlgGenClass : "Stylesheet Classes", |
DlgGenTitle : "Advisory Title", |
DlgGenContType : "Advisory Content Type", |
DlgGenLinkCharset : "Linked Resource Charset", |
DlgGenStyle : "Style", |
// Image Dialog |
DlgImgTitle : "Image Properties", |
DlgImgInfoTab : "Image Info", |
DlgImgBtnUpload : "Send it to the Server", |
DlgImgURL : "URL", |
DlgImgUpload : "Upload", |
DlgImgAlt : "Alternative Text", |
DlgImgWidth : "Width", |
DlgImgHeight : "Height", |
DlgImgLockRatio : "Lock Ratio", |
DlgBtnResetSize : "Reset Size", |
DlgImgBorder : "Border", |
DlgImgHSpace : "HSpace", |
DlgImgVSpace : "VSpace", |
DlgImgAlign : "Align", |
DlgImgAlignLeft : "Left", |
DlgImgAlignAbsBottom: "Abs Bottom", |
DlgImgAlignAbsMiddle: "Abs Middle", |
DlgImgAlignBaseline : "Baseline", |
DlgImgAlignBottom : "Bottom", |
DlgImgAlignMiddle : "Middle", |
DlgImgAlignRight : "Right", |
DlgImgAlignTextTop : "Text Top", |
DlgImgAlignTop : "Top", |
DlgImgPreview : "Preview", |
DlgImgAlertUrl : "Please type the image URL", |
DlgImgLinkTab : "Link", |
// Flash Dialog |
DlgFlashTitle : "Flash Properties", |
DlgFlashChkPlay : "Auto Play", |
DlgFlashChkLoop : "Loop", |
DlgFlashChkMenu : "Enable Flash Menu", |
DlgFlashScale : "Scale", |
DlgFlashScaleAll : "Show all", |
DlgFlashScaleNoBorder : "No Border", |
DlgFlashScaleFit : "Exact Fit", |
// Link Dialog |
DlgLnkWindowTitle : "Link", |
DlgLnkInfoTab : "Link Info", |
DlgLnkTargetTab : "Target", |
DlgLnkType : "Link Type", |
DlgLnkTypeURL : "URL", |
DlgLnkTypeAnchor : "Link to anchor in the text", |
DlgLnkTypeEMail : "E-Mail", |
DlgLnkProto : "Protocol", |
DlgLnkProtoOther : "<other>", |
DlgLnkURL : "URL", |
DlgLnkAnchorSel : "Select an Anchor", |
DlgLnkAnchorByName : "By Anchor Name", |
DlgLnkAnchorById : "By Element Id", |
DlgLnkNoAnchors : "<No anchors available in the document>", |
DlgLnkEMail : "E-Mail Address", |
DlgLnkEMailSubject : "Message Subject", |
DlgLnkEMailBody : "Message Body", |
DlgLnkUpload : "Upload", |
DlgLnkBtnUpload : "Send it to the Server", |
DlgLnkTarget : "Target", |
DlgLnkTargetFrame : "<frame>", |
DlgLnkTargetPopup : "<popup window>", |
DlgLnkTargetBlank : "New Window (_blank)", |
DlgLnkTargetParent : "Parent Window (_parent)", |
DlgLnkTargetSelf : "Same Window (_self)", |
DlgLnkTargetTop : "Topmost Window (_top)", |
DlgLnkTargetFrameName : "Target Frame Name", |
DlgLnkPopWinName : "Popup Window Name", |
DlgLnkPopWinFeat : "Popup Window Features", |
DlgLnkPopResize : "Resizable", |
DlgLnkPopLocation : "Location Bar", |
DlgLnkPopMenu : "Menu Bar", |
DlgLnkPopScroll : "Scroll Bars", |
DlgLnkPopStatus : "Status Bar", |
DlgLnkPopToolbar : "Toolbar", |
DlgLnkPopFullScrn : "Full Screen (IE)", |
DlgLnkPopDependent : "Dependent (Netscape)", |
DlgLnkPopWidth : "Width", |
DlgLnkPopHeight : "Height", |
DlgLnkPopLeft : "Left Position", |
DlgLnkPopTop : "Top Position", |
DlnLnkMsgNoUrl : "Please type the link URL", |
DlnLnkMsgNoEMail : "Please type the e-mail address", |
DlnLnkMsgNoAnchor : "Please select an anchor", |
DlnLnkMsgInvPopName : "The popup name must begin with an alphabetic character and must not contain spaces", |
// Color Dialog |
DlgColorTitle : "Select Colour", |
DlgColorBtnClear : "Clear", |
DlgColorHighlight : "Highlight", |
DlgColorSelected : "Selected", |
// Smiley Dialog |
DlgSmileyTitle : "Insert a Smiley", |
// Special Character Dialog |
DlgSpecialCharTitle : "Select Special Character", |
// Table Dialog |
DlgTableTitle : "Table Properties", |
DlgTableRows : "Rows", |
DlgTableColumns : "Columns", |
DlgTableBorder : "Border size", |
DlgTableAlign : "Alignment", |
DlgTableAlignNotSet : "<Not set>", |
DlgTableAlignLeft : "Left", |
DlgTableAlignCenter : "Centre", |
DlgTableAlignRight : "Right", |
DlgTableWidth : "Width", |
DlgTableWidthPx : "pixels", |
DlgTableWidthPc : "percent", |
DlgTableHeight : "Height", |
DlgTableCellSpace : "Cell spacing", |
DlgTableCellPad : "Cell padding", |
DlgTableCaption : "Caption", |
DlgTableSummary : "Summary", |
// Table Cell Dialog |
DlgCellTitle : "Cell Properties", |
DlgCellWidth : "Width", |
DlgCellWidthPx : "pixels", |
DlgCellWidthPc : "percent", |
DlgCellHeight : "Height", |
DlgCellWordWrap : "Word Wrap", |
DlgCellWordWrapNotSet : "<Not set>", |
DlgCellWordWrapYes : "Yes", |
DlgCellWordWrapNo : "No", |
DlgCellHorAlign : "Horizontal Alignment", |
DlgCellHorAlignNotSet : "<Not set>", |
DlgCellHorAlignLeft : "Left", |
DlgCellHorAlignCenter : "Centre", |
DlgCellHorAlignRight: "Right", |
DlgCellVerAlign : "Vertical Alignment", |
DlgCellVerAlignNotSet : "<Not set>", |
DlgCellVerAlignTop : "Top", |
DlgCellVerAlignMiddle : "Middle", |
DlgCellVerAlignBottom : "Bottom", |
DlgCellVerAlignBaseline : "Baseline", |
DlgCellRowSpan : "Rows Span", |
DlgCellCollSpan : "Columns Span", |
DlgCellBackColor : "Background Colour", |
DlgCellBorderColor : "Border Colour", |
DlgCellBtnSelect : "Select...", |
// Find Dialog |
DlgFindTitle : "Find", |
DlgFindFindBtn : "Find", |
DlgFindNotFoundMsg : "The specified text was not found.", |
// Replace Dialog |
DlgReplaceTitle : "Replace", |
DlgReplaceFindLbl : "Find what:", |
DlgReplaceReplaceLbl : "Replace with:", |
DlgReplaceCaseChk : "Match case", |
DlgReplaceReplaceBtn : "Replace", |
DlgReplaceReplAllBtn : "Replace All", |
DlgReplaceWordChk : "Match whole word", |
// Paste Operations / Dialog |
PasteErrorPaste : "Your browser security settings don't permit the editor to automatically execute pasting operations. Please use the keyboard for that (Ctrl+V).", |
PasteErrorCut : "Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl+X).", |
PasteErrorCopy : "Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl+C).", |
PasteAsText : "Paste as Plain Text", |
PasteFromWord : "Paste from Word", |
DlgPasteMsg2 : "Please paste inside the following box using the keyboard (<STRONG>Ctrl+V</STRONG>) and hit <STRONG>OK</STRONG>.", |
DlgPasteIgnoreFont : "Ignore Font Face definitions", |
DlgPasteRemoveStyles : "Remove Styles definitions", |
DlgPasteCleanBox : "Clean Up Box", |
// Color Picker |
ColorAutomatic : "Automatic", |
ColorMoreColors : "More Colours...", |
// Document Properties |
DocProps : "Document Properties", |
// Anchor Dialog |
DlgAnchorTitle : "Anchor Properties", |
DlgAnchorName : "Anchor Name", |
DlgAnchorErrorName : "Please type the anchor name", |
// Speller Pages Dialog |
DlgSpellNotInDic : "Not in dictionary", |
DlgSpellChangeTo : "Change to", |
DlgSpellBtnIgnore : "Ignore", |
DlgSpellBtnIgnoreAll : "Ignore All", |
DlgSpellBtnReplace : "Replace", |
DlgSpellBtnReplaceAll : "Replace All", |
DlgSpellBtnUndo : "Undo", |
DlgSpellNoSuggestions : "- No suggestions -", |
DlgSpellProgress : "Spell check in progress...", |
DlgSpellNoMispell : "Spell check complete: No misspellings found", |
DlgSpellNoChanges : "Spell check complete: No words changed", |
DlgSpellOneChange : "Spell check complete: One word changed", |
DlgSpellManyChanges : "Spell check complete: %1 words changed", |
IeSpellDownload : "Spell checker not installed. Do you want to download it now?", |
// Button Dialog |
DlgButtonText : "Text (Value)", |
DlgButtonType : "Type", |
DlgButtonTypeBtn : "Button", |
DlgButtonTypeSbm : "Submit", |
DlgButtonTypeRst : "Reset", |
// Checkbox and Radio Button Dialogs |
DlgCheckboxName : "Name", |
DlgCheckboxValue : "Value", |
DlgCheckboxSelected : "Selected", |
// Form Dialog |
DlgFormName : "Name", |
DlgFormAction : "Action", |
DlgFormMethod : "Method", |
// Select Field Dialog |
DlgSelectName : "Name", |
DlgSelectValue : "Value", |
DlgSelectSize : "Size", |
DlgSelectLines : "lines", |
DlgSelectChkMulti : "Allow multiple selections", |
DlgSelectOpAvail : "Available Options", |
DlgSelectOpText : "Text", |
DlgSelectOpValue : "Value", |
DlgSelectBtnAdd : "Add", |
DlgSelectBtnModify : "Modify", |
DlgSelectBtnUp : "Up", |
DlgSelectBtnDown : "Down", |
DlgSelectBtnSetValue : "Set as selected value", |
DlgSelectBtnDelete : "Delete", |
// Textarea Dialog |
DlgTextareaName : "Name", |
DlgTextareaCols : "Columns", |
DlgTextareaRows : "Rows", |
// Text Field Dialog |
DlgTextName : "Name", |
DlgTextValue : "Value", |
DlgTextCharWidth : "Character Width", |
DlgTextMaxChars : "Maximum Characters", |
DlgTextType : "Type", |
DlgTextTypeText : "Text", |
DlgTextTypePass : "Password", |
// Hidden Field Dialog |
DlgHiddenName : "Name", |
DlgHiddenValue : "Value", |
// Bulleted List Dialog |
BulletedListProp : "Bulleted List Properties", |
NumberedListProp : "Numbered List Properties", |
DlgLstStart : "Start", |
DlgLstType : "Type", |
DlgLstTypeCircle : "Circle", |
DlgLstTypeDisc : "Disc", |
DlgLstTypeSquare : "Square", |
DlgLstTypeNumbers : "Numbers (1, 2, 3)", |
DlgLstTypeLCase : "Lowercase Letters (a, b, c)", |
DlgLstTypeUCase : "Uppercase Letters (A, B, C)", |
DlgLstTypeSRoman : "Small Roman Numerals (i, ii, iii)", |
DlgLstTypeLRoman : "Large Roman Numerals (I, II, III)", |
// Document Properties Dialog |
DlgDocGeneralTab : "General", |
DlgDocBackTab : "Background", |
DlgDocColorsTab : "Colours and Margins", |
DlgDocMetaTab : "Meta Data", |
DlgDocPageTitle : "Page Title", |
DlgDocLangDir : "Language Direction", |
DlgDocLangDirLTR : "Left to Right (LTR)", |
DlgDocLangDirRTL : "Right to Left (RTL)", |
DlgDocLangCode : "Language Code", |
DlgDocCharSet : "Character Set Encoding", |
DlgDocCharSetCE : "Central European", |
DlgDocCharSetCT : "Chinese Traditional (Big5)", |
DlgDocCharSetCR : "Cyrillic", |
DlgDocCharSetGR : "Greek", |
DlgDocCharSetJP : "Japanese", |
DlgDocCharSetKR : "Korean", |
DlgDocCharSetTR : "Turkish", |
DlgDocCharSetUN : "Unicode (UTF-8)", |
DlgDocCharSetWE : "Western European", |
DlgDocCharSetOther : "Other Character Set Encoding", |
DlgDocDocType : "Document Type Heading", |
DlgDocDocTypeOther : "Other Document Type Heading", |
DlgDocIncXHTML : "Include XHTML Declarations", |
DlgDocBgColor : "Background Colour", |
DlgDocBgImage : "Background Image URL", |
DlgDocBgNoScroll : "Nonscrolling Background", |
DlgDocCText : "Text", |
DlgDocCLink : "Link", |
DlgDocCVisited : "Visited Link", |
DlgDocCActive : "Active Link", |
DlgDocMargins : "Page Margins", |
DlgDocMaTop : "Top", |
DlgDocMaLeft : "Left", |
DlgDocMaRight : "Right", |
DlgDocMaBottom : "Bottom", |
DlgDocMeIndex : "Document Indexing Keywords (comma separated)", |
DlgDocMeDescr : "Document Description", |
DlgDocMeAuthor : "Author", |
DlgDocMeCopy : "Copyright", |
DlgDocPreview : "Preview", |
// Templates Dialog |
Templates : "Templates", |
DlgTemplatesTitle : "Content Templates", |
DlgTemplatesSelMsg : "Please select the template to open in the editor<br>(the actual contents will be lost):", |
DlgTemplatesLoading : "Loading templates list. Please wait...", |
DlgTemplatesNoTpl : "(No templates defined)", |
DlgTemplatesReplace : "Replace actual contents", |
// About Dialog |
DlgAboutAboutTab : "About", |
DlgAboutBrowserInfoTab : "Browser Info", |
DlgAboutLicenseTab : "License", |
DlgAboutVersion : "version", |
DlgAboutLicense : "Licensed under the terms of the GNU Lesser General Public License", |
DlgAboutInfo : "For further information go to" |
} |
/branches/v1.0-menes/api/fckeditor/editor/lang/ca.js |
---|
New file |
0,0 → 1,502 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: ca.js |
* Catalan language file. |
* |
* File Authors: |
* Jordi Cerdan (nan@myp.ad) |
* Marc Folch (mcus21@gmail.com) |
*/ |
var FCKLang = |
{ |
// Language direction : "ltr" (left to right) or "rtl" (right to left). |
Dir : "ltr", |
ToolbarCollapse : "Col·lapsa la barra", |
ToolbarExpand : "Amplia la barra", |
// Toolbar Items and Context Menu |
Save : "Desa", |
NewPage : "Nova Pàgina", |
Preview : "Vista Prèvia", |
Cut : "Retalla", |
Copy : "Copia", |
Paste : "Enganxa", |
PasteText : "Enganxa com a text no formatat", |
PasteWord : "Enganxa des del Word", |
Print : "Imprimeix", |
SelectAll : "Selecciona-ho tot", |
RemoveFormat : "Elimina Format", |
InsertLinkLbl : "Enllaç", |
InsertLink : "Insereix/Edita enllaç", |
RemoveLink : "Elimina enllaç", |
Anchor : "Insereix/Edita àncora", |
InsertImageLbl : "Imatge", |
InsertImage : "Insereix/Edita imatge", |
InsertFlashLbl : "Flash", |
InsertFlash : "Insereix/Edita Flash", |
InsertTableLbl : "Taula", |
InsertTable : "Insereix/Edita taula", |
InsertLineLbl : "Línia", |
InsertLine : "Insereix línia horitzontal", |
InsertSpecialCharLbl: "Caràcter Especial", |
InsertSpecialChar : "Insereix caràcter especial", |
InsertSmileyLbl : "Icona", |
InsertSmiley : "Insereix icona", |
About : "Quant a FCKeditor", |
Bold : "Negreta", |
Italic : "Cursiva", |
Underline : "Subratllat", |
StrikeThrough : "Barrat", |
Subscript : "Subíndex", |
Superscript : "Superíndex", |
LeftJustify : "Aliniament esquerra", |
CenterJustify : "Aliniament centrat", |
RightJustify : "Aliniament dreta", |
BlockJustify : "Justifica", |
DecreaseIndent : "Sagna el text", |
IncreaseIndent : "Treu el sagnat del text", |
Undo : "Desfés", |
Redo : "Refés", |
NumberedListLbl : "Llista numerada", |
NumberedList : "Aplica o elimina la llista numerada", |
BulletedListLbl : "Llista de pics", |
BulletedList : "Aplica o elimina la llista de pics", |
ShowTableBorders : "Mostra les vores de les taules", |
ShowDetails : "Mostra detalls", |
Style : "Estil", |
FontFormat : "Format", |
Font : "Tipus de lletra", |
FontSize : "Mida", |
TextColor : "Color de Text", |
BGColor : "Color de Fons", |
Source : "Codi font", |
Find : "Cerca", |
Replace : "Reemplaça", |
SpellCheck : "Revisa l'ortografia", |
UniversalKeyboard : "Teclat universal", |
PageBreakLbl : "Salt de pàgina", |
PageBreak : "Insereix salt de pàgina", |
Form : "Formulari", |
Checkbox : "Casella de verificació", |
RadioButton : "Botó d'opció", |
TextField : "Camp de text", |
Textarea : "Àrea de text", |
HiddenField : "Camp ocult", |
Button : "Botó", |
SelectionField : "Camp de selecció", |
ImageButton : "Botó d'imatge", |
FitWindow : "Maximiza la mida de l'editor", |
// Context Menu |
EditLink : "Edita l'enllaç", |
CellCM : "Cel·la", |
RowCM : "Fila", |
ColumnCM : "Columna", |
InsertRow : "Insereix una fila", |
DeleteRows : "Suprimeix una fila", |
InsertColumn : "Afegeix una columna", |
DeleteColumns : "Suprimeix una columna", |
InsertCell : "Insereix una cel·la", |
DeleteCells : "Suprimeix les cel·les", |
MergeCells : "Fusiona les cel·les", |
SplitCell : "Separa les cel·les", |
TableDelete : "Suprimeix la taula", |
CellProperties : "Propietats de la cel·la", |
TableProperties : "Propietats de la taula", |
ImageProperties : "Propietats de la imatge", |
FlashProperties : "Propietats del Flash", |
AnchorProp : "Propietats de l'àncora", |
ButtonProp : "Propietats del botó", |
CheckboxProp : "Propietats de la casella de verificació", |
HiddenFieldProp : "Propietats del camp ocult", |
RadioButtonProp : "Propietats del botó d'opció", |
ImageButtonProp : "Propietats del botó d'imatge", |
TextFieldProp : "Propietats del camp de text", |
SelectionFieldProp : "Propietats del camp de selecció", |
TextareaProp : "Propietats de l'àrea de text", |
FormProp : "Propietats del formulari", |
FontFormats : "Normal;Formatejat;Adreça;Encapçalament 1;Encapçalament 2;Encapçalament 3;Encapçalament 4;Encapçalament 5;Encapçalament 6", |
// Alerts and Messages |
ProcessingXHTML : "Processant XHTML. Si us plau esperi...", |
Done : "Fet", |
PasteWordConfirm : "El text que voleu enganxar sembla provenir de Word. Voleu netejar aquest text abans que sigui enganxat?", |
NotCompatiblePaste : "Aquesta funció és disponible per a Internet Explorer versió 5.5 o superior. Voleu enganxar sense netejar?", |
UnknownToolbarItem : "Element de la barra d'eines desconegut \"%1\"", |
UnknownCommand : "Nom de comanda desconegut \"%1\"", |
NotImplemented : "Mètode no implementat", |
UnknownToolbarSet : "Conjunt de barra d'eines \"%1\" inexistent", |
NoActiveX : "Les preferències del navegador poden limitar algunes funcions d'aquest editor. Cal habilitar l'opció \"Executa controls ActiveX i plug-ins\". Poden sorgir errors i poden faltar algunes funcions.", |
BrowseServerBlocked : "El visualitzador de recursos no s'ha pogut obrir. Assegura't de que els bloquejos de finestres emergents estan desactivats.", |
DialogBlocked : "No ha estat possible obrir una finestra de diàleg. Assegura't de que els bloquejos de finestres emergents estan desactivats.", |
// Dialogs |
DlgBtnOK : "D'acord", |
DlgBtnCancel : "Cancel·la", |
DlgBtnClose : "Tanca", |
DlgBtnBrowseServer : "Veure servidor", |
DlgAdvancedTag : "Avançat", |
DlgOpOther : "Altres", |
DlgInfoTab : "Info", |
DlgAlertUrl : "Si us plau, afegiu la URL", |
// General Dialogs Labels |
DlgGenNotSet : "<no definit>", |
DlgGenId : "Id", |
DlgGenLangDir : "Direcció de l'idioma", |
DlgGenLangDirLtr : "D'esquerra a dreta (LTR)", |
DlgGenLangDirRtl : "De dreta a esquerra (RTL)", |
DlgGenLangCode : "Codi d'idioma", |
DlgGenAccessKey : "Clau d'accés", |
DlgGenName : "Nom", |
DlgGenTabIndex : "Index de Tab", |
DlgGenLongDescr : "Descripció llarga de la URL", |
DlgGenClass : "Classes del full d'estil", |
DlgGenTitle : "Títol consultiu", |
DlgGenContType : "Tipus de contingut consultiu", |
DlgGenLinkCharset : "Conjunt de caràcters font enllaçat", |
DlgGenStyle : "Estil", |
// Image Dialog |
DlgImgTitle : "Propietats de la imatge", |
DlgImgInfoTab : "Informació de la imatge", |
DlgImgBtnUpload : "Envia-la al servidor", |
DlgImgURL : "URL", |
DlgImgUpload : "Puja", |
DlgImgAlt : "Text alternatiu", |
DlgImgWidth : "Amplada", |
DlgImgHeight : "Alçada", |
DlgImgLockRatio : "Bloqueja les proporcions", |
DlgBtnResetSize : "Restaura la mida", |
DlgImgBorder : "Vora", |
DlgImgHSpace : "Espaiat horit.", |
DlgImgVSpace : "Espaiat vert.", |
DlgImgAlign : "Alineació", |
DlgImgAlignLeft : "Ajusta a l'esquerra", |
DlgImgAlignAbsBottom: "Abs Bottom", |
DlgImgAlignAbsMiddle: "Abs Middle", |
DlgImgAlignBaseline : "Baseline", |
DlgImgAlignBottom : "Bottom", |
DlgImgAlignMiddle : "Middle", |
DlgImgAlignRight : "Ajusta a la dreta", |
DlgImgAlignTextTop : "Text Top", |
DlgImgAlignTop : "Top", |
DlgImgPreview : "Vista prèvia", |
DlgImgAlertUrl : "Si us plau, escriviu la URL de la imatge", |
DlgImgLinkTab : "Enllaç", |
// Flash Dialog |
DlgFlashTitle : "Propietats del Flash", |
DlgFlashChkPlay : "Reprodució automàtica", |
DlgFlashChkLoop : "Bucle", |
DlgFlashChkMenu : "Habilita menú Flash", |
DlgFlashScale : "Escala", |
DlgFlashScaleAll : "Mostra-ho tot", |
DlgFlashScaleNoBorder : "Sense vores", |
DlgFlashScaleFit : "Mida exacta", |
// Link Dialog |
DlgLnkWindowTitle : "Enllaç", |
DlgLnkInfoTab : "Informació de l'enllaç", |
DlgLnkTargetTab : "Destí", |
DlgLnkType : "Tipus d'enllaç", |
DlgLnkTypeURL : "URL", |
DlgLnkTypeAnchor : "Àncora en aquesta pàgina", |
DlgLnkTypeEMail : "E-Mail", |
DlgLnkProto : "Protocol", |
DlgLnkProtoOther : "<altra>", |
DlgLnkURL : "URL", |
DlgLnkAnchorSel : "Selecciona una àncora", |
DlgLnkAnchorByName : "Per nom d'àncora", |
DlgLnkAnchorById : "Per Id d'element", |
DlgLnkNoAnchors : "<No hi ha àncores disponibles en aquest document>", |
DlgLnkEMail : "Adreça d'E-Mail", |
DlgLnkEMailSubject : "Assumpte del missatge", |
DlgLnkEMailBody : "Cos del missatge", |
DlgLnkUpload : "Puja", |
DlgLnkBtnUpload : "Envia al servidor", |
DlgLnkTarget : "Destí", |
DlgLnkTargetFrame : "<marc>", |
DlgLnkTargetPopup : "<finestra emergent>", |
DlgLnkTargetBlank : "Nova finestra (_blank)", |
DlgLnkTargetParent : "Finestra pare (_parent)", |
DlgLnkTargetSelf : "Mateixa finestra (_self)", |
DlgLnkTargetTop : "Finestra Major (_top)", |
DlgLnkTargetFrameName : "Nom del marc de destí", |
DlgLnkPopWinName : "Nom finestra popup", |
DlgLnkPopWinFeat : "Característiques finestra popup", |
DlgLnkPopResize : "Redimensionable", |
DlgLnkPopLocation : "Barra d'adreça", |
DlgLnkPopMenu : "Barra de menú", |
DlgLnkPopScroll : "Barres d'scroll", |
DlgLnkPopStatus : "Barra d'estat", |
DlgLnkPopToolbar : "Barra d'eines", |
DlgLnkPopFullScrn : "Pantalla completa (IE)", |
DlgLnkPopDependent : "Depenent (Netscape)", |
DlgLnkPopWidth : "Amplada", |
DlgLnkPopHeight : "Alçada", |
DlgLnkPopLeft : "Posició esquerra", |
DlgLnkPopTop : "Posició dalt", |
DlnLnkMsgNoUrl : "Si us plau, escrigui l'enllaç URL", |
DlnLnkMsgNoEMail : "Si us plau, escrigui l'adreça e-mail", |
DlnLnkMsgNoAnchor : "Si us plau, escrigui l'àncora", |
DlnLnkMsgInvPopName : "El nom de la finestra emergent ha de començar amb una lletra i no pot tenir espais", |
// Color Dialog |
DlgColorTitle : "Selecciona el color", |
DlgColorBtnClear : "Neteja", |
DlgColorHighlight : "Realça", |
DlgColorSelected : "Selecciona", |
// Smiley Dialog |
DlgSmileyTitle : "Insereix una icona", |
// Special Character Dialog |
DlgSpecialCharTitle : "Selecciona el caràcter especial", |
// Table Dialog |
DlgTableTitle : "Propietats de la taula", |
DlgTableRows : "Files", |
DlgTableColumns : "Columnes", |
DlgTableBorder : "Tamany vora", |
DlgTableAlign : "Alineació", |
DlgTableAlignNotSet : "<No Definit>", |
DlgTableAlignLeft : "Esquerra", |
DlgTableAlignCenter : "Centre", |
DlgTableAlignRight : "Dreta", |
DlgTableWidth : "Amplada", |
DlgTableWidthPx : "píxels", |
DlgTableWidthPc : "percentatge", |
DlgTableHeight : "Alçada", |
DlgTableCellSpace : "Espaiat de cel·les", |
DlgTableCellPad : "Encoixinament de cel·les", |
DlgTableCaption : "Títol", |
DlgTableSummary : "Resum", |
// Table Cell Dialog |
DlgCellTitle : "Propietats de la cel·la", |
DlgCellWidth : "Amplada", |
DlgCellWidthPx : "píxels", |
DlgCellWidthPc : "percentatge", |
DlgCellHeight : "Alçada", |
DlgCellWordWrap : "Ajust de paraula", |
DlgCellWordWrapNotSet : "<No Definit>", |
DlgCellWordWrapYes : "Si", |
DlgCellWordWrapNo : "No", |
DlgCellHorAlign : "Alineació horitzontal", |
DlgCellHorAlignNotSet : "<No Definit>", |
DlgCellHorAlignLeft : "Esquerra", |
DlgCellHorAlignCenter : "Centre", |
DlgCellHorAlignRight: "Dreta", |
DlgCellVerAlign : "Alineació vertical", |
DlgCellVerAlignNotSet : "<No definit>", |
DlgCellVerAlignTop : "Top", |
DlgCellVerAlignMiddle : "Middle", |
DlgCellVerAlignBottom : "Bottom", |
DlgCellVerAlignBaseline : "Baseline", |
DlgCellRowSpan : "Rows Span", |
DlgCellCollSpan : "Columns Span", |
DlgCellBackColor : "Color de fons", |
DlgCellBorderColor : "Color de la vora", |
DlgCellBtnSelect : "Seleccioneu...", |
// Find Dialog |
DlgFindTitle : "Cerca", |
DlgFindFindBtn : "Cerca", |
DlgFindNotFoundMsg : "El text especificat no s'ha trobat.", |
// Replace Dialog |
DlgReplaceTitle : "Reemplaça", |
DlgReplaceFindLbl : "Cerca:", |
DlgReplaceReplaceLbl : "Remplaça amb:", |
DlgReplaceCaseChk : "Sensible a majúscules", |
DlgReplaceReplaceBtn : "Reemplaça", |
DlgReplaceReplAllBtn : "Reemplaça'ls tots", |
DlgReplaceWordChk : "Cerca paraula completa", |
// Paste Operations / Dialog |
PasteErrorPaste : "La seguretat del vostre navegador no permet executar automàticament les operacions d'enganxat. Si us plau, utilitzeu el teclat (Ctrl+V).", |
PasteErrorCut : "La seguretat del vostre navegador no permet executar automàticament les operacions de retallar. Si us plau, utilitzeu el teclat (Ctrl+X).", |
PasteErrorCopy : "La seguretat del vostre navegador no permet executar automàticament les operacions de copiar. Si us plau, utilitzeu el teclat (Ctrl+C).", |
PasteAsText : "Enganxa com a text sense format", |
PasteFromWord : "Enganxa com a Word", |
DlgPasteMsg2 : "Si us plau, enganxeu dins del següent camp utilitzant el teclat (<STRONG>Ctrl+V</STRONG>) i premeu <STRONG>OK</STRONG>.", |
DlgPasteIgnoreFont : "Ignora definicions de font", |
DlgPasteRemoveStyles : "Elimina definicions d'estil", |
DlgPasteCleanBox : "Neteja camp", |
// Color Picker |
ColorAutomatic : "Automàtic", |
ColorMoreColors : "Més colors...", |
// Document Properties |
DocProps : "Propietats del document", |
// Anchor Dialog |
DlgAnchorTitle : "Propietats de l'àncora", |
DlgAnchorName : "Nom de l'àncora", |
DlgAnchorErrorName : "Si us plau, escriviu el nom de l'ancora", |
// Speller Pages Dialog |
DlgSpellNotInDic : "No és al diccionari", |
DlgSpellChangeTo : "Canvia a", |
DlgSpellBtnIgnore : "Ignora", |
DlgSpellBtnIgnoreAll : "Ignora-les totes", |
DlgSpellBtnReplace : "Canvia", |
DlgSpellBtnReplaceAll : "Canvia-les totes", |
DlgSpellBtnUndo : "Desfés", |
DlgSpellNoSuggestions : "Cap sugerència", |
DlgSpellProgress : "Comprovació ortogràfica en progrés", |
DlgSpellNoMispell : "Comprovació ortogràfica completada", |
DlgSpellNoChanges : "Comprovació ortogràfica: cap paraulada canviada", |
DlgSpellOneChange : "Comprovació ortogràfica: una paraula canviada", |
DlgSpellManyChanges : "Comprovació ortogràfica %1 paraules canviades", |
IeSpellDownload : "Comprovació ortogràfica no instal·lada. Voleu descarregar-ho ara?", |
// Button Dialog |
DlgButtonText : "Text (Valor)", |
DlgButtonType : "Tipus", |
DlgButtonTypeBtn : "Botó", |
DlgButtonTypeSbm : "Transmet formulari", |
DlgButtonTypeRst : "Reinicia formulari", |
// Checkbox and Radio Button Dialogs |
DlgCheckboxName : "Nom", |
DlgCheckboxValue : "Valor", |
DlgCheckboxSelected : "Seleccionat", |
// Form Dialog |
DlgFormName : "Nom", |
DlgFormAction : "Acció", |
DlgFormMethod : "Mètode", |
// Select Field Dialog |
DlgSelectName : "Nom", |
DlgSelectValue : "Valor", |
DlgSelectSize : "Tamany", |
DlgSelectLines : "Línies", |
DlgSelectChkMulti : "Permet múltiples seleccions", |
DlgSelectOpAvail : "Opcions disponibles", |
DlgSelectOpText : "Text", |
DlgSelectOpValue : "Valor", |
DlgSelectBtnAdd : "Afegeix", |
DlgSelectBtnModify : "Modifica", |
DlgSelectBtnUp : "Amunt", |
DlgSelectBtnDown : "Avall", |
DlgSelectBtnSetValue : "Selecciona per defecte", |
DlgSelectBtnDelete : "Elimina", |
// Textarea Dialog |
DlgTextareaName : "Nom", |
DlgTextareaCols : "Columnes", |
DlgTextareaRows : "Files", |
// Text Field Dialog |
DlgTextName : "Nom", |
DlgTextValue : "Valor", |
DlgTextCharWidth : "Amplada de caràcter", |
DlgTextMaxChars : "Màxim de caràcters", |
DlgTextType : "Tipus", |
DlgTextTypeText : "Text", |
DlgTextTypePass : "Contrasenya", |
// Hidden Field Dialog |
DlgHiddenName : "Nom", |
DlgHiddenValue : "Valor", |
// Bulleted List Dialog |
BulletedListProp : "Propietats de la llista de pics", |
NumberedListProp : "Propietats de llista numerada", |
DlgLstStart : "Inici", |
DlgLstType : "Tipus", |
DlgLstTypeCircle : "Cercle", |
DlgLstTypeDisc : "Disc", |
DlgLstTypeSquare : "Quadrat", |
DlgLstTypeNumbers : "Números (1, 2, 3)", |
DlgLstTypeLCase : "Lletres minúscules (a, b, c)", |
DlgLstTypeUCase : "Lletres majúscules (A, B, C)", |
DlgLstTypeSRoman : "Números romans minúscules (i, ii, iii)", |
DlgLstTypeLRoman : "Números romans majúscules (I, II, III)", |
// Document Properties Dialog |
DlgDocGeneralTab : "General", |
DlgDocBackTab : "Fons", |
DlgDocColorsTab : "Colors i marges", |
DlgDocMetaTab : "Dades Meta", |
DlgDocPageTitle : "Títol de la pàgina", |
DlgDocLangDir : "Direcció llenguatge", |
DlgDocLangDirLTR : "Esquerra a dreta (LTR)", |
DlgDocLangDirRTL : "Dreta a esquerra (RTL)", |
DlgDocLangCode : "Codi de llenguatge", |
DlgDocCharSet : "Codificació de conjunt de caràcters", |
DlgDocCharSetCE : "Centreeuropeu", |
DlgDocCharSetCT : "Xinès tradicional (Big5)", |
DlgDocCharSetCR : "Ciríl·lic", |
DlgDocCharSetGR : "Grec", |
DlgDocCharSetJP : "Japonès", |
DlgDocCharSetKR : "Coreà", |
DlgDocCharSetTR : "Turc", |
DlgDocCharSetUN : "Unicode (UTF-8)", |
DlgDocCharSetWE : "Europeu occidental", |
DlgDocCharSetOther : "Una altra codificació de caràcters", |
DlgDocDocType : "Capçalera de tipus de document", |
DlgDocDocTypeOther : "Altra Capçalera de tipus de document", |
DlgDocIncXHTML : "Incloure declaracions XHTML", |
DlgDocBgColor : "Color de fons", |
DlgDocBgImage : "URL de la imatge de fons", |
DlgDocBgNoScroll : "Fons fixe", |
DlgDocCText : "Text", |
DlgDocCLink : "Enllaç", |
DlgDocCVisited : "Enllaç visitat", |
DlgDocCActive : "Enllaç actiu", |
DlgDocMargins : "Marges de pàgina", |
DlgDocMaTop : "Cap", |
DlgDocMaLeft : "Esquerra", |
DlgDocMaRight : "Dreta", |
DlgDocMaBottom : "Peu", |
DlgDocMeIndex : "Mots clau per a indexació (separats per coma)", |
DlgDocMeDescr : "Descripció del document", |
DlgDocMeAuthor : "Autor", |
DlgDocMeCopy : "Copyright", |
DlgDocPreview : "Vista prèvia", |
// Templates Dialog |
Templates : "Plantilles", |
DlgTemplatesTitle : "Contingut plantilles", |
DlgTemplatesSelMsg : "Si us plau, seleccioneu la plantilla per obrir en l'editor<br>(el contingut actual no serà enregistrat):", |
DlgTemplatesLoading : "Carregant la llista de plantilles. Si us plau, espereu...", |
DlgTemplatesNoTpl : "(No hi ha plantilles definides)", |
DlgTemplatesReplace : "Reemplaça el contingut actual", |
// About Dialog |
DlgAboutAboutTab : "Quant a", |
DlgAboutBrowserInfoTab : "Informació del navegador", |
DlgAboutLicenseTab : "Llicència", |
DlgAboutVersion : "versió", |
DlgAboutLicense : "Segons els termes de la Llicència GNU Lesser General Public License", |
DlgAboutInfo : "Per a més informació aneu a" |
} |
/branches/v1.0-menes/api/fckeditor/editor/plugins/simplecommands/fckplugin.js |
---|
New file |
0,0 → 1,25 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckplugin.js |
* This plugin register Toolbar items for the combos modifying the style to |
* not show the box. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
FCKToolbarItems.RegisterItem( 'SourceSimple' , new FCKToolbarButton( 'Source', FCKLang.Source, null, FCK_TOOLBARITEM_ONLYICON, true, true, 1 ) ) ; |
FCKToolbarItems.RegisterItem( 'StyleSimple' , new FCKToolbarStyleCombo( null, FCK_TOOLBARITEM_ONLYTEXT ) ) ; |
FCKToolbarItems.RegisterItem( 'FontNameSimple' , new FCKToolbarFontsCombo( null, FCK_TOOLBARITEM_ONLYTEXT ) ) ; |
FCKToolbarItems.RegisterItem( 'FontSizeSimple' , new FCKToolbarFontSizeCombo( null, FCK_TOOLBARITEM_ONLYTEXT ) ) ; |
FCKToolbarItems.RegisterItem( 'FontFormatSimple', new FCKToolbarFontFormatCombo( null, FCK_TOOLBARITEM_ONLYTEXT ) ) ; |
/branches/v1.0-menes/api/fckeditor/editor/plugins/placeholder/lang/en.js |
---|
New file |
0,0 → 1,23 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: en.js |
* Placholder English language file. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
FCKLang.PlaceholderBtn = 'Insert/Edit Placeholder' ; |
FCKLang.PlaceholderDlgTitle = 'Placeholder Properties' ; |
FCKLang.PlaceholderDlgName = 'Placeholder Name' ; |
FCKLang.PlaceholderErrNoName = 'Please type the placeholder name' ; |
FCKLang.PlaceholderErrNameInUse = 'The specified name is already in use' ; |
/branches/v1.0-menes/api/fckeditor/editor/plugins/placeholder/lang/fr.js |
---|
New file |
0,0 → 1,23 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fr.js |
* Placholder Italian language file. |
* |
* File Authors: |
* Hubert Garrido (liane@users.sourceforge.net) |
*/ |
FCKLang.PlaceholderBtn = 'Insérer/Modifier Substitut' ; |
FCKLang.PlaceholderDlgTitle = 'Propriétés de Substitut' ; |
FCKLang.PlaceholderDlgName = 'Nom de Substitut' ; |
FCKLang.PlaceholderErrNoName = 'Veuillez saisir le nom de Substitut' ; |
FCKLang.PlaceholderErrNameInUse = 'Ce nom est déjà utilisé' ; |
/branches/v1.0-menes/api/fckeditor/editor/plugins/placeholder/lang/de.js |
---|
New file |
0,0 → 1,23 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: de.js |
* Placholder German language file. |
* |
* File Authors: |
* José Fontanil |
*/ |
FCKLang.PlaceholderBtn = 'Einfügen/editieren Platzhalter' ; |
FCKLang.PlaceholderDlgTitle = 'Platzhalter Eigenschaften' ; |
FCKLang.PlaceholderDlgName = 'Platzhalter Name' ; |
FCKLang.PlaceholderErrNoName = 'Bitte den Namen des Platzhalters schreiben' ; |
FCKLang.PlaceholderErrNameInUse = 'Der angegebene Namen ist schon in Gebrauch' ; |
/branches/v1.0-menes/api/fckeditor/editor/plugins/placeholder/lang/pl.js |
---|
New file |
0,0 → 1,23 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: pl.js |
* Placholder Polish language file. |
* |
* File Authors: |
* Marcin Pietrzak (fck@iworks.pl) |
*/ |
FCKLang.PlaceholderBtn = 'Wstaw/Edytuj nagÅówek' ; |
FCKLang.PlaceholderDlgTitle = 'WÅaÅnoÅci nagÅówka' ; |
FCKLang.PlaceholderDlgName = 'Nazwa nagÅówka' ; |
FCKLang.PlaceholderErrNoName = 'ProszÄ wprowadziÄ nazwÄ nagÅówka' ; |
FCKLang.PlaceholderErrNameInUse = 'Podana nazwa jest już w użyciu' ; |
/branches/v1.0-menes/api/fckeditor/editor/plugins/placeholder/lang/it.js |
---|
New file |
0,0 → 1,23 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: it.js |
* Placholder Italian language file. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
FCKLang.PlaceholderBtn = 'Aggiungi/Modifica Placeholder' ; |
FCKLang.PlaceholderDlgTitle = 'Proprietà del Placeholder' ; |
FCKLang.PlaceholderDlgName = 'Nome del Placeholder' ; |
FCKLang.PlaceholderErrNoName = 'Digitare il nome del placeholder' ; |
FCKLang.PlaceholderErrNameInUse = 'Il nome inserito è già in uso' ; |
/branches/v1.0-menes/api/fckeditor/editor/plugins/placeholder/placeholder.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/plugins/placeholder/placeholder.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/plugins/placeholder/fck_placeholder.html |
---|
New file |
0,0 → 1,96 |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> |
<!-- |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fck_placeholder.html |
* Placeholder Plugin. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
--> |
<html> |
<head> |
<title>Placeholder Properties</title> |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> |
<meta content="noindex, nofollow" name="robots"> |
<script language="javascript"> |
var oEditor = window.parent.InnerDialogLoaded() ; |
var FCKLang = oEditor.FCKLang ; |
var FCKPlaceholders = oEditor.FCKPlaceholders ; |
window.onload = function () |
{ |
// First of all, translate the dialog box texts |
oEditor.FCKLanguageManager.TranslatePage( document ) ; |
LoadSelected() ; |
// Show the "Ok" button. |
window.parent.SetOkButton( true ) ; |
} |
var eSelected = oEditor.FCKSelection.GetSelectedElement() ; |
function LoadSelected() |
{ |
if ( !eSelected ) |
return ; |
if ( eSelected.tagName == 'SPAN' && eSelected._fckplaceholder ) |
document.getElementById('txtName').value = eSelected._fckplaceholder ; |
else |
eSelected == null ; |
} |
function Ok() |
{ |
var sValue = document.getElementById('txtName').value ; |
if ( eSelected && eSelected._fckplaceholder == sValue ) |
return true ; |
if ( sValue.length == 0 ) |
{ |
alert( FCKLang.PlaceholderErrNoName ) ; |
return false ; |
} |
if ( FCKPlaceholders.Exist( sValue ) ) |
{ |
alert( FCKLang.PlaceholderErrNameInUse ) ; |
return false ; |
} |
FCKPlaceholders.Add( sValue ) ; |
return true ; |
} |
</script> |
</head> |
<body scroll="no" style="OVERFLOW: hidden"> |
<table height="100%" cellSpacing="0" cellPadding="0" width="100%" border="0"> |
<tr> |
<td> |
<table cellSpacing="0" cellPadding="0" align="center" border="0"> |
<tr> |
<td> |
<span fckLang="PlaceholderDlgName">Placeholder Name</span><br> |
<input id="txtName" type="text"> |
</td> |
</tr> |
</table> |
</td> |
</tr> |
</table> |
</body> |
</html> |
/branches/v1.0-menes/api/fckeditor/editor/plugins/placeholder/fckplugin.js |
---|
New file |
0,0 → 1,175 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckplugin.js |
* Plugin to insert "Placeholders" in the editor. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
// Register the related command. |
FCKCommands.RegisterCommand( 'Placeholder', new FCKDialogCommand( 'Placeholder', FCKLang.PlaceholderDlgTitle, FCKPlugins.Items['placeholder'].Path + 'fck_placeholder.html', 340, 170 ) ) ; |
// Create the "Plaholder" toolbar button. |
var oPlaceholderItem = new FCKToolbarButton( 'Placeholder', FCKLang.PlaceholderBtn ) ; |
oPlaceholderItem.IconPath = FCKPlugins.Items['placeholder'].Path + 'placeholder.gif' ; |
FCKToolbarItems.RegisterItem( 'Placeholder', oPlaceholderItem ) ; |
// The object used for all Placeholder operations. |
var FCKPlaceholders = new Object() ; |
// Add a new placeholder at the actual selection. |
FCKPlaceholders.Add = function( name ) |
{ |
var oSpan = FCK.CreateElement( 'SPAN' ) ; |
this.SetupSpan( oSpan, name ) ; |
} |
FCKPlaceholders.SetupSpan = function( span, name ) |
{ |
span.innerHTML = '[[ ' + name + ' ]]' ; |
span.style.backgroundColor = '#ffff00' ; |
span.style.color = '#000000' ; |
if ( FCKBrowserInfo.IsGecko ) |
span.style.cursor = 'default' ; |
span._fckplaceholder = name ; |
span.contentEditable = false ; |
// To avoid it to be resized. |
span.onresizestart = function() |
{ |
FCK.EditorWindow.event.returnValue = false ; |
return false ; |
} |
} |
// On Gecko we must do this trick so the user select all the SPAN when clicking on it. |
FCKPlaceholders._SetupClickListener = function() |
{ |
FCKPlaceholders._ClickListener = function( e ) |
{ |
if ( e.target.tagName == 'SPAN' && e.target._fckplaceholder ) |
FCKSelection.SelectNode( e.target ) ; |
} |
FCK.EditorDocument.addEventListener( 'click', FCKPlaceholders._ClickListener, true ) ; |
} |
// Open the Placeholder dialog on double click. |
FCKPlaceholders.OnDoubleClick = function( span ) |
{ |
if ( span.tagName == 'SPAN' && span._fckplaceholder ) |
FCKCommands.GetCommand( 'Placeholder' ).Execute() ; |
} |
FCK.RegisterDoubleClickHandler( FCKPlaceholders.OnDoubleClick, 'SPAN' ) ; |
// Check if a Placholder name is already in use. |
FCKPlaceholders.Exist = function( name ) |
{ |
var aSpans = FCK.EditorDocument.getElementsByTagName( 'SPAN' ) |
for ( var i = 0 ; i < aSpans.length ; i++ ) |
{ |
if ( aSpans[i]._fckplaceholder == name ) |
return true ; |
} |
} |
if ( FCKBrowserInfo.IsIE ) |
{ |
FCKPlaceholders.Redraw = function() |
{ |
var aPlaholders = FCK.EditorDocument.body.innerText.match( /\[\[[^\[\]]+\]\]/g ) ; |
if ( !aPlaholders ) |
return ; |
var oRange = FCK.EditorDocument.body.createTextRange() ; |
for ( var i = 0 ; i < aPlaholders.length ; i++ ) |
{ |
if ( oRange.findText( aPlaholders[i] ) ) |
{ |
var sName = aPlaholders[i].match( /\[\[\s*([^\]]*?)\s*\]\]/ )[1] ; |
oRange.pasteHTML( '<span style="color: #000000; background-color: #ffff00" contenteditable="false" _fckplaceholder="' + sName + '">' + aPlaholders[i] + '</span>' ) ; |
} |
} |
} |
} |
else |
{ |
FCKPlaceholders.Redraw = function() |
{ |
var oInteractor = FCK.EditorDocument.createTreeWalker( FCK.EditorDocument.body, NodeFilter.SHOW_TEXT, FCKPlaceholders._AcceptNode, true ) ; |
var aNodes = new Array() ; |
while ( oNode = oInteractor.nextNode() ) |
{ |
aNodes[ aNodes.length ] = oNode ; |
} |
for ( var n = 0 ; n < aNodes.length ; n++ ) |
{ |
var aPieces = aNodes[n].nodeValue.split( /(\[\[[^\[\]]+\]\])/g ) ; |
for ( var i = 0 ; i < aPieces.length ; i++ ) |
{ |
if ( aPieces[i].length > 0 ) |
{ |
if ( aPieces[i].indexOf( '[[' ) == 0 ) |
{ |
var sName = aPieces[i].match( /\[\[\s*([^\]]*?)\s*\]\]/ )[1] ; |
var oSpan = FCK.EditorDocument.createElement( 'span' ) ; |
FCKPlaceholders.SetupSpan( oSpan, sName ) ; |
aNodes[n].parentNode.insertBefore( oSpan, aNodes[n] ) ; |
} |
else |
aNodes[n].parentNode.insertBefore( FCK.EditorDocument.createTextNode( aPieces[i] ) , aNodes[n] ) ; |
} |
} |
aNodes[n].parentNode.removeChild( aNodes[n] ) ; |
} |
FCKPlaceholders._SetupClickListener() ; |
} |
FCKPlaceholders._AcceptNode = function( node ) |
{ |
if ( /\[\[[^\[\]]+\]\]/.test( node.nodeValue ) ) |
return NodeFilter.FILTER_ACCEPT ; |
else |
return NodeFilter.FILTER_SKIP ; |
} |
} |
FCK.Events.AttachEvent( 'OnAfterSetHTML', FCKPlaceholders.Redraw ) ; |
// We must process the SPAN tags to replace then with the real resulting value of the placeholder. |
FCKXHtml.TagProcessors['span'] = function( node, htmlNode ) |
{ |
if ( htmlNode._fckplaceholder ) |
node = FCKXHtml.XML.createTextNode( '[[' + htmlNode._fckplaceholder + ']]' ) ; |
else |
FCKXHtml._AppendChildNodes( node, htmlNode, false ) ; |
return node ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/plugins/autogrow/fckplugin.js |
---|
New file |
0,0 → 1,85 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckplugin.js |
* Plugin: automatically resizes the editor until a configurable maximun |
* height (FCKConfig.AutoGrowMax), based on its contents. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
var FCKAutoGrow_Min = window.frameElement.offsetHeight ; |
function FCKAutoGrow_Check() |
{ |
var oInnerDoc = FCK.EditorDocument ; |
var iFrameHeight, iInnerHeight ; |
if ( FCKBrowserInfo.IsIE ) |
{ |
iFrameHeight = FCK.EditorWindow.frameElement.offsetHeight ; |
iInnerHeight = oInnerDoc.body.scrollHeight ; |
} |
else |
{ |
iFrameHeight = FCK.EditorWindow.innerHeight ; |
iInnerHeight = oInnerDoc.body.offsetHeight ; |
} |
var iDiff = iInnerHeight - iFrameHeight ; |
if ( iDiff != 0 ) |
{ |
var iMainFrameSize = window.frameElement.offsetHeight ; |
if ( iDiff > 0 && iMainFrameSize < FCKConfig.AutoGrowMax ) |
{ |
iMainFrameSize += iDiff ; |
if ( iMainFrameSize > FCKConfig.AutoGrowMax ) |
iMainFrameSize = FCKConfig.AutoGrowMax ; |
} |
else if ( iDiff < 0 && iMainFrameSize > FCKAutoGrow_Min ) |
{ |
iMainFrameSize += iDiff ; |
if ( iMainFrameSize < FCKAutoGrow_Min ) |
iMainFrameSize = FCKAutoGrow_Min ; |
} |
else |
return ; |
window.frameElement.height = iMainFrameSize ; |
} |
} |
FCK.AttachToOnSelectionChange( FCKAutoGrow_Check ) ; |
function FCKAutoGrow_SetListeners() |
{ |
FCK.EditorWindow.attachEvent( 'onscroll', FCKAutoGrow_Check ) ; |
FCK.EditorDocument.attachEvent( 'onkeyup', FCKAutoGrow_Check ) ; |
} |
if ( FCKBrowserInfo.IsIE ) |
{ |
// FCKAutoGrow_SetListeners() ; |
FCK.Events.AttachEvent( 'OnAfterSetHTML', FCKAutoGrow_SetListeners ) ; |
} |
function FCKAutoGrow_CheckEditorStatus( sender, status ) |
{ |
if ( status == FCK_STATUS_COMPLETE ) |
FCKAutoGrow_Check() ; |
} |
FCK.Events.AttachEvent( 'OnStatusChange', FCKAutoGrow_CheckEditorStatus ) ; |
/branches/v1.0-menes/api/fckeditor/editor/plugins/tablecommands/fckplugin.js |
---|
New file |
0,0 → 1,28 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckplugin.js |
* This plugin register the required Toolbar items to be able to insert the |
* toolbar commands in the toolbar. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
FCKToolbarItems.RegisterItem( 'TableInsertRow' , new FCKToolbarButton( 'TableInsertRow' , FCKLang.InsertRow, null, null, null, null, 62 ) ) ; |
FCKToolbarItems.RegisterItem( 'TableDeleteRows' , new FCKToolbarButton( 'TableDeleteRows' , FCKLang.DeleteRows, null, null, null, null, 63 ) ) ; |
FCKToolbarItems.RegisterItem( 'TableInsertColumn' , new FCKToolbarButton( 'TableInsertColumn' , FCKLang.InsertColumn, null, null, null, null, 64 ) ) ; |
FCKToolbarItems.RegisterItem( 'TableDeleteColumns' , new FCKToolbarButton( 'TableDeleteColumns', FCKLang.DeleteColumns, null, null, null, null, 65 ) ) ; |
FCKToolbarItems.RegisterItem( 'TableInsertCell' , new FCKToolbarButton( 'TableInsertCell' , FCKLang.InsertCell, null, null, null, null, 58 ) ) ; |
FCKToolbarItems.RegisterItem( 'TableDeleteCells' , new FCKToolbarButton( 'TableDeleteCells' , FCKLang.DeleteCells, null, null, null, null, 59 ) ) ; |
FCKToolbarItems.RegisterItem( 'TableMergeCells' , new FCKToolbarButton( 'TableMergeCells' , FCKLang.MergeCells, null, null, null, null, 60 ) ) ; |
FCKToolbarItems.RegisterItem( 'TableSplitCell' , new FCKToolbarButton( 'TableSplitCell' , FCKLang.SplitCell, null, null, null, null, 61 ) ) ; |
/branches/v1.0-menes/api/fckeditor/editor/images/anchor.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/images/anchor.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/images/arrow_ltr.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/images/arrow_ltr.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/images/arrow_rtl.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/images/arrow_rtl.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/images/spacer.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/images/spacer.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/images/smiley/msn/kiss.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/images/smiley/msn/kiss.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/images/smiley/msn/angry_smile.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/images/smiley/msn/angry_smile.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/images/smiley/msn/omg_smile.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/images/smiley/msn/omg_smile.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/images/smiley/msn/lightbulb.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/images/smiley/msn/lightbulb.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/images/smiley/msn/envelope.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/images/smiley/msn/envelope.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/images/smiley/msn/angel_smile.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/images/smiley/msn/angel_smile.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/images/smiley/msn/cry_smile.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/images/smiley/msn/cry_smile.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/images/smiley/msn/thumbs_down.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/images/smiley/msn/thumbs_down.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/images/smiley/msn/tounge_smile.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/images/smiley/msn/tounge_smile.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/images/smiley/msn/regular_smile.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/images/smiley/msn/regular_smile.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/images/smiley/msn/devil_smile.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/images/smiley/msn/devil_smile.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/images/smiley/msn/confused_smile.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/images/smiley/msn/confused_smile.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/images/smiley/msn/sad_smile.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/images/smiley/msn/sad_smile.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/images/smiley/msn/shades_smile.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/images/smiley/msn/shades_smile.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/images/smiley/msn/wink_smile.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/images/smiley/msn/wink_smile.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/images/smiley/msn/whatchutalkingabout_smile.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/images/smiley/msn/whatchutalkingabout_smile.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/images/smiley/msn/teeth_smile.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/images/smiley/msn/teeth_smile.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/images/smiley/msn/broken_heart.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/images/smiley/msn/broken_heart.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/images/smiley/msn/cake.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/images/smiley/msn/cake.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/images/smiley/msn/embaressed_smile.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/images/smiley/msn/embaressed_smile.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/images/smiley/msn/heart.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/images/smiley/msn/heart.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/images/smiley/msn/thumbs_up.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/images/smiley/msn/thumbs_up.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/fckdialog.html |
---|
New file |
0,0 → 1,322 |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> |
<!-- |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckdialog.html |
* This page is used by all dialog box as the container. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
--> |
<html xmlns="http://www.w3.org/1999/xhtml"> |
<head> |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> |
<meta name="robots" content="noindex, nofollow" /> |
<script type="text/javascript"> |
// On some Gecko browsers (probably over slow connections) the |
// "dialogArguments" are not set so we must get it from the opener window. |
if ( !window.dialogArguments ) |
window.dialogArguments = window.opener.FCKLastDialogInfo ; |
// Sets the Skin CSS |
document.write( '<link href="' + window.dialogArguments.Editor.FCKConfig.SkinPath + 'fck_dialog.css" type="text/css" rel="stylesheet">' ) ; |
// Sets the language direction. |
window.document.dir = window.dialogArguments.Editor.FCKLang.Dir ; |
var sTitle = window.dialogArguments.Title ; |
document.write( '<title>' + sTitle + '<\/title>' ) ; |
function LoadInnerDialog() |
{ |
// The following value is set, so the editor can check that the dialog has been correctly opened. |
window.setTimeout( function() { window.returnValue = true ; }, 100 ) ; |
if ( window.onresize ) |
window.onresize() ; |
// First of all, translate the dialog box contents. |
window.dialogArguments.Editor.FCKLanguageManager.TranslatePage( document ) ; |
window.frames["frmMain"].document.location.href = window.dialogArguments.Page ; |
} |
function InnerDialogLoaded() |
{ |
var oInnerDoc = document.getElementById('frmMain').contentWindow.document ; |
// Set the language direction. |
oInnerDoc.dir = window.dialogArguments.Editor.FCKLang.Dir ; |
// Sets the Skin CSS. |
oInnerDoc.write( '<link href="' + window.dialogArguments.Editor.FCKConfig.SkinPath + 'fck_dialog.css" type="text/css" rel="stylesheet">' ) ; |
SetOnKeyDown( oInnerDoc ) ; |
DisableContextMenu( oInnerDoc ) ; |
return window.dialogArguments.Editor ; |
} |
function SetOkButton( showIt ) |
{ |
document.getElementById('btnOk').style.visibility = ( showIt ? '' : 'hidden' ) ; |
} |
var bAutoSize = false ; |
function SetAutoSize( autoSize ) |
{ |
bAutoSize = autoSize ; |
RefreshSize() ; |
} |
function RefreshSize() |
{ |
if ( bAutoSize ) |
{ |
var oInnerDoc = document.getElementById('frmMain').contentWindow.document ; |
var iFrameHeight ; |
if ( document.all ) |
iFrameHeight = oInnerDoc.body.offsetHeight ; |
else |
iFrameHeight = document.getElementById('frmMain').contentWindow.innerHeight ; |
var iInnerHeight = oInnerDoc.body.scrollHeight ; |
var iDiff = iInnerHeight - iFrameHeight ; |
if ( iDiff > 0 ) |
{ |
if ( document.all ) |
window.dialogHeight = ( parseInt( window.dialogHeight ) + iDiff ) + 'px' ; |
else |
window.resizeBy( 0, iDiff ) ; |
} |
} |
} |
function Ok() |
{ |
if ( window.frames["frmMain"].Ok && window.frames["frmMain"].Ok() ) |
Cancel() ; |
} |
function Cancel( dontFireChange ) |
{ |
if ( !dontFireChange ) |
{ |
// All dialog windows, by default, will fire the "OnSelectionChange" |
// event, no matter the Ok or Cancel button has been pressed. |
window.dialogArguments.Editor.FCK.Events.FireEvent( 'OnSelectionChange' ) ; |
} |
window.close() ; |
} |
// Object that holds all available tabs. |
var oTabs = new Object() ; |
function TabDiv_OnClick() |
{ |
SetSelectedTab( this.TabCode ) ; |
} |
function AddTab( tabCode, tabText, startHidden ) |
{ |
if ( typeof( oTabs[ tabCode ] ) != 'undefined' ) |
return ; |
var eTabsRow = document.getElementById( 'Tabs' ) ; |
var oCell = eTabsRow.insertCell( eTabsRow.cells.length - 1 ) ; |
oCell.noWrap = true ; |
var oDiv = document.createElement( 'DIV' ) ; |
oDiv.className = 'PopupTab' ; |
oDiv.innerHTML = tabText ; |
oDiv.TabCode = tabCode ; |
oDiv.onclick = TabDiv_OnClick ; |
if ( startHidden ) |
oDiv.style.display = 'none' ; |
eTabsRow = document.getElementById( 'TabsRow' ) ; |
oCell.appendChild( oDiv ) ; |
if ( eTabsRow.style.display == 'none' ) |
{ |
var eTitleArea = document.getElementById( 'TitleArea' ) ; |
eTitleArea.className = 'PopupTitle' ; |
oDiv.className = 'PopupTabSelected' ; |
eTabsRow.style.display = '' ; |
if ( ! window.dialogArguments.Editor.FCKBrowserInfo.IsIE ) |
window.onresize() ; |
} |
oTabs[ tabCode ] = oDiv ; |
oTabs[ tabCode ].Index = oTabs.length - 1 ; |
} |
function SetSelectedTab( tabCode ) |
{ |
for ( var sCode in oTabs ) |
{ |
if ( sCode == tabCode ) |
oTabs[sCode].className = 'PopupTabSelected' ; |
else |
oTabs[sCode].className = 'PopupTab' ; |
} |
if ( typeof( window.frames["frmMain"].OnDialogTabChange ) == 'function' ) |
window.frames["frmMain"].OnDialogTabChange( tabCode ) ; |
} |
function SetTabVisibility( tabCode, isVisible ) |
{ |
var oTab = oTabs[ tabCode ] ; |
oTab.style.display = isVisible ? '' : 'none' ; |
if ( ! isVisible && oTab.className == 'PopupTabSelected' ) |
{ |
for ( var sCode in oTabs ) |
{ |
if ( oTabs[sCode].style.display != 'none' ) |
{ |
SetSelectedTab( sCode ) ; |
break ; |
} |
} |
} |
} |
function SetOnKeyDown( targetDocument ) |
{ |
targetDocument.onkeydown = function ( e ) |
{ |
e = e || event || this.parentWindow.event ; |
switch ( e.keyCode ) |
{ |
case 13 : // ENTER |
var oTarget = e.srcElement || e.target ; |
if ( oTarget.tagName == 'TEXTAREA' ) return ; |
Ok() ; |
return false ; |
case 27 : // ESC |
Cancel() ; |
return false ; |
break ; |
} |
return true ; |
} |
} |
SetOnKeyDown( document ) ; |
function DisableContextMenu( targetDocument ) |
{ |
if ( window.dialogArguments.Editor.FCKBrowserInfo.IsIE ) return ; |
// Disable Right-Click |
var oOnContextMenu = function( e ) |
{ |
var sTagName = e.target.tagName ; |
if ( ! ( ( sTagName == "INPUT" && e.target.type == "text" ) || sTagName == "TEXTAREA" ) ) |
e.preventDefault() ; |
} |
targetDocument.addEventListener( 'contextmenu', oOnContextMenu, true ) ; |
} |
DisableContextMenu( document ) ; |
if ( ! window.dialogArguments.Editor.FCKBrowserInfo.IsIE ) |
{ |
window.onresize = function() |
{ |
var oFrame = document.getElementById("frmMain") ; |
if ( ! oFrame ) |
return ; |
oFrame.height = 0 ; |
var oCell = document.getElementById("FrameCell") ; |
var iHeight = oCell.offsetHeight ; |
oFrame.height = iHeight - 2 ; |
} |
} |
if ( window.dialogArguments.Editor.FCKBrowserInfo.IsIE ) |
{ |
function Window_OnBeforeUnload() |
{ |
for ( var t in oTabs ) |
oTabs[t] = null ; |
window.dialogArguments.Editor = null ; |
} |
window.attachEvent( "onbeforeunload", Window_OnBeforeUnload ) ; |
} |
function Window_OnClose() |
{ |
window.dialogArguments.Editor.FCKFocusManager.Unlock() ; |
} |
if ( window.addEventListener ) |
window.addEventListener( 'unload', Window_OnClose, false ) ; |
</script> |
</head> |
<body onload="LoadInnerDialog();" class="PopupBody"> |
<table height="100%" cellspacing="0" cellpadding="0" width="100%" border="0"> |
<tr> |
<td id="TitleArea" class="PopupTitle PopupTitleBorder"> |
<script type="text/javascript"> |
document.write( sTitle ) ; |
</script> |
</td> |
</tr> |
<tr id="TabsRow" style="DISPLAY: none"> |
<td class="PopupTabArea"> |
<table border="0" cellpadding="0" cellspacing="0" width="100%"> |
<tr id="Tabs" onselectstart="return false;"> |
<td class="PopupTabEmptyArea"> </td> |
<td class="PopupTabEmptyArea" width="100%"> </td> |
</tr> |
</table> |
</td> |
</tr> |
<tr> |
<td id="FrameCell" height="100%" valign="top"> |
<iframe id="frmMain" src="fckblank.html" name="frmMain" frameborder="0" height="100%" width="100%" scrolling="auto"> |
</iframe> |
</td> |
</tr> |
<tr> |
<td class="PopupButtons"> |
<table border="0" cellpadding="0" cellspacing="0"> |
<tr> |
<td width="100%"> </td> |
<td nowrap="nowrap"> |
<input id="btnOk" style="VISIBILITY: hidden; WIDTH: 100px" type="button" value="Ok" class="Button" |
onclick="Ok();" fckLang="DlgBtnOK" /> <input type="button" value="Cancel" class="Button" onclick="Cancel();" fckLang="DlgBtnCancel" /> |
</td> |
</tr> |
</table> |
</td> |
</tr> |
</table> |
</body> |
</html> |
/branches/v1.0-menes/api/fckeditor/editor/skins/office2003/fck_strip.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/skins/office2003/fck_strip.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/skins/office2003/fck_dialog.css |
---|
New file |
0,0 → 1,129 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fck_dialog.css |
* Styles used by the dialog boxes. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
body |
{ |
margin: 0px; |
padding: 10px; |
background-color: #f7f8fd; |
} |
body, td, input, select, textarea |
{ |
font-size: 11px; |
font-family: 'Microsoft Sans Serif' , Arial, Helvetica, Verdana; |
} |
body, .BackColor |
{ |
background-color: #f7f8fd; |
} |
.PopupBody |
{ |
margin: 0px; |
padding: 0px; |
} |
.PopupTitle |
{ |
font-weight: bold; |
font-size: 14pt; |
color: #0e3460; |
background-color: #8cb2fd; |
padding: 3px 10px 3px 10px; |
} |
.PopupButtons |
{ |
border-top: #466ca6 1px solid; |
background-color: #8cb2fd; |
padding: 7px 10px 7px 10px; |
} |
.Button |
{ |
border: #1c3460 1px solid; |
color: #000a28; |
background-color: #7096d3; |
} |
.DarkBackground |
{ |
background-color: #d7d79f; |
} |
.LightBackground |
{ |
background-color: #ffffbe; |
} |
.PopupTitleBorder |
{ |
border-bottom: #d5d59d 1px solid; |
} |
.PopupTabArea |
{ |
color: #0e3460; |
background-color: #8cb2fd; |
} |
.PopupTabEmptyArea |
{ |
padding-left: 10px ; |
border-bottom: #466ca6 1px solid; |
} |
.PopupTab, .PopupTabSelected |
{ |
border-right: #466ca6 1px solid; |
border-top: #466ca6 1px solid; |
border-left: #466ca6 1px solid; |
padding-right: 5px; |
padding-left: 5px; |
padding-bottom: 3px; |
padding-top: 3px; |
color: #0e3460; |
} |
.PopupTab |
{ |
margin-top: 1px; |
border-bottom: #466ca6 1px solid; |
cursor: pointer; |
cursor: hand; |
} |
.PopupTabSelected |
{ |
font-weight:bold; |
cursor: default; |
padding-top: 4px; |
border-bottom: #f7f8fd 1px solid; |
background-color: #f7f8fd; |
} |
.PopupSelectionBox |
{ |
border: #1e90ff 1px solid !important; |
background-color: #add8e6 !important; |
cursor: pointer; |
cursor: hand; |
} |
/branches/v1.0-menes/api/fckeditor/editor/skins/office2003/fck_editor.css |
---|
New file |
0,0 → 1,472 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fck_editor.css |
* Styles used by the editor IFRAME and Toolbar. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
/* |
### Basic Editor IFRAME Styles. |
*/ |
body |
{ |
padding: 1px 1px 1px 1px; |
margin: 0px 0px 0px 0px; |
} |
#xEditingArea |
{ |
border: #696969 1px solid; |
} |
.SourceField |
{ |
padding: 5px; |
margin: 0px; |
font-family: Monospace; |
} |
/* |
Toolbar |
*/ |
.TB_ToolbarSet, .TB_Expand, .TB_Collapse |
{ |
cursor: default; |
background-color: #f7f8fd; |
} |
.TB_ToolbarSet |
{ |
border-top: #f7f8fd 1px outset; |
border-bottom: #f7f8fd 1px outset; |
} |
.TB_ToolbarSet TD |
{ |
font-size: 11px; |
font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif; |
} |
.TB_Toolbar |
{ |
background-color: #d6dff7; |
background-image: url(images/toolbar.bg.gif); |
background-repeat: repeat-x; |
display: inline-table; |
} |
.TB_Separator |
{ |
width: 1px; |
height: 16px; |
margin: 2px; |
background-color: #B2CBFF; |
} |
.TB_Start |
{ |
background-image: url(images/toolbar.start.gif); |
background-repeat: no-repeat; |
background-position: center center; |
margin: 0px; |
width: 7px; |
height: 24px; |
} |
.TB_End |
{ |
background-image: url(images/toolbar.end.gif); |
background-repeat: no-repeat; |
background-position: center left; |
height: 24px; |
width: 12px; |
} |
.TB_ExpandImg |
{ |
background-image: url(images/toolbar.expand.gif); |
background-repeat: no-repeat; |
} |
.TB_CollapseImg |
{ |
background-image: url(images/toolbar.collapse.gif); |
background-repeat: no-repeat; |
} |
.TB_SideBorder |
{ |
background-color: #696969; |
} |
.TB_Expand, .TB_Collapse |
{ |
padding: 2px 2px 2px 2px; |
border: #f7f8fd 1px outset; |
} |
.TB_Collapse |
{ |
width: 5px; |
} |
.TB_Break |
{ |
height: 24px; /* IE needs the height to be set, otherwise no break */ |
} |
/* |
Toolbar Button |
*/ |
.TB_Button_On, .TB_Button_Off, .TB_Button_On_Over, .TB_Button_Off_Over, .TB_Button_Disabled |
{ |
margin: 1px; |
height: 22px; /* The height is necessary, otherwise IE will not apply the alpha */ |
} |
.TB_Button_On |
{ |
margin: 0px; |
border: #316ac5 1px solid; |
background-color: #c1d2ee; |
} |
.TB_Button_On_Over, .TB_Button_Off_Over |
{ |
margin: 0px ; |
border: #316ac5 1px solid; |
background-color: #dff1ff; |
} |
.TB_Button_Off |
{ |
filter: alpha(opacity=70); /* IE */ |
opacity: 0.70; /* Safari, Opera and Mozilla */ |
} |
.TB_Button_Disabled |
{ |
filter: gray() alpha(opacity=30); /* IE */ |
opacity: 0.30; /* Safari, Opera and Mozilla */ |
} |
.TB_Button_Padding |
{ |
visibility: hidden; |
width: 3px; |
height: 22px; |
} |
.TB_Button_Image |
{ |
overflow: hidden; |
width: 16px; |
height: 16px; |
margin: 3px; |
background-repeat: no-repeat; |
} |
.TB_Button_Image img |
{ |
position: relative; |
} |
.TB_Button_Off .TB_Button_Text |
{ |
background-color: #d6dff7; /* Needed because of a bug on ClearType */ |
background-image: url(images/toolbar.bg.gif); |
background-repeat: repeat-x; |
} |
.TB_ConnectionLine |
{ |
background-color: #f7f8fd; |
height: 1px; |
margin-left: 1px; /* ltr */ |
margin-right: 1px; /* rtl */ |
} |
.TB_Button_Off .TB_Text |
{ |
background-color: #d6dff7; /* Needed because of a bug on ClearType */ |
background-image: url(images/toolbar.bg.gif); |
background-repeat: repeat-x; |
} |
.TB_Button_On_Over .TB_Text |
{ |
background-color: #dff1ff ; /* Needed because of a bug on ClearType */ |
} |
/* |
Menu |
*/ |
.MN_Menu |
{ |
border: 1px solid #8f8f73; |
padding: 2px; |
background-color: #f7f8fd; |
cursor: default; |
} |
.MN_Menu, .MN_Menu .MN_Label |
{ |
font-size: 11px; |
font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif; |
} |
.MN_Item_Padding |
{ |
visibility: hidden; |
width: 3px; |
height: 20px; |
} |
.MN_Icon |
{ |
background-color: #d6dff7; |
text-align: center; |
height: 20px; |
} |
.MN_Label |
{ |
padding-left: 3px; |
padding-right: 3px; |
} |
.MN_Separator |
{ |
height: 3px; |
} |
.MN_Separator_Line |
{ |
border-top: #b9b99d 1px solid; |
} |
.MN_Item .MN_Icon IMG |
{ |
filter: alpha(opacity=70); |
opacity: 0.70; |
} |
.MN_Item_Over |
{ |
color: #ffffff; |
background-color: #7096FA; |
} |
.MN_Item_Over .MN_Icon |
{ |
background-color: #466ca6; |
} |
.MN_Item_Disabled IMG |
{ |
filter: gray() alpha(opacity=30); /* IE */ |
opacity: 0.30; /* Safari, Opera and Mozilla */ |
} |
.MN_Item_Disabled .MN_Label |
{ |
color: #b7b7b7; |
} |
.MN_Arrow |
{ |
padding-right: 3px; |
padding-left: 3px; |
} |
.MN_ConnectionLine |
{ |
background-color: #f7f8fd; |
} |
.Menu .TB_Button_On, .Menu .TB_Button_On_Over |
{ |
border: #8f8f73 1px solid; |
background-color: #f7f8fd; |
} |
/* |
### Panel Styles |
*/ |
.FCK_Panel |
{ |
border: #8f8f73 1px solid; |
padding: 2px; |
background-color: #f7f8fd; |
} |
.FCK_Panel, .FCK_Panel TD |
{ |
font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif; |
font-size: 11px; |
} |
/* |
### Special Combos |
*/ |
.SC_Panel |
{ |
overflow: auto; |
white-space: nowrap; |
cursor: default; |
border: 1px solid #8f8f73; |
padding-left: 2px; |
padding-right: 2px; |
background-color: #ffffff; |
} |
.SC_Panel, .SC_Panel TD |
{ |
font-size: 11px; |
font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif; |
} |
.SC_Item, .SC_ItemSelected |
{ |
margin-top: 2px; |
margin-bottom: 2px; |
background-position: left center; |
padding-left: 11px; |
padding-right: 3px; |
padding-top: 2px; |
padding-bottom: 2px; |
text-overflow: ellipsis; |
overflow: hidden; |
background-repeat: no-repeat; |
border: #dddddd 1px solid; |
} |
.SC_Item *, .SC_ItemSelected * |
{ |
margin-top: 0px; |
margin-bottom: 0px; |
} |
.SC_ItemSelected |
{ |
border: #9a9afb 1px solid; |
background-image: url(images/toolbar.arrowright.gif); |
} |
.SC_ItemOver |
{ |
border: #316ac5 1px solid; |
} |
.SC_Field |
{ |
margin-top: 2px ; |
border: #b7b7a6 1px solid; |
cursor: default; |
} |
.SC_FieldCaption |
{ |
overflow: visible; |
padding-right: 5px; |
padding-left: 5px; |
opacity: 0.75; /* Safari, Opera and Mozilla */ |
filter: alpha(opacity=70); /* IE */ /* -moz-opacity: 0.75; Mozilla (Old) */ |
height: 23px; |
background-color: #d6dff7; /* Needed because of a bug on ClearType */ |
background-image: url(images/toolbar.bg.gif); |
background-repeat: repeat-x; |
/* background-color: inherit; Maybe this is needed wait to check */ |
} |
.SC_FieldLabel |
{ |
white-space: nowrap; |
padding: 2px; |
width: 100%; |
cursor: default; |
background-color: #ffffff; |
text-overflow: ellipsis; |
overflow: hidden; |
} |
.SC_FieldButton |
{ |
background-position: center center; |
background-image: url(images/toolbar.buttonarrow.gif); |
border-left: #b7b7a6 1px solid; |
width: 14px; |
background-repeat: no-repeat; |
} |
.SC_FieldDisabled .SC_FieldButton, .SC_FieldDisabled .SC_FieldCaption |
{ |
opacity: 0.30; /* Safari, Opera and Mozilla */ |
filter: gray() alpha(opacity=30); /* IE */ /* -moz-opacity: 0.30; Mozilla (Old) */ |
} |
.SC_FieldOver |
{ |
border: #316ac5 1px solid; |
} |
.SC_FieldOver .SC_FieldButton |
{ |
border-left: #316ac5 1px solid; |
} |
/* |
### Color Selector Panel |
*/ |
.ColorBoxBorder |
{ |
border: #808080 1px solid; |
position: static; |
} |
.ColorBox |
{ |
font-size: 1px; |
width: 10px; |
position: static; |
height: 10px; |
} |
.ColorDeselected, .ColorSelected |
{ |
cursor: default; |
} |
.ColorDeselected |
{ |
border: #ffffff 1px solid; |
padding: 2px; |
float: left; |
} |
.ColorSelected |
{ |
border: #330066 1px solid; |
padding: 2px; |
float: left; |
background-color: #c4cdd6; |
} |
/branches/v1.0-menes/api/fckeditor/editor/skins/office2003/images/toolbar.collapse.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/skins/office2003/images/toolbar.collapse.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/skins/office2003/images/toolbar.buttonarrow.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/skins/office2003/images/toolbar.buttonarrow.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/skins/office2003/images/toolbar.end.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/skins/office2003/images/toolbar.end.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/skins/office2003/images/toolbar.arrowright.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/skins/office2003/images/toolbar.arrowright.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/skins/office2003/images/toolbar.bg.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/skins/office2003/images/toolbar.bg.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/skins/office2003/images/toolbar.start.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/skins/office2003/images/toolbar.start.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/skins/office2003/images/toolbar.expand.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/skins/office2003/images/toolbar.expand.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/skins/office2003/images/toolbar.separator.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/skins/office2003/images/toolbar.separator.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/skins/default/fck_strip.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/skins/default/fck_strip.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/skins/default/fck_dialog.css |
---|
New file |
0,0 → 1,131 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fck_dialog.css |
* Styles used by the dialog boxes. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
body |
{ |
margin: 0px; |
padding: 10px; |
} |
body, td, input, select, textarea |
{ |
font-size: 11px; |
font-family: 'Microsoft Sans Serif' , Arial, Helvetica, Verdana; |
} |
body, .BackColor |
{ |
background-color: #f1f1e3; |
} |
.PopupBody |
{ |
margin: 0px; |
padding: 0px; |
} |
.PopupTitle |
{ |
font-weight: bold; |
font-size: 14pt; |
color: #737357; |
background-color: #e3e3c7; |
padding: 3px 10px 3px 10px; |
} |
.PopupButtons |
{ |
border-top: #d5d59d 1px solid; |
background-color: #e3e3c7; |
padding: 7px 10px 7px 10px; |
} |
.Button |
{ |
border-right: #737357 1px solid; |
border-top: #737357 1px solid; |
border-left: #737357 1px solid; |
color: #3b3b1f; |
border-bottom: #737357 1px solid; |
background-color: #c7c78f; |
} |
.DarkBackground |
{ |
background-color: #d7d79f; |
} |
.LightBackground |
{ |
background-color: #ffffbe; |
} |
.PopupTitleBorder |
{ |
border-bottom: #d5d59d 1px solid; |
} |
.PopupTabArea |
{ |
color: #737357; |
background-color: #e3e3c7; |
} |
.PopupTabEmptyArea |
{ |
padding-left: 10px ; |
border-bottom: #d5d59d 1px solid; |
} |
.PopupTab, .PopupTabSelected |
{ |
border-right: #d5d59d 1px solid; |
border-top: #d5d59d 1px solid; |
border-left: #d5d59d 1px solid; |
padding-right: 5px; |
padding-left: 5px; |
padding-bottom: 3px; |
padding-top: 3px; |
color: #737357; |
} |
.PopupTab |
{ |
margin-top: 1px; |
border-bottom: #d5d59d 1px solid; |
cursor: pointer; |
cursor: hand; |
} |
.PopupTabSelected |
{ |
font-weight:bold; |
cursor: default; |
padding-top: 4px; |
border-bottom: #f1f1e3 1px solid; |
background-color: #f1f1e3; |
} |
.PopupSelectionBox |
{ |
border: #ff9933 1px solid !important; |
background-color: #fffacd !important; |
cursor: pointer; |
cursor: hand; |
} |
/branches/v1.0-menes/api/fckeditor/editor/skins/default/fck_editor.css |
---|
New file |
0,0 → 1,459 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fck_editor.css |
* Styles used by the editor IFRAME and Toolbar. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
/* |
### Basic Editor IFRAME Styles. |
*/ |
body |
{ |
padding: 1px 1px 1px 1px; |
margin: 0px 0px 0px 0px; |
} |
#xEditingArea |
{ |
border: #696969 1px solid; |
} |
.SourceField |
{ |
padding: 5px; |
margin: 0px; |
font-family: Monospace; |
} |
/* |
Toolbar |
*/ |
.TB_ToolbarSet, .TB_Expand, .TB_Collapse |
{ |
cursor: default; |
background-color: #efefde; |
} |
.TB_ToolbarSet |
{ |
border-top: #efefde 1px outset; |
border-bottom: #efefde 1px outset; |
} |
.TB_ToolbarSet TD |
{ |
font-size: 11px; |
font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif; |
} |
.TB_Toolbar |
{ |
display: inline-table; /* inline = Opera jumping buttons bug */ |
} |
.TB_Separator |
{ |
width: 1px; |
height: 16px; |
margin: 2px; |
background-color: #999966; |
} |
.TB_Start |
{ |
background-image: url(images/toolbar.start.gif); |
margin: 2px; |
width: 3px; |
background-repeat: no-repeat; |
height: 16px; |
} |
.TB_End |
{ |
display: none; |
} |
.TB_ExpandImg |
{ |
background-image: url(images/toolbar.expand.gif); |
background-repeat: no-repeat; |
} |
.TB_CollapseImg |
{ |
background-image: url(images/toolbar.collapse.gif); |
background-repeat: no-repeat; |
} |
.TB_SideBorder |
{ |
background-color: #696969; |
} |
.TB_Expand, .TB_Collapse |
{ |
padding: 2px 2px 2px 2px; |
border: #efefde 1px outset; |
} |
.TB_Collapse |
{ |
width: 5px; |
} |
.TB_Break |
{ |
height: 24px; /* IE needs the height to be set, otherwise no break */ |
} |
/* |
Toolbar Button |
*/ |
.TB_Button_On, .TB_Button_Off, .TB_Button_On_Over, .TB_Button_Off_Over, .TB_Button_Disabled |
{ |
border: #efefde 1px solid; /* This is the default border */ |
height: 22px; /* The height is necessary, otherwise IE will not apply the alpha */ |
} |
.TB_Button_On |
{ |
border: #316ac5 1px solid; |
background-color: #c1d2ee; |
} |
.TB_Button_On_Over, .TB_Button_Off_Over |
{ |
border: #316ac5 1px solid; |
background-color: #dff1ff; |
} |
.TB_Button_Off |
{ |
filter: alpha(opacity=70); /* IE */ |
opacity: 0.70; /* Safari, Opera and Mozilla */ |
} |
.TB_Button_Disabled |
{ |
filter: gray() alpha(opacity=30); /* IE */ |
opacity: 0.30; /* Safari, Opera and Mozilla */ |
} |
.TB_Button_Padding |
{ |
visibility: hidden; |
width: 3px; |
height: 22px; |
} |
.TB_Button_Image |
{ |
overflow: hidden; |
width: 16px; |
height: 16px; |
margin: 3px; |
background-repeat: no-repeat; |
} |
.TB_Button_Image img |
{ |
position: relative; |
} |
.TB_Button_Off .TB_Button_Text |
{ |
background-color: #efefde; /* Needed because of a bug on Clear Type */ |
} |
.TB_ConnectionLine |
{ |
background-color: #ffffff; |
height: 1px; |
margin-left: 1px; /* ltr */ |
margin-right: 1px; /* rtl */ |
} |
.TB_Text |
{ |
height: 22px; |
} |
.TB_Button_Off .TB_Text |
{ |
background-color: #efefde ; /* Needed because of a bug on ClearType */ |
} |
.TB_Button_On_Over .TB_Text |
{ |
background-color: #dff1ff ; /* Needed because of a bug on ClearType */ |
} |
/* |
Menu |
*/ |
.MN_Menu |
{ |
border: 1px solid #8f8f73; |
padding: 2px; |
background-color: #ffffff; |
cursor: default; |
} |
.MN_Menu, .MN_Menu .MN_Label |
{ |
font-size: 11px; |
font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif; |
} |
.MN_Item_Padding |
{ |
visibility: hidden; |
width: 3px; |
height: 20px; |
} |
.MN_Icon |
{ |
background-color: #e3e3c7; |
text-align: center; |
height: 20px; |
} |
.MN_Label |
{ |
padding-left: 3px; |
padding-right: 3px; |
} |
.MN_Separator |
{ |
height: 3px; |
} |
.MN_Separator_Line |
{ |
border-top: #b9b99d 1px solid; |
} |
.MN_Item .MN_Icon IMG |
{ |
filter: alpha(opacity=70); |
opacity: 0.70; |
} |
.MN_Item_Over |
{ |
color: #ffffff; |
background-color: #8f8f73; |
} |
.MN_Item_Over .MN_Icon |
{ |
background-color: #737357; |
} |
.MN_Item_Disabled IMG |
{ |
filter: gray() alpha(opacity=30); /* IE */ |
opacity: 0.30; /* Safari, Opera and Mozilla */ |
} |
.MN_Item_Disabled .MN_Label |
{ |
color: #b7b7b7; |
} |
.MN_Arrow |
{ |
padding-right: 3px; |
padding-left: 3px; |
} |
.MN_ConnectionLine |
{ |
background-color: #ffffff; |
} |
.Menu .TB_Button_On, .Menu .TB_Button_On_Over |
{ |
border: #8f8f73 1px solid; |
background-color: #ffffff; |
} |
/* |
### Panel Styles |
*/ |
.FCK_Panel |
{ |
border: #8f8f73 1px solid; |
padding: 2px; |
background-color: #ffffff; |
} |
.FCK_Panel, .FCK_Panel TD |
{ |
font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif; |
font-size: 11px; |
} |
/* |
### Special Combos |
*/ |
.SC_Panel |
{ |
overflow: auto; |
white-space: nowrap; |
cursor: default; |
border: 1px solid #8f8f73; |
padding-left: 2px; |
padding-right: 2px; |
background-color: #ffffff; |
} |
.SC_Panel, .SC_Panel TD |
{ |
font-size: 11px; |
font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif; |
} |
.SC_Item, .SC_ItemSelected |
{ |
margin-top: 2px; |
margin-bottom: 2px; |
background-position: left center; |
padding-left: 11px; |
padding-right: 3px; |
padding-top: 2px; |
padding-bottom: 2px; |
text-overflow: ellipsis; |
overflow: hidden; |
background-repeat: no-repeat; |
border: #dddddd 1px solid; |
} |
.SC_Item *, .SC_ItemSelected * |
{ |
margin-top: 0px; |
margin-bottom: 0px; |
} |
.SC_ItemSelected |
{ |
border: #9a9afb 1px solid; |
background-image: url(images/toolbar.arrowright.gif); |
} |
.SC_ItemOver |
{ |
border: #316ac5 1px solid; |
} |
.SC_Field |
{ |
border: #b7b7a6 1px solid; |
cursor: default; |
} |
.SC_FieldCaption |
{ |
overflow: visible; |
padding-right: 5px; |
padding-left: 5px; |
opacity: 0.75; /* Safari, Opera and Mozilla */ |
filter: alpha(opacity=70); /* IE */ /* -moz-opacity: 0.75; Mozilla (Old) */ |
height: 23px; |
background-color: #efefde; |
} |
.SC_FieldLabel |
{ |
white-space: nowrap; |
padding: 2px; |
width: 100%; |
cursor: default; |
background-color: #ffffff; |
text-overflow: ellipsis; |
overflow: hidden; |
} |
.SC_FieldButton |
{ |
background-position: center center; |
background-image: url(images/toolbar.buttonarrow.gif); |
border-left: #b7b7a6 1px solid; |
width: 14px; |
background-repeat: no-repeat; |
} |
.SC_FieldDisabled .SC_FieldButton, .SC_FieldDisabled .SC_FieldCaption |
{ |
opacity: 0.30; /* Safari, Opera and Mozilla */ |
filter: gray() alpha(opacity=30); /* IE */ /* -moz-opacity: 0.30; Mozilla (Old) */ |
} |
.SC_FieldOver |
{ |
border: #316ac5 1px solid; |
} |
.SC_FieldOver .SC_FieldButton |
{ |
border-left: #316ac5 1px solid; |
} |
/* |
### Color Selector Panel |
*/ |
.ColorBoxBorder |
{ |
border: #808080 1px solid; |
position: static; |
} |
.ColorBox |
{ |
font-size: 1px; |
width: 10px; |
position: static; |
height: 10px; |
} |
.ColorDeselected, .ColorSelected |
{ |
cursor: default; |
} |
.ColorDeselected |
{ |
border: #ffffff 1px solid; |
padding: 2px; |
float: left; |
} |
.ColorSelected |
{ |
border: #330066 1px solid; |
padding: 2px; |
float: left; |
background-color: #c4cdd6; |
} |
/branches/v1.0-menes/api/fckeditor/editor/skins/default/images/toolbar.start.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/skins/default/images/toolbar.start.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/skins/default/images/toolbar.expand.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/skins/default/images/toolbar.expand.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/skins/default/images/toolbar.separator.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/skins/default/images/toolbar.separator.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/skins/default/images/toolbar.collapse.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/skins/default/images/toolbar.collapse.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/skins/default/images/toolbar.buttonarrow.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/skins/default/images/toolbar.buttonarrow.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/skins/default/images/toolbar.end.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/skins/default/images/toolbar.end.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/skins/default/images/toolbar.arrowright.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/skins/default/images/toolbar.arrowright.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/skins/silver/images/toolbar.arrowright.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/skins/silver/images/toolbar.arrowright.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/skins/silver/images/toolbar.start.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/skins/silver/images/toolbar.start.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/skins/silver/images/toolbar.expand.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/skins/silver/images/toolbar.expand.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/skins/silver/images/toolbar.separator.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/skins/silver/images/toolbar.separator.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/skins/silver/images/toolbar.collapse.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/skins/silver/images/toolbar.collapse.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/skins/silver/images/toolbar.buttonbg.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/skins/silver/images/toolbar.buttonbg.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/skins/silver/images/toolbar.buttonarrow.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/skins/silver/images/toolbar.buttonarrow.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/skins/silver/images/toolbar.end.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/skins/silver/images/toolbar.end.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/skins/silver/fck_strip.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/skins/silver/fck_strip.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/skins/silver/fck_dialog.css |
---|
New file |
0,0 → 1,132 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fck_dialog.css |
* Styles used by the dialog boxes. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
body |
{ |
margin: 0px; |
padding: 10px; |
background-color: #f7f7f7; |
} |
body, td, input, select, textarea |
{ |
font-size: 11px; |
font-family: 'Microsoft Sans Serif' , Arial, Helvetica, Verdana; |
} |
body, .BackColor |
{ |
background-color: #f7f7f7; |
} |
.PopupBody |
{ |
margin: 0px; |
padding: 0px; |
} |
.PopupTitle |
{ |
padding-right: 10px; |
padding-left: 10px; |
font-weight: bold; |
font-size: 14pt; |
padding-bottom: 3px; |
color: #504845; |
padding-top: 3px; |
background-color: #dedede; |
} |
.PopupButtons |
{ |
border-top: #cec6b5 1px solid; |
background-color: #DEDEDE; |
padding: 7px 10px 7px 10px; |
} |
.Button |
{ |
border: #7a7261 1px solid; |
color: #504845; |
background-color: #cec6b5; |
} |
.DarkBackground |
{ |
background-color: #d7d79f; |
} |
.LightBackground |
{ |
background-color: #ffffbe; |
} |
.PopupTitleBorder |
{ |
border-bottom: #cec6b5 1px solid; |
} |
.PopupTabArea |
{ |
color: #504845; |
background-color: #DEDEDE; |
} |
.PopupTabEmptyArea |
{ |
padding-left: 10px ; |
border-bottom: #cec6b5 1px solid; |
} |
.PopupTab, .PopupTabSelected |
{ |
border-right: #cec6b5 1px solid; |
border-top: #cec6b5 1px solid; |
border-left: #cec6b5 1px solid; |
padding-right: 5px; |
padding-left: 5px; |
padding-bottom: 3px; |
padding-top: 3px; |
color: #504845; |
} |
.PopupTab |
{ |
margin-top: 1px; |
border-bottom: #cec6b5 1px solid; |
cursor: pointer; |
cursor: hand; |
} |
.PopupTabSelected |
{ |
font-weight:bold; |
cursor: default; |
padding-top: 4px; |
border-bottom: #f1f1e3 1px solid; |
background-color: #f7f7f7; |
} |
.PopupSelectionBox |
{ |
border: #a9a9a9 1px solid !important; |
background-color: #dcdcdc !important; |
cursor: pointer; |
cursor: hand; |
} |
/branches/v1.0-menes/api/fckeditor/editor/skins/silver/fck_editor.css |
---|
New file |
0,0 → 1,470 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fck_editor.css |
* Styles used by the editor IFRAME and Toolbar. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
* gazou[Fr] |
*/ |
/* |
### Basic Editor IFRAME Styles. |
*/ |
body |
{ |
padding: 1px 1px 1px 1px; |
margin: 0px 0px 0px 0px; |
} |
#xEditingArea |
{ |
border: #696969 1px solid; |
} |
.SourceField |
{ |
padding: 5px; |
margin: 0px; |
font-family: Monospace; |
} |
/* |
Toolbar |
*/ |
.TB_ToolbarSet, .TB_Expand, .TB_Collapse |
{ |
cursor: default; |
background-color: #f7f7f7; |
} |
.TB_ToolbarSet |
{ |
padding: 1px; |
border-top: #efefde 1px outset; |
border-bottom: #efefde 1px outset; |
} |
.TB_ToolbarSet TD |
{ |
font-size: 11px; |
font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif; |
} |
.TB_Toolbar |
{ |
display: inline-table; |
} |
.TB_Separator |
{ |
width: 1px; |
height: 21px; |
margin: 2px; |
background-color: #C6C3BD; |
} |
.TB_Start |
{ |
background-image: url(images/toolbar.start.gif); |
margin-left: 2px; |
margin-right: 2px; |
width: 3px; |
background-repeat: no-repeat; |
height: 27px; |
background-position: center center; |
} |
.TB_End |
{ |
display: none; |
} |
.TB_ExpandImg |
{ |
background-image: url(images/toolbar.expand.gif); |
background-repeat: no-repeat; |
} |
.TB_CollapseImg |
{ |
background-image: url(images/toolbar.collapse.gif); |
background-repeat: no-repeat; |
} |
.TB_SideBorder |
{ |
background-color: #696969; |
} |
.TB_Expand, .TB_Collapse |
{ |
padding: 2px 2px 2px 2px; |
border: #efefde 1px outset; |
} |
.TB_Collapse |
{ |
border: #efefde 1px outset; |
width: 5px; |
} |
.TB_Break |
{ |
height: 27px; |
} |
/* |
Toolbar Button |
*/ |
.TB_Button_On, .TB_Button_Off, .TB_Button_On_Over, .TB_Button_Off_Over, .TB_Button_Disabled |
{ |
padding: 1px ; |
margin:1px; |
height: 21px; |
} |
.TB_Button_On, .TB_Button_Off, .TB_Button_On_Over, .TB_Button_Off_Over, .TB_Button_Disabled |
{ |
border: #cec6b5 1px solid; |
} |
.TB_Button_On |
{ |
border-color: #316ac5; |
background-color: #c1d2ee; |
} |
.TB_Button_On_Over, .TB_Button_Off_Over |
{ |
border: #316ac5 1px solid; |
background-color: #dff1ff; |
} |
.TB_Button_Off |
{ |
background: #efefef url(images/toolbar.buttonbg.gif) repeat-x; |
} |
.TB_Button_Off, .TB_Combo_Off |
{ |
opacity: 0.70; /* Safari, Opera and Mozilla */ |
filter: alpha(opacity=70); /* IE */ |
/* -moz-opacity: 0.70; Mozilla (Old) */ |
} |
.TB_Button_Disabled |
{ |
opacity: 0.30; /* Safari, Opera and Mozilla */ |
filter: gray() alpha(opacity=30); /* IE */ |
} |
.TB_Button_Padding |
{ |
visibility: hidden; |
width: 3px; |
height: 21px; |
} |
.TB_Button_Image |
{ |
overflow: hidden; |
width: 16px; |
height: 16px; |
margin: 3px; |
margin-top: 4px; |
margin-bottom: 2px; |
background-repeat: no-repeat; |
} |
/* For composed button ( icon + text, icon + arrow ), we must compensate the table */ |
.TB_Button_On TABLE .TB_Button_Image, |
.TB_Button_Off TABLE .TB_Button_Image, |
.TB_Button_On_Over TABLE .TB_Button_Image, |
.TB_Button_Off_Over TABLE .TB_Button_Image, |
.TB_Button_Disabled TABLE .TB_Button_Image |
{ |
margin-top: 3px; |
} |
.TB_Button_Image img |
{ |
position: relative; |
} |
.TB_ConnectionLine |
{ |
background-color: #ffffff; |
height: 1px; |
margin-left: 1px; /* ltr */ |
margin-right: 1px; /* rtl */ |
} |
/* |
Menu |
*/ |
.MN_Menu |
{ |
border: 1px solid #8f8f73; |
padding: 2px; |
background-color: #f7f7f7; |
cursor: default; |
} |
.MN_Menu, .MN_Menu .MN_Label |
{ |
font-size: 11px; |
font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif; |
} |
.MN_Item_Padding |
{ |
visibility: hidden; |
width: 3px; |
height: 20px; |
} |
.MN_Icon |
{ |
background-color: #dedede; |
text-align: center; |
height: 20px; |
} |
.MN_Label |
{ |
padding-left: 3px; |
padding-right: 3px; |
} |
.MN_Separator |
{ |
height: 3px; |
} |
.MN_Separator_Line |
{ |
border-top: #b9b99d 1px solid; |
} |
.MN_Item .MN_Icon IMG |
{ |
filter: alpha(opacity=70); |
opacity: 0.70; |
} |
.MN_Item_Over |
{ |
color: #ffffff; |
background-color: #8a857d; |
} |
.MN_Item_Over .MN_Icon |
{ |
background-color: #6c6761; |
} |
.MN_Item_Disabled IMG |
{ |
filter: gray() alpha(opacity=30); /* IE */ |
opacity: 0.30; /* Safari, Opera and Mozilla */ |
} |
.MN_Item_Disabled .MN_Label |
{ |
color: #b7b7b7; |
} |
.MN_Arrow |
{ |
padding-right: 3px; |
padding-left: 3px; |
} |
.MN_ConnectionLine |
{ |
background-color: #ffffff; |
} |
.Menu .TB_Button_On, .Menu .TB_Button_On_Over |
{ |
border: #8f8f73 1px solid; |
background-color: #ffffff; |
} |
/* |
### Panel Styles |
*/ |
.FCK_Panel |
{ |
border: #8f8f73 1px solid; |
padding: 2px; |
background-color: #ffffff; |
} |
.FCK_Panel, .FCK_Panel TD |
{ |
font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif; |
font-size: 11px; |
} |
/* |
### Special Combos |
*/ |
.SC_Panel |
{ |
overflow: auto; |
white-space: nowrap; |
cursor: default; |
border: 1px solid #8f8f73; |
padding-left: 2px; |
padding-right: 2px; |
background-color: #ffffff; |
} |
.SC_Panel, .SC_Panel TD |
{ |
font-size: 11px; |
font-family: 'Microsoft Sans Serif' , Tahoma, Arial, Verdana, Sans-Serif; |
} |
.SC_Item, .SC_ItemSelected |
{ |
margin-top: 2px; |
margin-bottom: 2px; |
background-position: left center; |
padding-left: 11px; |
padding-right: 3px; |
padding-top: 2px; |
padding-bottom: 2px; |
text-overflow: ellipsis; |
overflow: hidden; |
background-repeat: no-repeat; |
border: #dddddd 1px solid; |
} |
.SC_Item *, .SC_ItemSelected * |
{ |
margin-top: 0px; |
margin-bottom: 0px; |
} |
.SC_ItemSelected |
{ |
border: #9a9afb 1px solid; |
background-image: url(images/toolbar.arrowright.gif); |
} |
.SC_ItemOver |
{ |
border: #316ac5 1px solid; |
} |
.SC_Field |
{ |
margin-top:1px ; |
border: #b7b7a6 1px solid; |
cursor: default; |
} |
.SC_FieldCaption |
{ |
padding-top: 1px ; |
overflow: visible; |
padding-right: 5px; |
padding-left: 5px; |
opacity: 0.75; /* Safari, Opera and Mozilla */ |
filter: alpha(opacity=70); /* IE */ /* -moz-opacity: 0.75; Mozilla (Old) */ |
height: 23px; |
background-color: #f7f7f7; |
} |
.SC_FieldLabel |
{ |
white-space: nowrap; |
padding: 2px; |
width: 100%; |
cursor: default; |
background-color: #ffffff; |
text-overflow: ellipsis; |
overflow: hidden; |
} |
.SC_FieldButton |
{ |
background-position: center center; |
background-image: url(images/toolbar.buttonarrow.gif); |
border-left: #b7b7a6 1px solid; |
width: 14px; |
background-repeat: no-repeat; |
} |
.SC_FieldDisabled .SC_FieldButton, .SC_FieldDisabled .SC_FieldCaption |
{ |
opacity: 0.30; /* Safari, Opera and Mozilla */ |
filter: gray() alpha(opacity=30); /* IE */ /* -moz-opacity: 0.30; Mozilla (Old) */ |
} |
.SC_FieldOver |
{ |
border: #316ac5 1px solid; |
} |
.SC_FieldOver .SC_FieldButton |
{ |
border-left: #316ac5 1px solid; |
} |
/* |
### Color Selector Panel |
*/ |
.ColorBoxBorder |
{ |
border: #808080 1px solid; |
position: static; |
} |
.ColorBox |
{ |
font-size: 1px; |
width: 10px; |
position: static; |
height: 10px; |
} |
.ColorDeselected, .ColorSelected |
{ |
cursor: default; |
} |
.ColorDeselected |
{ |
border: #ffffff 1px solid; |
padding: 2px; |
float: left; |
} |
.ColorSelected |
{ |
border: #316ac5 1px solid; |
padding: 2px; |
float: left; |
background-color: #c1d2ee; |
} |
/branches/v1.0-menes/api/fckeditor/editor/skins/_fckviewstrips.html |
---|
New file |
0,0 → 1,118 |
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> |
<!-- |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: _fckviewstrips.html |
* Useful page that enumerates all icons in the skins strips. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
--> |
<html xmlns="http://www.w3.org/1999/xhtml"> |
<head> |
<title>FCKeditor - View Icons Strips</title> |
<style type="text/css"> |
.TB_Button_Image |
{ |
overflow: hidden; |
width: 16px; |
height: 16px; |
margin: 3px; |
background-repeat: no-repeat; |
} |
.TB_Button_Image img |
{ |
position: relative; |
} |
</style> |
<script type="text/javascript"> |
window.onload = function() |
{ |
var eImg1 = document.createElement( 'img' ) ; |
eImg1.onreadystatechange = Img_OnReadyStateChange ; |
eImg1.src = 'default/fck_strip.gif' ; |
var eImg2 = document.createElement( 'img' ) ; |
eImg2.onreadystatechange = Img_OnReadyStateChange ; |
eImg2.src = 'office2003/fck_strip.gif' ; |
var eImg3 = document.createElement( 'img' ) ; |
eImg3.onreadystatechange = Img_OnReadyStateChange ; |
eImg3.src = 'silver/fck_strip.gif' ; |
} |
var iTotalStrips = 3 ; |
var iMaxHeight = 0 ; |
function Img_OnReadyStateChange() |
{ |
if ( this.readyState == 'complete' ) |
{ |
if ( iMaxHeight < this.height ) |
iMaxHeight = this.height ; |
iTotalStrips-- ; |
if ( iTotalStrips == 0 ) |
LoadIcons( iMaxHeight / 16 ) ; |
} |
} |
function LoadIcons( total ) |
{ |
for ( var i = 0 ; i < total ; i++ ) |
{ |
var eRow = xIconsTable.insertRow(-1) ; |
var eCell = eRow.insertCell(-1) ; |
eCell.innerHTML = i + 1 ; |
eCell = eRow.insertCell(-1) ; |
eCell.align = 'center' ; |
eCell.style.border = '#dcdcdc 1px solid' ; |
eCell.innerHTML = '<div class="TB_Button_Image"><img src="default/fck_strip.gif" style="top=-' + ( i * 16 ) + 'px;"></div>' ; |
eCell = eRow.insertCell(-1) ; |
eCell.align = 'center' ; |
eCell.style.border = '#dcdcdc 1px solid' ; |
eCell.innerHTML = '<div class="TB_Button_Image"><img src="office2003/fck_strip.gif" style="top=-' + ( i * 16 ) + 'px;"></div>' ; |
eCell = eRow.insertCell(-1) ; |
eCell.align = 'center' ; |
eCell.style.border = '#dcdcdc 1px solid' ; |
eCell.innerHTML = '<div class="TB_Button_Image"><img src="silver/fck_strip.gif" style="top=-' + ( i * 16 ) + 'px;"></div>' ; |
} |
} |
</script> |
</head> |
<body> |
<table id="xIconsTable"> |
<tr> |
<td rowspan="2"> |
Index</td> |
<td align="center" colspan="3"> |
Skins</td> |
</tr> |
<tr> |
<td width="80" align="center"> |
default</td> |
<td width="80" align="center"> |
office2003</td> |
<td width="80" align="center"> |
silver</td> |
</tr> |
</table> |
</body> |
</html> |
/branches/v1.0-menes/api/fckeditor/editor/css/images/fck_anchor.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/css/images/fck_anchor.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/css/images/fck_flashlogo.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/css/images/fck_flashlogo.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/css/images/fck_pagebreak.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/css/images/fck_pagebreak.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/css/fck_internal.css |
---|
New file |
0,0 → 1,88 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fck_internal.css |
* This CSS Style Sheet defines rules used by the editor for its internal use. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
/* Fix to allow putting the caret at the end of the |
content in Firefox if clicking below the content */ |
html |
{ |
min-height:100%; |
} |
table.FCK__ShowTableBorders, table.FCK__ShowTableBorders td, table.FCK__ShowTableBorders th |
{ |
border: #d3d3d3 1px solid; |
} |
form |
{ |
border: 1px dotted #FF0000; |
padding: 2px; |
} |
.FCK__Flash |
{ |
border: darkgray 1px solid; |
background-position: center center; |
background-image: url(images/fck_flashlogo.gif); |
background-repeat: no-repeat; |
width: 80px; |
height: 80px; |
} |
.FCK__Anchor |
{ |
background-position: center center; |
background-image: url(images/fck_anchor.gif); |
background-repeat: no-repeat; |
width: 16px; |
height: 15px; |
} |
.FCK__PageBreak |
{ |
background-position: center center; |
background-image: url(images/fck_pagebreak.gif); |
background-repeat: no-repeat; |
clear: both; |
display: block; |
float: none; |
width: 100%; |
border-top: #999999 1px dotted; |
border-bottom: #999999 1px dotted; |
border-right: 0px; |
border-left: 0px; |
height: 5px; |
} |
input[type="hidden"] |
{ |
display: inline; |
width:20px; |
height:20px; |
border:1px dotted #FF0000 ; |
background-image: url(behaviors/hiddenfield.gif); |
background-repeat: no-repeat; |
} |
input[type="hidden"]:after |
{ |
padding-left: 20px; |
content: "" ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/css/fck_editorarea.css |
---|
New file |
0,0 → 1,92 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fck_editorarea.css |
* This is the default CSS file used by the editor area. It defines the |
* initial font of the editor and background color. |
* |
* A user can configure the editor to use another CSS file. Just change |
* the value of the FCKConfig.EditorAreaCSS key in the configuration |
* file. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
/* |
The "body" styles should match your editor web site, mainly regarding |
background color and font family and size. |
*/ |
body |
{ |
background-color: #ffffff; |
padding: 5px 5px 5px 5px; |
margin: 0px; |
} |
body, td |
{ |
font-family: Arial, Verdana, Sans-Serif; |
font-size: 12px; |
} |
a |
{ |
color: #0000FF !important; /* For Firefox... mark as important, otherwise it becomes black */ |
} |
h3 |
{ |
color: #000080; |
} |
/* |
Just uncomment the following block if you want to avoid spaces between |
paragraphs. Remember to apply the same style in your output front end page. |
*/ |
/* |
P, UL, LI |
{ |
margin-top: 0px; |
margin-bottom: 0px; |
} |
*/ |
/* |
The following are some sample styles used in the "Styles" toolbar command. |
You should instead remove them, and include the styles used by the site |
you are using the editor in. |
*/ |
.Bold |
{ |
font-weight: bold; |
} |
.Title |
{ |
font-weight: bold; |
font-size: 18px; |
color: #cc3300; |
} |
.Code |
{ |
border: #8b4513 1px solid; |
padding-right: 5px; |
padding-left: 5px; |
color: #000066; |
font-family: 'Courier New' , Monospace; |
background-color: #ff9933; |
} |
/branches/v1.0-menes/api/fckeditor/editor/css/fck_showtableborders_gecko.css |
---|
New file |
0,0 → 1,38 |
/* |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fck_showtableborders_gecko.css |
* This CSS Style Sheet defines the rules to show table borders on Gecko. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
*/ |
/* For tables with the "border" attribute set to "0" */ |
table[border="0"], |
table[border="0"] > tr > td, table[border="0"] > tr > th, |
table[border="0"] > tbody > tr > td, table[border="0"] > tbody > tr > th, |
table[border="0"] > thead > tr > td, table[border="0"] > thead > tr > th, |
table[border="0"] > tfoot > tr > td, table[border="0"] > tfoot > tr > th |
{ |
border: #d3d3d3 1px dotted ; |
} |
/* For tables with no "border" attribute set */ |
table:not([border]), |
table:not([border]) > tr > td, table:not([border]) > tr > th, |
table:not([border]) > tbody > tr > td, table:not([border]) > tbody > tr > th, |
table:not([border]) > thead > tr > td, table:not([border]) > thead > tr > th, |
table:not([border]) > tfoot > tr > td, table:not([border]) > tfoot > tr > th |
{ |
border: #d3d3d3 1px dotted ; |
} |
/branches/v1.0-menes/api/fckeditor/editor/css/behaviors/hiddenfield.htc |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/css/behaviors/hiddenfield.htc |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/css/behaviors/disablehandles.htc |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/css/behaviors/disablehandles.htc |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/css/behaviors/hiddenfield.gif |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/css/behaviors/hiddenfield.gif |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/editor/css/behaviors/showtableborders.htc |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/branches/v1.0-menes/api/fckeditor/editor/css/behaviors/showtableborders.htc |
---|
New file |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/branches/v1.0-menes/api/fckeditor/fckstyles.xml |
---|
New file |
0,0 → 1,48 |
<?xml version="1.0" encoding="utf-8" ?> |
<!-- |
* FCKeditor - The text editor for internet |
* Copyright (C) 2003-2006 Frederico Caldeira Knabben |
* |
* Licensed under the terms of the GNU Lesser General Public License: |
* http://www.opensource.org/licenses/lgpl-license.php |
* |
* For further information visit: |
* http://www.fckeditor.net/ |
* |
* "Support Open Source software. What about a donation today?" |
* |
* File Name: fckstyles.xml |
* This is the sample style definitions file. It makes the styles combo |
* completely customizable. |
* See FCKConfig.StylesXmlPath in the configuration file. |
* |
* File Authors: |
* Frederico Caldeira Knabben (fredck@fckeditor.net) |
--> |
<Styles> |
<Style name="Image on Left" element="img"> |
<Attribute name="style" value="padding: 5px; margin-right: 5px" /> |
<Attribute name="border" value="2" /> |
<Attribute name="align" value="left" /> |
</Style> |
<Style name="Image on Right" element="img"> |
<Attribute name="style" value="padding: 5px; margin-left: 5px" /> |
<Attribute name="border" value="2" /> |
<Attribute name="align" value="right" /> |
</Style> |
<Style name="Custom Bold" element="span"> |
<Attribute name="style" value="font-weight: bold;" /> |
</Style> |
<Style name="Custom Italic" element="em" /> |
<Style name="Title" element="span"> |
<Attribute name="class" value="Title" /> |
</Style> |
<Style name="Code" element="span"> |
<Attribute name="class" value="Code" /> |
</Style> |
<Style name="Title H3" element="h3" /> |
<Style name="Custom Ruler" element="hr"> |
<Attribute name="size" value="1" /> |
<Attribute name="color" value="#ff0000" /> |
</Style> |
</Styles> |