[dw-free] Whitespace/remove LJDEP, no code changes.
[commit: http://hg.dwscoalition.org/dw-free/rev/cda50f44faf8]
Whitespace/remove LJDEP, no code changes.
Patch by
mark.
Whitespace/remove LJDEP, no code changes.
Patch by
![[staff profile]](https://www.dreamwidth.org/img/silk/identity/user_staff.png)
-------------------------------------------------------------------------------- diff -r 1ad1d37c54ab -r cda50f44faf8 htdocs/talkread.bml --- a/htdocs/talkread.bml Tue Feb 24 08:23:54 2009 +0000 +++ b/htdocs/talkread.bml Tue Feb 24 08:41:09 2009 +0000 @@ -1,848 +1,844 @@ <?page body<= <?_code +{ + use strict; + use vars qw($r_head $r_title %GET %ML $r_bodyopts); - use strict; - use vars qw($r_head $r_title %GET %ML $r_bodyopts); + # load package for formatting current music + use LJ::LastFM; - # load package for formatting current music - use LJ::LastFM; - - # make refs to both title and head, that work in cached or non-cached contexts - # $_[0] is the BML $req object, $_[1] is a pre-request scratch area. - $r_head = ""; - $r_title = ""; - my $head = $_[1] ? \$_[1]->{'head'} : \$r_head; - my $title = $_[1] ? \$_[1]->{'title'} : \$r_title; - my $bodyopts = $_[1] ? \$_[1]->{'bodyopts'} : \$r_bodyopts; + # make refs to both title and head, that work in cached or non-cached contexts + # $_[0] is the BML $req object, $_[1] is a pre-request scratch area. + $r_head = ""; + $r_title = ""; + my $head = $_[1] ? \$_[1]->{'head'} : \$r_head; + my $title = $_[1] ? \$_[1]->{'title'} : \$r_title; + my $bodyopts = $_[1] ? \$_[1]->{'bodyopts'} : \$r_bodyopts; - return LJ::server_down_html() if $LJ::SERVER_DOWN; + return LJ::server_down_html() if $LJ::SERVER_DOWN; - my $pics = LJ::Talk::get_subjecticons(); + my $pics = LJ::Talk::get_subjecticons(); - ## workaround mail client bug when don't understand quoted-printable. - ## Only correct 'journal' if 'itemid' was also broken, to avoid the - ## unlikely clash with a journal name. - if ($GET{'itemid'} =~ s/^3D//) { - $GET{'journal'} =~ s/^3D//; - $GET{'thread'} =~ s/^3D//; - } + ## workaround mail client bug when don't understand quoted-printable. + ## Only correct 'journal' if 'itemid' was also broken, to avoid the + ## unlikely clash with a journal name. + if ($GET{'itemid'} =~ s/^3D//) { + $GET{'journal'} =~ s/^3D//; + $GET{'thread'} =~ s/^3D//; + } - my $r = BML::get_request(); - $r->notes->{codepath} = "bml.talkread"; + my $r = BML::get_request(); + $r->notes->{codepath} = "bml.talkread"; - my $uri = BML::get_uri(); - my $itemid; + my $uri = BML::get_uri(); + my $itemid; my $old_url = 0; - if ($uri =~ m!/(\d+)\.html$!) { - $itemid = $1; - $GET{'itemid'} = $itemid; - $GET{'journal'} = $r->notes->{_journal}; - BML::set_language_scope("/talkread.bml"); - } else { - $old_url = 1; - } + if ($uri =~ m!/(\d+)\.html$!) { + $itemid = $1; + $GET{'itemid'} = $itemid; + $GET{'journal'} = $r->notes->{_journal}; + BML::set_language_scope("/talkread.bml"); + } else { + $old_url = 1; + } - # pre-load common strings for little speed and less typing later - # (we're doing this *after* set_language_scope is called, because - # two below are relative strings) - my %T = qw(postcomments talk.commentpost - readcomments talk.commentsread - parent talk.parentlink - thread talk.threadlink - expand talk.expandlink - replythis talk.replytothis - unscreentoreply talk.unscreentoreply - frozen talk.frozen - link talk.commentpermlink - deleted .subjectdeleted - nosubject .nosubject - ); - foreach (keys %T) { $T{$_} = $ML{$T{$_}}; } + # pre-load common strings for little speed and less typing later + # (we're doing this *after* set_language_scope is called, because + # two below are relative strings) + my %T = qw(postcomments talk.commentpost + readcomments talk.commentsread + parent talk.parentlink + thread talk.threadlink + expand talk.expandlink + replythis talk.replytothis + unscreentoreply talk.unscreentoreply + frozen talk.frozen + link talk.commentpermlink + deleted .subjectdeleted + nosubject .nosubject + ); + foreach (keys %T) { $T{$_} = $ML{$T{$_}}; } - my $init = LJ::Talk::init(\%GET); - return "<?h1 $ML{'Error'} h1?><?p $init->{'error'} p?>" if $init->{'error'}; + my $init = LJ::Talk::init(\%GET); + return "<?h1 $ML{'Error'} h1?><?p $init->{'error'} p?>" if $init->{'error'}; - my $u = $init->{'journalu'}; - return $ML{'talk.error.nojournal'} unless $u; + my $u = $init->{'journalu'}; + return $ML{'talk.error.nojournal'} unless $u; - my $ditemid = $init->{'ditemid'}+0; + my $ditemid = $init->{'ditemid'}+0; - if ($old_url && $GET{'journal'}) { - # FIXME: add args - my %args = %GET; - delete $args{'journal'}; - delete $args{'itemid'}; - my $args = ""; - if (%args) { - $args = "?" . join("&", map { LJ::eurl($_) . "=" . LJ::eurl($args{$_}) } keys %args); - } - return BML::redirect($u->journal_base . "/$ditemid.html$args"); - } + if ($old_url && $GET{'journal'}) { + # FIXME: add args + my %args = %GET; + delete $args{'journal'}; + delete $args{'itemid'}; + my $args = ""; + if (%args) { + $args = "?" . join("&", map { LJ::eurl($_) . "=" . LJ::eurl($args{$_}) } keys %args); + } + return BML::redirect($u->journal_base . "/$ditemid.html$args"); + } - # redirect if account was renamed - if ($u->{'journaltype'} eq "R") { - LJ::load_user_props($u, "renamedto"); - if ($u->{'renamedto'} ne "") { - return BML::redirect(LJ::journal_base($u->{'renamedto'}) . "/$ditemid.html"); - } - } + # redirect if account was renamed + if ($u->{'journaltype'} eq "R") { + LJ::load_user_props($u, "renamedto"); + if ($u->{'renamedto'} ne "") { + return BML::redirect(LJ::journal_base($u->{'renamedto'}) . "/$ditemid.html"); + } + } - # now check for init->error, since we know the account wasn't renamed - return "<?h1 $ML{'Error'} h1?><?p $init->{'error'} p?>" if $init->{'error'}; + # now check for init->error, since we know the account wasn't renamed + return "<?h1 $ML{'Error'} h1?><?p $init->{'error'} p?>" if $init->{'error'}; - $r->notes->{journalid} = $u->{userid}; + $r->notes->{journalid} = $u->{userid}; - my $thread = $init->{'thread'}; - my $dthread = $init->{'dthread'}; - $itemid = $init->{'itemid'}+0; + my $thread = $init->{'thread'}; + my $dthread = $init->{'dthread'}; + $itemid = $init->{'itemid'}+0; - my $stylemine = $init->{'style'} eq "mine" ? "style=mine" : ""; - my $formatlight = $GET{'format'} eq 'light' ? 'format=light' : ''; + my $stylemine = $init->{'style'} eq "mine" ? "style=mine" : ""; + my $formatlight = $GET{'format'} eq 'light' ? 'format=light' : ''; - my $item = LJ::Talk::get_journal_item($u, $itemid); + my $item = LJ::Talk::get_journal_item($u, $itemid); - if ($init->{'oldurl'} && $item) { - $init->{'anum'} = $item->{'anum'}; - $init->{'ditemid'} = $init->{'itemid'}*256 + $item->{'anum'}; - $ditemid = $init->{'ditemid'} + 0; - } + if ($init->{'oldurl'} && $item) { + $init->{'anum'} = $item->{'anum'}; + $init->{'ditemid'} = $init->{'itemid'}*256 + $item->{'anum'}; + $ditemid = $init->{'ditemid'} + 0; + } - my $entry = LJ::Entry->new($u, ditemid => $ditemid); + my $entry = LJ::Entry->new($u, ditemid => $ditemid); - $u->preload_props("opt_blockrobots", "adult_content", "admin_content_flag") if $u->is_visible; - if (!$u->is_visible || $u->should_block_robots || ($entry && $entry->should_block_robots)) { - $$head .= LJ::robot_meta_tags(); - } + $u->preload_props("opt_blockrobots", "adult_content", "admin_content_flag") if $u->is_visible; + if (!$u->is_visible || $u->should_block_robots || ($entry && $entry->should_block_robots)) { + $$head .= LJ::robot_meta_tags(); + } - unless ($item && $item->{'anum'} == $init->{'anum'}) { - return "<?h1 $ML{'Error'} h1?><?p $ML{'talk.error.noentry'} p?>"; - } + unless ($item && $item->{'anum'} == $init->{'anum'}) { + return "<?h1 $ML{'Error'} h1?><?p $ML{'talk.error.noentry'} p?>"; + } - my $jarg = "journal=$u->{'user'}&"; - my $jargent ="journal=$u->{'user'}&"; - my $talkurl = LJ::journal_base($u) . "/$ditemid.html"; + my $jarg = "journal=$u->{'user'}&"; + my $jargent ="journal=$u->{'user'}&"; + my $talkurl = LJ::journal_base($u) . "/$ditemid.html"; - my $ret = ""; + my $ret = ""; - ### load users - my ($up); # $up = user posted journal item - LJ::load_userids_multiple([ $item->{'posterid'} => \$up, ], [ $u ]); + ### load users + my ($up); # $up = user posted journal item + LJ::load_userids_multiple([ $item->{'posterid'} => \$up, ], [ $u ]); - LJ::text_out(\$u->{'name'}); + LJ::text_out(\$u->{'name'}); - my $remote = LJ::get_remote(); + my $remote = LJ::get_remote(); - my $tz_remote; - my $s2_ctx = []; # ghetto fake S2 context object - if ($remote) { - my $tz = $remote->prop("timezone"); - $tz_remote = $tz ? eval { DateTime::TimeZone->new( name => $tz); } : undef; - } + my $tz_remote; + my $s2_ctx = []; # ghetto fake S2 context object + if ($remote) { + my $tz = $remote->prop("timezone"); + $tz_remote = $tz ? eval { DateTime::TimeZone->new( name => $tz); } : undef; + } - # set viewall/viewsome - my $viewall = 0; - my $viewsome = 0; - if ($GET{viewall} && LJ::check_priv($remote, 'canview', 'suspended')) { - LJ::statushistory_add($u->{'userid'}, $remote->{'userid'}, - "viewall", "entry: $u->{'user'}, itemid: $item->{'itemid'}, statusvis: " . $u->statusvis); - $viewall = LJ::check_priv($remote, 'canview', '*'); - $viewsome = $viewall || LJ::check_priv($remote, 'canview', 'suspended'); - } + # set viewall/viewsome + my $viewall = 0; + my $viewsome = 0; + if ($GET{viewall} && LJ::check_priv($remote, 'canview', 'suspended')) { + LJ::statushistory_add($u->{'userid'}, $remote->{'userid'}, + "viewall", "entry: $u->{'user'}, itemid: $item->{'itemid'}, statusvis: " . $u->statusvis); + $viewall = LJ::check_priv($remote, 'canview', '*'); + $viewsome = $viewall || LJ::check_priv($remote, 'canview', 'suspended'); + } - # check for deleted/suspended/security - unless ($viewsome) { - # check suspended user - return "<?h1 $ML{'talk.error.suspended.title'} h1?><?p $ML{'talk.error.suspended'} p?>" - if ($u->is_suspended || $up->is_suspended); + # check for deleted/suspended/security + unless ($viewsome) { + # check suspended user + return "<?h1 $ML{'talk.error.suspended.title'} h1?><?p $ML{'talk.error.suspended'} p?>" + if ($u->is_suspended || $up->is_suspended); - # check deleted - return "<?h1 $ML{'talk.error.deleted.title'} h1?><?p $ML{'talk.error.deleted'} p?>" - if ($u->is_deleted); + # check deleted + return "<?h1 $ML{'talk.error.deleted.title'} h1?><?p $ML{'talk.error.deleted'} p?>" + if ($u->is_deleted); - # check suspended entry - return "<?h1 $ML{'talk.error.suspended.title'} h1?><?p " . BML::ml('talk.error.suspendedentry', { aopts => "href='" . $u->journal_base . "/'" }) . " p?>" - if $entry && $entry->is_suspended_for($remote); - } + # check suspended entry + return "<?h1 $ML{'talk.error.suspended.title'} h1?><?p " . BML::ml('talk.error.suspendedentry', { aopts => "href='" . $u->journal_base . "/'" }) . " p?>" + if $entry && $entry->is_suspended_for($remote); + } - unless ($viewall) { - #### Check security before viewing this post - my $errtxt; - return $errtxt unless LJ::Talk::check_viewable($remote, $item, \%GET, \$errtxt); - } + unless ($viewall) { + #### Check security before viewing this post + my $errtxt; + return $errtxt unless LJ::Talk::check_viewable($remote, $item, \%GET, \$errtxt); + } - my $props = $item->{'props'}; - my $nocomments = $viewall ? 0 : - $u->{'opt_showtalklinks'} eq "N" ? 1 : $props->{'opt_nocomments'}; + my $props = $item->{'props'}; + my $nocomments = $viewall ? 0 : + $u->{'opt_showtalklinks'} eq "N" ? 1 : $props->{'opt_nocomments'}; - # See if we should inject QuickReply javascript - LJ::load_user_props($remote, "opt_no_quickreply"); + # See if we should inject QuickReply javascript + LJ::load_user_props($remote, "opt_no_quickreply"); - LJ::run_hooks("need_res_for_journals", $u); - LJ::need_res( qw( js/thread_expander.js stc/talkpage.css ) ); + LJ::run_hooks("need_res_for_journals", $u); + LJ::need_res( qw( js/thread_expander.js stc/talkpage.css ) ); - if (($remote && !$remote->{'opt_no_quickreply'}) && !$nocomments) { - # quickreply js libs - LJ::need_res(qw( - js/core.js - js/dom.js - js/json.js - js/template.js - js/ippu.js - js/lj_ippu.js - js/userpicselect.js - js/httpreq.js - js/hourglass.js - js/inputcomplete.js - stc/ups.css - stc/lj_base.css - js/datasource.js - js/selectable_table.js - )) unless $LJ::DISABLED{userpicselect} || ! $remote->get_cap('userpicselect'); + if (($remote && !$remote->{'opt_no_quickreply'}) && !$nocomments) { + # quickreply js libs + LJ::need_res(qw( + js/core.js + js/dom.js + js/json.js + js/template.js + js/ippu.js + js/lj_ippu.js + js/userpicselect.js + js/httpreq.js + js/hourglass.js + js/inputcomplete.js + stc/ups.css + stc/lj_base.css + js/datasource.js + js/selectable_table.js + )) unless $LJ::DISABLED{userpicselect} || ! $remote->get_cap('userpicselect'); - LJ::need_res(qw( - js/x_core.js - js/quickreply.js - )); - } + LJ::need_res(qw( + js/x_core.js + js/quickreply.js + )); + } - my $showmultiform = $remote && - ($remote->{'user'} eq $u->{'user'} || - $remote->{'user'} eq $up->{'user'} || - LJ::can_manage($remote, $u)); - my $multiform_selects = 0; # are there select boxes? don't show form if not. + my $showmultiform = $remote && + ($remote->{'user'} eq $u->{'user'} || + $remote->{'user'} eq $up->{'user'} || + LJ::can_manage($remote, $u)); + my $multiform_selects = 0; # are there select boxes? don't show form if not. - my $event = $item->{'event'}; + my $event = $item->{'event'}; - my $suspend_msg = $entry && $entry->should_show_suspend_msg_to($remote) ? 1 : 0; - LJ::CleanHTML::clean_event(\$event, { 'preformatted' => $props->{'opt_preformatted'}, - 'suspend_msg' => $suspend_msg, - 'unsuspend_supportid' => $suspend_msg ? $entry->prop("unsuspend_supportid") : 0, }); - LJ::expand_embedded($u, $ditemid, $remote, \$event); - BML::ebml(\$event); + my $suspend_msg = $entry && $entry->should_show_suspend_msg_to($remote) ? 1 : 0; + LJ::CleanHTML::clean_event(\$event, { 'preformatted' => $props->{'opt_preformatted'}, + 'suspend_msg' => $suspend_msg, + 'unsuspend_supportid' => $suspend_msg ? $entry->prop("unsuspend_supportid") : 0, }); + LJ::expand_embedded($u, $ditemid, $remote, \$event); + BML::ebml(\$event); - # make the title + # make the title { - my $subject = $item->{'subject'} || $event; - # yes, the 3 param to text_trim is chars, and length returns bytes, but - # it works, as bytes >= chars: - $subject = LJ::CleanHTML::clean_and_trim_subject(\$subject, length($item->{'subject'}) || 40); - $$title = "$u->{'user'}: $subject"; + my $subject = $item->{'subject'} || $event; + # yes, the 3 param to text_trim is chars, and length returns bytes, but + # it works, as bytes >= chars: + $subject = LJ::CleanHTML::clean_and_trim_subject(\$subject, length($item->{'subject'}) || 40); + $$title = "$u->{'user'}: $subject"; } - $ret .= "<p>"; - $ret .= "<table id='poster'><tr>"; + $ret .= "<p>"; + $ret .= "<table id='poster'><tr>"; - my $userpic = $entry->userpic; - LJ::run_hook('notify_event_displayed', $entry); + my $userpic = $entry->userpic; + LJ::run_hook('notify_event_displayed', $entry); - my %userpics; - if ($userpic) { - my $alt = $up->{'name'}; - if ($props->{'picture_keyword'}) { - $alt .= ": $props->{'picture_keyword'}"; - } - LJ::text_out(\$alt); - $alt = LJ::ehtml($alt); - my ($w, $h) = $userpic->dimensions; - $ret .= "<td class='userpic' valign='bottom'><img src='" . $userpic->url . "' width='$w' height='$h' " . - "hspace='3' title='$alt' alt=''></td>"; - } + my %userpics; + if ($userpic) { + my $alt = $up->{'name'}; + if ($props->{'picture_keyword'}) { + $alt .= ": $props->{'picture_keyword'}"; + } + LJ::text_out(\$alt); + $alt = LJ::ehtml($alt); + my ($w, $h) = $userpic->dimensions; + $ret .= "<td class='userpic' valign='bottom'><img src='" . $userpic->url . "' width='$w' height='$h' " . + "hspace='3' title='$alt' alt=''></td>"; + } - $ret .= "<td class='attrib' valign='bottom'>"; - if (!LJ::u_equals($u, $up)) { - $ret .= BML::ml("talk.somebodywrote_comm", { 'realname' => LJ::ehtml($up->{'name'}), - 'userlink' => LJ::ljuser($up), - 'commlink' => LJ::ljuser($u) }); - } else { - $ret .= BML::ml("talk.somebodywrote", { 'realname' => LJ::ehtml($up->{'name'}), - 'userlink' => LJ::ljuser($up) }); - } + $ret .= "<td class='attrib' valign='bottom'>"; + if (!LJ::u_equals($u, $up)) { + $ret .= BML::ml("talk.somebodywrote_comm", { 'realname' => LJ::ehtml($up->{'name'}), + 'userlink' => LJ::ljuser($up), + 'commlink' => LJ::ljuser($u) }); + } else { + $ret .= BML::ml("talk.somebodywrote", { 'realname' => LJ::ehtml($up->{'name'}), + 'userlink' => LJ::ljuser($up) }); + } - my $etime = $item->{'eventtime'}; - $etime =~ s!(\d\d\d\d)-(\d\d)-(\d\d)!LJ::date_to_view_links($u, $&)!e; - $ret .= "<br /><span class='time'>@ $etime</span>"; - $ret .= "</td></tr></table>"; + my $etime = $item->{'eventtime'}; + $etime =~ s!(\d\d\d\d)-(\d\d)-(\d\d)!LJ::date_to_view_links($u, $&)!e; + $ret .= "<br /><span class='time'>@ $etime</span>"; + $ret .= "</td></tr></table>"; - ## standout bar - $ret .= LJ::Talk::link_bar({ 'u' => $u, 'up' => $up, 'headref' => $head, - 'remote' => $remote, 'itemid' => $ditemid, }); + ## standout bar + $ret .= LJ::Talk::link_bar({ 'u' => $u, 'up' => $up, 'headref' => $head, + 'remote' => $remote, 'itemid' => $ditemid, }); - if ($u->is_locked) { - $ret .= "<div class='warningbar warning-background' style='text-align: center; margin: 5px auto;'>$ML{'statusvis_message.locked'}</div>"; - } elsif ($u->is_memorial) { - $ret .= "<div class='warningbar warning-background' style='text-align: center; margin: 5px auto;'>$ML{'statusvis_message.memorial'}</div>"; - } elsif ($u->is_readonly) { - $ret .= "<div class='warningbar warning-background' style='text-align: center; margin: 5px auto;'>$ML{'statusvis_message.readonly'}</div>"; - } + if ($u->is_locked) { + $ret .= "<div class='warningbar warning-background' style='text-align: center; margin: 5px auto;'>$ML{'statusvis_message.locked'}</div>"; + } elsif ($u->is_memorial) { + $ret .= "<div class='warningbar warning-background' style='text-align: center; margin: 5px auto;'>$ML{'statusvis_message.memorial'}</div>"; + } elsif ($u->is_readonly) { + $ret .= "<div class='warningbar warning-background' style='text-align: center; margin: 5px auto;'>$ML{'statusvis_message.readonly'}</div>"; + } - ## dump the log entry, unless we're browsing a thread. - my %current; - if ($props->{'current_mood'} || $props->{'current_moodid'}) { - my $themeid = $up->{'moodthemeid'}; - my $moodid = $props->{'current_moodid'}; - my $mood = $props->{'current_mood'}; + ## dump the log entry, unless we're browsing a thread. + my %current; + if ($props->{'current_mood'} || $props->{'current_moodid'}) { + my $themeid = $up->{'moodthemeid'}; + my $moodid = $props->{'current_moodid'}; + my $mood = $props->{'current_mood'}; - my $moodname; - my $moodpic; + my $moodname; + my $moodpic; - # favor custom mood over system mood - if (my $val = $mood) { - LJ::CleanHTML::clean_subject(\$val); - $moodname = $val; - } + # favor custom mood over system mood + if (my $val = $mood) { + LJ::CleanHTML::clean_subject(\$val); + $moodname = $val; + } - if (my $val = $moodid) { - $moodname ||= LJ::mood_name($val); - my %pic; - if (LJ::get_mood_picture($themeid, $val, \%pic)) { - $moodpic = "<img class='moodpic' src=\"$pic{'pic'}\" align='absmiddle' width='$pic{'w'}' " . - "height='$pic{'h'}' vspace='1' alt='' /> "; - } - } + if (my $val = $moodid) { + $moodname ||= LJ::mood_name($val); + my %pic; + if (LJ::get_mood_picture($themeid, $val, \%pic)) { + $moodpic = "<img class='moodpic' src=\"$pic{'pic'}\" align='absmiddle' width='$pic{'w'}' " . + "height='$pic{'h'}' vspace='1' alt='' /> "; + } + } - $current{'Mood'} = "$moodpic$moodname"; - } - if ($props->{'current_music'}) { - $current{'Music'} = $props->{'current_music'}; - LJ::CleanHTML::clean_subject(\$current{'Music'}); - } - if ($props->{'current_location'} || $props->{'current_coords'}) { - my $loc = eval { LJ::Location->new(coords => $props->{'current_coords'}, - location => $props->{'current_location'}) }; - $current{'Location'} = $loc->as_html_current if $loc; - } + $current{'Mood'} = "$moodpic$moodname"; + } + if ($props->{'current_music'}) { + $current{'Music'} = $props->{'current_music'}; + LJ::CleanHTML::clean_subject(\$current{'Music'}); + } + if ($props->{'current_location'} || $props->{'current_coords'}) { + my $loc = eval { LJ::Location->new(coords => $props->{'current_coords'}, + location => $props->{'current_location'}) }; + $current{'Location'} = $loc->as_html_current if $loc; + } - # custom friend groups - my $group_names = $entry->group_names; - $current{'Groups'} = $group_names if $group_names; + # custom friend groups + my $group_names = $entry->group_names; + $current{'Groups'} = $group_names if $group_names; - my $logtags = LJ::Tags::get_logtags($u, $itemid); - if ($logtags->{$itemid} && %{$logtags->{$itemid}}) { - my $base = LJ::journal_base($u); - $current{'Tags'} = join(', ', - map { "<a href='$base/tag/" . LJ::eurl($_) . "'>" . LJ::ehtml($_) . "</a>" } - sort values %{$logtags->{$itemid}} - ); - } + my $logtags = LJ::Tags::get_logtags($u, $itemid); + if ($logtags->{$itemid} && %{$logtags->{$itemid}}) { + my $base = LJ::journal_base($u); + $current{'Tags'} = join(', ', + map { "<a href='$base/tag/" . LJ::eurl($_) . "'>" . LJ::ehtml($_) . "</a>" } + sort values %{$logtags->{$itemid}} + ); + } - $ret .= "<div id='entry' style='margin-left: 30px'>"; + $ret .= "<div id='entry' style='margin-left: 30px'>"; - if (%current) - { - $ret .= "<table class='currents' border=0>\n"; - foreach (sort keys %current) { - my $curkey = "talk.curname_" . $_; - my $curname = BML::ml($curkey); - $curname = "<b>Current $_:</b>" unless $curname; + if (%current) + { + $ret .= "<table class='currents' border=0>\n"; + foreach (sort keys %current) { + my $curkey = "talk.curname_" . $_; + my $curname = BML::ml($curkey); + $curname = "<b>Current $_:</b>" unless $curname; - $ret .= "<tr><td align=right>$curname</td>"; + $ret .= "<tr><td align=right>$curname</td>"; - if ($_ eq 'Music') { - $ret .= "<td>" . LJ::LastFM::format_current_music_string($current{$_}) . "</td></tr>\n"; - } else { - $ret .= "<td>$current{$_}</td></tr>\n"; - } - } - $ret .= "</table><p>\n"; - } + if ($_ eq 'Music') { + $ret .= "<td>" . LJ::LastFM::format_current_music_string($current{$_}) . "</td></tr>\n"; + } else { + $ret .= "<td>$current{$_}</td></tr>\n"; + } + } + $ret .= "</table><p>\n"; + } - ### security indicator - my $sec = ""; - if ($item->{'security'} eq "private") { - $sec = BML::fill_template("securityprivate"); - } elsif ($item->{'security'} eq "usemask") { - if ($item->{'allowmask'} == 0) { # custom security with no group -- essentially private + ### security indicator + my $sec = ""; + if ($item->{'security'} eq "private") { $sec = BML::fill_template("securityprivate"); - } elsif ($item->{'allowmask'} > 1 && $u && $u->equals($remote)) { # custom group -- only show to journal owner - $sec = BML::fill_template("securitygroups"); - } else { # friends only or custom group showing to non journal owner - $sec = BML::fill_template("securityprotected"); - } - } + } elsif ($item->{'security'} eq "usemask") { + if ($item->{'allowmask'} == 0) { # custom security with no group -- essentially private + $sec = BML::fill_template("securityprivate"); + } elsif ($item->{'allowmask'} > 1 && $u && $u->equals($remote)) { # custom group -- only show to journal owner + $sec = BML::fill_template("securitygroups"); + } else { # friends only or custom group showing to non journal owner + $sec = BML::fill_template("securityprotected"); + } + } - $sec .= "<br />\n" unless $sec eq "" or $item->{'subject'}; - $ret .= $sec; + $sec .= "<br />\n" unless $sec eq "" or $item->{'subject'}; + $ret .= $sec; - ### - if ($item->{'subject'}) { - my $subject = $item->{'subject'}; + ### + if ($item->{'subject'}) { + my $subject = $item->{'subject'}; + if ($GET{'nohtml'}) { + # quote all non-LJ tags + $subject =~ s{<(?!/?lj)(.*?)>} {<$1>}gi; + } + LJ::CleanHTML::clean_subject(\$subject); + BML::ebml(\$subject); + $ret .= "<div id='entrysubj'>$subject</div><br />\n"; + } + + if ($GET{'nohtml'}) { # quote all non-LJ tags - $subject =~ s{<(?!/?lj)(.*?)>} {<$1>}gi; + $event =~ s{<(?!/?lj)(.*?)>} {<$1>}gi; } - LJ::CleanHTML::clean_subject(\$subject); - BML::ebml(\$subject); - $ret .= "<div id='entrysubj'>$subject</div><br />\n"; - } + $ret .= $event; + $ret .= "</div>"; + $ret .= "<br style='clear: both' /><hr width='100%' size='2' align='center' />"; - if ($GET{'nohtml'}) { - # quote all non-LJ tags - $event =~ s{<(?!/?lj)(.*?)>} {<$1>}gi; - } - $ret .= $event; - $ret .= "</div>"; + my $qotd = 0; + $qotd = $entry->prop("qotdid") if $entry; - $ret .= "<br style='clear: both' /><hr width='100%' size='2' align='center' />"; - my $qotd = 0; - $qotd = $entry->prop("qotdid") if $entry; + my $view_arg = $GET{'view'} || ""; + my $flat_mode = ($view_arg =~ /\bflat\b/); + my $view_num = ($view_arg =~ /(\d+)/) ? $1 : undef; + my %user; + my $opts = { + 'flat' => $flat_mode, + 'thread' => $thread, + 'page' => $GET{'page'}, + 'view' => $view_num, + 'userpicref' => \%userpics, + 'userref' => \%user, + 'up' => $up, + 'viewall' => $viewall, + }; - my $view_arg = $GET{'view'} || ""; - my $flat_mode = ($view_arg =~ /\bflat\b/); - my $view_num = ($view_arg =~ /(\d+)/) ? $1 : undef; + my @comments = LJ::Talk::load_comments($u, $remote, "L", $itemid, $opts); + return $ML{'error.nodbmaintenance'} if $opts->{'out_error'} eq "nodb"; - my %user; - my $opts = { - 'flat' => $flat_mode, - 'thread' => $thread, - 'page' => $GET{'page'}, - 'view' => $view_num, - 'userpicref' => \%userpics, - 'userref' => \%user, - 'up' => $up, - 'viewall' => $viewall, - }; + my $page = $opts->{'out_page'}; + my $pages = $opts->{'out_pages'}; - my @comments = LJ::Talk::load_comments($u, $remote, "L", $itemid, $opts); - return $ML{'error.nodbmaintenance'} if $opts->{'out_error'} eq "nodb"; + ########## make the navcrap + my $navcrap = ''; + if ($pages > 1) { + $navcrap .= "<table id='journalnav'>"; + $navcrap .= "<tr><td align='center' colspan='3'>"; + $navcrap .= BML::ml('ljlib.pageofpages',{'page'=>$page, 'total'=>$pages}); + $navcrap .= "</td></tr>"; + my $left = "<<"; + if ($page > 1) { $left = "<a href='" . BML::self_link({ 'page' => $page-1 }) . "#comments'>$left</a>"; } - my $page = $opts->{'out_page'}; - my $pages = $opts->{'out_pages'}; + my $right = ">>"; + if ($page < $pages) { $right = "<a href='" . BML::self_link({ 'page' => $page+1 }) . "#comments'>$right</a>"; } - ########## make the navcrap - my $navcrap = ''; - if ($pages > 1) { - $navcrap .= "<table id='journalnav'>"; - $navcrap .= "<tr><td align='center' colspan='3'>"; - $navcrap .= BML::ml('ljlib.pageofpages',{'page'=>$page, 'total'=>$pages}); - $navcrap .= "</td></tr>"; - my $left = "<<"; - if ($page > 1) { $left = "<a href='" . BML::self_link({ 'page' => $page-1 }) . "#comments'>$left</a>"; } + $navcrap .= "<tr><td style='font-size: 85%' align='center'>$left</td><td style='font-size: 85%' align='center'>"; - my $right = ">>"; - if ($page < $pages) { $right = "<a href='" . BML::self_link({ 'page' => $page+1 }) . "#comments'>$right</a>"; } + for (my $i=1; $i<=$pages; $i++) { + my $link = "[$i]"; + if ($i != $page) { $link = "<a href='" . BML::self_link({ 'page' => $i }) . "#comments'>$link</a>"; } + else { $link = "<span style='font-size: 130%; font-weight: bolder'>$link</span>"; } + $navcrap .= "$link "; + if ($i == 11) { $navcrap .= "<br />"; } + elsif ($i > 10 && $i % 10 == 0) { $navcrap .= "<br />"; } + } - $navcrap .= "<tr><td style='font-size: 85%' align='center'>$left</td><td style='font-size: 85%' align='center'>"; + $navcrap .= "</td><td style='font-size: 85%' align='center'>$right</td></tr>"; + $navcrap .= "</table>\n"; + $navcrap = BML::fill_template("standout", { 'DATA' => $navcrap }); + } + ####### end navcrap - for (my $i=1; $i<=$pages; $i++) { - my $link = "[$i]"; - if ($i != $page) { $link = "<a href='" . BML::self_link({ 'page' => $i }) . "#comments'>$link</a>"; } - else { $link = "<span style='font-size: 130%; font-weight: bolder'>$link</span>"; } - $navcrap .= "$link "; - if ($i == 11) { $navcrap .= "<br />"; } - elsif ($i > 10 && $i % 10 == 0) { $navcrap .= "<br />"; } - } + # Quick reply variables. Not always set. + my ($last_talkid, $last_jid) = LJ::get_lastcomment(); + my %LJ_cmtinfo; # data structure to give to javascript for commentmanage + $LJ_cmtinfo{'form_auth'} = LJ::form_auth(1); + $LJ_cmtinfo{'journal'} = $u->{user}; + $LJ_cmtinfo{'canAdmin'} = LJ::can_manage($remote, $u) ? 1 : 0; + $LJ_cmtinfo{'remote'} = $remote ? $remote->{user} : ""; + my $fmt_time_short = "%%hh%%:%%min%% %%a%%m"; + my $show_thread_expander = LJ::run_hook('show_thread_expander'); - $navcrap .= "</td><td style='font-size: 85%' align='center'>$right</td></tr>"; - $navcrap .= "</table>\n"; - $navcrap = BML::fill_template("standout", { 'DATA' => $navcrap }); - } - ####### end navcrap + my $recurse_post = sub + { + my ($self_sub, $post, $opts) = @_; - # Quick reply variables. Not always set. - my ($last_talkid, $last_jid) = LJ::get_lastcomment(); - my %LJ_cmtinfo; # data structure to give to javascript for commentmanage - $LJ_cmtinfo{'form_auth'} = LJ::form_auth(1); - $LJ_cmtinfo{'journal'} = $u->{user}; - $LJ_cmtinfo{'canAdmin'} = LJ::can_manage($remote, $u) ? 1 : 0; - $LJ_cmtinfo{'remote'} = $remote ? $remote->{user} : ""; - my $fmt_time_short = "%%hh%%:%%min%% %%a%%m"; - my $show_thread_expander = LJ::run_hook('show_thread_expander'); + $opts ||= { 'depth' => 0 }; - my $recurse_post = sub - { - my ($self_sub, $post, $opts) = @_; + my $tid = $post->{'talkid'}; + my $dtid = $tid * 256 + $init->{'anum'}; + my $LJci = $LJ_cmtinfo{$dtid} = { rc => [], u => '', full => $post->{_loaded} }; - $opts ||= { 'depth' => 0 }; + my $s2_datetime = $tz_remote ? + LJ::S2::DateTime_tz($post->{'datepost_unix'}, $tz_remote) : + LJ::S2::DateTime_unix($post->{'datepost_unix'}); - my $tid = $post->{'talkid'}; - my $dtid = $tid * 256 + $init->{'anum'}; - my $LJci = $LJ_cmtinfo{$dtid} = { rc => [], u => '', full => $post->{_loaded} }; + my $datepost = S2::Builtin::LJ::Date__date_format($s2_ctx, $s2_datetime, "iso") . + " " . S2::Builtin::LJ::DateTime__time_format($s2_ctx, $s2_datetime, $fmt_time_short) . + ($tz_remote ? " (local)" : " UTC"); - my $s2_datetime = $tz_remote ? - LJ::S2::DateTime_tz($post->{'datepost_unix'}, $tz_remote) : - LJ::S2::DateTime_unix($post->{'datepost_unix'}); + my $level = ($opts->{'depth'} % 2) ? "even" : "odd"; + my $bgcolor = ($opts->{'depth'} % 2) ? "emcolorlite" : "emcolor"; + $bgcolor = BML::get_template_def($bgcolor); + if ($post->{'state'} eq "S") { + $bgcolor = BML::get_template_def("screenedbarcolor") || $bgcolor; + } elsif ($last_talkid == $dtid && $last_jid == $u->{'userid'}) { + $bgcolor = BML::get_template_def("altcolor1"); + } - my $datepost = S2::Builtin::LJ::Date__date_format($s2_ctx, $s2_datetime, "iso") . - " " . S2::Builtin::LJ::DateTime__time_format($s2_ctx, $s2_datetime, $fmt_time_short) . - ($tz_remote ? " (local)" : " UTC"); + my $pu = $post->{'posterid'} ? $user{$post->{'posterid'}} : undef; + $LJci->{u} = $pu->{user} if $pu; - my $level = ($opts->{'depth'} % 2) ? "even" : "odd"; - my $bgcolor = ($opts->{'depth'} % 2) ? "emcolorlite" : "emcolor"; - $bgcolor = BML::get_template_def($bgcolor); - if ($post->{'state'} eq "S") { - $bgcolor = BML::get_template_def("screenedbarcolor") || $bgcolor; - } elsif ($last_talkid == $dtid && $last_jid == $u->{'userid'}) { - $bgcolor = BML::get_template_def("altcolor1"); - } + my $userpost = $post->{'userpost'}; + my $upost = $post->{'upost'}; - my $pu = $post->{'posterid'} ? $user{$post->{'posterid'}} : undef; - $LJci->{u} = $pu->{user} if $pu; + my $user; + if ($post->{'props'}->{'deleted_poster'}) { + $user = BML::ml('.deleteduser', {'username'=>$post->{'deleted_poster'}}); + } + else { + $user = $ML{'.anonuser'}; + } - my $userpost = $post->{'userpost'}; - my $upost = $post->{'upost'}; + if ($post->{'state'} eq "D") { + $ret .= "<p><a name='t$dtid'></a><table class='delcomment'><tr>"; + $ret .= "<td><img src='$LJ::IMGPREFIX/dot.gif' height='1' width='" . ($opts->{'depth'} * 25) . "'></td>"; + $ret .= "<td>$ML{'.deletedpost'}</td></tr></table>\n"; + } elsif ($post->{'state'} eq "S" && !$post->{'_loaded'} && !$post->{'_show'}) { + $ret .= "<p><a name='t$dtid'></a><table class='screenedcomment'><tr>"; + $ret .= "<td><img src='$LJ::IMGPREFIX/dot.gif' height='1' width='" . ($opts->{'depth'} * 25) . "'></td>"; + my $screenedtext = $ML{'.screenedpost'}; + $ret .= "<td>$screenedtext</td></tr></table>\n"; + } elsif ($pu && $pu->is_suspended && !$viewsome) { + $ret .= "<p><a name='t$dtid'></a><table class='suspendedcomment'><tr>"; + $ret .= "<td><img src='$LJ::IMGPREFIX/dot.gif' height='1' width='" . ($opts->{'depth'} * 25) . "'></td>"; + $ret .= "<td>$ML{'.replysuspended'}"; + if (LJ::Talk::can_delete($remote, $u, $up, $userpost)) { + $ret .= " <a href='$LJ::SITEROOT/delcomment.bml?${jargent}id=$dtid'>" . LJ::img("btn_del", "", { 'align' => 'absmiddle', 'hspace' => 2, 'vspace' => }) . "</a>"; + } + if ($post->{state} ne 'F' && LJ::Talk::can_freeze($remote, $u, $up, $userpost)) { + $ret .= "<a href='$LJ::SITEROOT/talkscreen.bml?mode=freeze&${jargent}talkid=$dtid'>" . LJ::img("btn_freeze", "", { align => 'absmiddle', hspace => 2, vspace => }) . "</a>"; + } + if ($post->{state} eq 'F' && LJ::Talk::can_unfreeze($remote, $u, $up, $userpost)) { + $ret .= "<a href='$LJ::SITEROOT/talkscreen.bml?mode=unfreeze&${jargent}talkid=$dtid'>" . LJ::img("btn_unfreeze", "", { align => 'absmiddle', hspace => 2, vspace => }) . "</a>"; + } + $ret .= "</td></tr></table>\n"; + } else { + if ($upost) { + $user = LJ::ljuser($upost); + } + my $icon = LJ::Talk::show_image($pics, $post->{'props'}->{'subjecticon'}); + if ($post->{'_loaded'}) { + my $comment = LJ::Comment->new($u, dtalkid => $dtid); - my $user; - if ($post->{'props'}->{'deleted_poster'}) { - $user = BML::ml('.deleteduser', {'username'=>$post->{'deleted_poster'}}); - } - else { - $user = $ML{'.anonuser'}; - } + my $edittime; + if ($comment->is_edited) { + my $s2_datetime_edittime = $tz_remote ? + LJ::S2::DateTime_tz($comment->edit_time, $tz_remote) : + LJ::S2::DateTime_unix($comment->edit_time); - if ($post->{'state'} eq "D") { - $ret .= "<p><a name='t$dtid'></a><table class='delcomment'><tr>"; - $ret .= "<td><img src='$LJ::IMGPREFIX/dot.gif' height='1' width='" . ($opts->{'depth'} * 25) . "'></td>"; - $ret .= "<td>$ML{'.deletedpost'}</td></tr></table>\n"; - } elsif ($post->{'state'} eq "S" && !$post->{'_loaded'} && !$post->{'_show'}) { - $ret .= "<p><a name='t$dtid'></a><table class='screenedcomment'><tr>"; - $ret .= "<td><img src='$LJ::IMGPREFIX/dot.gif' height='1' width='" . ($opts->{'depth'} * 25) . "'></td>"; - my $screenedtext = $ML{'.screenedpost'}; - $ret .= "<td>$screenedtext</td></tr></table>\n"; - } elsif ($pu && $pu->is_suspended && !$viewsome) { - $ret .= "<p><a name='t$dtid'></a><table class='suspendedcomment'><tr>"; - $ret .= "<td><img src='$LJ::IMGPREFIX/dot.gif' height='1' width='" . ($opts->{'depth'} * 25) . "'></td>"; - $ret .= "<td>$ML{'.replysuspended'}"; - if (LJ::Talk::can_delete($remote, $u, $up, $userpost)) { - $ret .= " <a href='$LJ::SITEROOT/delcomment.bml?${jargent}id=$dtid'>" . LJ::img("btn_del", "", { 'align' => 'absmiddle', 'hspace' => 2, 'vspace' => }) . "</a>"; - } - if ($post->{state} ne 'F' && LJ::Talk::can_freeze($remote, $u, $up, $userpost)) { - $ret .= "<a href='$LJ::SITEROOT/talkscreen.bml?mode=freeze&${jargent}talkid=$dtid'>" . LJ::img("btn_freeze", "", { align => 'absmiddle', hspace => 2, vspace => }) . "</a>"; - } - if ($post->{state} eq 'F' && LJ::Talk::can_unfreeze($remote, $u, $up, $userpost)) { - $ret .= "<a href='$LJ::SITEROOT/talkscreen.bml?mode=unfreeze&${jargent}talkid=$dtid'>" . LJ::img("btn_unfreeze", "", { align => 'absmiddle', hspace => 2, vspace => }) . "</a>"; - } - $ret .= "</td></tr></table>\n"; - } else { - if ($upost) { - $user = LJ::ljuser($upost); - } - my $icon = LJ::Talk::show_image($pics, $post->{'props'}->{'subjecticon'}); - if ($post->{'_loaded'}) { - my $comment = LJ::Comment->new($u, dtalkid => $dtid); + $edittime = S2::Builtin::LJ::Date__date_format($s2_ctx, $s2_datetime_edittime, "iso") . + " " . S2::Builtin::LJ::DateTime__time_format($s2_ctx, $s2_datetime_edittime, $fmt_time_short) . + ($tz_remote ? " (local)" : " UTC"); + } - my $edittime; - if ($comment->is_edited) { - my $s2_datetime_edittime = $tz_remote ? - LJ::S2::DateTime_tz($comment->edit_time, $tz_remote) : - LJ::S2::DateTime_unix($comment->edit_time); + $ret .= "<a name='t$dtid'></a><span id='ljcmt$dtid'><table width='100%' class='talk-comment'><tbody><tr>"; + $ret .= "<td rowspan='2'><img src='$LJ::IMGPREFIX/dot.gif' height='1' width='" . ($opts->{'depth'} * 25) . "'></td>"; + $ret .= "<td id='cmtbar$dtid' class='cmtbar-$level' style='background-color: $bgcolor' width='100%'>"; + if (my $picid = $post->{'picid'}) { + my $alt = $pu->{'name'}; + if ($post->{'props'}->{'picture_keyword'}) { + $alt .= ": $post->{'props'}->{'picture_keyword'}"; + } + $alt = LJ::ehtml($alt); + my ($w, $h) = ($userpics{$picid}->{'width'}, $userpics{$picid}->{'height'}); + $ret .= "<img align='left' hspace='3' src='$LJ::USERPIC_ROOT/$picid/$post->{'posterid'}'"; + $ret .= " width='$w' title='$alt' alt='' height='$h' />"; + } - $edittime = S2::Builtin::LJ::Date__date_format($s2_ctx, $s2_datetime_edittime, "iso") . - " " . S2::Builtin::LJ::DateTime__time_format($s2_ctx, $s2_datetime_edittime, $fmt_time_short) . - ($tz_remote ? " (local)" : " UTC"); - } + my $cleansubject = LJ::ehtml($post->{'subject'}); + $ret .= "<span class='commentsubject'><b>$cleansubject</b></span> $icon"; + $ret .= "<br />$user\n"; + $ret .= "<br /><span class='datepost'>$datepost</span>\n"; + if ($post->{'props'}->{'poster_ip'} && $remote && + ($remote->{'user'} eq $up->{'user'} || + LJ::can_manage($remote, $u) || $viewall)) + { + $ret .= BML::ml('.fromip', {'ip'=>$post->{'props'}->{'poster_ip'}}); + } - $ret .= "<a name='t$dtid'></a><span id='ljcmt$dtid'><table width='100%' class='talk-comment'><tbody><tr>"; - $ret .= "<td rowspan='2'><img src='$LJ::IMGPREFIX/dot.gif' height='1' width='" . ($opts->{'depth'} * 25) . "'></td>"; - $ret .= "<td id='cmtbar$dtid' class='cmtbar-$level' style='background-color: $bgcolor' width='100%'>"; - if (my $picid = $post->{'picid'}) { - my $alt = $pu->{'name'}; - if ($post->{'props'}->{'picture_keyword'}) { - $alt .= ": $post->{'props'}->{'picture_keyword'}"; - } - $alt = LJ::ehtml($alt); - my ($w, $h) = ($userpics{$picid}->{'width'}, $userpics{$picid}->{'height'}); - $ret .= "<img align='left' hspace='3' src='$LJ::USERPIC_ROOT/$picid/$post->{'posterid'}'"; - $ret .= " width='$w' title='$alt' alt='' height='$h' />"; - } + $ret .= " <span class='talkargs'>(<a href='" . LJ::Talk::talkargs($talkurl, "thread=$dtid", $formatlight) . "#t$dtid'>$T{'link'}</a>)</span>"; - my $cleansubject = LJ::ehtml($post->{'subject'}); - $ret .= "<span class='commentsubject'><b>$cleansubject</b></span> $icon"; - $ret .= "<br />$user\n"; - $ret .= "<br /><span class='datepost'>$datepost</span>\n"; - if ($post->{'props'}->{'poster_ip'} && $remote && - ($remote->{'user'} eq $up->{'user'} || - LJ::can_manage($remote, $u) || $viewall)) - { - $ret .= BML::ml('.fromip', {'ip'=>$post->{'props'}->{'poster_ip'}}); - } + if ($comment->remote_can_edit) { + $ret .= "<a href='" . LJ::Talk::talkargs($comment->edit_url, $stylemine, $formatlight) . "'>" . LJ::img("editcomment", "", { 'align' => 'absmiddle', 'hspace' => 2, 'vspace' => }) . "</a>"; + } - $ret .= " <span class='talkargs'>(<a href='" . LJ::Talk::talkargs($talkurl, "thread=$dtid", $formatlight) . "#t$dtid'>$T{'link'}</a>)</span>"; + if (LJ::Talk::can_delete($remote, $u, $up, $userpost)) { + $ret .= "<a href='$LJ::SITEROOT/delcomment.bml?${jargent}id=$dtid'>" . LJ::img("btn_del", "", { 'align' => 'absmiddle', 'hspace' => 2, 'vspace' => }) . "</a>"; + } - if ($comment->remote_can_edit) { - $ret .= "<a href='" . LJ::Talk::talkargs($comment->edit_url, $stylemine, $formatlight) . "'>" . LJ::img("editcomment", "", { 'align' => 'absmiddle', 'hspace' => 2, 'vspace' => }) . "</a>"; - } + if ($post->{'state'} ne 'F' && + LJ::Talk::can_freeze($remote, $u, $up, $userpost)) { + $ret .= "<a href='$LJ::SITEROOT/talkscreen.bml?mode=freeze&${jargent}talkid=$dtid'>" . LJ::img("btn_freeze", "", { align => 'absmiddle', hspace => 2, vspace => }) . "</a>"; + } - if (LJ::Talk::can_delete($remote, $u, $up, $userpost)) { - $ret .= "<a href='$LJ::SITEROOT/delcomment.bml?${jargent}id=$dtid'>" . LJ::img("btn_del", "", { 'align' => 'absmiddle', 'hspace' => 2, 'vspace' => }) . "</a>"; - } + if ($post->{'state'} eq 'F' && + LJ::Talk::can_unfreeze($remote, $u, $up, $userpost)) { + $ret .= "<a href='$LJ::SITEROOT/talkscreen.bml?mode=unfreeze&${jargent}talkid=$dtid'>" . LJ::img("btn_unfreeze", "", { align => 'absmiddle', hspace => 2, vspace => }) . "</a>"; + } - if ($post->{'state'} ne 'F' && - LJ::Talk::can_freeze($remote, $u, $up, $userpost)) { - $ret .= "<a href='$LJ::SITEROOT/talkscreen.bml?mode=freeze&${jargent}talkid=$dtid'>" . LJ::img("btn_freeze", "", { align => 'absmiddle', hspace => 2, vspace => }) . "</a>"; - } + if ($post->{'state'} ne 'S' && + LJ::Talk::can_screen($remote, $u, $up, $userpost)) { + $ret .= "<a href='$LJ::SITEROOT/talkscreen.bml?mode=screen&${jargent}talkid=$dtid'>" . LJ::img("btn_scr", "", { 'align' => 'absmiddle', 'hspace' => 2, 'vspace' => }) . "</a>"; + } - if ($post->{'state'} eq 'F' && - LJ::Talk::can_unfreeze($remote, $u, $up, $userpost)) { - $ret .= "<a href='$LJ::SITEROOT/talkscreen.bml?mode=unfreeze&${jargent}talkid=$dtid'>" . LJ::img("btn_unfreeze", "", { align => 'absmiddle', hspace => 2, vspace => }) . "</a>"; - } + if ($post->{'state'} eq 'S' && + LJ::Talk::can_unscreen($remote, $u, $up, $userpost)) { + $ret .= "<a href='$LJ::SITEROOT/talkscreen.bml?mode=unscreen&${jargent}talkid=$dtid'>" . LJ::img("btn_unscr", "", { 'align' => 'absmiddle', 'hspace' => 2, 'vspace' => }) . "</a>"; + } - if ($post->{'state'} ne 'S' && - LJ::Talk::can_screen($remote, $u, $up, $userpost)) { - $ret .= "<a href='$LJ::SITEROOT/talkscreen.bml?mode=screen&${jargent}talkid=$dtid'>" . LJ::img("btn_scr", "", { 'align' => 'absmiddle', 'hspace' => 2, 'vspace' => }) . "</a>"; - } + if ($remote && $remote->can_use_esn) { + my $track_img = 'track'; - if ($post->{'state'} eq 'S' && - LJ::Talk::can_unscreen($remote, $u, $up, $userpost)) { - $ret .= "<a href='$LJ::SITEROOT/talkscreen.bml?mode=unscreen&${jargent}talkid=$dtid'>" . LJ::img("btn_unscr", "", { 'align' => 'absmiddle', 'hspace' => 2, 'vspace' => }) . "</a>"; - } + my $comment_watched = $remote->has_subscription( + event => "JournalNewComment", + journal => $u, + arg2 => $comment->jtalkid, + require_active => 1, + ); - if ($remote && $remote->can_use_esn) { - my $track_img = 'track'; + if ($comment_watched) { + $track_img = 'track_active'; + } else { + # see if any parents are being watched + while ($comment && $comment->valid && $comment->parenttalkid) { + # check cache + $comment->{_watchedby} ||= {}; + my $thread_watched = $comment->{_watchedby}->{$u->{userid}}; - my $comment_watched = $remote->has_subscription( - event => "JournalNewComment", - journal => $u, - arg2 => $comment->jtalkid, - require_active => 1, - ); + # not cached + if (! defined $thread_watched) { + $thread_watched = $remote->has_subscription( + event => "JournalNewComment", + journal => $u, + arg2 => $comment->parenttalkid, + require_active => 1, + ); + } - if ($comment_watched) { - $track_img = 'track_active'; - } else { - # see if any parents are being watched - while ($comment && $comment->valid && $comment->parenttalkid) { - # check cache - $comment->{_watchedby} ||= {}; - my $thread_watched = $comment->{_watchedby}->{$u->{userid}}; + $track_img = 'track_thread_active' if ($thread_watched); - # not cached - if (! defined $thread_watched) { - $thread_watched = $remote->has_subscription( - event => "JournalNewComment", - journal => $u, - arg2 => $comment->parenttalkid, - require_active => 1, - ); - } + # cache in this comment object if it's being watched by this user + $comment->{_watchedby}->{$u->{userid}} = $thread_watched; - $track_img = 'track_thread_active' if ($thread_watched); + $comment = $comment->parent; + } + } - # cache in this comment object if it's being watched by this user - $comment->{_watchedby}->{$u->{userid}} = $thread_watched; + my $track_url = "$LJ::SITEROOT/manage/subscriptions/comments.bml?journal=$u->{'user'}&talkid=$dtid"; + $ret .= "<a href='$track_url'>" . LJ::img($track_img, '', {'align' => 'absmiddle'}) . "</a>"; + } - $comment = $comment->parent; - } - } + if ($showmultiform) { + $ret .= " <nobr><input type='checkbox' name='selected_$tid' id='s$tid' />"; + $ret .= " <label for='s$tid'>$ML{'.select'}</label></nobr>"; + $multiform_selects = 1; + } - my $track_url = "$LJ::SITEROOT/manage/subscriptions/comments.bml?journal=$u->{'user'}&talkid=$dtid"; - $ret .= "<a href='$track_url'>" . LJ::img($track_img, '', {'align' => 'absmiddle'}) . "</a>"; - } + # Comment Posted Notice + $ret .= "<br /><b>$ML{'.posted'}</b>" + if $last_talkid == $dtid && $last_jid == $u->{'userid'}; - if ($showmultiform) { - $ret .= " <nobr><input type='checkbox' name='selected_$tid' id='s$tid' />"; - $ret .= " <label for='s$tid'>$ML{'.select'}</label></nobr>"; - $multiform_selects = 1; - } + $ret .= "</td></tr><tr><td class='commentbody'>"; - # Comment Posted Notice - $ret .= "<br /><b>$ML{'.posted'}</b>" - if $last_talkid == $dtid && $last_jid == $u->{'userid'}; + LJ::CleanHTML::clean_comment(\$post->{'body'}, { 'preformatted' => $post->{'props'}->{'opt_preformatted'}, + 'anon_comment' => (!$pu || $pu->{'journaltype'} eq 'I'), + }); + BML::ebml(\$post->{'body'}); + my $event = $post->{'body'}; + if ($GET{'nohtml'}) { + # quote all non-LJ tags + $event =~ s{<(?!/?lj)(.*?)>} {<$1>}gi; + } + my $edit_html = $edittime ? "<br /><br /><span class='ljedittime'><em>" . BML::ml('.edittime', { edittime => $edittime }) . "</em></span>" : ""; + $ret .= "$event$edit_html"; - $ret .= "</td></tr><tr><td class='commentbody'>"; + $ret .= "<p style='margin: 0.7em 0 0.2em 0'><font size='-2'>"; - LJ::CleanHTML::clean_comment(\$post->{'body'}, { 'preformatted' => $post->{'props'}->{'opt_preformatted'}, - 'anon_comment' => (!$pu || $pu->{'journaltype'} eq 'I'), - }); - BML::ebml(\$post->{'body'}); - my $event = $post->{'body'}; - if ($GET{'nohtml'}) { - # quote all non-LJ tags - $event =~ s{<(?!/?lj)(.*?)>} {<$1>}gi; - } - my $edit_html = $edittime ? "<br /><br /><span class='ljedittime'><em>" . BML::ml('.edittime', { edittime => $edittime }) . "</em></span>" : ""; - $ret .= "$event$edit_html"; + my $replyurl = LJ::Talk::talkargs($talkurl, "replyto=$dtid", $stylemine, $formatlight); + if ($post->{'state'} eq 'F') { + $ret .= "($T{'frozen'})"; + } elsif ($remote) { + # See if we want to force them to change their password + my $bp = LJ::bad_password_redirect({ 'returl' => 1 }); + if ($bp) { + $ret .= "(<a href='$bp'>$T{'replythis'}</a>) "; + } else { + if ($post->{state} eq 'S') { + # show unscreen to reply link id comment screened + $ret .= "(<a href='$LJ::SITEROOT/talkscreen.bml?mode=unscreen&${jargent}talkid=$dtid'>$T{'unscreentoreply'}</a>) "; + } else { + $ret .= "(" . LJ::make_qr_link($dtid, $post->{'subject'}, $T{'replythis'}, $replyurl) . ") "; + } + } + } else { + $ret .= "(<a href='$replyurl'>$T{'replythis'}</a>) "; + } - $ret .= "<p style='margin: 0.7em 0 0.2em 0'><font size='-2'>"; - + my $parentid = $post->{'parenttalkid'} || $post->{'parenttalkid_actual'}; + if ($parentid != 0) { + my $dpid = $parentid * 256 + $init->{'anum'}; + $ret .= "(<a href='" . LJ::Talk::talkargs($talkurl, "thread=$dpid", $stylemine, $formatlight) . "#t$dpid'>$T{'parent'}</a>)"; + } + if ($post->{'children'} && @{$post->{'children'}}) { + my $url = LJ::Talk::talkargs($talkurl, "thread=$dtid", $stylemine, $formatlight) . "#t$dtid"; + $ret .= "(<a href='$url'>$T{'thread'}</a>)"; - my $replyurl = LJ::Talk::talkargs($talkurl, "replyto=$dtid", $stylemine, $formatlight); - if ($post->{'state'} eq 'F') { - $ret .= "($T{'frozen'})"; - } elsif ($remote) { - # See if we want to force them to change their password - my $bp = LJ::bad_password_redirect({ 'returl' => 1 }); - if ($bp) { - $ret .= "(<a href='$bp'>$T{'replythis'}</a>) "; - } else { - if ($post->{state} eq 'S') { - # show unscreen to reply link id comment screened - $ret .= "(<a href='$LJ::SITEROOT/talkscreen.bml?mode=unscreen&${jargent}talkid=$dtid'>$T{'unscreentoreply'}</a>) "; - } else { - $ret .= "(" . LJ::make_qr_link($dtid, $post->{'subject'}, $T{'replythis'}, $replyurl) . ") "; - } - } - } else { - $ret .= "(<a href='$replyurl'>$T{'replythis'}</a>) "; - } + if ((grep {! $_->{_loaded} and !($_->{state} eq "D")} @{$post->{'children'}}) && $show_thread_expander) { + $ret .= qq[(<a href='$url' onClick="Expander.make(this,'$url','$dtid',true);return false;">$T{'expand'}</a>)]; + } + } - my $parentid = $post->{'parenttalkid'} || $post->{'parenttalkid_actual'}; - if ($parentid != 0) { - my $dpid = $parentid * 256 + $init->{'anum'}; - $ret .= "(<a href='" . LJ::Talk::talkargs($talkurl, "thread=$dpid", $stylemine, $formatlight) . "#t$dpid'>$T{'parent'}</a>)"; - } - if ($post->{'children'} && @{$post->{'children'}}) { - my $url = LJ::Talk::talkargs($talkurl, "thread=$dtid", $stylemine, $formatlight) . "#t$dtid"; - $ret .= "(<a href='$url'>$T{'thread'}</a>)"; + $ret .= "</font></p><br />"; - if ((grep {! $_->{_loaded} and !($_->{state} eq "D")} @{$post->{'children'}}) && $show_thread_expander) { - $ret .= qq[(<a href='$url' onClick="Expander.make(this,'$url','$dtid',true);return false;">$T{'expand'}</a>)]; + $ret .= LJ::make_qr_target($dtid) if $remote; + + $ret .= "</td></tr></tbody></table></span>\n"; # close colored table + } else { + # link to message + + $ret .= "<a name='t$dtid'></a><span id='ljcmt$dtid'><table ><tbody><tr>"; + $ret .= "<td><img src='$LJ::IMGPREFIX/dot.gif' height='1' width='" . ($opts->{'depth'} * 25) . "'></td>"; + $ret .= "<td><a href='" . LJ::Talk::talkargs($talkurl, "thread=$dtid", $stylemine, $formatlight) . "#t$dtid'>" . LJ::ehtml($post->{'subject'} || $T{'nosubject'}) . "</a> - $user, <i>$datepost</i>"; + my $url = LJ::Talk::talkargs($talkurl, "thread=$dtid", $stylemine, $formatlight) . "#t$dtid"; + $ret .= qq[ (<a href='$url' onClick="Expander.make(this,'$url','$dtid',true);return false;">$T{'expand'}</a>)] if $show_thread_expander; + + # Comment Posted Notice + $ret .= " - <b>$ML{'.posted'}</b>" + if $last_talkid == $dtid && $last_jid == $u->{'userid'}; + $ret .= "</td></tr></tbody></table></span>\n"; + } + } + + if ($post->{'children'}) { + foreach my $childpost (@{$post->{'children'}}) { + push @{$LJci->{rc}}, $childpost->{talkid} * 256 + $init->{'anum'}; + $self_sub->($self_sub, $childpost, { "depth" => $opts->{'depth'} + 1}); + } + } + }; + + unless ($nocomments) + { + $ret .= "<div id='Comments'>"; + $ret .= "<a name='comments'></a>"; + $ret .= "<p>$navcrap</p>" if $navcrap; + my $readlink; + if ($dthread && $pages == 1) { + my $readurl = LJ::Talk::talkargs($talkurl, $stylemine, $formatlight); + $readlink = "(<a href='$readurl#comments'>$T{'readcomments'}</a>) - "; + } + + my $posturl = LJ::Talk::talkargs($talkurl, "mode=reply", $stylemine, $formatlight); + + $ret .= "<form style='display: inline' method='post' action='$LJ::SITEROOT/talkmulti.bml' name='multiform' id='multiform' >"; + + # Quick Reply when posting a new top level comment + # requires setup when logged in. + $ret .= "<p class='lesstop' align='center'><b>$readlink"; + if ($remote) { + # See if we want to force them to change their password + my $bp = LJ::bad_password_redirect({ 'returl' => 1 }); + if ($bp) { + $ret .= "(<a href='$bp'>$T{'replythis'}</a>)"; + } else { + $ret .= "(" . LJ::make_qr_link('top', '', $T{'postcomments'}, $posturl) . ")"; + } + } else { + $ret .= "(<a href='$posturl'>$T{'postcomments'}</a>)"; + } + + $ret .= "</b></p>"; + + $ret .= "<div align='center'>" . LJ::make_qr_target('top') . "</div>" if $remote; + + my $stylemine = $GET{'style'} eq 'mine' ? 1 : 0; + + my $viewing_thread; + if (defined $GET{'thread'}) { + $viewing_thread = $GET{'thread'}; + } + $ret .= LJ::create_qr_div($u, $ditemid, $stylemine, $GET{'prop_picture_keyword'}, $viewing_thread); + + $ret .= LJ::html_hidden("ditemid", $ditemid); + $ret .= LJ::html_hidden("journal", $u->{'user'}); + + # Print out each comment + if (@comments > 0) + { + $recurse_post->($recurse_post, $_, { "depth" => 0 }) foreach (@comments); + + my $do_commentmanage_js = 1; + if ($LJ::DISABLED{'commentmanage'}) { + if (ref $LJ::DISABLED{'commentmanage'} eq "CODE") { + $do_commentmanage_js = $LJ::DISABLED{'commentmanage'}->($remote); + } else { + $do_commentmanage_js = 0; } - } - - $ret .= "</font></p><br />"; + } - $ret .= LJ::make_qr_target($dtid) if $remote; + if ($do_commentmanage_js) { + LJ::need_res('js/commentmanage.js'); + my $js_screen_color = "\"" . LJ::ejs(BML::get_template_def("screenedbarcolor") || BML::get_template_def("emcolor")) . "\""; + my $js_normal_color = "\"" . LJ::ejs(BML::get_template_def("emcolor")) . "\""; + $$head .= "<script>var LJ_cmtinfo = " . LJ::js_dumper(\%LJ_cmtinfo) . ";\n" . + "function userhook_screen_comment_ARG (dIid) { setStyle('cmtbar'+dIid, 'background', $js_screen_color); }\n". + "function userhook_unscreen_comment_ARG (dIid) { setStyle('cmtbar'+dIid, 'background', $js_normal_color); }\n". + "var Site; if (!Site) Site = new Object(); Site.imgprefix = \"$LJ::IMGPREFIX\";\n". + "</script>\n"; + } - $ret .= "</td></tr></tbody></table></span>\n"; # close colored table - } else { - # link to message + $ret .= "<hr /><p class='lesstop' align='center'><b>$readlink"; + if ( $remote ) { + $ret .= "(" . LJ::make_qr_link('bottom', '', $T{'postcomments'}, $posturl) . ")"; + } else { + $ret .= "(<a href='$posturl'>$T{'postcomments'}</a>)"; + } + $ret .= "</b></p>"; + $ret .= "<div align='center'>" . LJ::make_qr_target('bottom') . "</div>" if $remote; - $ret .= "<a name='t$dtid'></a><span id='ljcmt$dtid'><table ><tbody><tr>"; - $ret .= "<td><img src='$LJ::IMGPREFIX/dot.gif' height='1' width='" . ($opts->{'depth'} * 25) . "'></td>"; - $ret .= "<td><a href='" . LJ::Talk::talkargs($talkurl, "thread=$dtid", $stylemine, $formatlight) . "#t$dtid'>" . LJ::ehtml($post->{'subject'} || $T{'nosubject'}) . "</a> - $user, <i>$datepost</i>"; - my $url = LJ::Talk::talkargs($talkurl, "thread=$dtid", $stylemine, $formatlight) . "#t$dtid"; - $ret .= qq[ (<a href='$url' onClick="Expander.make(this,'$url','$dtid',true);return false;">$T{'expand'}</a>)] if $show_thread_expander; + if ($showmultiform && $multiform_selects) { + $ret .= "<p>$ML{'.talkmulti.des'} "; + $ret .= LJ::html_select({'name' => 'mode' }, + '' => '', + 'unscreen' => $ML{'.talkmulti.unscreen'}, + 'screen' => $ML{'.talkmulti.screen'}, + 'delete' => $ML{'.talkmulti.delete'}, + 'deletespam' => $ML{'.talkmulti.deletespam'}, + ); + $ret .= " " . LJ::html_submit('', $ML{'.talkmulti.submit'}, + { + "onclick" => + 'return ((document.multiform.mode.value != "delete" ' . + '&& document.multiform.mode.value != "deletespam")) ' . + "|| confirm(\"" . LJ::ejs($ML{'.confirm.action'}) . "\");" + }); + $ret .= "</p>"; + } - # Comment Posted Notice - $ret .= " - <b>$ML{'.posted'}</b>" - if $last_talkid == $dtid && $last_jid == $u->{'userid'}; - $ret .= "</td></tr></tbody></table></span>\n"; - } - } + } - if ($post->{'children'}) { - foreach my $childpost (@{$post->{'children'}}) { - push @{$LJci->{rc}}, $childpost->{talkid} * 256 + $init->{'anum'}; - $self_sub->($self_sub, $childpost, { "depth" => $opts->{'depth'} + 1}); - } - } - }; + $ret .= "</form>"; - unless ($nocomments) - { - $ret .= "<div id='Comments'>"; - $ret .= "<a name='comments'></a>"; - $ret .= "<p>$navcrap</p>" if $navcrap; - my $readlink; - if ($dthread && $pages == 1) { - my $readurl = LJ::Talk::talkargs($talkurl, $stylemine, $formatlight); - $readlink = "(<a href='$readurl#comments'>$T{'readcomments'}</a>) - "; - } + if ($navcrap) { + $ret .= "<p>$navcrap</p>"; + } - my $posturl = LJ::Talk::talkargs($talkurl, "mode=reply", $stylemine, $formatlight); + $ret .= "</div>"; + } - $ret .= "<form style='display: inline' method='post' action='$LJ::SITEROOT/talkmulti.bml' name='multiform' id='multiform' >"; - - # Quick Reply when posting a new top level comment - # requires setup when logged in. - $ret .= "<p class='lesstop' align='center'><b>$readlink"; - if ($remote) { - # See if we want to force them to change their password - my $bp = LJ::bad_password_redirect({ 'returl' => 1 }); - if ($bp) { - $ret .= "(<a href='$bp'>$T{'replythis'}</a>)"; - } else { - $ret .= "(" . LJ::make_qr_link('top', '', $T{'postcomments'}, $posturl) . ")"; - } - } else { - $ret .= "(<a href='$posturl'>$T{'postcomments'}</a>)"; - } - - $ret .= "</b></p>"; - - $ret .= "<div align='center'>" . LJ::make_qr_target('top') . "</div>" if $remote; - - my $stylemine = $GET{'style'} eq 'mine' ? 1 : 0; - - my $viewing_thread; - if (defined $GET{'thread'}) { - $viewing_thread = $GET{'thread'}; - } - $ret .= LJ::create_qr_div($u, $ditemid, $stylemine, $GET{'prop_picture_keyword'}, $viewing_thread); - - $ret .= LJ::html_hidden("ditemid", $ditemid); - $ret .= LJ::html_hidden("journal", $u->{'user'}); - - # Print out each comment - if (@comments > 0) - { - $recurse_post->($recurse_post, $_, { "depth" => 0 }) foreach (@comments); - - my $do_commentmanage_js = 1; - if ($LJ::DISABLED{'commentmanage'}) { - if (ref $LJ::DISABLED{'commentmanage'} eq "CODE") { - $do_commentmanage_js = $LJ::DISABLED{'commentmanage'}->($remote); - } else { - $do_commentmanage_js = 0; - } - } - - if ($do_commentmanage_js) { - LJ::need_res('js/commentmanage.js'); - my $js_screen_color = "\"" . LJ::ejs(BML::get_template_def("screenedbarcolor") || BML::get_template_def("emcolor")) . "\""; - my $js_normal_color = "\"" . LJ::ejs(BML::get_template_def("emcolor")) . "\""; - $$head .= "<script>var LJ_cmtinfo = " . LJ::js_dumper(\%LJ_cmtinfo) . ";\n" . - "function userhook_screen_comment_ARG (dIid) { setStyle('cmtbar'+dIid, 'background', $js_screen_color); }\n". - "function userhook_unscreen_comment_ARG (dIid) { setStyle('cmtbar'+dIid, 'background', $js_normal_color); }\n". - "var Site; if (!Site) Site = new Object(); Site.imgprefix = \"$LJ::IMGPREFIX\";\n". - "</script>\n"; - } - - $ret .= "<hr /><p class='lesstop' align='center'><b>$readlink"; - if ( $remote ) { - $ret .= "(" . LJ::make_qr_link('bottom', '', $T{'postcomments'}, $posturl) . ")"; - } else { - $ret .= "(<a href='$posturl'>$T{'postcomments'}</a>)"; - } - $ret .= "</b></p>"; - $ret .= "<div align='center'>" . LJ::make_qr_target('bottom') . "</div>" if $remote; - - if ($showmultiform && $multiform_selects) { - $ret .= "<p>$ML{'.talkmulti.des'} "; - $ret .= LJ::html_select({'name' => 'mode' }, - '' => '', - 'unscreen' => $ML{'.talkmulti.unscreen'}, - 'screen' => $ML{'.talkmulti.screen'}, - 'delete' => $ML{'.talkmulti.delete'}, - 'deletespam' => $ML{'.talkmulti.deletespam'}, - ); - $ret .= " " . LJ::html_submit('', $ML{'.talkmulti.submit'}, - { - "onclick" => - 'return ((document.multiform.mode.value != "delete" ' . - '&& document.multiform.mode.value != "deletespam")) ' . - "|| confirm(\"" . LJ::ejs($ML{'.confirm.action'}) . "\");" - }); - $ret .= "</p>"; - } - - } - - $ret .= "</form>"; - - if ($navcrap) { - $ret .= "<p>$navcrap</p>"; - } - - $ret .= "</div>"; - } - - BML::noparse(); - return $ret; - + BML::noparse(); + return $ret; +} _code?> <=body windowtitle=><?_code return $_[1] ? $_[1]->{'title'} : $r_title _code?> head=><?_code return $_[1] ? $_[1]->{'head'} : $r_head _code?> bodyopts=><?_code return $_[1]->{'bodyopts'}; _code?> -page?><?_c <LJDEP> -link: htdocs/talkpost.bml, htdocs/talkread.bml, htdocs/delcomment.bml -img: htdocs/img/dot.gif, htdocs/img/delcomment.gif -</LJDEP> _c?> +page?> --------------------------------------------------------------------------------