Compare commits
128 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
10eb872ec5 | ||
|
|
95a2815ea6 | ||
|
|
38e698aab9 | ||
|
|
bea0787a10 | ||
|
|
8ae37f2c09 | ||
|
|
44287db830 | ||
|
|
591d8e1f01 | ||
|
|
e0c17bc26c | ||
|
|
90c3d79967 | ||
|
|
c6d9112581 | ||
|
|
95bb656222 | ||
|
|
431f55fd4c | ||
|
|
9a1b5a19d7 | ||
|
|
8116d356cd | ||
|
|
72235d84a4 | ||
|
|
77600ecbcf | ||
|
|
4fa0168437 | ||
|
|
53664157fc | ||
|
|
86fca5f20b | ||
|
|
3eb55ffee4 | ||
|
|
c031dfcb18 | ||
|
|
cffb8971b3 | ||
|
|
1323ae9191 | ||
|
|
b4fa4db0d6 | ||
|
|
200dae2390 | ||
|
|
7bfd7ced5d | ||
|
|
f098a1a6f1 | ||
|
|
f0e7c038ed | ||
|
|
2ea378e63d | ||
|
|
44a8f78212 | ||
|
|
1a4e3bcab6 | ||
|
|
be2db73504 | ||
|
|
236250c344 | ||
|
|
3595cbde04 | ||
|
|
8685fd23e8 | ||
|
|
1728a31105 | ||
|
|
3293374843 | ||
|
|
e9030b6d2d | ||
|
|
a4b5951dda | ||
|
|
e0a1b43518 | ||
|
|
77c87bc228 | ||
|
|
8838cf6b50 | ||
|
|
521cfd6afd | ||
|
|
a44eb9cd3d | ||
|
|
4c11ecfaa3 | ||
|
|
81a13478a4 | ||
|
|
593f8ed232 | ||
|
|
38fc48e893 | ||
|
|
ef3cbdda13 | ||
|
|
6a2127e3f8 | ||
|
|
28822295d5 | ||
|
|
bd1e2ca828 | ||
|
|
dc4ea2a94d | ||
|
|
5eb9821920 | ||
|
|
0b35796814 | ||
|
|
2ede9a5cae | ||
|
|
895e5bbbd1 | ||
|
|
1b5a7b0218 | ||
|
|
908edc961f | ||
|
|
115683ca39 | ||
|
|
b1a0f07c3a | ||
|
|
a97677018e | ||
|
|
152ce12fc3 | ||
|
|
c250754496 | ||
|
|
bff24c157c | ||
|
|
64a79b77cb | ||
|
|
adda7e7b87 | ||
|
|
b6f2167e02 | ||
|
|
a4ea571e8e | ||
|
|
704a70169a | ||
|
|
59f2fd488e | ||
|
|
7226c6d943 | ||
|
|
6f72be02b1 | ||
|
|
bd683637c0 | ||
|
|
d2ca839d0a | ||
|
|
3fd769a8a1 | ||
|
|
a87400c0ea | ||
|
|
a80248b068 | ||
|
|
217f691850 | ||
|
|
2a451a411a | ||
|
|
85ecfa47a4 | ||
|
|
4c0e851424 | ||
|
|
cc4442b140 | ||
|
|
2cfd48f095 | ||
|
|
b5772892df | ||
|
|
28ce1fd358 | ||
|
|
6697810b99 | ||
|
|
860fc5464b | ||
|
|
6754be9cd9 | ||
|
|
bc105a9038 | ||
|
|
439ca40645 | ||
|
|
4b723c2c53 | ||
|
|
b9a27b27da | ||
|
|
a84f077a93 | ||
|
|
4a6d43eb62 | ||
|
|
8e2dddb959 | ||
|
|
b8c98bebfe | ||
|
|
d697f904dc | ||
|
|
5b9fed246f | ||
|
|
7bb7b9719a | ||
|
|
33b6270467 | ||
|
|
b34a096b23 | ||
|
|
dd114f4bf5 | ||
|
|
e12e75639a | ||
|
|
9311335206 | ||
|
|
b7684cd544 | ||
|
|
f36b480df8 | ||
|
|
4c54492b4e | ||
|
|
c2b42e9e38 | ||
|
|
cd40c2072c | ||
|
|
4c3da19911 | ||
|
|
c8bd68190e | ||
|
|
706cf5c1db | ||
|
|
e8232c6be1 | ||
|
|
7ac3b37d14 | ||
|
|
22af9bc18e | ||
|
|
ecfff11982 | ||
|
|
870acb09e0 | ||
|
|
4affdb6338 | ||
|
|
0ca360f610 | ||
|
|
ea32cfc6ee | ||
|
|
56ae0eca2e | ||
|
|
f9ea811781 | ||
|
|
0aa5a5f465 | ||
|
|
a1b6645633 | ||
|
|
552ee47540 | ||
|
|
ac3fdd0d62 | ||
|
|
86357937f5 |
@@ -208,3 +208,7 @@ Catalan updates, thanks to Jaume Badiella.
|
||||
Added additional protected against Shellshock exploits made via the Webmin webserver.
|
||||
---- Changes since 1.710 ----
|
||||
SSL v2 and v3 are now disabled by default at Webmin install time, to block the POODLE attack. They can be re-enabled on the SSL Encryption page of the Webmin Configuration module.
|
||||
---- Changes since 1.720 ----
|
||||
Deprecated the old blue-theme in favor of the new gray-theme.
|
||||
Catalan translation updates from Jaume Badiella.
|
||||
More German translation updates, thanks to Raymond Vetter.
|
||||
|
||||
2
README
@@ -1,4 +1,4 @@
|
||||
Webmin Version 1.720
|
||||
Webmin Version 1.730
|
||||
--------------------
|
||||
Webmin is a web-based interface for system administration for Unix.
|
||||
Using any browser that supports tables and forms, you can setup user
|
||||
|
||||
@@ -462,7 +462,10 @@ else {
|
||||
my $deny = $user->{'deny'} || "";
|
||||
$deny =~ s/:/;/g;
|
||||
&print_tempfile($fh,
|
||||
"$user->{'name'}:$user->{'pass'}:$user->{'sync'}:$user->{'cert'}:",
|
||||
$user->{'name'},":",
|
||||
$user->{'pass'},":",
|
||||
($user->{'sync'} || ""),":",
|
||||
($user->{'cert'} || ""),":",
|
||||
($allow ? "allow $allow" :
|
||||
$deny ? "deny $deny" : ""),":",
|
||||
join(" ", @times),":",
|
||||
@@ -647,8 +650,10 @@ else {
|
||||
if ($l =~ /^([^:]+):([^:]*)/ && $1 eq $username) {
|
||||
&add_old_password($user, "$2", \%miniserv);
|
||||
&print_tempfile($fh,
|
||||
"$user->{'name'}:$user->{'pass'}:",
|
||||
"$user->{'sync'}:$user->{'cert'}:",
|
||||
$user->{'name'},":",
|
||||
$user->{'pass'},":",
|
||||
($user->{'sync'} || ""),":",
|
||||
($user->{'cert'} || ""),":",
|
||||
($allow ? "allow $allow" :
|
||||
$deny ? "deny $deny" : ""),":",
|
||||
join(" ", @times),":",
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
do "acl-lib.pl";
|
||||
if (!$main::done_foreign_require{"acl","acl-lib.pl"}) {
|
||||
do "acl-lib.pl";
|
||||
}
|
||||
our (%config, $config_directory);
|
||||
|
||||
# useradmin_create_user(&details)
|
||||
@@ -81,7 +83,7 @@ if ($u && $u->{'sync'}) {
|
||||
}
|
||||
|
||||
|
||||
if ($_[0]->{'user'} ne $_[0]->{'olduser'}) {
|
||||
if ($_[0]->{'olduser'} && $_[0]->{'user'} ne $_[0]->{'olduser'}) {
|
||||
# Check other users' acl module acls
|
||||
foreach my $u (&list_users()) {
|
||||
my %uaccess = &get_module_acl($u->{'name'});
|
||||
|
||||
@@ -1101,19 +1101,20 @@ close(USERS);
|
||||
# some context (global, virtual, directory or htaccess)
|
||||
sub config_icons
|
||||
{
|
||||
local ($ctx, $prog) = @_;
|
||||
local($m, $func, $e, %etype, $i, $c);
|
||||
foreach $m (sort { $a cmp $b } (keys %httpd_modules)) {
|
||||
$func = $m."_directives";
|
||||
if (defined(&$func)) {
|
||||
foreach $e (&$func($httpd_modules{$m})) {
|
||||
if ($e->{$_[0]}) { $etype{$e->{'type'}}++; }
|
||||
if ($e->{$ctx}) { $etype{$e->{'type'}}++; }
|
||||
}
|
||||
}
|
||||
}
|
||||
local (@titles, @links, @icons);
|
||||
for($i=0; $text{"type_$i"}; $i++) {
|
||||
if ($etype{$i} && $access_types{$i}) {
|
||||
push(@links, $_[1]."type=$i");
|
||||
push(@links, $prog."type=$i");
|
||||
push(@titles, $text{"type_$i"});
|
||||
push(@icons, "images/type_icon_$i.gif");
|
||||
}
|
||||
@@ -1843,7 +1844,8 @@ if ($config{'link_dir'}) {
|
||||
opendir(LINKDIR, $config{'link_dir'});
|
||||
foreach my $f (readdir(LINKDIR)) {
|
||||
if ($f ne "." && $f ne ".." &&
|
||||
(&resolve_links($config{'link_dir'}."/".$f) eq $file ||
|
||||
(&simplify_path(
|
||||
&resolve_links($config{'link_dir'}."/".$f)) eq $file ||
|
||||
$short eq $f)) {
|
||||
&unlink_logged($config{'link_dir'}."/".$f);
|
||||
}
|
||||
|
||||
@@ -3,9 +3,9 @@ httpd_dir=/srv/www
|
||||
httpd_conf=/etc/apache2/httpd.conf
|
||||
mime_types=/etc/apache2/mime.types
|
||||
httpd_path=/usr/sbin/httpd2-prefork
|
||||
start_cmd=/etc/init.d/apache2 start
|
||||
stop_cmd=/etc/init.d/apache2 stop
|
||||
apply_cmd=/etc/init.d/apache2 restart
|
||||
start_cmd=service apache2 start
|
||||
stop_cmd=service apache2 stop
|
||||
apply_cmd=service apache2 restart
|
||||
show_order=0
|
||||
max_servers=100
|
||||
test_config=1
|
||||
|
||||
@@ -74,15 +74,14 @@ if (!$in{'name_def'}) {
|
||||
!$in{'root'} || &allowed_auth_file($in{'root'}) ||
|
||||
&error(&text('cvirt_eroot3', $in{'root'}));
|
||||
|
||||
if ($in{'root'} && !-d $in{'root'}) {
|
||||
if ($in{'root'} && !-e $in{'root'}) {
|
||||
# create the document root
|
||||
mkdir($in{'root'}, 0755) ||
|
||||
&error(&text('cvirt_eroot2', $in{'root'}, $!));
|
||||
$user = &find_directive("User", $conf);
|
||||
$group = &find_directive("Group", $conf);
|
||||
$uid = $user ? getpwnam($user) : 0;
|
||||
$gid = $group ? getgrnam($group) : 0;
|
||||
chown($uid, $gid, $in{'root'});
|
||||
$user || &error($text{'cvirt_eroot4'});
|
||||
&set_ownership_permissions($user, $group, undef, $in{'root'});
|
||||
}
|
||||
|
||||
# find file to add to
|
||||
@@ -222,7 +221,7 @@ if ($in{'adddir'} && $in{'root'}) {
|
||||
{ 'name' => 'allow',
|
||||
'value' => 'from all' },
|
||||
{ 'name' => 'Options',
|
||||
'value' => '+Indexes' },
|
||||
'value' => 'None' },
|
||||
] });
|
||||
}
|
||||
|
||||
|
||||
@@ -417,8 +417,6 @@ if ($access{'create'}) {
|
||||
&ui_checkbox("nv", 1, $text{'index_nv'}, 1)."<br>" : "").
|
||||
&ui_checkbox("listen", 1, $text{'index_listen'}, 1));
|
||||
|
||||
# Work out sensible default port
|
||||
|
||||
# Port
|
||||
print &ui_table_row($text{'index_port'},
|
||||
&choice_input(@nvports ? 2 : 0,
|
||||
@@ -434,8 +432,16 @@ if ($access{'create'}) {
|
||||
&ui_checkbox("adddir", 1, $text{'index_adddir'}, 1));
|
||||
|
||||
# Server name
|
||||
print &ui_table_row($text{'index_name'},
|
||||
&opt_input("", "name", $text{'index_auto'}, 30));
|
||||
if ($access{'virts'} eq '*') {
|
||||
print &ui_table_row($text{'index_name'},
|
||||
&opt_input("", "name", $text{'index_auto'}, 30));
|
||||
}
|
||||
else {
|
||||
# Require that non-root users enter a server name, or else it
|
||||
# will be impossible to grant access to the new virtualhost
|
||||
print &ui_table_row($text{'index_name'},
|
||||
&ui_textbox("name", "", 30));
|
||||
}
|
||||
|
||||
# Add to file
|
||||
print &ui_table_row($text{'index_file'},
|
||||
|
||||
@@ -359,6 +359,8 @@ core_ehlimit=$1 no
|
||||
core_dport=Port per defecte:
|
||||
core_address=Adreça
|
||||
core_port=Port
|
||||
core_portname=Protocol
|
||||
core_protoany=<Qualsevol>
|
||||
core_listen=Escolta les adreces i els ports
|
||||
core_eaddress='$1' no és una adreça vàlida
|
||||
core_eport='$1' no és un port vàlid
|
||||
|
||||
@@ -343,6 +343,7 @@ cvirt_eport='$1' ist kein gültiger Port
|
||||
cvirt_eroot1=Sie müssen ein Dokument-Root angeben
|
||||
cvirt_eroot2=Fehler beim Anlegen des Verzeichnisses '$1' : $2
|
||||
cvirt_eroot3=Sie sind nicht berechtigt das Root-Verzeichnis '$1' zu benutzen
|
||||
cvirt_eroot4=Keine Benutzer in der Apache-Konfiguration definiert
|
||||
cvirt_err=Fehler beim Anlegen des virtuellen Server
|
||||
cvirt_etaken=Ein virtuellen Server mit dem selben Namen und demselben Port existiert bereits
|
||||
default_serv=Standard Server
|
||||
|
||||
@@ -67,6 +67,7 @@ cvirt_ename='$1' is not a valid server name
|
||||
cvirt_eroot1=You must enter a document root
|
||||
cvirt_eroot2=Failed to create directory '$1' : $2
|
||||
cvirt_eroot3=You are not allowed to use the root directory '$1'
|
||||
cvirt_eroot4=No User defined in the Apache configuration
|
||||
cvirt_etaken=A virtual server with the same name and port already exists
|
||||
cvirt_efile=Failed to write to $1 : $2
|
||||
cvirt_emissing=The new virtual server was added to $1, but this file is not used by Apache. Check the <a href='$2'>module configuration</a> and make sure the 'File or directory to add virtual servers to' is correct.
|
||||
|
||||
@@ -18,6 +18,10 @@ if ($in{'virt'} && $access{'types'} eq '*') {
|
||||
"name" => $text{'virt_edit'},
|
||||
"link" => "manual_form.cgi?virt=$in{'virt'}" };
|
||||
}
|
||||
if ($v->{'value'} =~ /:80/ && $v->{'value'} !~ /:443/) {
|
||||
# Hide SSL icon for non-SSL sites
|
||||
$access_types{14} = 0;
|
||||
}
|
||||
&config_icons("virtual", "edit_virt.cgi?virt=$in{'virt'}&", $sw_icon,
|
||||
$ed_icon ? $ed_icon : ());
|
||||
|
||||
|
||||
@@ -140,3 +140,5 @@ Added a module configuration option to use the SPF type for Sender Permitted Fro
|
||||
---- Changes since 1.660 ----
|
||||
Added a warning if the chroot directory that Webmin thinks BIND is using looks wrong.
|
||||
Slave zone files in raw format can now be displayed by Webmin.
|
||||
---- Changes since 1.720 ----
|
||||
Added support for NSEC3PARAM records.
|
||||
|
||||
@@ -1124,6 +1124,25 @@ elsif ($type eq "SPF") {
|
||||
&ui_opt_textbox("spfexp", $spf->{'exp'}, 40,
|
||||
$text{'value_spfnoexp'}), 3);
|
||||
}
|
||||
elsif ($type eq "NSEC3PARAM") {
|
||||
# NSEC records have a hash type, flags, number of interations, salt
|
||||
# length and salt
|
||||
print &ui_table_row($text{'value_NSEC3PARAM1'},
|
||||
&ui_select("value0", $v[0] || 1,
|
||||
[ [ 1, "SHA1" ] ], 1, 0, 1));
|
||||
|
||||
print &ui_table_row($text{'value_NSEC3PARAM2'},
|
||||
&ui_select("value1", $v[1],
|
||||
[ [ 0, $text{'value_delegated'} ],
|
||||
[ 1, $text{'value_notdelegated'} ] ]));
|
||||
|
||||
print &ui_table_row($text{'value_NSEC3PARAM3'},
|
||||
&ui_textbox("value2", $v[2], 4));
|
||||
|
||||
print &ui_table_row($text{'value_NSEC3PARAM5'},
|
||||
&ui_textbox("value4", $v[4], 20));
|
||||
|
||||
}
|
||||
else {
|
||||
# All other types just have a text box
|
||||
print &ui_table_row($text{'value_other'},
|
||||
@@ -2753,7 +2772,7 @@ $slave_error = $_[0];
|
||||
|
||||
sub get_forward_record_types
|
||||
{
|
||||
return ("A", "NS", "CNAME", "MX", "HINFO", "TXT", "SPF", "WKS", "RP", "PTR", "LOC", "SRV", "KEY", $config{'support_aaaa'} ? ( "AAAA" ) : ( ), @extra_forward);
|
||||
return ("A", "NS", "CNAME", "MX", "HINFO", "TXT", "SPF", "WKS", "RP", "PTR", "LOC", "SRV", "KEY", "NSEC3PARAM", $config{'support_aaaa'} ? ( "AAAA" ) : ( ), @extra_forward);
|
||||
}
|
||||
|
||||
sub get_reverse_record_types
|
||||
@@ -3188,11 +3207,12 @@ foreach my $key (@keys) {
|
||||
|
||||
# Remove records
|
||||
local @recs = &read_zone_file($fn, $dom);
|
||||
local $tools = &have_dnssec_tools_support();
|
||||
for(my $i=$#recs; $i>=0; $i--) {
|
||||
if ($recs[$i]->{'type'} eq 'NSEC' ||
|
||||
$recs[$i]->{'type'} eq 'NSEC3' ||
|
||||
$recs[$i]->{'type'} eq 'RRSIG' ||
|
||||
$recs[$i]->{'type'} eq 'NSEC3PARAM' ||
|
||||
$recs[$i]->{'type'} eq 'NSEC3PARAM' && $tools ||
|
||||
$recs[$i]->{'type'} eq 'DNSKEY') {
|
||||
&delete_record($fn, $recs[$i]);
|
||||
}
|
||||
@@ -3600,10 +3620,11 @@ sub dt_sign_zone
|
||||
|
||||
# Remove DNSSEC records and save the unsigned zone file
|
||||
@recs = &read_zone_file($z, $dom);
|
||||
local $tools = &have_dnssec_tools_support();
|
||||
for(my $i=$#recs; $i>=0; $i--) {
|
||||
if ($recs[$i]->{'type'} eq 'NSEC' ||
|
||||
$recs[$i]->{'type'} eq 'NSEC3' ||
|
||||
$recs[$i]->{'type'} eq 'NSEC3PARAM' ||
|
||||
$recs[$i]->{'type'} eq 'NSEC3PARAM' && $tools ||
|
||||
$recs[$i]->{'type'} eq 'RRSIG' ||
|
||||
$recs[$i]->{'type'} eq 'DNSKEY') {
|
||||
&delete_record($z, $recs[$i]);
|
||||
@@ -3679,10 +3700,11 @@ sub dt_resign_zone
|
||||
|
||||
# Remove DNSSEC records and save the unsigned zone file
|
||||
@recs = &read_zone_file($z, $dom);
|
||||
local $tools = &have_dnssec_tools_support();
|
||||
for(my $i=$#recs; $i>=0; $i--) {
|
||||
if ($recs[$i]->{'type'} eq 'NSEC' ||
|
||||
$recs[$i]->{'type'} eq 'NSEC3' ||
|
||||
$recs[$i]->{'type'} eq 'NSEC3PARAM' ||
|
||||
$recs[$i]->{'type'} eq 'NSEC3PARAM' && $tools ||
|
||||
$recs[$i]->{'type'} eq 'RRSIG' ||
|
||||
$recs[$i]->{'type'} eq 'DNSKEY') {
|
||||
&delete_record($z, $recs[$i]);
|
||||
@@ -3870,10 +3892,11 @@ sub dt_delete_dnssec_state
|
||||
|
||||
# remove DNSSEC records from zonefile
|
||||
@recs = &read_zone_file($z, $dom);
|
||||
local $tools = &have_dnssec_tools_support();
|
||||
for(my $i=$#recs; $i>=0; $i--) {
|
||||
if ($recs[$i]->{'type'} eq 'NSEC' ||
|
||||
$recs[$i]->{'type'} eq 'NSEC3' ||
|
||||
$recs[$i]->{'type'} eq 'NSEC3PARAM' ||
|
||||
$recs[$i]->{'type'} eq 'NSEC3PARAM' && $tools ||
|
||||
$recs[$i]->{'type'} eq 'RRSIG' ||
|
||||
$recs[$i]->{'type'} eq 'DNSKEY') {
|
||||
&delete_record($z, $recs[$i]);
|
||||
|
||||
@@ -74,7 +74,7 @@ else {
|
||||
if (@recs) {
|
||||
@recs = &sort_records(@recs);
|
||||
foreach $v (keys %text) {
|
||||
if ($v =~ /^value_([A-Z]+)(\d+)/) {
|
||||
if ($v =~ /^value_([A-Z0-9]+)(\d+)/) {
|
||||
$hmap{$1}->[$2-1] = $text{$v};
|
||||
}
|
||||
}
|
||||
|
||||
2215
bind8/lang/de
@@ -293,6 +293,8 @@ edit_espfip6='$1' is not a valid IPv6 address or IPv6/prefix to allow sending fr
|
||||
edit_espfinclude='$1' is not a valid additional domain from which mail is sent
|
||||
edit_espfredirect='$1' is not a valid alternate domain name
|
||||
edit_espfexp='$1' is a valid record name for a rejection message
|
||||
edit_ensec3value2=Missing or non-numeric number of iterations
|
||||
edit_ensec3value2=Missing or non-base64 salt
|
||||
|
||||
text_title=Edit Records File
|
||||
text_title2=View Records File
|
||||
@@ -369,6 +371,7 @@ type_NS=Name Server
|
||||
type_CNAME=Name Alias
|
||||
type_MX=Mail Server
|
||||
type_HINFO=Host Information
|
||||
type_NSEC3PARAM=DNSSEC Parameters
|
||||
type_TXT=Text
|
||||
type_SPF=Sender Permitted From
|
||||
type_WKS=Well Known Service
|
||||
@@ -393,6 +396,7 @@ edit_PTR=Reverse Address
|
||||
edit_LOC=Location
|
||||
edit_SRV=Service Address
|
||||
edit_KEY=Public Key
|
||||
edit_NSEC3PARAM=DNSSEC Parameters
|
||||
|
||||
recs_defttl=Default TTL
|
||||
recs_A=Address
|
||||
@@ -410,6 +414,7 @@ recs_LOC=Location
|
||||
recs_SRV=Service Address
|
||||
recs_ALL=All
|
||||
recs_KEY=Public Key
|
||||
recs_NSEC3PARAM=DNSSEC Parameters
|
||||
recs_delete=Delete Selected
|
||||
|
||||
value_A1=Address
|
||||
@@ -437,6 +442,13 @@ value_KEY2=Protocol
|
||||
value_KEY3=Algorithm
|
||||
value_KEY4=Key data
|
||||
value_SPF1=SPF specification
|
||||
value_NSEC3PARAM1=Hash algorithm
|
||||
value_NSEC3PARAM2=NSEC3 flags
|
||||
value_NSEC3PARAM3=Number of hash iterations
|
||||
value_NSEC3PARAM4=Length of salt
|
||||
value_NSEC3PARAM5=Salt string
|
||||
value_delegated=Delegated zone
|
||||
value_notdelegated=Other zone
|
||||
value_other=Values (one per line)
|
||||
value_spfa=Allow sending from domain's IP address?
|
||||
value_spfmx=Allow sending from domain's MX hosts?
|
||||
@@ -706,7 +718,7 @@ zonedef_this=System hostname ($1)
|
||||
zonedef_eprins=Missing or invalid default nameserver for master domains
|
||||
zonedef_dnssec=Create DNSSEC key and sign new zones?
|
||||
zonedef_dnssec_dt=Automate all DNSSEC operations (ignore other settings below)?
|
||||
zonedef_dne=Authenticated Denial of Existance Using
|
||||
zonedef_dne=Authenticated Denial of Existence Using
|
||||
zonedef_alg=Initial key algorithm
|
||||
zonedef_size=Initial key size
|
||||
zonedef_single=Number of keys to create
|
||||
|
||||
@@ -339,6 +339,16 @@ else {
|
||||
}
|
||||
$vals = "\"".&join_spf($spf)."\"";
|
||||
}
|
||||
elsif ($in{'type'} eq 'NSEC3PARAM') {
|
||||
# Save DNSSEC parameters
|
||||
$in{'value2'} =~ /^\d+$/ ||
|
||||
&error($text{'edit_ensec3value2'});
|
||||
$in{'value4'} =~ /^[a-zA-Z0-9\+\/]+$/ ||
|
||||
&error($text{'edit_ensec3value2'});
|
||||
$vals = join(" ", "(", $in{'value0'}, $in{'value1'},
|
||||
$in{'value2'}, length($in{'value4'}),
|
||||
$in{'value4'}, ")");
|
||||
}
|
||||
else {
|
||||
# For other record types, just save the lines
|
||||
$in{'values'} =~ s/\r//g;
|
||||
|
||||
1
blue-theme
Symbolic link
@@ -0,0 +1 @@
|
||||
gray-theme
|
||||
@@ -1,22 +0,0 @@
|
||||
---- Changes since 1.280 ----
|
||||
First version of this theme.
|
||||
---- Changes since 1.290 ----
|
||||
The current category name is now underlined.
|
||||
Reduced the thickness of border lines.
|
||||
All icons are now shown half the usual size, with the titles to the right instead of below.
|
||||
---- Changes since 1.300 ----
|
||||
Totally re-worked theme to use a new framed design, with a Javascript collapsing category menu.
|
||||
---- Changes since 1.310 ----
|
||||
Added Webmin Servers link on the left menu, when accessed via the Webmin Servers Index module.
|
||||
---- Changes since 1.320 ----
|
||||
Added a feedback link to the left menu, but only when a custom feedback address is set.
|
||||
---- Changes since 1.330 ----
|
||||
Updated the color schema to match the new webmin.com, and made table borders and forms nicer (thanks to Joe).
|
||||
Added a whole new set of icons from Virtualmin.
|
||||
---- Changes since 1.340 ----
|
||||
Fixed bad table indentation on some browsers.
|
||||
Changed link colors to be darker.
|
||||
---- Changes since 1.400 ----
|
||||
Display system uptime in the right frame after logging in.
|
||||
---- Changes since 1.430 ----
|
||||
Updated CSS and all UI elements to match the Virtualmin theme, except for colors and icons.
|
||||
@@ -1,15 +0,0 @@
|
||||
cs_header=427AD1 class='maintitle'
|
||||
cs_table=EFEFEF class='mainbody'
|
||||
texttitles=1
|
||||
functions=theme.pl
|
||||
applet_body=e8e8ea
|
||||
applet_text=000000
|
||||
applet_light_edge=dadaf0
|
||||
applet_dark_edge=333366
|
||||
applet_light_edge_hi=dadaf8
|
||||
applet_dark_edge_hi=333350
|
||||
applet_dark_bg=8888aa
|
||||
applet_light_bg=ffffff
|
||||
noindex=1
|
||||
inframe=1
|
||||
framed=1
|
||||
|
Before Width: | Height: | Size: 800 B |
|
Before Width: | Height: | Size: 768 B |
|
Before Width: | Height: | Size: 585 B |
|
Before Width: | Height: | Size: 559 B |
|
Before Width: | Height: | Size: 4.8 KiB |
|
Before Width: | Height: | Size: 449 B |
|
Before Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 49 B |
|
Before Width: | Height: | Size: 168 B |
|
Before Width: | Height: | Size: 233 B |
|
Before Width: | Height: | Size: 636 B |
|
Before Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 651 B |
|
Before Width: | Height: | Size: 391 B |
@@ -1,68 +0,0 @@
|
||||
<public:component>
|
||||
<public:attach event="onpropertychange" onevent="doFix()" />
|
||||
|
||||
<script type="text/javascript">
|
||||
|
||||
// IE5.5+ PNG Alpha Fix v1.0RC4
|
||||
// (c) 2004-2005 Angus Turnbull http://www.twinhelix.com
|
||||
|
||||
// This is licensed under the CC-GNU LGPL, version 2.1 or later.
|
||||
// For details, see: http://creativecommons.org/licenses/LGPL/2.1/
|
||||
|
||||
|
||||
// This must be a path to a blank image. That's all the configuration you need.
|
||||
if (typeof blankImg == 'undefined') var blankImg = '/images/blank.gif';
|
||||
|
||||
|
||||
var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
|
||||
|
||||
function filt(s, m)
|
||||
{
|
||||
if (filters[f])
|
||||
{
|
||||
filters[f].enabled = s ? true : false;
|
||||
if (s) with (filters[f]) { src = s; sizingMethod = m }
|
||||
}
|
||||
else if (s) style.filter = 'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
|
||||
}
|
||||
|
||||
function doFix()
|
||||
{
|
||||
// Assume IE7 is OK.
|
||||
if (!/MSIE (5\.5|6\.)/.test(navigator.userAgent) ||
|
||||
(event && !/(background|src)/.test(event.propertyName))) return;
|
||||
|
||||
var bgImg = currentStyle.backgroundImage || style.backgroundImage;
|
||||
|
||||
if (tagName == 'IMG')
|
||||
{
|
||||
if ((/\.png$/i).test(src))
|
||||
{
|
||||
if (currentStyle.width == 'auto' && currentStyle.height == 'auto')
|
||||
style.width = offsetWidth + 'px';
|
||||
filt(src, 'scale');
|
||||
src = blankImg;
|
||||
}
|
||||
else if (src.indexOf(blankImg) < 0) filt();
|
||||
}
|
||||
else if (bgImg && bgImg != 'none')
|
||||
{
|
||||
if (bgImg.match(/^url[("']+(.*\.png)[)"']+$/i))
|
||||
{
|
||||
var s = RegExp.$1;
|
||||
if (currentStyle.width == 'auto' && currentStyle.height == 'auto')
|
||||
style.width = offsetWidth + 'px';
|
||||
style.backgroundImage = 'none';
|
||||
filt(s, 'crop');
|
||||
// IE link fix.
|
||||
for (var n = 0; n < childNodes.length; n++)
|
||||
if (childNodes[n].style) childNodes[n].style.position = 'relative';
|
||||
}
|
||||
else filt();
|
||||
}
|
||||
}
|
||||
|
||||
doFix();
|
||||
|
||||
</script>
|
||||
</public:component>
|
||||
|
Before Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 632 B |
|
Before Width: | Height: | Size: 42 B |
|
Before Width: | Height: | Size: 48 B |
|
Before Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 635 B |
|
Before Width: | Height: | Size: 571 B |
|
Before Width: | Height: | Size: 571 B |
|
Before Width: | Height: | Size: 562 B |
|
Before Width: | Height: | Size: 259 B |
|
Before Width: | Height: | Size: 37 B |
|
Before Width: | Height: | Size: 43 B |
|
Before Width: | Height: | Size: 78 B |
|
Before Width: | Height: | Size: 159 B |
|
Before Width: | Height: | Size: 585 B |
|
Before Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 608 B |
|
Before Width: | Height: | Size: 193 B |
|
Before Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 584 B |
@@ -1,42 +0,0 @@
|
||||
#!/usr/bin/perl
|
||||
|
||||
BEGIN { push(@INC, ".."); };
|
||||
use WebminCore;
|
||||
&ReadParse();
|
||||
&init_config();
|
||||
%text = &load_language($current_theme);
|
||||
|
||||
if ($in{'mod'}) {
|
||||
$minfo = { &get_module_info($in{'mod'}) };
|
||||
}
|
||||
else {
|
||||
$minfo = &get_goto_module();
|
||||
}
|
||||
$goto = $minfo ? "$minfo->{'dir'}/" :
|
||||
$in{'page'} ? "" :
|
||||
"right.cgi?open=system&open=status";
|
||||
if ($minfo) {
|
||||
$cat = "?$minfo->{'category'}=1";
|
||||
}
|
||||
if ($in{'page'}) {
|
||||
$goto .= "/".$in{'page'};
|
||||
}
|
||||
|
||||
# Show frameset
|
||||
$title = &get_html_framed_title();
|
||||
$cols = &get_product_name() eq 'usermin' ? 180 : 230;
|
||||
&popup_header($title, undef, undef, 1);
|
||||
|
||||
print <<EOF;
|
||||
<frameset cols="$cols,*" border=0>
|
||||
<frame name="left" src="left.cgi$cat" scrolling="auto">
|
||||
<frame name="right" src="$goto" noresize>
|
||||
<noframes>
|
||||
<body>
|
||||
<p>This page uses frames, but your browser doesn't support them.</p>
|
||||
</body>
|
||||
</noframes>
|
||||
</frameset>
|
||||
EOF
|
||||
&popup_footer(1);
|
||||
|
||||
@@ -1,44 +0,0 @@
|
||||
left_login=Identificació: $1
|
||||
left_home=Informació del Sistema
|
||||
left_oc=Esponsoritzat per OpenCountry
|
||||
left_feedback=Envia opinions
|
||||
left_search_webmin=Busca a Webmin:
|
||||
left_search_usermin=Busca a Usermin:
|
||||
left_search=Busca:
|
||||
left_logs=Visualitza els Registres del Mòdul
|
||||
left_others=Altres
|
||||
|
||||
right_header0=Informació del Sistema
|
||||
right_host=Nom de host del sistema
|
||||
right_os=Sistema operatiu
|
||||
right_login=Identificat com a:
|
||||
right_from=Identificat des de:
|
||||
right_webmin=Versió Webmin
|
||||
right_usermin=Versió Usermin
|
||||
right_cpu=Càrrega mitjana de la CPU
|
||||
right_cpuinfo=Informació del processador
|
||||
right_cputype=$5, $8 nuclis
|
||||
right_load=$1 (1 min) $2 (5 mins) $3 (15 mins)
|
||||
right_cpuuse=Ús de la CPU
|
||||
right_cpustats=$1% usuari, $2% nucli, $4% E/S, $3% desocupada
|
||||
right_real=Memòria real
|
||||
right_virt=Memòria virtual
|
||||
right_procs=Processos en execució
|
||||
right_disk=Espai local en disc
|
||||
right_used=$1 total, $2 utilitzat
|
||||
right_out=$1 de $2
|
||||
right_quota=Ús del disc i quota
|
||||
right_header5=Informació del Compte
|
||||
right_uquota=Quota de disc i ús
|
||||
right_time=Hora del sistema
|
||||
right_uptime=En execució durant
|
||||
right_updays=$1 dies, $2 hores, $3 minuts
|
||||
right_uphours=$1 hores, $2 minuts
|
||||
right_upmins=$1 minuts
|
||||
right_kernel=Nucli i CPU
|
||||
right_kernelon=$1 $2 a $3
|
||||
right_updates=Actualitzacions de paquets
|
||||
right_upok=Tots els paquets instal·lats estan actualitzats
|
||||
right_upneed=Hi ha $1 actualitzacions de paquets disponibles
|
||||
right_upsec=Hi ha $1 actualitzacions de paquets disponibles, de les quals $2 són actualitzacions de seguretat
|
||||
__norefs=1
|
||||
@@ -1,43 +0,0 @@
|
||||
__norefs=1
|
||||
left_feedback=Feedback versenden
|
||||
left_home=Systeminformation
|
||||
left_login=Login: $1
|
||||
left_logs=Zeige Modul Logs an
|
||||
left_oc=Gesponsert von OpenCountry
|
||||
left_others=Andere
|
||||
left_search=Suchen:
|
||||
left_search_usermin=Suche Usermin:
|
||||
left_search_webmin=Suche Webmin:
|
||||
right_cpu=CPU-Last im Durchschnitt
|
||||
right_cpuinfo=Prozessorinformation
|
||||
right_cpustats=$1% Benutzer, $2% Kernel, $4% IO, $3% Leerlauf
|
||||
right_cputype=$5, $8 cores
|
||||
right_cpuuse=CPU Auslastung
|
||||
right_disk=Lokaler Festplattenspeicher
|
||||
right_from=Eingeloggt von
|
||||
right_header0=Systeminformation
|
||||
right_header5=Accountinformationen
|
||||
right_host=System Hostname
|
||||
right_kernel=Kernel und CPU
|
||||
right_kernelon=$1 $2 auf $3
|
||||
right_load=$1 (1 Minute) $2 (5 Minuten) $3 (15 Minuten)
|
||||
right_login=Eingeloggt als
|
||||
right_os=Betriebssystem
|
||||
right_out=$1 von $2
|
||||
right_procs=Laufende Prozesse
|
||||
right_quota=Festplattenauslastung und Quota
|
||||
right_real=Realer Speicher
|
||||
right_time=Systemzeit
|
||||
right_updates=Paketupdates
|
||||
right_updays=$1 Tag(e), $2 Stunde(n), $3 Minute(n)
|
||||
right_uphours=$1 Stunde(n), $2 Minute(n)
|
||||
right_upmins=$1 Minute(n)
|
||||
right_upneed=$1 Paketupdates sind verfügbar
|
||||
right_upok=Alle installierten Pakete sind auf dem aktuellen Stand
|
||||
right_upsec=$1 Paketupdates sind verfügbar, von dem $2 Sicherheitsupdates sind
|
||||
right_uptime=System Laufzeit
|
||||
right_uquota=Festplatten Quota und Auslastung
|
||||
right_used=$1 gesamt, $2 benutzt
|
||||
right_usermin=Usermin Version
|
||||
right_virt=Virtueller Speicher
|
||||
right_webmin=Webmin Version
|
||||
@@ -1,31 +0,0 @@
|
||||
left_feedback=Envoyer un rapport
|
||||
left_home=Information Système
|
||||
left_login=Connexion : $1
|
||||
left_logs=Voir les journaux du module
|
||||
left_oc=Sponsorisé par "OpenCountry"
|
||||
left_others=Autres
|
||||
left_search=Rechercher :
|
||||
right_cpu=Moyennes de charge CPU
|
||||
right_cpuinfo=Information sur le CPU
|
||||
right_disk=Espace disque local
|
||||
right_header0=Information Système
|
||||
right_header5=Information sur le compte
|
||||
right_host=Nom d'hôte du système
|
||||
right_kernel=Noyau et CPU
|
||||
right_kernelon=$1 $2 sur $3
|
||||
right_load=$1 (1 min) $2 (5 mins) $3 (15 mins)
|
||||
right_os=Système d'exploitation
|
||||
right_out=$1 sur $2
|
||||
right_procs=Processus en cours
|
||||
right_real=Mémoire réelle
|
||||
right_time=Date et heure du système
|
||||
right_updates=Mises à jours de Paquet
|
||||
right_updays=$1 jours, $2 heures, $3 minutes
|
||||
right_uphours=$1 heures, $2 minutes
|
||||
right_upmins=$1 minutes
|
||||
right_uptime=Durèe de fonctionnement du système
|
||||
right_uquota=Utilisation et quota disque
|
||||
right_used=$1 total, $2 utilisé
|
||||
right_usermin=Version de Usermin
|
||||
right_virt=Mémoire virtuelle
|
||||
right_webmin=Version de Webmin
|
||||
@@ -1,23 +0,0 @@
|
||||
left_login=ログイン名: $1
|
||||
left_home=システム情報
|
||||
left_oc=提供:OpenCountry
|
||||
|
||||
right_header0=システム情報
|
||||
right_host=ホスト名
|
||||
right_os=オペレーティングシステム
|
||||
right_login=ログイン中のユーザ
|
||||
right_from=接続元
|
||||
right_webmin=Webmin バージョン
|
||||
right_usermin=Usermin バージョン
|
||||
right_cpu=CPU 平均負荷
|
||||
right_load=$1 (1分) $2 (5分) $3 (15分)
|
||||
right_real=実メモリ
|
||||
right_virt=仮想メモリ
|
||||
right_procs=走行プロセス数
|
||||
right_disk=ローカルディスク容量
|
||||
right_used=合計 $1 , 使用 $2
|
||||
right_out=$1 of $2
|
||||
right_quota=ディスク使用量とクオータ
|
||||
right_header5=アカウント情報
|
||||
right_uquota=ディスククオータと使用量
|
||||
right_time=サーバ上の時刻
|
||||
@@ -1,43 +0,0 @@
|
||||
__norefs=1
|
||||
left_feedback=Hantar Maklum Balas
|
||||
left_home=Maklumat Sistem
|
||||
left_login=Log masuk: $1
|
||||
left_logs=Lihat log modul
|
||||
left_oc=Ditaja oleh OpenCountry
|
||||
left_others=Lain-lain
|
||||
left_search=Carian:
|
||||
left_search_usermin=Carian Usermin:
|
||||
left_search_webmin=Carian Webmin
|
||||
right_cpu=Purata beban CPU
|
||||
right_cpuinfo=Maklumat pemproses
|
||||
right_cpustats=$1% user, $2% kernel, $4% IO, $3% idle
|
||||
right_cputype=$5, $8 teras
|
||||
right_cpuuse=Penggunaan CPU
|
||||
right_disk=Ruang disk setempat
|
||||
right_from=Telah log masuk dari
|
||||
right_header0=Maklumat Sistem
|
||||
right_header5=Maklumat Akaun
|
||||
right_host=Nama hos sistem
|
||||
right_kernel=Kernel dan CPU
|
||||
right_kernelon=$1 $2 pada $3
|
||||
right_load=$1 (1 min) $2 (5 min) $3 (15 min)
|
||||
right_login=Telah log masuk sebagai
|
||||
right_os=Sistem operasi
|
||||
right_out=$1 daripada $2
|
||||
right_procs=Proses yang dijalankan
|
||||
right_quota=Penggunaan disk dan kuota
|
||||
right_real=Memori sebenar
|
||||
right_time=Masa pada sistem
|
||||
right_updates=Pakej kemaskini
|
||||
right_updays=$1 hari, $2 jam, $3 minit
|
||||
right_uphours=$1 jam, $2 minit
|
||||
right_upmins=$1 minit
|
||||
right_upneed=terdapat $1 pakej kemaskini
|
||||
right_upok=Semua pakej yang dipasang adalah terkini
|
||||
right_upsec=terdapat $1 pakej kemaskini, dimana $2 darinya adalah kemaskini keselamatan
|
||||
right_uptime=Sistem uptime
|
||||
right_uquota=Kuota disk dan penggunaan
|
||||
right_used=total $1, $2 digunakan
|
||||
right_usermin=Versi Usermin
|
||||
right_virt=Ingatan maya
|
||||
right_webmin=Versi Webmin
|
||||
@@ -1,43 +0,0 @@
|
||||
__norefs=1
|
||||
left_feedback=Verstuur Opmerkingen
|
||||
left_home=Systeem Informatie
|
||||
left_login=Login: $1
|
||||
left_logs=Bekijk Module's Logs
|
||||
left_oc=Gesponserd door OpenCountry
|
||||
left_others=Andere
|
||||
left_search=Zoek:
|
||||
left_search_usermin=Zoek Usermin:
|
||||
left_search_webmin=Zoek Webmin:
|
||||
right_cpu=CPU belasting gemiddelde
|
||||
right_cpuinfo=Processor informatie
|
||||
right_cpustats=$1% gebruiker, $2% kernel, $4% IO, $3% slaapt
|
||||
right_cputype=$5, $8 cores
|
||||
right_cpuuse=CPU gebruik
|
||||
right_disk=Locale harddisk ruimte
|
||||
right_from=Ingelogd van
|
||||
right_header0=Systeem Informatie
|
||||
right_header5=Account Informatie
|
||||
right_host=Systeem hostnaam
|
||||
right_kernel=Kernel en CPU
|
||||
right_kernelon=$1 $2 op $3
|
||||
right_load=$1 (1 min) $2 (5 minuten) $3 (15 minuten)
|
||||
right_login=Ingelogd als
|
||||
right_os=Besturing systeem
|
||||
right_out=$1 van $2
|
||||
right_procs=Lopende processen
|
||||
right_quota=Harddisk gebruik en quota
|
||||
right_real=Echt geheugen
|
||||
right_time=Systeemtijd
|
||||
right_updates=Pakketten update's
|
||||
right_updays=$1 dagen, $2 uur, $3 minuten
|
||||
right_uphours=$1 uur, $2 minuten
|
||||
right_upmins=$1 minuten
|
||||
right_upneed=Er zijn $1 pakketten updates beschikbaar
|
||||
right_upok=Al de geinstalleerde pakketten zijn up to date
|
||||
right_upsec=Er zijn $1 pakketten updates beschikbaar, waarvan er $2 veiligheid updates zijn
|
||||
right_uptime=Systeem werkt nu
|
||||
right_uquota=Harddisk quota en gebruik
|
||||
right_used=$1 totaal, $2 gebruikt
|
||||
right_usermin=Usermin Versie
|
||||
right_virt=Virtueel geheugen
|
||||
right_webmin=Webmin versie
|
||||
@@ -1,43 +0,0 @@
|
||||
__norefs=1
|
||||
left_feedback=Send tilbakemelding
|
||||
left_home=System informasjon
|
||||
left_login=Brukernavn: $1
|
||||
left_logs=Vis modulens logger
|
||||
left_oc=Sponset av OpenCountry
|
||||
left_others=Andre
|
||||
left_search=Søk:
|
||||
left_search_usermin=Søk i Usermin:
|
||||
left_search_webmin=Søk i Webmin:
|
||||
right_cpu=CPU gj.snittsbelastninger
|
||||
right_cpuinfo=Prosessor informasjon
|
||||
right_cpustats=$1% bruker, $2% kjerne, $4% IO, $3% ledig
|
||||
right_cputype=$5, $8 kjerner
|
||||
right_cpuuse=CPU bruk
|
||||
right_disk=Lokal diskplass
|
||||
right_from=Logget inn fra
|
||||
right_header0=System informasjon
|
||||
right_header5=Konto informasjon
|
||||
right_host=System vertsnavn
|
||||
right_kernel=Kjerne og CPU
|
||||
right_kernelon=$1 $2 på $3
|
||||
right_load=$1 (1 min) $2 (5 min.) $3 (15 min.)
|
||||
right_login=Logget inn som
|
||||
right_os=Operativsystem
|
||||
right_out=$1 av $2
|
||||
right_procs=Kjørende prosesser
|
||||
right_quota=Diskbruk og kvote
|
||||
right_real=Fysisk minne
|
||||
right_time=Tid på systemet
|
||||
right_updates=Pakkeoppdateringer
|
||||
right_updays=$1 dager, $2 timer, $3 minutter
|
||||
right_uphours=$1 timer, $2 minutter
|
||||
right_upmins=$1 minutter
|
||||
right_upneed=$1 pakkeoppdateringer er tilgjengelige
|
||||
right_upok=Alle installerte pakker er oppdatert
|
||||
right_upsec=$1 pakkeoppdateringer er tilgjengelige, og $2 av disse er sikkerhetsoppdateringer
|
||||
right_uptime=System oppetid
|
||||
right_uquota=Diskkvote og bruk
|
||||
right_used=$1 totalt, $2 brukt
|
||||
right_usermin=Usermin versjon
|
||||
right_virt=Virtuelt minne
|
||||
right_webmin=Webmin versjon
|
||||
@@ -1,43 +0,0 @@
|
||||
__norefs=1
|
||||
left_feedback=Wyślij informacje zwrotne
|
||||
left_home=Informacje o systemie
|
||||
left_login=Login: $1
|
||||
left_logs=Wyświetl logi modułu
|
||||
left_oc=Sponsorowana przez OpenCountry
|
||||
left_others=Inne
|
||||
left_search=Wyszukaj:
|
||||
left_search_usermin=Wyszukaj w Usermin:
|
||||
left_search_webmin=Wyszukaj w Webmin:
|
||||
right_cpu=Średnie obciążenie CPU
|
||||
right_cpuinfo=Informacje o procesorze
|
||||
right_cpustats=$1% użytkownik, $2% jądro, $4% IO, $3% bezczynny
|
||||
right_cputype=$5, $8 rdzeni
|
||||
right_cpuuse=Użycie CPU
|
||||
right_disk=Miejsce na dysku lokalnym
|
||||
right_from=Formularz logowania
|
||||
right_header0=Infomacje o systemie
|
||||
right_header5=Infomacje o koncie
|
||||
right_host=Nazwa hosta systemu
|
||||
right_kernel=Jądro i CPU
|
||||
right_kernelon=$1 $2 na $3
|
||||
right_load=$1 (1 min) $2 (5 minut) $3 (15 minut)
|
||||
right_login=Zalogowany jako
|
||||
right_os=System operacyjny
|
||||
right_out=$1 z $2
|
||||
right_procs=Uruchomionych procesów
|
||||
right_quota=Użycie dysku i quota
|
||||
right_real=Pamięć rzeczywista
|
||||
right_time=Czas systemowy
|
||||
right_updates=Uaktualnienia paczek
|
||||
right_updays=$1 dni, $2 godzin, $3 minut
|
||||
right_uphours=$1 godzin, $2 minut
|
||||
right_upmins=$1 minut
|
||||
right_upneed=Dostępnych $1 uaktualnień paczek
|
||||
right_upok=Wszystkie zainstalowane paczki są aktualne
|
||||
right_upsec=Dostępnych jest $1 uaktualnień, z których $2 to uaktualnienia bezpieczeństwa
|
||||
right_uptime=Czas działania systmu
|
||||
right_uquota=Quota dyskowa i użycie
|
||||
right_used=Razem $1, używane $2
|
||||
right_usermin=Wersja Usermina
|
||||
right_virt=Pamięć wirtualna
|
||||
right_webmin=Wersja Webmina
|
||||
@@ -1,34 +0,0 @@
|
||||
left_login=Login: $1
|
||||
left_home=Informações do Sistema
|
||||
left_oc=Patrocinado por OpenCountry
|
||||
left_feedback=Enviar Feedback
|
||||
left_search_webmin=Procurar no Webmin:
|
||||
left_search_usermin=Procurar no Usermin:
|
||||
left_search=Procurar:
|
||||
left_logs=Ver Registros do Módulos
|
||||
left_others=Outros
|
||||
right_header0=Informações do Sistema
|
||||
right_host=Nome de host do sistema
|
||||
right_os=Sistema operacional
|
||||
right_login=Conectado como
|
||||
right_from=Conectado de
|
||||
right_webmin=Versão do Webmin
|
||||
right_usermin=Versão do Usermin
|
||||
right_cpu=Médias de carga da CPU
|
||||
right_load=$1 (1 minuto) $2 (5 minutos) $3 (15 minutos)
|
||||
right_real=Memória real
|
||||
right_virt=Memória virtual
|
||||
right_procs=Processos em execução
|
||||
right_disk=Espaço em disco local
|
||||
right_used=$1 no total, $2 em uso
|
||||
right_out=$1 of $2
|
||||
right_quota=Uso e cota de espaço em disco
|
||||
right_header5=Informações da Conta
|
||||
right_uquota=Cota e uso de espaço em disco
|
||||
right_time=Tempo no sistema
|
||||
right_uptime=Tempo de atividade do sistema
|
||||
right_updays=$1 dias, $2 horas, $3 minutos
|
||||
right_uphours=$1 horas, $2 minutos
|
||||
right_upmins=$1 minutos
|
||||
right_kernel=Kernel e CPU
|
||||
right_kernelon=$1 $2 em $3
|
||||
@@ -1,39 +0,0 @@
|
||||
left_feedback=Отправить отзыв
|
||||
left_home=Информация о системе
|
||||
left_login=Логин: $1
|
||||
left_logs=Просмотреть журнал модулей
|
||||
left_oc=При поддержке OpenCountry
|
||||
left_others=Остальные
|
||||
left_search=Поиск:
|
||||
left_search_usermin=Поиск Usermin:
|
||||
left_search_webmin=Поиск Webmin:
|
||||
right_cpu=Средняя загрузка процессора
|
||||
right_cpuinfo=Информация о процессоре
|
||||
right_cpustats=$1% пользователь, $2% ядро, $4% IO, $3% простой
|
||||
right_cputype=$5, $8 ядер
|
||||
right_cpuuse=Использование процессора
|
||||
right_disk=Место на локальном диске
|
||||
right_header0=Информация о системе
|
||||
right_header5=Информация об аккаунте
|
||||
right_host=Имя хоста
|
||||
right_kernel=Ядро и процессор
|
||||
right_kernelon=$1 $2 на $3
|
||||
right_login=Вошел как
|
||||
right_os=Операционная система
|
||||
right_procs=Запущенно процессов
|
||||
right_quota=Использование диск и квота
|
||||
right_real=Физическая память
|
||||
right_time=Системное время
|
||||
right_updates=Обновление пакетов
|
||||
right_updays=$1 дней, $2 часов, $3 минут
|
||||
right_uphours=$1 часов, $2 минут
|
||||
right_upmins=$1 минут
|
||||
right_upneed=Доступно $1 обновленных пакетов
|
||||
right_upok=Все установленные пакеты имеют последнюю версию
|
||||
right_upsec=Доступно $1 обновленных пакетов, из которых $2 содержат обновления безопасности
|
||||
right_uptime=Uptime системы
|
||||
right_uquota=Дисковая квота и использование
|
||||
right_used=$1 всего, $2 используется
|
||||
right_usermin=Версия Usermin
|
||||
right_virt=Виртуальная память
|
||||
right_webmin=Версия Webmin
|
||||
@@ -1,176 +0,0 @@
|
||||
#!/usr/bin/perl
|
||||
# Show the left-side menu of Webmin modules
|
||||
|
||||
BEGIN { push(@INC, ".."); };
|
||||
use WebminCore;
|
||||
&init_config();
|
||||
&ReadParse();
|
||||
%text = &load_language($current_theme);
|
||||
%gaccess = &get_module_acl(undef, "");
|
||||
|
||||
# Work out what modules and categories we have
|
||||
@cats = &get_visible_modules_categories();
|
||||
@modules = map { @{$_->{'modules'}} } @cats;
|
||||
|
||||
&popup_header();
|
||||
print <<EOF;
|
||||
<link rel="stylesheet" type="text/css" href="left.css" />
|
||||
<script>
|
||||
function toggleview (id1,id2) {
|
||||
var obj1 = document.getElementById(id1);
|
||||
var obj2 = document.getElementById(id2);
|
||||
(obj1.className=="itemshown") ? obj1.className="itemhidden" : obj1.className="itemshown";
|
||||
(obj1.className=="itemshown") ? obj2.innerHTML="<img border='0' src='images/open.gif' alt='[–]'>" : obj2.innerHTML="<img border='0' src='images/closed.gif' alt='[+]'>";
|
||||
}
|
||||
|
||||
// Show the logs for the current module in the right
|
||||
function show_logs() {
|
||||
var url = ''+window.parent.frames[1].location;
|
||||
var sl1 = url.indexOf('//');
|
||||
var mod = '';
|
||||
if (sl1 > 0) {
|
||||
var sl2 = url.indexOf('/', sl1+2);
|
||||
if (sl2 > 0) {
|
||||
var sl3 = url.indexOf('/', sl2+1);
|
||||
if (sl3 > 0) {
|
||||
mod = url.substring(sl2+1, sl3);
|
||||
} else {
|
||||
mod = url.substring(sl2+1);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (mod && mod.indexOf('.cgi') <= 0) {
|
||||
// Show one module's logs
|
||||
window.parent.frames[1].location = 'webminlog/search.cgi?tall=4&uall=1&fall=1&mall=0&module='+mod;
|
||||
}
|
||||
else {
|
||||
// Show all logs
|
||||
window.parent.frames[1].location = 'webminlog/search.cgi?tall=4&uall=1&fall=1&mall=0&mall=1'
|
||||
}
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
EOF
|
||||
|
||||
# Show login
|
||||
print &text('left_login', $remote_user),"<br>\n";
|
||||
|
||||
if ($gconfig{"notabs_${base_remote_user}"} == 2 ||
|
||||
$gconfig{"notabs_${base_remote_user}"} == 0 && $gconfig{'notabs'} ||
|
||||
@modules <= 1) {
|
||||
# Show all modules in one list
|
||||
foreach $minfo (@modules) {
|
||||
$target = $minfo->{'noframe'} ? "_top" : "right";
|
||||
print "<a target=$target href=$minfo->{'dir'}/>$minfo->{'desc'}</a><br>\n";
|
||||
}
|
||||
}
|
||||
else {
|
||||
# Show all modules under categories
|
||||
foreach $c (@cats) {
|
||||
# Show category opener, plus modules under it
|
||||
&print_category_opener(
|
||||
$c->{'code'},
|
||||
$in{$c->{'code'}} ? 1 : 0,
|
||||
$c->{'unused'} ?
|
||||
"<font color=#888888>$c->{'desc'}</font>" :
|
||||
$c->{'desc'});
|
||||
$cls = $in{$c->{'code'}} ? "itemshown" : "itemhidden";
|
||||
print "<div class='$cls' id='$c->{'code'}'>";
|
||||
foreach my $minfo (@{$c->{'modules'}}) {
|
||||
&print_category_link("$minfo->{'dir'}/",
|
||||
$minfo->{'desc'},
|
||||
undef,
|
||||
undef,
|
||||
$minfo->{'noframe'} ? "_top" : "",
|
||||
);
|
||||
}
|
||||
print "</div>\n";
|
||||
}
|
||||
}
|
||||
|
||||
# Show module/help search form
|
||||
if (-r "$root_directory/webmin_search.cgi" &&
|
||||
$gaccess{'webminsearch'}) {
|
||||
print "<form action=webmin_search.cgi target=right>\n";
|
||||
print $text{'left_search'}," ";
|
||||
print &ui_textbox("search", undef, 15);
|
||||
}
|
||||
|
||||
print "<div class='leftlink'><hr></div>\n";
|
||||
|
||||
# Show current module's log search, if logging
|
||||
if ($gconfig{'log'} && &foreign_available("webminlog")) {
|
||||
print "<div class='linkwithicon'><img src=images/logs.gif>\n";
|
||||
print "<div class='aftericon'><a target=right href='webminlog/' onClick='show_logs(); return false;'>$text{'left_logs'}</a></div></div>\n";
|
||||
}
|
||||
|
||||
# Show info link
|
||||
print "<div class='linkwithicon'><img src=images/gohome.gif>\n";
|
||||
print "<div class='aftericon'><a target=right href='right.cgi?open=system&open=status'>$text{'left_home'}</a></div></div>\n";
|
||||
|
||||
# Show feedback link, but only if a custom email is set
|
||||
%gaccess = &get_module_acl(undef, "");
|
||||
if (&get_product_name() eq 'webmin' && # For Webmin
|
||||
!$ENV{'ANONYMOUS_USER'} &&
|
||||
$gconfig{'nofeedbackcc'} != 2 &&
|
||||
$gaccess{'feedback'} &&
|
||||
$gconfig{'feedback_to'} ||
|
||||
&get_product_name() eq 'usermin' && # For Usermin
|
||||
!$ENV{'ANONYMOUS_USER'} &&
|
||||
$gconfig{'feedback'}
|
||||
) {
|
||||
print "<div class='linkwithicon'><img src=images/mail-small.gif>\n";
|
||||
print "<div class='aftericon'><a target=right href='feedback_form.cgi'>$text{'left_feedback'}</a></div></div>\n";
|
||||
}
|
||||
|
||||
# Show refesh modules link, for master admin
|
||||
if (&foreign_available("webmin")) {
|
||||
print "<div class='linkwithicon'><img src=images/refresh-small.gif>\n";
|
||||
print "<div class='aftericon'><a target=right href='webmin/refresh_modules.cgi'>$text{'main_refreshmods'}</a></div></div>\n";
|
||||
}
|
||||
|
||||
# Show logout link
|
||||
&get_miniserv_config(\%miniserv);
|
||||
if ($miniserv{'logout'} && !$ENV{'SSL_USER'} && !$ENV{'LOCAL_USER'} &&
|
||||
$ENV{'HTTP_USER_AGENT'} !~ /webmin/i) {
|
||||
print "<div class='linkwithicon'><img src=images/stock_quit.gif>\n";
|
||||
if ($main::session_id) {
|
||||
print "<div class='aftericon'><a target=_top href='session_login.cgi?logout=1'>$text{'main_logout'}</a></div>";
|
||||
}
|
||||
else {
|
||||
print "<div class='aftericon'><a target=_top href='switch_user.cgi'>$text{'main_switch'}</a></div>";
|
||||
}
|
||||
print "</div>\n";
|
||||
}
|
||||
|
||||
# Show link back to original Webmin server
|
||||
if ($ENV{'HTTP_WEBMIN_SERVERS'}) {
|
||||
print "<div class='linkwithicon'><img src=images/webmin-small.gif>\n";
|
||||
print "<div class='aftericon'><a target=_top href='$ENV{'HTTP_WEBMIN_SERVERS'}'>$text{'header_servers'}</a></div>";
|
||||
}
|
||||
|
||||
&popup_footer();
|
||||
|
||||
# print_category_opener(name, &allcats, label)
|
||||
# Prints out an open/close twistie for some category
|
||||
sub print_category_opener
|
||||
{
|
||||
local ($c, $status, $label) = @_;
|
||||
$label = $c eq "others" ? $text{'left_others'} : $label;
|
||||
local $img = $status ? "open.gif" : "closed.gif";
|
||||
|
||||
# Show link to close or open catgory
|
||||
print "<div class='linkwithicon'>";
|
||||
print "<a href=\"javascript:toggleview('$c','toggle$c')\" id='toggle$c'><img border='0' src='images/$img' alt='[+]'></a>\n";
|
||||
print "<div class='aftericon'><a href=\"javascript:toggleview('$c','toggle$c')\" id='toggle$c'><font color=#000000>$label</font></a></div></div>\n";
|
||||
}
|
||||
|
||||
|
||||
sub print_category_link
|
||||
{
|
||||
local ($link, $label, $image, $noimage, $target) = @_;
|
||||
$target ||= "right";
|
||||
print "<div class='linkindented'><a target=$target href=$link>$label</a></div>\n";
|
||||
}
|
||||
|
||||
@@ -1,51 +0,0 @@
|
||||
.mode {
|
||||
left: auto;
|
||||
right: auto;
|
||||
}
|
||||
.linkwithicon {
|
||||
position: relative;
|
||||
white-space: nowrap;
|
||||
left: 2px;
|
||||
width: 16px;
|
||||
padding-top: 2px;
|
||||
}
|
||||
.leftlink {
|
||||
position: relative;
|
||||
left: 4px;
|
||||
right: 4px;
|
||||
line-height: 150%;
|
||||
}
|
||||
.linkindented {
|
||||
border: none;
|
||||
position: relative;
|
||||
padding-top: 2px;
|
||||
margin-right: 2px;
|
||||
margin-left: 20px;
|
||||
}
|
||||
.linknotindented {
|
||||
border: none;
|
||||
position: relative;
|
||||
padding-top: 2px;
|
||||
margin-right: 2px;
|
||||
margin-left: 4px;
|
||||
}
|
||||
.aftericon {
|
||||
display: inline;
|
||||
}
|
||||
.domainmenu {
|
||||
white-space: nowrap;
|
||||
position: relative;
|
||||
left: 4px;
|
||||
padding-top: 2px;
|
||||
}
|
||||
div.menubody {
|
||||
border:1px solid #D9D9D9;
|
||||
background-color:#F5F5F5;
|
||||
padding:0;
|
||||
margin:0;
|
||||
}
|
||||
div.menubodyInner {
|
||||
border:1px solid #FFFFFF;
|
||||
margin:0;
|
||||
padding:0;
|
||||
}
|
||||
|
Before Width: | Height: | Size: 559 B |
|
Before Width: | Height: | Size: 826 B |
@@ -1,310 +0,0 @@
|
||||
#!/usr/local/bin/perl
|
||||
# Show server or domain information
|
||||
|
||||
BEGIN { push(@INC, ".."); };
|
||||
use WebminCore;
|
||||
&init_config();
|
||||
&ReadParse();
|
||||
&load_theme_library();
|
||||
if (&get_product_name() eq "usermin") {
|
||||
$level = 3;
|
||||
}
|
||||
else {
|
||||
$level = 0;
|
||||
}
|
||||
%text = &load_language($current_theme);
|
||||
$bar_width = 300;
|
||||
foreach $o (split(/\0/, $in{'open'})) {
|
||||
push(@open, $o);
|
||||
$open{$o} = 1;
|
||||
}
|
||||
|
||||
$prehead = defined(&WebminCore::theme_prehead) ?
|
||||
&capture_function_output(\&WebminCore::theme_prehead) : "";
|
||||
&popup_header(undef, $prehead);
|
||||
print "<center>\n";
|
||||
|
||||
# Webmin logo
|
||||
if (&get_product_name() eq 'webmin') {
|
||||
print "<a href=http://www.webmin.com/ target=_new><img src=images/webmin-blue.png border=0></a><p>\n";
|
||||
}
|
||||
|
||||
if ($level == 0) {
|
||||
# Show general system information
|
||||
print "<table width=70%>\n";
|
||||
|
||||
# Ask status module for collected info
|
||||
&foreign_require("system-status");
|
||||
$info = &system_status::get_collected_info();
|
||||
|
||||
# Hostname
|
||||
$ip = $info && $info->{'ips'} ? $info->{'ips'}->[0]->[0] :
|
||||
&to_ipaddress(get_system_hostname());
|
||||
$ip = " ($ip)" if ($ip);
|
||||
print "<tr> <td><b>$text{'right_host'}</b></td>\n";
|
||||
print "<td>",&get_system_hostname(),$ip,"</td> </tr>\n";
|
||||
|
||||
# Operating system
|
||||
print "<tr> <td><b>$text{'right_os'}</b></td>\n";
|
||||
if ($gconfig{'os_version'} eq '*') {
|
||||
print "<td>$gconfig{'real_os_type'}</td> </tr>\n";
|
||||
}
|
||||
else {
|
||||
print "<td>$gconfig{'real_os_type'} $gconfig{'real_os_version'}</td> </tr>\n";
|
||||
}
|
||||
|
||||
# Webmin version
|
||||
print "<tr> <td><b>$text{'right_webmin'}</b></td>\n";
|
||||
print "<td>",&get_webmin_version(),"</td> </tr>\n";
|
||||
|
||||
# System time
|
||||
$tm = localtime(time());
|
||||
print "<tr> <td><b>$text{'right_time'}</b></td>\n";
|
||||
if (&foreign_available("time")) {
|
||||
$tm = "<a href=time/>$tm</a>";
|
||||
}
|
||||
print "<td>$tm</td> </tr>\n";
|
||||
|
||||
# Kernel and CPU
|
||||
if ($info->{'kernel'}) {
|
||||
print "<tr> <td><b>$text{'right_kernel'}</b></td>\n";
|
||||
print "<td>",&text('right_kernelon',
|
||||
$info->{'kernel'}->{'os'},
|
||||
$info->{'kernel'}->{'version'},
|
||||
$info->{'kernel'}->{'arch'}),"</td> </tr>\n";
|
||||
}
|
||||
|
||||
# CPU type and cores
|
||||
if ($info->{'load'}) {
|
||||
@c = @{$info->{'load'}};
|
||||
if (@c > 3) {
|
||||
print "<tr> <td><b>$text{'right_cpuinfo'}</b></td>\n";
|
||||
print "<td>",&text('right_cputype', @c),"</td> </tr>\n";
|
||||
}
|
||||
}
|
||||
|
||||
# System uptime
|
||||
&foreign_require("proc");
|
||||
my $uptime;
|
||||
my ($d, $h, $m) = &proc::get_system_uptime();
|
||||
if ($d) {
|
||||
$uptime = &text('right_updays', $d, $h, $m);
|
||||
}
|
||||
elsif ($m) {
|
||||
$uptime = &text('right_uphours', $h, $m);
|
||||
}
|
||||
elsif ($m) {
|
||||
$uptime = &text('right_upmins', $m);
|
||||
}
|
||||
if ($uptime) {
|
||||
print "<tr> <td><b>$text{'right_uptime'}</b></td>\n";
|
||||
print "<td>$uptime</td> </tr>\n";
|
||||
}
|
||||
|
||||
# Running processes
|
||||
if (&foreign_check("proc")) {
|
||||
@procs = &proc::list_processes();
|
||||
$pr = scalar(@procs);
|
||||
print "<tr> <td><b>$text{'right_procs'}</b></td>\n";
|
||||
if (&foreign_available("proc")) {
|
||||
$pr = "<a href=proc/>$pr</a>";
|
||||
}
|
||||
print "<td>$pr</td> </tr>\n";
|
||||
}
|
||||
|
||||
# Load averages
|
||||
if ($info->{'load'}) {
|
||||
@c = @{$info->{'load'}};
|
||||
if (@c) {
|
||||
print "<tr> <td><b>$text{'right_cpu'}</b></td>\n";
|
||||
print "<td>",&text('right_load', @c),"</td> </tr>\n";
|
||||
}
|
||||
}
|
||||
|
||||
# CPU usage
|
||||
if ($info->{'cpu'}) {
|
||||
@c = @{$info->{'cpu'}};
|
||||
print "<tr> <td><b>$text{'right_cpuuse'}</b></td>\n";
|
||||
print "<td>",&text('right_cpustats', @c),"</td> </tr>\n";
|
||||
}
|
||||
|
||||
# Memory usage
|
||||
if ($info->{'mem'}) {
|
||||
@m = @{$info->{'mem'}};
|
||||
if (@m && $m[0]) {
|
||||
print "<tr> <td><b>$text{'right_real'}</b></td>\n";
|
||||
print "<td>",&text('right_used',
|
||||
&nice_size($m[0]*1024),
|
||||
&nice_size(($m[0]-$m[1])*1024)),
|
||||
"</td> </tr>\n";
|
||||
print "<tr> <td></td>\n";
|
||||
print "<td>",&bar_chart($m[0], $m[0]-$m[1], 1),
|
||||
"</td> </tr>\n";
|
||||
}
|
||||
|
||||
if (@m && $m[2]) {
|
||||
print "<tr> <td><b>$text{'right_virt'}</b></td>\n";
|
||||
print "<td>",&text('right_used',
|
||||
&nice_size($m[2]*1024),
|
||||
&nice_size(($m[2]-$m[3])*1024)),
|
||||
"</td> </tr>\n";
|
||||
print "<tr> <td></td>\n";
|
||||
print "<td>",&bar_chart($m[2], $m[2]-$m[3], 1),
|
||||
"</td> </tr>\n";
|
||||
}
|
||||
}
|
||||
|
||||
# Disk space on local drives
|
||||
if ($info->{'disk_total'}) {
|
||||
($total, $free) = ($info->{'disk_total'}, $info->{'disk_free'});
|
||||
print "<tr> <td><b>$text{'right_disk'}</b></td>\n";
|
||||
print "<td>",&text('right_used',
|
||||
&nice_size($total),
|
||||
&nice_size($total-$free)),"</td> </tr>\n";
|
||||
print "<tr> <td></td>\n";
|
||||
print "<td>",&bar_chart($total, $total-$free, 1),
|
||||
"</td> </tr>\n";
|
||||
}
|
||||
|
||||
# Package updates
|
||||
if ($info->{'poss'}) {
|
||||
print "<tr> <td><b>$text{'right_updates'}</b></td>\n";
|
||||
@poss = @{$info->{'poss'}};
|
||||
@secs = grep { $_->{'security'} } @poss;
|
||||
if (@poss && @secs) {
|
||||
$msg = &text('right_upsec', scalar(@poss),
|
||||
scalar(@secs));
|
||||
}
|
||||
elsif (@poss) {
|
||||
$msg = &text('right_upneed', scalar(@poss));
|
||||
}
|
||||
else {
|
||||
$msg = $text{'right_upok'};
|
||||
}
|
||||
if (&foreign_available("package-updates")) {
|
||||
$msg = "<a href='package-updates/index.cgi?mode=updates'>$msg</a>";
|
||||
}
|
||||
print "<td>$msg</td> </tr>\n";
|
||||
}
|
||||
|
||||
print "</table>\n";
|
||||
|
||||
# Check for incorrect OS
|
||||
if (&foreign_check("webmin")) {
|
||||
&foreign_require("webmin", "webmin-lib.pl");
|
||||
&webmin::show_webmin_notifications();
|
||||
}
|
||||
}
|
||||
elsif ($level == 3) {
|
||||
# Show Usermin user's information
|
||||
print "<h3>$text{'right_header5'}</h3>\n";
|
||||
print "<table width=70%>\n";
|
||||
|
||||
# Host and login info
|
||||
print "<tr> <td><b>$text{'right_host'}</b></td>\n";
|
||||
print "<td>",&get_system_hostname(),"</td> </tr>\n";
|
||||
|
||||
print "<tr> <td><b>$text{'right_os'}</b></td>\n";
|
||||
if ($gconfig{'os_version'} eq '*') {
|
||||
print "<td>$gconfig{'real_os_type'}</td> </tr>\n";
|
||||
}
|
||||
else {
|
||||
print "<td>$gconfig{'real_os_type'} $gconfig{'real_os_version'}</td> </tr>\n";
|
||||
}
|
||||
|
||||
print "<tr> <td><b>$text{'right_usermin'}</b></td>\n";
|
||||
print "<td>",&get_webmin_version(),"</td> </tr>\n";
|
||||
|
||||
# System time
|
||||
$tm = localtime(time());
|
||||
print "<tr> <td><b>$text{'right_time'}</b></td>\n";
|
||||
print "<td>$tm</td> </tr>\n";
|
||||
|
||||
# Disk quotas
|
||||
if (&foreign_installed("quota")) {
|
||||
&foreign_require("quota", "quota-lib.pl");
|
||||
$n = "a::user_filesystems($remote_user);
|
||||
$usage = 0;
|
||||
$quota = 0;
|
||||
for($i=0; $i<$n; $i++) {
|
||||
if ($quota::filesys{$i,'hblocks'}) {
|
||||
$quota += $quota::filesys{$i,'hblocks'};
|
||||
$usage += $quota::filesys{$i,'ublocks'};
|
||||
}
|
||||
elsif ($quota::filesys{$i,'sblocks'}) {
|
||||
$quota += $quota::filesys{$i,'sblocks'};
|
||||
$usage += $quota::filesys{$i,'ublocks'};
|
||||
}
|
||||
}
|
||||
if ($quota) {
|
||||
$bsize = $quota::config{'block_size'};
|
||||
print "<tr> <td><b>$text{'right_uquota'}</b></td>\n";
|
||||
print "<td>",&text('right_out',
|
||||
&nice_size($usage*$bsize),
|
||||
&nice_size($quota*$bsize)),"</td> </tr>\n";
|
||||
print "<tr> <td></td>\n";
|
||||
print "<td>",&bar_chart($quota, $usage, 1),
|
||||
"</td> </tr>\n";
|
||||
}
|
||||
}
|
||||
print "</table>\n";
|
||||
}
|
||||
|
||||
print "</center>\n";
|
||||
&popup_footer();
|
||||
|
||||
# bar_chart(total, used, blue-rest)
|
||||
# Returns HTML for a bar chart of a single value
|
||||
sub bar_chart
|
||||
{
|
||||
local ($total, $used, $blue) = @_;
|
||||
local $rv;
|
||||
$rv .= sprintf "<img src=images/red.gif width=%s height=10>",
|
||||
int($bar_width*$used/$total)+1;
|
||||
if ($blue) {
|
||||
$rv .= sprintf "<img src=images/blue.gif width=%s height=10>",
|
||||
$bar_width - int($bar_width*$used/$total)-1;
|
||||
}
|
||||
else {
|
||||
$rv .= sprintf "<img src=images/white.gif width=%s height=10>",
|
||||
$bar_width - int($bar_width*$used/$total)-1;
|
||||
}
|
||||
return $rv;
|
||||
}
|
||||
|
||||
# bar_chart_three(total, used1, used2, used3)
|
||||
# Returns HTML for a bar chart of three values, stacked
|
||||
sub bar_chart_three
|
||||
{
|
||||
local ($total, $used1, $used2, $used3) = @_;
|
||||
local $rv;
|
||||
local $w1 = int($bar_width*$used1/$total)+1;
|
||||
local $w2 = int($bar_width*$used2/$total);
|
||||
local $w3 = int($bar_width*$used3/$total);
|
||||
$rv .= sprintf "<img src=images/red.gif width=%s height=10>", $w1;
|
||||
$rv .= sprintf "<img src=images/purple.gif width=%s height=10>", $w2;
|
||||
$rv .= sprintf "<img src=images/blue.gif width=%s height=10>", $w3;
|
||||
$rv .= sprintf "<img src=images/grey.gif width=%s height=10>",
|
||||
$bar_width - $w1 - $w2 - $w3;
|
||||
return $rv;
|
||||
}
|
||||
|
||||
# collapsed_header(text, name)
|
||||
sub collapsed_header
|
||||
{
|
||||
local ($text, $name) = @_;
|
||||
print "<br><font style='font-size:16px'>";
|
||||
local $others = join("&", map { "open=$_" } grep { $_ ne $name } @open);
|
||||
$others = "&$others" if ($others);
|
||||
if ($open{$name}) {
|
||||
print "<img src=images/open.gif border=0>\n";
|
||||
print &ui_link("right.cgi?$others",$text);
|
||||
}
|
||||
else {
|
||||
print "<img src=images/closed.gif border=0>\n";
|
||||
print &ui_link("right.cgi?open=$name$others",$text);
|
||||
}
|
||||
print "</font><br>\n";
|
||||
return $open{$name};
|
||||
}
|
||||
|
||||
|
Before Width: | Height: | Size: 501 B |
|
Before Width: | Height: | Size: 626 B |
|
Before Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 4.1 KiB |
|
Before Width: | Height: | Size: 4.9 KiB |
|
Before Width: | Height: | Size: 4.3 KiB |
|
Before Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 6.1 KiB |
|
Before Width: | Height: | Size: 3.2 KiB |
|
Before Width: | Height: | Size: 4.5 KiB |
|
Before Width: | Height: | Size: 2.9 KiB |
|
Before Width: | Height: | Size: 3.0 KiB |
|
Before Width: | Height: | Size: 2.5 KiB |
|
Before Width: | Height: | Size: 5.3 KiB |
|
Before Width: | Height: | Size: 4.1 KiB |
|
Before Width: | Height: | Size: 4.5 KiB |
|
Before Width: | Height: | Size: 3.3 KiB |
@@ -1,12 +0,0 @@
|
||||
webmin=1
|
||||
usermin=1
|
||||
version=1.480
|
||||
desc=Blue Framed Theme
|
||||
longdesc=A simple theme with minimal graphics, which uses a categorized layout.
|
||||
depends=1.336 1.480
|
||||
desc_nl=Blauw Frame Theme
|
||||
longdesc_ja_JP.euc=
|
||||
longdesc_nl=Een eenvoudig grafish theme, welke catagorie layout gebruikt
|
||||
desc_fr=
|
||||
longdesc_fr=
|
||||
desc_ja_JP.euc=
|
||||
@@ -1,664 +0,0 @@
|
||||
# Virtualmin Framed heme
|
||||
# Icons copyright David Vignoni, all other theme elements copyright 2005-2007
|
||||
# Virtualmin, Inc.
|
||||
|
||||
$default_domains_to_show = 10;
|
||||
|
||||
# Global state for wrapper
|
||||
# if 0, wrapper isn't on, add one and open it, if 1 close it, if 2+, subtract
|
||||
# but don't close
|
||||
$WRAPPER_OPEN = 0;
|
||||
|
||||
# theme_ui_post_header([subtext])
|
||||
# Returns HTML to appear directly after a standard header() call
|
||||
sub theme_ui_post_header
|
||||
{
|
||||
local ($text) = @_;
|
||||
my $rv;
|
||||
$rv .= "<div class='ui_post_header'>$text</div>\n" if (defined($text));
|
||||
#$rv .= "<div class='section'>\n";
|
||||
$rv .= "<p>" if (!defined($text));
|
||||
return $rv;
|
||||
}
|
||||
|
||||
# theme_ui_pre_footer()
|
||||
# Returns HTML to appear directly before a standard footer() call
|
||||
sub theme_ui_pre_footer
|
||||
{
|
||||
my $rv;
|
||||
$rv .= "</div><p>\n";
|
||||
return $rv;
|
||||
}
|
||||
|
||||
# ui_print_footer(args...)
|
||||
# Print HTML for a footer with the pre-footer line. Args are the same as those
|
||||
# passed to footer()
|
||||
sub theme_ui_print_footer
|
||||
{
|
||||
local @args = @_;
|
||||
print &ui_pre_footer();
|
||||
&footer(@args);
|
||||
}
|
||||
|
||||
sub theme_icons_table
|
||||
{
|
||||
my ($i, $need_tr);
|
||||
my $cols = $_[3] ? $_[3] : 4;
|
||||
my $per = int(100.0 / $cols);
|
||||
print "<div class='wrapper'>\n";
|
||||
print "<table class='icons_table' id='main' width=100% cellpadding=5>\n";
|
||||
for($i=0; $i<@{$_[0]}; $i++) {
|
||||
if ($i%$cols == 0) { print "<tr>\n"; }
|
||||
print "<td width=$per% align=center valign=top>\n";
|
||||
&generate_icon($_[2]->[$i], $_[1]->[$i], $_[0]->[$i],
|
||||
$_[4], $_[5], $_[6], $_[7]->[$i], $_[8]->[$i]);
|
||||
print "</td>\n";
|
||||
if ($i%$cols == $cols-1) { print "</tr>\n"; }
|
||||
}
|
||||
while($i++%$cols) { print "<td width=$per%></td>\n"; $need_tr++; }
|
||||
print "</tr>\n" if ($need_tr);
|
||||
print "</table>\n";
|
||||
print "</div>\n";
|
||||
}
|
||||
|
||||
sub theme_generate_icon
|
||||
{
|
||||
my $w = !defined($_[4]) ? "width=48" : $_[4] ? "width=$_[4]" : "";
|
||||
my $h = !defined($_[5]) ? "height=48" : $_[5] ? "height=$_[5]" : "";
|
||||
if ($tconfig{'noicons'}) {
|
||||
if ($_[2]) {
|
||||
print "$_[6]<a href=\"$_[2]\" $_[3]>$_[1]</a>$_[7]\n";
|
||||
}
|
||||
else {
|
||||
print "$_[6]$_[1]$_[7]\n";
|
||||
}
|
||||
}
|
||||
elsif ($_[2]) {
|
||||
print "<table><tr><td width=48 height=48>\n",
|
||||
"<a href=\"$_[2]\" $_[3]><img src=\"$_[0]\" alt=\"\" border=0 ",
|
||||
"$w $h></a></td></tr></table>\n";
|
||||
print "$_[6]<a href=\"$_[2]\" $_[3]>$_[1]</a>$_[7]\n";
|
||||
}
|
||||
else {
|
||||
print "<table><tr><td width=48 height=48>\n",
|
||||
"<img src=\"$_[0]\" alt=\"\" border=0 $w $h>",
|
||||
"</td></tr></table>\n$_[6]$_[1]$_[7]\n";
|
||||
}
|
||||
}
|
||||
|
||||
sub theme_post_change_modules
|
||||
{
|
||||
print <<EOF;
|
||||
<script>
|
||||
var url = '' + top.left.location;
|
||||
top.left.location = url;
|
||||
</script>
|
||||
EOF
|
||||
}
|
||||
|
||||
sub theme_prebody
|
||||
{
|
||||
my $module_name = &get_module_name();
|
||||
if ($script_name =~ /session_login.cgi/) {
|
||||
# Generate CSS link
|
||||
print "<link rel='stylesheet' type='text/css' href='$gconfig{'webprefix'}/unauthenticated/style.css'>\n";
|
||||
}
|
||||
}
|
||||
|
||||
sub theme_prehead
|
||||
{
|
||||
print "<link rel='stylesheet' type='text/css' href='$gconfig{'webprefix'}/unauthenticated/style.css' />\n";
|
||||
print "<script type='text/javascript' src='$gconfig{'webprefix'}/unauthenticated/toggleview.js'></script>\n";
|
||||
print "<script>\n";
|
||||
print "var rowsel = new Array();\n";
|
||||
print "</script>\n";
|
||||
print "<script type='text/javascript' src='$gconfig{'webprefix'}/unauthenticated/sorttable.js'></script>\n";
|
||||
}
|
||||
|
||||
sub theme_popup_prehead
|
||||
{
|
||||
return &theme_prehead();
|
||||
}
|
||||
|
||||
# ui_table_start(heading, [tabletags], [cols], [&default-tds], [right-heading])
|
||||
# A table with a heading and table inside
|
||||
sub theme_ui_table_start
|
||||
{
|
||||
my ($heading, $tabletags, $cols, $tds, $rightheading) = @_;
|
||||
if (! $tabletags =~ /width/) { $tabletages .= " width=100%"; }
|
||||
if (defined($main::ui_table_cols)) {
|
||||
# Push on stack, for nested call
|
||||
push(@main::ui_table_cols_stack, $main::ui_table_cols);
|
||||
push(@main::ui_table_pos_stack, $main::ui_table_pos);
|
||||
push(@main::ui_table_default_tds_stack, $main::ui_table_default_tds);
|
||||
}
|
||||
my $rv;
|
||||
my $colspan = 1;
|
||||
|
||||
if (!$WRAPPER_OPEN) {
|
||||
$rv .= "<table class='shrinkwrapper' $tabletags>\n";
|
||||
$rv .= "<tr><td>\n";
|
||||
}
|
||||
$WRAPPER_OPEN++;
|
||||
$rv .= "<table class='ui_table' $tabletags>\n";
|
||||
if (defined($heading) || defined($rightheading)) {
|
||||
$rv .= "<thead><tr class='ui_table_head'>";
|
||||
if (defined($heading)) {
|
||||
$rv .= "<td><b>$heading</b></td>"
|
||||
}
|
||||
if (defined($rightheading)) {
|
||||
$rv .= "<td align=right>$rightheading</td>";
|
||||
$colspan++;
|
||||
}
|
||||
$rv .= "</tr></thead>\n";
|
||||
}
|
||||
$rv .= "<tbody> <tr class='ui_table_body'> <td colspan=$colspan>".
|
||||
"<table width=100%>\n";
|
||||
$main::ui_table_cols = $cols || 4;
|
||||
$main::ui_table_pos = 0;
|
||||
$main::ui_table_default_tds = $tds;
|
||||
return $rv;
|
||||
}
|
||||
|
||||
# ui_table_end()
|
||||
# The end of a table started by ui_table_start
|
||||
sub theme_ui_table_end
|
||||
{
|
||||
my $rv;
|
||||
if ($main::ui_table_cols == 4 && $main::ui_table_pos) {
|
||||
# Add an empty block to balance the table
|
||||
$rv .= &ui_table_row(" ", " ");
|
||||
}
|
||||
if (@main::ui_table_cols_stack) {
|
||||
$main::ui_table_cols = pop(@main::ui_table_cols_stack);
|
||||
$main::ui_table_pos = pop(@main::ui_table_pos_stack);
|
||||
$main::ui_table_default_tds = pop(@main::ui_table_default_tds_stack);
|
||||
}
|
||||
else {
|
||||
$main::ui_table_cols = undef;
|
||||
$main::ui_table_pos = undef;
|
||||
$main::ui_table_default_tds = undef;
|
||||
}
|
||||
$rv .= "</tbody></table></td></tr></table>\n";
|
||||
if ($WRAPPER_OPEN==1) {
|
||||
#$rv .= "</div>\n";
|
||||
$rv .= "</td></tr>\n";
|
||||
$rv .= "</table>\n";
|
||||
}
|
||||
$WRAPPER_OPEN--;
|
||||
return $rv;
|
||||
}
|
||||
|
||||
# theme_ui_tabs_start(&tabs, name, selected, show-border)
|
||||
# Render a row of tabs from which one can be selected. Each tab is an array
|
||||
# ref containing a name, title and link.
|
||||
sub theme_ui_tabs_start
|
||||
{
|
||||
my ($tabs, $name, $sel, $border) = @_;
|
||||
my $rv;
|
||||
if (!$main::ui_hidden_start_donejs++) {
|
||||
$rv .= &ui_hidden_javascript();
|
||||
}
|
||||
|
||||
# Build list of tab titles and names
|
||||
my $tabnames = "[".join(",", map { "\""."e_escape($_->[0])."\"" } @$tabs)."]";
|
||||
my $tabtitles = "[".join(",", map { "\""."e_escape($_->[1])."\"" } @$tabs)."]";
|
||||
$rv .= "<script>\n";
|
||||
$rv .= "document.${name}_tabnames = $tabnames;\n";
|
||||
$rv .= "document.${name}_tabtitles = $tabtitles;\n";
|
||||
$rv .= "</script>\n";
|
||||
|
||||
# Output the tabs
|
||||
my $imgdir = "$gconfig{'webprefix'}/images";
|
||||
$rv .= &ui_hidden($name, $sel)."\n";
|
||||
$rv .= "<table border=0 cellpadding=0 cellspacing=0 class='ui_tabs'>\n";
|
||||
$rv .= "<tr><td bgcolor=#ffffff colspan=".(scalar(@$tabs)*2+1).">";
|
||||
if ($ENV{'HTTP_USER_AGENT'} !~ /msie/i) {
|
||||
# For some reason, the 1-pixel space above the tabs appears huge on IE!
|
||||
$rv .= "<img src=$imgdir/1x1.gif>";
|
||||
}
|
||||
$rv .= "</td></tr>\n";
|
||||
$rv .= "<tr>\n";
|
||||
$rv .= "<td bgcolor=#ffffff width=1><img src=$imgdir/1x1.gif></td>\n";
|
||||
foreach my $t (@$tabs) {
|
||||
if ($t ne $tabs[0]) {
|
||||
# Spacer
|
||||
$rv .= "<td width=2 bgcolor=#ffffff class='ui_tab_spacer'>".
|
||||
"<img src=$imgdir/1x1.gif></td>\n";
|
||||
}
|
||||
my $tabid = "tab_".$t->[0];
|
||||
$rv .= "<td id=${tabid} class='ui_tab'>";
|
||||
$rv .= "<table cellpadding=0 cellspacing=0 border=0><tr>";
|
||||
if ($t->[0] eq $sel) {
|
||||
# Selected tab
|
||||
$rv .= "<td valign=top class='tabSelected'>".
|
||||
"<img src=$imgdir/lc2.gif alt=\"\"></td>";
|
||||
$rv .= "<td class='tabSelected' nowrap>".
|
||||
" <b>$t->[1]</b> </td>";
|
||||
$rv .= "<td valign=top class='tabSelected'>".
|
||||
"<img src=$imgdir/rc2.gif alt=\"\"></td>";
|
||||
}
|
||||
else {
|
||||
# Other tab (which has a link)
|
||||
$rv .= "<td valign=top class='tabUnselected'>".
|
||||
"<img src=$imgdir/lc1.gif alt=\"\"></td>";
|
||||
$rv .= "<td class='tabUnselected' nowrap>".
|
||||
" <a href='$t->[2]' ".
|
||||
"onClick='return select_tab(\"$name\", \"$t->[0]\")'>".
|
||||
"$t->[1]</a> </td>";
|
||||
$rv .= "<td valign=top class='tabUnselected'>".
|
||||
"<img src=$imgdir/rc1.gif ".
|
||||
"alt=\"\"></td>";
|
||||
$rv .= "</td>\n";
|
||||
}
|
||||
$rv .= "</tr></table>";
|
||||
$rv .= "</td>\n";
|
||||
}
|
||||
$rv .= "<td bgcolor=#ffffff width=1><img src=$imgdir/1x1.gif></td>\n";
|
||||
$rv .= "</table>\n";
|
||||
|
||||
if ($border) {
|
||||
# All tabs are within a grey box
|
||||
$rv .= "<table width=100% cellpadding=0 cellspacing=0 ".
|
||||
"class='ui_tabs_box'>\n";
|
||||
$rv .= "<tr> <td bgcolor=#ffffff rowspan=3 width=1><img src=$imgdir/1x1.gif></td>\n";
|
||||
$rv .= "<td $cb colspan=3 height=2><img src=$imgdir/1x1.gif></td> </tr>\n";
|
||||
$rv .= "<tr> <td $cb width=2><img src=$imgdir/1x1.gif></td>\n";
|
||||
$rv .= "<td valign=top>";
|
||||
}
|
||||
$main::ui_tabs_selected = $sel;
|
||||
return $rv;
|
||||
}
|
||||
|
||||
# theme_ui_columns_start(&headings, [width-percent], [noborder], [&tdtags], [heading])
|
||||
# Returns HTML for a multi-column table, with the given headings
|
||||
sub theme_ui_columns_start
|
||||
{
|
||||
my ($heads, $width, $noborder, $tdtags, $heading) = @_;
|
||||
my ($href) = grep { $_ =~ /<a\s+href/i } @$heads;
|
||||
my $rv;
|
||||
$theme_ui_columns_row_toggle = 0;
|
||||
if (!$noborder && !$WRAPPER_OPEN) {
|
||||
$rv .= "<table class='wrapper' width="
|
||||
. ($width ? $width : "100")
|
||||
. "% class='ui_columns'>\n";
|
||||
$rv .= "<tr><td>\n";
|
||||
}
|
||||
if (!$noborder) {
|
||||
$WRAPPER_OPEN++;
|
||||
}
|
||||
local @classes;
|
||||
push(@classes, "ui_table") if (!$noborder);
|
||||
push(@classes, "sortable") if (!$href);
|
||||
$rv .= "<table".(@classes ? " class='".join(" ", @classes)."'" : "").
|
||||
(defined($width) ? " width=$width%" : "").">\n";
|
||||
if ($heading) {
|
||||
$rv .= "<thead> <tr $tb title='ui_columns_heading'>".
|
||||
"<td colspan=".scalar(@$heads).
|
||||
"><b>$heading</b></td></tr> </thead>\n";
|
||||
}
|
||||
$rv .= "<thead> <tr $tb class='ui_columns_heads'>\n";
|
||||
my $i;
|
||||
for($i=0; $i<@$heads; $i++) {
|
||||
$rv .= "<td ".$tdtags->[$i]."><b>".
|
||||
($heads->[$i] eq "" ? "<br>" : $heads->[$i])."</b></td>\n";
|
||||
}
|
||||
$rv .= "</tr></thead> <tbody>\n";
|
||||
$theme_ui_columns_count++;
|
||||
return $rv;
|
||||
}
|
||||
|
||||
# theme_ui_columns_row(&columns, &tdtags)
|
||||
# Returns HTML for a row in a multi-column table
|
||||
sub theme_ui_columns_row
|
||||
{
|
||||
$theme_ui_columns_row_toggle = $theme_ui_columns_row_toggle ? '0' : '1';
|
||||
local ($cols, $tdtags) = @_;
|
||||
my $rv;
|
||||
$rv .= "<tr class='ui_columns row$theme_ui_columns_row_toggle' onMouseOver=\"this.className='mainhigh'\" onMouseOut=\"this.className='mainbody row$theme_ui_columns_row_toggle'\">\n";
|
||||
my $i;
|
||||
for($i=0; $i<@$cols; $i++) {
|
||||
$rv .= "<td ".$tdtags->[$i].">".
|
||||
($cols->[$i] !~ /\S/ ? "<br>" : $cols->[$i])."</td>\n";
|
||||
}
|
||||
$rv .= "</tr>\n";
|
||||
return $rv;
|
||||
}
|
||||
|
||||
# theme_ui_columns_end()
|
||||
# Returns HTML to end a table started by ui_columns_start
|
||||
sub theme_ui_columns_end
|
||||
{
|
||||
my $rv;
|
||||
$rv = "</tbody> </table>\n";
|
||||
if ($WRAPPER_OPEN == 1) { # Last wrapper
|
||||
$rv .= "</td> </tr> </table>\n";
|
||||
}
|
||||
$WRAPPER_OPEN--;
|
||||
return $rv;
|
||||
}
|
||||
|
||||
# theme_ui_grid_table(&elements, columns, [width-percent], [tds], [tabletags],
|
||||
# [title])
|
||||
# Given a list of HTML elements, formats them into a table with the given
|
||||
# number of columns. However, themes are free to override this to use fewer
|
||||
# columns where space is limited.
|
||||
sub theme_ui_grid_table
|
||||
{
|
||||
my ($elements, $cols, $width, $tds, $tabletags, $title) = @_;
|
||||
return "" if (!@$elements);
|
||||
|
||||
my $rv = "<table class='wrapper' "
|
||||
. ($width ? " width=$width%" : " width=100%")
|
||||
. ($tabletags ? " ".$tabletags : "")
|
||||
. "><tr><td>\n";
|
||||
$rv .= "<table class='ui_grid_table'"
|
||||
. ($width ? " width=$width%" : "")
|
||||
. ($tabletags ? " ".$tabletags : "")
|
||||
. ">\n";
|
||||
if ($title) {
|
||||
$rv .= "<thead><tr $tb class='ui_grid_heading'> ".
|
||||
"<td colspan=$cols><b>$title</b></td> </tr></thead>\n";
|
||||
}
|
||||
$rv .= "<tbody>\n";
|
||||
my $i;
|
||||
for($i=0; $i<@$elements; $i++) {
|
||||
$rv .= "<tr class='ui_grid_row'>" if ($i%$cols == 0);
|
||||
$rv .= "<td ".$tds->[$i%$cols]." valign=top class='ui_grid_cell'>".
|
||||
$elements->[$i]."</td>\n";
|
||||
$rv .= "</tr>" if ($i%$cols == $cols-1);
|
||||
}
|
||||
if ($i%$cols) {
|
||||
while($i%$cols) {
|
||||
$rv .= "<td ".$tds->[$i%$cols]." class='ui_grid_cell'><br></td>\n";
|
||||
$i++;
|
||||
}
|
||||
$rv .= "</tr>\n";
|
||||
}
|
||||
$rv .= "</table>\n";
|
||||
$rv .= "</tbody>\n";
|
||||
$rv .= "</td></tr></table>\n"; # wrapper
|
||||
return $rv;
|
||||
}
|
||||
|
||||
# theme_ui_hidden_table_start(heading, [tabletags], [cols], name, status,
|
||||
# [&default-tds], [rightheading])
|
||||
# A table with a heading and table inside, and which is collapsible
|
||||
sub theme_ui_hidden_table_start
|
||||
{
|
||||
my ($heading, $tabletags, $cols, $name, $status, $tds, $rightheading) = @_;
|
||||
my $rv;
|
||||
if (!$main::ui_hidden_start_donejs++) {
|
||||
$rv .= &ui_hidden_javascript();
|
||||
}
|
||||
my $divid = "hiddendiv_$name";
|
||||
my $openerid = "hiddenopener_$name";
|
||||
my $defimg = $status ? "open.gif" : "closed.gif";
|
||||
my $defclass = $status ? 'opener_shown' : 'opener_hidden';
|
||||
my $text = defined($tconfig{'cs_text'}) ? $tconfig{'cs_text'} :
|
||||
defined($gconfig{'cs_text'}) ? $gconfig{'cs_text'} : "000000";
|
||||
if (!$WRAPPER_OPEN) { # If we're not already inside of a wrapper, wrap it
|
||||
$rv .= "<table class='shrinkwrapper ui_table' $tabletags>\n";
|
||||
$rv .= "<tr><td>\n";
|
||||
}
|
||||
$WRAPPER_OPEN++;
|
||||
my $colspan = 1;
|
||||
$rv .= "<table class='ui_table' $tabletags>\n";
|
||||
if (defined($heading) || defined($rightheading)) {
|
||||
$rv .= "<thead><tr class='ui_table_head'>";
|
||||
if (defined($heading)) {
|
||||
$rv .= "<td><a href=\"javascript:hidden_opener('$divid', '$openerid')\" id='$openerid'><img border=0 src='$gconfig{'webprefix'}/images/$defimg'></a> <a href=\"javascript:hidden_opener('$divid', '$openerid')\"><b><font color=#ffffff>$heading</font></b></a></td>";
|
||||
}
|
||||
if (defined($rightheading)) {
|
||||
$rv .= "<td align=right>$rightheading</td>";
|
||||
$colspan++;
|
||||
}
|
||||
$rv .= "</tr> </thead>\n";
|
||||
}
|
||||
$rv .= "<tbody><tr> <td colspan=$colspan><div class='$defclass' id='$divid'><table width=100%>\n";
|
||||
$main::ui_table_cols = $cols || 4;
|
||||
$main::ui_table_pos = 0;
|
||||
$main::ui_table_default_tds = $tds;
|
||||
return $rv;
|
||||
}
|
||||
|
||||
# ui_hidden_table_end(name)
|
||||
# Returns HTML for the end of table with hiding, as started by
|
||||
# ui_hidden_table_start
|
||||
sub theme_ui_hidden_table_end
|
||||
{
|
||||
my ($name) = @_;
|
||||
local $rv = "</table></div></td></tr></tbody></table>\n";
|
||||
if ( $WRAPPER_OPEN == 1 ) {
|
||||
$WRAPPER_OPEN--;
|
||||
#$rv .= "</div>\n";
|
||||
$rv .= "</td></tr></table>\n";
|
||||
}
|
||||
elsif ($WRAPPER_OPEN) { $WRAPPER_OPEN--; }
|
||||
return $rv;
|
||||
}
|
||||
|
||||
# theme_select_all_link(field, form, text)
|
||||
# Adds support for row highlighting to the normal select all
|
||||
sub theme_select_all_link
|
||||
{
|
||||
local ($field, $form, $text) = @_;
|
||||
$form = int($form);
|
||||
$text ||= $text{'ui_selall'};
|
||||
return "<a class='select_all' href='#' onClick='f = document.forms[$form]; ff = f.$field; ff.checked = true; r = document.getElementById(\"row_\"+ff.id); if (r) { r.className = \"mainsel\" }; for(i=0; i<f.$field.length; i++) { ff = f.${field}[i]; if (!ff.disabled) { ff.checked = true; r = document.getElementById(\"row_\"+ff.id); if (r) { r.className = \"mainsel\" } } } return false'>$text</a>";
|
||||
}
|
||||
|
||||
# theme_select_invert_link(field, form, text)
|
||||
# Adds support for row highlighting to the normal invert selection
|
||||
sub theme_select_invert_link
|
||||
{
|
||||
local ($field, $form, $text) = @_;
|
||||
$form = int($form);
|
||||
$text ||= $text{'ui_selinv'};
|
||||
return "<a class='select_invert' href='#' onClick='f = document.forms[$form]; ff = f.$field; ff.checked = !f.$field.checked; r = document.getElementById(\"row_\"+ff.id); if (r) { r.className = ff.checked ? \"mainsel\" : \"mainbody\" }; for(i=0; i<f.$field.length; i++) { ff = f.${field}[i]; if (!ff.disabled) { ff.checked = !ff.checked; r = document.getElementById(\"row_\"+ff.id); if (r) { r.className = ff.checked ? \"mainsel\" : \"mainbody row\"+((i+1)%2) } } } return false'>$text</a>";
|
||||
}
|
||||
|
||||
sub theme_select_rows_link
|
||||
{
|
||||
local ($field, $form, $text, $rows) = @_;
|
||||
$form = int($form);
|
||||
my $js = "var sel = { ".join(",", map { "\""."e_escape($_)."\":1" } @$rows)." }; ";
|
||||
$js .= "for(var i=0; i<document.forms[$form].${field}.length; i++) { var ff = document.forms[$form].${field}[i]; var r = document.getElementById(\"row_\"+ff.id); ff.checked = sel[ff.value]; if (r) { r.className = ff.checked ? \"mainsel\" : \"mainbody row\"+((i+1)%2) } } ";
|
||||
$js .= "return false;";
|
||||
return "<a class='select_rows' href='#' onClick='$js'>$text</a>";
|
||||
}
|
||||
|
||||
sub theme_ui_checked_columns_row
|
||||
{
|
||||
$theme_ui_columns_row_toggle = $theme_ui_columns_row_toggle ? '0' : '1';
|
||||
local ($cols, $tdtags, $checkname, $checkvalue, $checked, $disabled, $tags) = @_;
|
||||
my $rv;
|
||||
my $cbid = "e_escape(quotemeta("${checkname}_${checkvalue}"));
|
||||
my $rid = "e_escape(quotemeta("row_${checkname}_${checkvalue}"));
|
||||
my $ridtr = "e_escape("row_${checkname}_${checkvalue}");
|
||||
my $mycb = $cb;
|
||||
if ($checked) {
|
||||
$mycb =~ s/mainbody/mainsel/g;
|
||||
}
|
||||
$mycb =~ s/class='/class='row$theme_ui_columns_row_toggle ui_checked_columns /;
|
||||
$rv .= "<tr id=\"$ridtr\" $mycb onMouseOver=\"this.className = document.getElementById('$cbid').checked ? 'mainhighsel' : 'mainhigh'\" onMouseOut=\"this.className = document.getElementById('$cbid').checked ? 'mainsel' : 'mainbody row$theme_ui_columns_row_toggle'\">\n";
|
||||
$rv .= "<td ".$tdtags->[0]." class='ui_checked_checkbox'>".
|
||||
&ui_checkbox($checkname, $checkvalue, undef, $checked, $tags." "."onClick=\"document.getElementById('$rid').className = this.checked ? 'mainhighsel' : 'mainhigh';\"", $disabled).
|
||||
"</td>\n";
|
||||
my $i;
|
||||
for($i=0; $i<@$cols; $i++) {
|
||||
$rv .= "<td ".$tdtags->[$i+1].">";
|
||||
if ($cols->[$i] !~ /<a\s+href|<input|<select|<textarea/) {
|
||||
$rv .= "<label for=\"".
|
||||
"e_escape("${checkname}_${checkvalue}")."\">";
|
||||
}
|
||||
$rv .= ($cols->[$i] !~ /\S/ ? "<br>" : $cols->[$i]);
|
||||
if ($cols->[$i] !~ /<a\s+href|<input|<select|<textarea/) {
|
||||
$rv .= "</label>";
|
||||
}
|
||||
$rv .= "</td>\n";
|
||||
}
|
||||
$rv .= "</tr>\n";
|
||||
return $rv;
|
||||
}
|
||||
|
||||
sub theme_ui_radio_columns_row
|
||||
{
|
||||
local ($cols, $tdtags, $checkname, $checkvalue, $checked, $tags) = @_;
|
||||
my $rv;
|
||||
my $cbid = "e_escape(quotemeta("${checkname}_${checkvalue}"));
|
||||
my $rid = "e_escape(quotemeta("row_${checkname}_${checkvalue}"));
|
||||
my $ridtr = "e_escape("row_${checkname}_${checkvalue}");
|
||||
my $mycb = $cb;
|
||||
if ($checked) {
|
||||
$mycb =~ s/mainbody/mainsel/g;
|
||||
}
|
||||
|
||||
$mycb =~ s/class='/class='ui_radio_columns /;
|
||||
$rv .= "<tr $mycb id=\"$ridtr\" onMouseOver=\"this.className = document.getElementById('$cbid').checked ? 'mainhighsel' : 'mainhigh'\" onMouseOut=\"this.className = document.getElementById('$cbid').checked ? 'mainsel' : 'mainbody'\">\n";
|
||||
$rv .= "<td ".$tdtags->[0]." class='ui_radio_radio'>".
|
||||
&ui_oneradio($checkname, $checkvalue, undef, $checked, $tags." "."onClick=\"for(i=0; i<form.$checkname.length; i++) { ff = form.${checkname}[i]; r = document.getElementById('row_'+ff.id); if (r) { r.className = 'mainbody' } } document.getElementById('$rid').className = this.checked ? 'mainhighsel' : 'mainhigh';\"").
|
||||
"</td>\n";
|
||||
my $i;
|
||||
for($i=0; $i<@$cols; $i++) {
|
||||
$rv .= "<td ".$tdtags->[$i+1].">";
|
||||
if ($cols->[$i] !~ /<a\s+href|<input|<select|<textarea/) {
|
||||
$rv .= "<label for=\"".
|
||||
"e_escape("${checkname}_${checkvalue}")."\">";
|
||||
}
|
||||
$rv .= ($cols->[$i] !~ /\S/ ? "<br>" : $cols->[$i]);
|
||||
if ($cols->[$i] !~ /<a\s+href|<input|<select|<textarea/) {
|
||||
$rv .= "</label>";
|
||||
}
|
||||
$rv .= "</td>\n";
|
||||
}
|
||||
$rv .= "</tr>\n";
|
||||
return $rv;
|
||||
}
|
||||
|
||||
# theme_ui_nav_link(direction, url, disabled)
|
||||
# Returns an arrow icon linking to provided url
|
||||
sub theme_ui_nav_link
|
||||
{
|
||||
my ($direction, $url, $disabled) = @_;
|
||||
my $alt = $direction eq "left" ? '<-' : '->';
|
||||
if ($disabled) {
|
||||
return "<img alt=\"$alt\" align=\"middle\""
|
||||
. "src=\"$gconfig{'webprefix'}/images/$direction-grey.gif\">\n";
|
||||
}
|
||||
else {
|
||||
return "<a href=\"$url\"><img alt=\"$alt\" align=\"top\""
|
||||
. "src=\"$gconfig{'webprefix'}/images/$direction.gif\"></a>\n";
|
||||
}
|
||||
}
|
||||
|
||||
# theme_footer([page, name]+, [noendbody])
|
||||
# Output a footer for returning to some page
|
||||
sub theme_footer
|
||||
{
|
||||
my $i;
|
||||
my $count = 0;
|
||||
my $module_name = &get_module_name();
|
||||
my %module_info = &get_module_info($module_name);
|
||||
for($i=0; $i+1<@_; $i+=2) {
|
||||
local $url = $_[$i];
|
||||
if ($url ne '/' || !$tconfig{'noindex'}) {
|
||||
if ($url eq '/') {
|
||||
$url = "/?cat=$module_info{'category'}";
|
||||
}
|
||||
elsif ($url eq '' && $module_name) {
|
||||
$url = "/$module_name/$module_info{'index_link'}";
|
||||
}
|
||||
elsif ($url =~ /^\?/ && $module_name) {
|
||||
$url = "/$module_name/$url";
|
||||
}
|
||||
$url = "$gconfig{'webprefix'}$url" if ($url =~ /^\//);
|
||||
if ($count++ == 0) {
|
||||
print theme_ui_nav_link("left", $url);
|
||||
}
|
||||
else {
|
||||
print " |\n";
|
||||
}
|
||||
print " <a href=\"$url\">",&text('main_return', $_[$i+1]),"</a>\n";
|
||||
}
|
||||
}
|
||||
print "<br>\n";
|
||||
if (!$_[$i]) {
|
||||
print "</body></html>\n";
|
||||
}
|
||||
}
|
||||
|
||||
# theme_ui_hidden_javascript()
|
||||
# Returns <script> and <style> sections for hiding functions and CSS
|
||||
sub theme_ui_hidden_javascript
|
||||
{
|
||||
my $rv;
|
||||
my $imgdir = "$gconfig{'webprefix'}/images";
|
||||
|
||||
return <<EOF;
|
||||
<style>
|
||||
.opener_shown {display:inline}
|
||||
.opener_hidden {display:none}
|
||||
</style>
|
||||
<script>
|
||||
// Open or close a hidden section
|
||||
function hidden_opener(divid, openerid)
|
||||
{
|
||||
var divobj = document.getElementById(divid);
|
||||
var openerobj = document.getElementById(openerid);
|
||||
if (divobj.className == 'opener_shown') {
|
||||
divobj.className = 'opener_hidden';
|
||||
openerobj.innerHTML = '<img border=0 src=$imgdir/closed.gif>';
|
||||
}
|
||||
else {
|
||||
divobj.className = 'opener_shown';
|
||||
openerobj.innerHTML = '<img border=0 src=$imgdir/open.gif>';
|
||||
}
|
||||
}
|
||||
|
||||
// Show a tab
|
||||
function select_tab(name, tabname, form)
|
||||
{
|
||||
var tabnames = document[name+'_tabnames'];
|
||||
var tabtitles = document[name+'_tabtitles'];
|
||||
for(var i=0; i<tabnames.length; i++) {
|
||||
var tabobj = document.getElementById('tab_'+tabnames[i]);
|
||||
var divobj = document.getElementById('div_'+tabnames[i]);
|
||||
var title = tabtitles[i];
|
||||
if (tabnames[i] == tabname) {
|
||||
// Selected table
|
||||
tabobj.innerHTML = '<table cellpadding=0 cellspacing=0><tr>'+
|
||||
'<td valign=top class=\\'tabSelected\\'>'+
|
||||
'<img src=$imgdir/lc2.gif alt=""></td>'+
|
||||
'<td class=\\'tabSelected\\' nowrap>'+
|
||||
' <b>'+title+'</b> </td>'+
|
||||
'<td valign=top class=\\'tabSelected\\'>'+
|
||||
'<img src=$imgdir/rc2.gif alt=""></td>'+
|
||||
'</tr></table>';
|
||||
divobj.className = 'opener_shown';
|
||||
}
|
||||
else {
|
||||
// Non-selected tab
|
||||
tabobj.innerHTML = '<table cellpadding=0 cellspacing=0><tr>'+
|
||||
'<td valign=top class=\\'tabUnselected\\'>'+
|
||||
'<img src=$imgdir/lc1.gif alt=""></td>'+
|
||||
'<td class=\\'tabUnselected\\' nowrap>'+
|
||||
' <a href=\\'\\' onClick=\\'return select_tab("'+
|
||||
name+'", "'+tabnames[i]+'")\\'>'+title+'</a> </td>'+
|
||||
'<td valign=top class=\\'tabUnselected\\'>'+
|
||||
'<img src=$imgdir/rc1.gif alt=""></td>'+
|
||||
'</tr></table>';
|
||||
divobj.className = 'opener_hidden';
|
||||
}
|
||||
}
|
||||
if (document.forms[0] && document.forms[0][name]) {
|
||||
document.forms[0][name].value = tabname;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
</script>
|
||||
EOF
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
|
Before Width: | Height: | Size: 3.4 KiB |
|
Before Width: | Height: | Size: 61 B |
|
Before Width: | Height: | Size: 61 B |
|
Before Width: | Height: | Size: 58 B |
@@ -1,28 +0,0 @@
|
||||
// Correctly handle PNG transparency in Win IE 5.5 or higher.
|
||||
// http://homepage.ntlworld.com/bobosola. Updated 02-March-2004
|
||||
|
||||
function correctPNG()
|
||||
{
|
||||
for(var i=0; i<document.images.length; i++)
|
||||
{
|
||||
var img = document.images[i]
|
||||
var imgName = img.src.toUpperCase()
|
||||
if (imgName.substring(imgName.length-3, imgName.length) == "GIF")
|
||||
{
|
||||
var imgID = (img.id) ? "id='" + img.id + "' " : ""
|
||||
var imgClass = (img.className) ? "class='" + img.className + "' " : ""
|
||||
var imgTitle = (img.title) ? "title='" + img.title + "' " : "title='" + img.alt + "' "
|
||||
var imgStyle = "display:inline-block;" + img.style.cssText
|
||||
if (img.align == "left") imgStyle = "float:left;" + imgStyle
|
||||
if (img.align == "right") imgStyle = "float:right;" + imgStyle
|
||||
if (img.parentElement.href) imgStyle = "cursor:hand;" + imgStyle
|
||||
var strNewHTML = "<span " + imgID + imgClass + imgTitle
|
||||
+ " style=\"" + "width:" + img.width + "px; height:" + img.height + "px;" + imgStyle + ";"
|
||||
+ "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"
|
||||
+ "(src=\'" + img.src + "\', sizingMethod='scale');\"></span>"
|
||||
img.outerHTML = strNewHTML
|
||||
i = i-1
|
||||
}
|
||||
}
|
||||
}
|
||||
window.attachEvent("onload", correctPNG);
|
||||
@@ -1,285 +0,0 @@
|
||||
addEvent(window, "load", sortables_init);
|
||||
|
||||
var SORT_COLUMN_INDEX;
|
||||
|
||||
function sortables_init() {
|
||||
var lastAssignedId = 0;
|
||||
// Find all tables with class sortable and make them sortable
|
||||
if (!document.getElementsByTagName) return;
|
||||
tbls = document.getElementsByTagName("table");
|
||||
for (ti=0;ti<tbls.length;ti++) {
|
||||
thisTbl = tbls[ti];
|
||||
if (!thisTbl.id) {
|
||||
thisTbl.id = 'sortableTable'+this.lastAssignedId++;
|
||||
}
|
||||
if (((' '+thisTbl.className+' ').indexOf("sortable") != -1) && (thisTbl.id)) {
|
||||
//initTable(thisTbl.id);
|
||||
ts_makeSortable(thisTbl);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function ts_makeSortable(table) {
|
||||
if (table.rows && table.rows.length > 0) {
|
||||
var firstRow = table.rows[0];
|
||||
}
|
||||
if (!firstRow) return;
|
||||
|
||||
// We have a first row: assume it's the header, and make its contents clickable links
|
||||
for (var i=0;i<firstRow.cells.length;i++) {
|
||||
var cell = firstRow.cells[i];
|
||||
var txt = ts_getInnerText(cell);
|
||||
cell.innerHTML = '<b><a href="#" class="sortheader" '+
|
||||
'onclick="ts_resortTable(this, '+i+');return false;">' +
|
||||
txt+'<span class="sortarrow"> </span></a></b>';
|
||||
}
|
||||
}
|
||||
|
||||
function ts_getInnerText(el) {
|
||||
if (typeof el == "string") return el;
|
||||
if (typeof el == "undefined") { return el };
|
||||
if (el.innerText) return el.innerText; //Not needed but it is faster
|
||||
var str = "";
|
||||
|
||||
var cs = el.childNodes;
|
||||
var l = cs.length;
|
||||
for (var i = 0; i < l; i++) {
|
||||
switch (cs[i].nodeType) {
|
||||
case 1: //ELEMENT_NODE
|
||||
str += ts_getInnerText(cs[i]);
|
||||
break;
|
||||
case 3: //TEXT_NODE
|
||||
str += cs[i].nodeValue;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return str;
|
||||
}
|
||||
|
||||
function ts_resortTable(lnk,clid) {
|
||||
// get the span
|
||||
var span;
|
||||
for (var ci=0;ci<lnk.childNodes.length;ci++) {
|
||||
if (lnk.childNodes[ci].tagName && lnk.childNodes[ci].tagName.toLowerCase() == 'span') span = lnk.childNodes[ci];
|
||||
}
|
||||
var spantext = ts_getInnerText(span);
|
||||
var td = lnk.parentNode;
|
||||
while(td.nodeName.toLowerCase() != 'td')
|
||||
td = td.parentNode;
|
||||
var column = typeof(clid) == 'undefined' ? td.cellIndex : clid;
|
||||
var table = getParent(td,'TABLE');
|
||||
|
||||
// Work out a type for the column
|
||||
if (table.rows.length <= 1) return;
|
||||
var itm = ts_getInnerText(table.rows[1].cells[column]);
|
||||
sortfn = ts_sort_caseinsensitive;
|
||||
if (itm.match(/^\d\d[\/-]\d\d[\/-]\d\d\d\d$/)) sortfn = ts_sort_date;
|
||||
if (itm.match(/^\d\d[\/-]\S\S\S[\/-]\d\d\d\d$/)) sortfn = ts_sort_date;
|
||||
if (itm.match(/^\d\d[\/-]\d\d[\/-]\d\d$/)) sortfn = ts_sort_date;
|
||||
if (itm.match(/^[£$]/)) sortfn = ts_sort_currency;
|
||||
if (itm.match(/^[\d\.]+\s*(bytes|b|kb|tb|gb|mb)$/i)) sortfn = ts_sort_filesize;
|
||||
// Special cases for our mailbox lists
|
||||
if (itm.match(/^(Empty|Unlimited)$/)) sortfn = ts_sort_filesize;
|
||||
if (itm.match(/^[\d\.]+%?$/)) sortfn = ts_sort_numeric;
|
||||
if (itm.match(/^\d+\.\d+\.\d+\.\d+$/)) sortfn = ts_sort_ip;
|
||||
SORT_COLUMN_INDEX = column;
|
||||
var firstRow = new Array();
|
||||
var newRows = new Array();
|
||||
for (i=0;i<table.rows[0].length;i++) { firstRow[i] = table.rows[0][i]; }
|
||||
for (j=1;j<table.rows.length;j++) { newRows[j-1] = table.rows[j]; }
|
||||
|
||||
newRows.sort(sortfn);
|
||||
|
||||
if (span.getAttribute("sortdir") == 'down') {
|
||||
ARROW = ' ↑';
|
||||
newRows.reverse();
|
||||
span.setAttribute('sortdir','up');
|
||||
} else {
|
||||
ARROW = ' ↓';
|
||||
span.setAttribute('sortdir','down');
|
||||
}
|
||||
|
||||
// We appendChild rows that already exist to the tbody, so it moves them rather than creating new ones
|
||||
// don't do sortbottom rows
|
||||
for (i=0;i<newRows.length;i++) { if (!newRows[i].className || (newRows[i].className && (newRows[i].className.indexOf('sortbottom') == -1))) table.tBodies[0].appendChild(newRows[i]);}
|
||||
// do sortbottom rows only
|
||||
for (i=0;i<newRows.length;i++) { if (newRows[i].className && (newRows[i].className.indexOf('sortbottom') != -1)) table.tBodies[0].appendChild(newRows[i]);}
|
||||
|
||||
// Delete any other arrows there may be showing
|
||||
var allspans = document.getElementsByTagName("span");
|
||||
for (var ci=0;ci<allspans.length;ci++) {
|
||||
if (allspans[ci].className == 'sortarrow') {
|
||||
if (getParent(allspans[ci],"table") == getParent(lnk,"table")) { // in the same table as us?
|
||||
allspans[ci].innerHTML = ' ';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
span.innerHTML = ARROW;
|
||||
}
|
||||
|
||||
function getParent(el, pTagName) {
|
||||
if (el == null) return null;
|
||||
else if (el.nodeType == 1 && el.tagName.toLowerCase() == pTagName.toLowerCase()) // Gecko bug, supposed to be uppercase
|
||||
return el;
|
||||
else
|
||||
return getParent(el.parentNode, pTagName);
|
||||
}
|
||||
function ts_sort_date(a,b) {
|
||||
// y2k notes: two digit years less than 50 are treated as 20XX, greater than 50 are treated as 19XX
|
||||
aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]);
|
||||
bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]);
|
||||
if (aa.length == 10) {
|
||||
// yyyy/mm/dd format
|
||||
dt1 = aa.substr(6,4)+aa.substr(3,2)+aa.substr(0,2);
|
||||
} else if (aa.length == 11) {
|
||||
// dd/mon/yyyy format
|
||||
dt1 = aa.substr(7,4)+ts_month_num(aa.substr(3,3))+aa.substr(0,2);
|
||||
} else {
|
||||
yr = aa.substr(6,2);
|
||||
if (parseInt(yr) < 50) { yr = '20'+yr; } else { yr = '19'+yr; }
|
||||
dt1 = yr+aa.substr(3,2)+aa.substr(0,2);
|
||||
}
|
||||
if (bb.length == 10) {
|
||||
dt2 = bb.substr(6,4)+bb.substr(3,2)+bb.substr(0,2);
|
||||
} else if (bb.length == 11) {
|
||||
// dd/mon/yyyy format
|
||||
dt2 = bb.substr(7,4)+ts_month_num(bb.substr(3,3))+bb.substr(0,2);
|
||||
} else {
|
||||
yr = bb.substr(6,2);
|
||||
if (parseInt(yr) < 50) { yr = '20'+yr; } else { yr = '19'+yr; }
|
||||
dt2 = yr+bb.substr(3,2)+bb.substr(0,2);
|
||||
}
|
||||
if (dt1==dt2) return 0;
|
||||
if (dt1<dt2) return -1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
function ts_month_num(month) {
|
||||
month = month.toLowerCase();
|
||||
return month == 'jan' ? '01' :
|
||||
month == 'feb' ? '02' :
|
||||
month == 'mar' ? '03' :
|
||||
month == 'apr' ? '04' :
|
||||
month == 'may' ? '05' :
|
||||
month == 'jun' ? '06' :
|
||||
month == 'jul' ? '07' :
|
||||
month == 'aug' ? '08' :
|
||||
month == 'sep' ? '09' :
|
||||
month == 'oct' ? '10' :
|
||||
month == 'nov' ? '11' :
|
||||
month == 'dec' ? '12' : '00';
|
||||
}
|
||||
|
||||
function ts_sort_currency(a,b) {
|
||||
aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]).replace(/[^0-9.]/g,'');
|
||||
bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]).replace(/[^0-9.]/g,'');
|
||||
return parseFloat(aa) - parseFloat(bb);
|
||||
}
|
||||
|
||||
// handles file sizes, simple numerics, and Unlimited/Empty/None special cases
|
||||
function ts_sort_filesize(a,b) {
|
||||
aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]).toLowerCase();
|
||||
bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]).toLowerCase();
|
||||
|
||||
if (aa.length == 0) return -1;
|
||||
else if (bb.length == 0) return 1;
|
||||
|
||||
var regex = /^([\d\.]*|none|empty|unlimited)\s*(bytes|b|kb|tb|gb|mb)?$/i;
|
||||
matchA = aa.match(regex);
|
||||
matchB = bb.match(regex);
|
||||
|
||||
// Give file size class an integer value, if we don't already have one
|
||||
if (matchA[1] == 'none') valA = -999;
|
||||
else if (matchA[1] == 'empty') valA = 0;
|
||||
else if (matchA[1] == '0') valA = 0;
|
||||
else if (matchA[1] == 'unlimited') valA = 999;
|
||||
else if (matchA[2] == 'b' || matchA[2] == 'bytes') valA = 1;
|
||||
else if (matchA[2] == undefined || matchA[2] == '') valA = 1;
|
||||
else if (matchA[2] == 'kb') valA = 2;
|
||||
else if (matchA[2] == 'mb') valA = 3;
|
||||
else if (matchA[2] == 'gb') valA = 4;
|
||||
else if (matchA[2] == 'tb') valA = 5;
|
||||
|
||||
if (matchB[1] == 'none') valB = -999;
|
||||
else if (matchB[1] == 'empty') valB = 0;
|
||||
else if (matchB[1] == '0') valB = 0;
|
||||
else if (matchB[1] == 'unlimited') valB = 999;
|
||||
else if (matchB[2] == 'b' || matchB[2] == 'bytes') valB = 1;
|
||||
else if (matchB[2] == undefined || matchB[2] == '') valB = 1;
|
||||
else if (matchB[2] == 'kb') valB = 2;
|
||||
else if (matchB[2] == 'mb') valB = 3;
|
||||
else if (matchB[2] == 'gb') valB = 4;
|
||||
else if (matchB[2] == 'tb') valB = 5;
|
||||
|
||||
if (valA == valB) {
|
||||
if ( isNaN(matchA[1])) return -1;
|
||||
if ( isNaN(matchB[1])) return 1;
|
||||
// Files are in the same size class kb/gb/mb/etc
|
||||
// just do a numeric sort on the file size
|
||||
return matchA[1]-matchB[1];
|
||||
} else if (valA < valB) {
|
||||
return -1;
|
||||
} else if (valA > valB) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
function ts_sort_numeric(a,b) {
|
||||
aa = parseFloat(ts_getInnerText(a.cells[SORT_COLUMN_INDEX]));
|
||||
if (isNaN(aa)) aa = 0;
|
||||
bb = parseFloat(ts_getInnerText(b.cells[SORT_COLUMN_INDEX]));
|
||||
if (isNaN(bb)) bb = 0;
|
||||
return aa-bb;
|
||||
}
|
||||
|
||||
function ts_sort_caseinsensitive(a,b) {
|
||||
aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]).toLowerCase();
|
||||
bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]).toLowerCase();
|
||||
if (aa==bb) return 0;
|
||||
if (aa<bb) return -1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
function ts_sort_ip(a,b) {
|
||||
aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]).toLowerCase();
|
||||
bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]).toLowerCase();
|
||||
var regexp = /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/;
|
||||
var matchA = aa.match(regexp);
|
||||
var matchB = bb.match(regexp);
|
||||
return !matchA ? -1 :
|
||||
!matchB ? 1 :
|
||||
parseInt(matchA[1]) < parseInt(matchB[1]) ? -1 :
|
||||
parseInt(matchA[1]) > parseInt(matchB[1]) ? 1 :
|
||||
parseInt(matchA[2]) < parseInt(matchB[2]) ? -1 :
|
||||
parseInt(matchA[2]) > parseInt(matchB[2]) ? 1 :
|
||||
parseInt(matchA[3]) < parseInt(matchB[3]) ? -1 :
|
||||
parseInt(matchA[3]) > parseInt(matchB[3]) ? 1 :
|
||||
parseInt(matchA[4]) < parseInt(matchB[4]) ? -1 :
|
||||
parseInt(matchA[4]) > parseInt(matchB[4]) ? 1 : 0;
|
||||
}
|
||||
|
||||
function ts_sort_default(a,b) {
|
||||
aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]);
|
||||
bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]);
|
||||
if (aa==bb) return 0;
|
||||
if (aa<bb) return -1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
function addEvent(elm, evType, fn, useCapture)
|
||||
// addEvent and removeEvent
|
||||
// cross-browser event handling for IE5+, NS6 and Mozilla
|
||||
// By Scott Andrew
|
||||
{
|
||||
if (elm.addEventListener){
|
||||
elm.addEventListener(evType, fn, useCapture);
|
||||
return true;
|
||||
} else if (elm.attachEvent){
|
||||
var r = elm.attachEvent("on"+evType, fn);
|
||||
return r;
|
||||
} else {
|
||||
alert("Handler could not be removed");
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 193 B |
@@ -1,129 +0,0 @@
|
||||
head {
|
||||
color: #333333;
|
||||
}
|
||||
body {
|
||||
color: #333333;
|
||||
}
|
||||
table { border-width: 0px;
|
||||
empty-cells: hide;
|
||||
}
|
||||
table.formsection, table.sortable, table.ui_table, table.loginform {
|
||||
border-collapse: collapse;
|
||||
border: 1px solid #FFFFFF;
|
||||
width: 100%;
|
||||
}
|
||||
img, a img { border:0; }
|
||||
tr.row0 {background-color:#e8e8ea;}
|
||||
tr.row1 {background-color:#f8f8fa;}
|
||||
table.formsection thead, table.sortable thead, table.ui_table thead, table.loginform thead {
|
||||
background-color:#427ad1;
|
||||
border:0px;
|
||||
color:#ffffff;
|
||||
border: 2px solid #b3b6b0;
|
||||
}
|
||||
table.formsection tbody, table.sortable tbody, table.ui_table tbody, table.loginform tbody {
|
||||
background-color:#EFEFEF;
|
||||
}
|
||||
tr.maintitle {
|
||||
color: #ffffff;
|
||||
background-color: #427ad1;
|
||||
}
|
||||
td.maintitle {
|
||||
color: #ffffff;
|
||||
background-color: #427ad1;
|
||||
}
|
||||
tr.maintitle a, tr.maintitle a:visited {
|
||||
color: #ffffff;
|
||||
}
|
||||
td.maintitle a, td.maintitle a:visited {
|
||||
color: #ffffff;
|
||||
}
|
||||
tr.maintitle a:hover {
|
||||
color: #EFEFEF;
|
||||
}
|
||||
td.maintitle a:hover {
|
||||
color: #EFEFEF;
|
||||
}
|
||||
a:link { color: #333399;
|
||||
text-decoration: none;
|
||||
}
|
||||
a:hover, a:visited:hover { color: #6666EE;
|
||||
text-decoration: none;
|
||||
}
|
||||
a:visited { color: #333399;
|
||||
text-decoration: none;
|
||||
}
|
||||
body, p, td, br, center { font-size: 10pt;
|
||||
font-family: sans-serif;
|
||||
}
|
||||
title { color: #333333;
|
||||
font-family: sans-serif;
|
||||
}
|
||||
h1 { color: #333333;
|
||||
font-size: 150%;
|
||||
font-family: sans-serif;
|
||||
}
|
||||
h2 { color: #333333;
|
||||
font-size: 130%;
|
||||
font-family: sans-serif;
|
||||
}
|
||||
h3 { color: #333333;
|
||||
font-size: 125%;
|
||||
font-family: sans-serif;
|
||||
}
|
||||
h4 { color: #333333;
|
||||
font-size: 120%;
|
||||
font-family: sans-serif;
|
||||
}
|
||||
th { font-size: small; }
|
||||
pre { font-size: 8pt; }
|
||||
#main { border-style: solid;
|
||||
border:1px solid #FFFFFF;
|
||||
margin:0;
|
||||
padding:0;
|
||||
}
|
||||
tr.mainsel { background-color: #ddffbb; }
|
||||
tr.mainhigh { background-color: #ffffbb; }
|
||||
tr.mainhighsel { background-color: #bbffcc; }
|
||||
.itemhidden { display: none; }
|
||||
.itemshown { display:block; }
|
||||
.barchart { padding: 1px;
|
||||
border: 1px solid #b3b6b0;
|
||||
position:relative;
|
||||
}
|
||||
.ui_post_header{ font-size: 120%;
|
||||
text-align: center;
|
||||
padding: 4px;
|
||||
}
|
||||
hr { border: 0;
|
||||
width: 90%;
|
||||
height: 1px;
|
||||
color: #D9D9D9;
|
||||
background-color: #D9D9D9;
|
||||
}
|
||||
table.wrapper {
|
||||
background-color:#D9D9D9;
|
||||
border:0;
|
||||
padding:0;
|
||||
margin:0;
|
||||
border-collapse:collapse;
|
||||
}
|
||||
div.wrapper {
|
||||
border:1px solid #D9D9D9;
|
||||
background-color:#F5F5F5;
|
||||
padding:0;
|
||||
margin:0;
|
||||
}
|
||||
.shrinkwrapper {
|
||||
background-color:#D9D9D9;
|
||||
border:0;
|
||||
padding:0;
|
||||
margin:0;
|
||||
border-collapse:collapse;
|
||||
}
|
||||
.tabSelected {
|
||||
background-color:#D9D9D9;
|
||||
}
|
||||
.tabUnselected {
|
||||
background-color:#dadaf8;
|
||||
}
|
||||