1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208
|
#!/usr/bin/perl
#-----------------------------------------------------------------------------
# Tooltips AWStats plugin
# This plugin allow you to add some toolpus in AWStats HTML report pages.
# The tooltip are in same language than the report (they are stored in the
# awstats-tt-codelanguage.txt files in lang directory).
#-----------------------------------------------------------------------------
# Perl Required Modules: None
#-----------------------------------------------------------------------------
# <-----
# ENTER HERE THE USE COMMAND FOR ALL REQUIRED PERL MODULES.
# ----->
#use strict;
no strict "refs";
#-----------------------------------------------------------------------------
# PLUGIN VARIABLES
#-----------------------------------------------------------------------------
# <-----
# ENTER HERE THE MINIMUM AWSTATS VERSION REQUIRED BY YOUR PLUGIN
# AND THE NAME OF ALL FUNCTIONS THE PLUGIN MANAGE.
my $PluginNeedAWStatsVersion="6.1";
my $PluginHooksFunctions="AddHTMLStyles AddHTMLBodyHeader";
# ----->
# <-----
# IF YOUR PLUGIN NEED GLOBAL VARIABLES, THEY MUST BE DECLARED HERE.
use vars qw/
$TOOLTIPWIDTH
/;
# ----->
#-----------------------------------------------------------------------------
# PLUGIN FUNCTION: Init_pluginname
#-----------------------------------------------------------------------------
sub Init_tooltips {
my $InitParams=shift;
my $checkversion=&Check_Plugin_Version($PluginNeedAWStatsVersion);
# <-----
# ENTER HERE CODE TO DO INIT PLUGIN ACTIONS
debug(" Plugin tooltips: InitParams=$InitParams",1);
$TOOLTIPON=1;
$TOOLTIPWIDTH=380; # Width of tooltips
# ----->
return ($checkversion?$checkversion:"$PluginHooksFunctions");
}
#-----------------------------------------------------------------------------
# PLUGIN FUNCTION: AddHTMLStyles_pluginname
# UNIQUE: NO (Several plugins using this function can be loaded)
# Function called to Add HTML styles at beginning of BODY section.
#-----------------------------------------------------------------------------
sub AddHTMLStyles_tooltips {
# <-----
print "div { font: 12px 'Arial','Verdana','Helvetica', sans-serif; text-align: justify; }\n";
print ".CTooltip { position:absolute; top: 0px; left: 0px; z-index: 2; width: ${TOOLTIPWIDTH}px; visibility:hidden; font: 8pt 'MS Comic Sans','Arial',sans-serif; background-color: #FFFFE6; padding: 8px; border: 1px solid black; }\n";
return 1;
# ----->
}
#-----------------------------------------------------------------------------
# PLUGIN FUNCTION: AddHTMLBodyHeader_pluginname
# UNIQUE: NO (Several plugins using this function can be loaded)
# Function called to Add HTML code at beginning of BODY section.
#-----------------------------------------------------------------------------
sub AddHTMLBodyHeader_tooltips {
# <-----
if ($FrameName ne 'mainleft') {
# GET AND WRITE THE TOOLTIP STRINGS
#---------------------------------------------------------------------
&_ReadAndOutputTooltipFile($Lang);
# WRITE TOOLTIPS JAVASCRIPT CODE
#---------------------------------------------------------------------
# Position .style.pixelLeft/.pixelHeight/.pixelWidth/.pixelTop IE OK Opera OK
# .style.left/.height/.width/.top IE456 OK Netscape67 OK XHTML OK
# document.getElementById IE456 OK Opera OK Netscape67 OK XHTML OK
# document.body.offsetWidth|document.body.style.pixelWidth IE OK Opera OK Netscape OK XHTML KO Visible width of container
# document.documentElement.offsetWidth XHTML OK Visible width of container
# tooltipOBJ.offsetWidth|tooltipOBJ.style.pixelWidth IE OK Opera OK Netscape OK Width of an object
# event.clientXY IE OK Opera OK Netscape KO XHTML KO Position of mouse
# window.innerHeight IE OK Netscape OK Height of container
# window.pageYOffset ?
# document.body.scrollTop IE OK Opera OK Netscape OK XHTML KO Vertical position of scrollbar
my $docwidth="document.body.offsetWidth";
my $doctop="document.body.scrollTop";
if ($BuildReportFormat eq 'xhtml' || $BuildReportFormat eq 'xml') {
$docwidth="document.documentElement.offsetWidth";
$doctop="document.documentElement.scrollTop";
}
print <<EOF;
<script type="text/javascript">
function ShowTip(fArg)
{
var tooltipOBJ = (document.getElementById) ? document.getElementById('tt' + fArg) : eval("document.all['tt" + fArg + "']");
if (tooltipOBJ != null) {
var tooltipLft = ($docwidth?$docwidth:document.body.style.pixelWidth) - (tooltipOBJ.offsetWidth?tooltipOBJ.offsetWidth:(tooltipOBJ.style.pixelWidth?tooltipOBJ.style.pixelWidth:$TOOLTIPWIDTH)) - 30;
var tooltipTop = 10;
if (navigator.appName == 'Netscape') {
tooltipTop = ($doctop>=0?$doctop+10:event.clientY+10);
tooltipOBJ.style.top = tooltipTop+"px";
tooltipOBJ.style.left = tooltipLft+"px";
}
else {
tooltipTop = ($doctop>=0?$doctop+10:event.clientY+10);
tooltipTop = (document.body.scrollTop>=0?document.body.scrollTop+10:event.clientY+10);
EOF
# Seul IE en HTML a besoin de code suppl�mentaire. IE en xhtml est OK
if ($BuildReportFormat ne 'xhtml' && $BuildReportFormat ne 'xml') {
print <<EOF;
if ((event.clientX > tooltipLft) && (event.clientY < (tooltipOBJ.scrollHeight?tooltipOBJ.scrollHeight:tooltipOBJ.style.pixelHeight) + 10)) {
tooltipTop = ($doctop?$doctop:document.body.offsetTop) + event.clientY + 20;
}
EOF
}
print <<EOF;
tooltipOBJ.style.left = tooltipLft;
tooltipOBJ.style.top = tooltipTop;
}
tooltipOBJ.style.visibility = "visible";
}
}
function HideTip(fArg)
{
var tooltipOBJ = (document.getElementById) ? document.getElementById('tt' + fArg) : eval("document.all['tt" + fArg + "']");
if (tooltipOBJ != null) {
tooltipOBJ.style.visibility = "hidden";
}
}
</script>
EOF
}
return 1;
# ----->
}
#------------------------------------------------------------------------------
# Function: Get the tooltip texts for a specified language and write it
# Parameters: LanguageId
# Input: $DirLang $DIR
# Output: Full tooltips text
# Return: None
#------------------------------------------------------------------------------
sub _ReadAndOutputTooltipFile {
# Check lang files in common possible directories :
# Windows and standard package: "$DIR/lang" (lang in same dir than awstats.pl)
# Debian package : "/usr/share/awstats/lang"
# Other possible directories : "./lang"
my @PossibleLangDir=("$DirLang","${DIR}/lang","/usr/share/awstats/lang","./lang");
my $FileLang='';
my $logtype=lc($LogType ne 'S'?$LogType:'W');
foreach my $dir (@PossibleLangDir) {
my $searchdir=$dir;
if ($searchdir && (!($searchdir =~ /\/$/)) && (!($searchdir =~ /\\$/)) ) { $searchdir .= "/"; }
if (open(LANG,"${searchdir}tooltips_${logtype}/awstats-tt-$_[0].txt")) { $FileLang="${searchdir}tooltips_${logtype}/awstats-tt-$_[0].txt"; last; }
}
# If file not found, we try english
if (! $FileLang) {
foreach my $dir (@PossibleLangDir) {
my $searchdir=$dir;
if ($searchdir && (!($searchdir =~ /\/$/)) && (!($searchdir =~ /\\$/)) ) { $searchdir .= "/"; }
if (open(LANG,"${searchdir}tooltips_${logtype}/awstats-tt-en.txt")) { $FileLang="${searchdir}tooltips_${logtype}/awstats-tt-en.txt"; last; }
}
}
if ($Debug) { debug(" Plugin tooltips: Call to Read_Language_Tooltip [FileLang=\"$FileLang\"]"); }
if ($FileLang) {
my $aws_PROG=ucfirst($PROG);
my $aws_VisitTimeout = $VISITTIMEOUT/10000*60;
my $aws_NbOfRobots = scalar keys %RobotsHashIDLib;
my $aws_NbOfWorms = scalar @WormsSearchIDOrder;
my $aws_NbOfSearchEngines = scalar keys %SearchEnginesHashLib;
while (<LANG>) {
if ($_ =~ /\<!--/) { next; } # Remove comment
# Search for replaceable parameters
s/#PROG#/$aws_PROG/;
s/#MaxNbOfRefererShown#/$MaxNbOf{'RefererShown'}/;
s/#VisitTimeOut#/$aws_VisitTimeout/;
s/#RobotArray#/$aws_NbOfRobots/;
s/#WormsArray#/$aws_NbOfWorms/;
s/#SearchEnginesArray#/$aws_NbOfSearchEngines/;
print "$_";
}
}
close(LANG);
}
1; # Do not remove this line
|