our @months = qw[Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec];
our $dateoffset = -1;
sub get_tz_offset
{
my $tz = $USER->{timezone};
$tz += $BUCKY_TIMEZONE_OFFSET;
$tz *= 3600;
return $tz;
}
sub when_is_it
{
my ($now) = @_;
# $now = time unless $now != undef;
my $offset = get_tz_offset(); # if ($dateoffset == -1);
$now += $offset;
return $now;
}
sub verbosedate
{
my ($date) = @_;
$date = when_is_it($date);
my ($m,$h,$d,$n,$y) = (localtime $date)[1..5];
my $meridian;
if ($h == 0)
{ $h = 12; $meridian = " am"; }
elsif ($h == 12)
{ $meridian = " pm"; }
elsif ($h > 12)
{ $h -= 12; $meridian = " pm"; }
else
{ $meridian = " am"; }
return sprintf("%2d-%s-%d %2d:%02d%s", $d, $months[$n], ($y+1900), $h, $m, $meridian);
}
sub verbosedatetime
{
my ($date) = @_;
$date = when_is_it($date);
my ($m,$h,$d,$n,$y) = (localtime $date)[1..5];
my $meridian;
if ($h == 0)
{ $h = 12; $meridian = " am"; }
elsif ($h == 12)
{ $meridian = " pm"; }
elsif ($h > 12)
{ $h -= 12; $meridian = " pm"; }
else
{ $meridian = " am"; }
return ((sprintf("%d-%s-%d", $d, $months[$n], ($y+1900))), (sprintf("%2d:%02d%s", $h, $m, $meridian)));
}
sub plaindate
{
my ($date) = @_;
$date = when_is_it($date);
my ($m,$h,$d,$n,$y) = (localtime $date)[1..5];
my $meridian;
if ($h == 0)
{ $h = 12; $meridian = " am"; }
elsif ($h == 12)
{ $meridian = " pm"; }
elsif ($h > 12)
{ $h -= 12; $meridian = " pm"; }
else
{ $meridian = " am"; }
return sprintf("%2d-%s-%d at %d:%02d%s", $d, $months[$n], ($y+1900), $h, $m, $meridian);
}
sub commatize
{
my $number = shift;
my $txt;
my @txt;
my $i;
my $counter = 0;
if ($number > 1024)
{
$number /= 1024;
unshift @txt, (($number*10) % 10);
unshift @txt, ".";
}
do
{
$i = $number % 10;
$number = int($number / 10);
if ($number && !(++$counter % 3))
{ $i = ' '.$i; }
unshift @txt, $i;
}
while($number);
$txt = join "", @txt;
return $txt;
}
sub carbondate
{
my ($date, $nobold) = @_;
my $span = (time - $date);
my $boldnew = (!defined($nobold) || !($nobold)) ? 1 : 0;
if ($boldnew && $span < 86400) # modified today
{ $color = "new"; }
elsif ($span < 604800) # modifed this week
{ $color = "recent"; }
elsif ($span < 1209600) # modifed 2 weeks ago
{ $color = "med"; }
elsif ($span < 3024000) # modifed 5 weeks ago
{ $color = "old"; }
elsif ($span < 12315200) # modifed 6 months ago
{ $color = "older"; }
else
{ $color = "quiet"; }
return $color;
}
sub pretty_date
{
my ($timeinsecs, $nobold) = @_;
my $date = verbosedate($timeinsecs);
my $color = carbondate($timeinsecs, $nobold);
return qq($date);
}
sub extend_span
{
my ($os, $od) = @_;
if ($os eq "now")
{ $os = time; }
my $span = $os - $od;
if ($DEBUG)
{
print qq(\nSTART: $os
END: $od
SPAN: $span
);
print qq(DAYS: ).int($span / (60*60*24)).qq(
\n);
}
return ($od, int($od-($span*2.6)));
}
sub hushview
{
my ($n, $bias, $nobold) = @_;
$bias = 1 unless ($bias);
my $txt = commatize($n);
if ($n < 30)
{ $n = 0 if (!$n); return qq!$n!.qq! v.!; }
if ($n < 200)
{ return qq!$txt!.qq! v.!; }
elsif ($n < 500)
{ return qq!$txt!.qq! v.!; }
elsif ($n < 1000)
{ return qq!$txt!.qq! v.!; }
elsif ($n < 5000)
{ return qq!$txt!.qq! kv.!; }
elsif ($nobold || $n < 10000)
{ return qq!$txt!.qq! kv.!; }
else
{ return qq!$txt!.qq! kv.!; }
}
sub hushsize
{
my ($n, $bias, $nobold) = @_;
$bias = 1 unless ($bias);
my $txt = commatize($n / 1024);
if ($n < 1024)
{ $n = 0 if (!$n); return qq!$n!.qq! b.!; }
if ($n < 1024*1024)
{ return qq!$txt!.qq! kb.!; }
elsif ($n < (20000000/$bias))
{ return qq!$txt!.qq! mb.!; }
elsif ($n < (50000000/$bias))
{ return qq!$txt!.qq! mb.!; }
elsif ($n < (80000000/$bias))
{ return qq!$txt!.qq! mb.!; }
elsif ($nobold || $n < (170000000/$bias))
{ return qq!$txt!.qq! mb.!; }
else
{ return qq!$txt!.qq! mb.!; }
}
sub hushnull
{
my ($n, $unit, $nobold) = @_;
my $out = '';
if ($n < 3)
{ $out .= qq!$n!; }
elsif ($n < 6)
{ $out .= qq!$n!; }
elsif ($n < 10)
{ $out .= qq!$n!; }
elsif ($n < 16)
{ $out .= qq!$n!; }
elsif ($nobold || $n < 21)
{ $out .= qq!$n!; }
else
{ $out .= qq!$n!; }
$out .= " $unit." if ($unit);
$out .= "";
return $out;
}
sub courtesy_s
{
my ($v) = @_;
if ($v == 1)
{ return ""; }
else
{ return "s"; }
}
sub linebr
{
my ($text, $short) = @_;
chomp $text;
unless ($text =~ /($1<\/a> /g;
}
}
$text =~ s/\s((dj )?phatty)/ $1<\/a>/i;
$text =~ s/( )/ /g;
$text =~ s/\r?\n/
/g;
# avoid stuffing tables, lists with br's
$text =~ s/tr>
/tr>/g;
$text =~ s/td>
/td>/g;
$text =~ s/ul>
/ul>/g;
$text =~ s/ol>
/ol>/g;
return $text;
}
sub tidy_urls
{
my ($line) = @_;
if ($line =~ /https?:\/\//)
{
my ($pre, $post) = split /http/, $line, 2;
my ($url, $space, $rest) = split /(\s)/, $post, 2;
# splitting on regex with parens produces
# a bonus secret list element -- whatever (it) matched
if (($url =~ /gif$/i || $url =~ /png$/i || $url =~ /jpg$/i) && ($pre !~ /![]()
$space);
}
else
{
my $thumb_url = $url; # lc($url);
# $thumb_url =~ s/(data\/\d+\/)/$1.thumb\/b./;
$line = qq($pre
$space);
}
}
else
{
my $curl = $url;
$curl =~ s!^s?://(www.)?!!i;
$curl =~ s!^([-A-Za-z0-9\.]+)/.*!$1!; # get domain-part of url
$line = qq($pre[$curl]$space);
}
$line .= tidy_urls($rest);
}
return $line;
}
sub nbsp
{ ' ' }
sub middot
{ ' · ' }
sub profile_link
{
my ($username) = @_;
my $link =
# qq() .
qq() .
$username .
qq();
return $link;
}
sub message_link
{
my ($username) = @_;
my $link =
# qq() .
qq() .
$username .
qq();
return $link;
}
sub details_link
{
my ($t) = @_;
if ($t != -1 && $BUCKY_KEYWORD_IN_DETAILS_URL)
{ return $t->{keyword}; }
else
{ return $BUCKY_LEXICON_DETAILS; }
}
sub get_revision
{
my ($thread) = @_;
return "" if ($thread->{revision} == 0);
my $rev = $thread->{revision};
my $number = 0;
my $digits = "";
my @letters = qw(z a b c d f g h j k l m n p q r s t v w x y);
do
{
$number = $rev % 21;
$rev = int($rev / 21);
$digits = $letters[$number].$digits;
}
while($rev != 0);
return $digits;
}
sub get_age
{
my ($t) = @_;
my $age = abs( time - $t );
my $m;
use integer;
# now
if ($age < 5)
{ return "now"; }
# seconds
if ($age < 60)
{ return sprintf ("%ds", $age); }
# minutes
$age /= 60;
if ($age < 60)
{ return sprintf ("%dm", $age); }
# hours
$m = $age % 60;
$age /= 60;
if ((int($m) > 0) && ($age < 2))
{ return sprintf ("%dh%dm", $age, $m); }
elsif ($age < 24)
{ return sprintf ("%dh", $age); }
# days
$age /= 24;
if ($age < 7)
{ return sprintf ("%dd", $age); }
# weeks
my $d = $age % 7;
$age /= 7;
if ($age < 12)
{ return sprintf ("%dw", $age); }
# months
my $m = $age / 4;
my $w = $age % 4;
$age /= 4;
$age /= 12;
if ($m < 12)
{
return sprintf ("%dm", $m);
}
# years
return sprintf("%dy", $age);
# # hours
# $m = $age % 60;
# $age /= 60;
# if ((int($m) > 0) && ($age < 2))
# { return sprintf ("%dh%dm", $age, $m); }
# elsif ($age < 24)
# { return sprintf ("%dh", $age); }
#
# # days
# $age /= 24;
# if ($age < 30)
# { return sprintf ("%dd", $age); }
#
# # months
# my $m = $age / 30;
# if ($age < 365)
# { return sprintf ("%dmo", $m); }
#
# # years
# $m = $age % 365;
# $m /= 30;
# $age /= 365;
# if ($m > 0)
# { return sprintf("%dy%dm", $age, $m); }
# else
# { return sprintf("%dy", $age); }
}
1;