fu: Close-up of Fu, bringing a scoop of water to her mouth (Default)
fu ([personal profile] fu) wrote in [site community profile] changelog2010-11-17 02:56 pm

[dw-free] Remove tables-for-layout

[commit: http://hg.dwscoalition.org/dw-free/rev/5a3fce12991a]

http://bugs.dwscoalition.org/show_bug.cgi?id=1490

Add an empty summary to all tables that are purely for layout, to make it
easier to see what they are (and find them later). For some data tables,
convert from td+b to th, and tweak styling if necessary.

Patch by [personal profile] fu.

Files modified:
  • bin/upgrading/s2layers/core1.s2
  • bin/upgrading/s2layers/drifting/layout.s2
  • bin/upgrading/s2layers/negatives/layout.s2
  • bin/upgrading/s2layers/zesty/layout.s2
  • cgi-bin/DW/Setting/XPostAccounts.pm
  • cgi-bin/LJ/Comment.pm
  • cgi-bin/LJ/Console/Command.pm
  • cgi-bin/LJ/Console/Command/InvalidCommand.pm
  • cgi-bin/LJ/Directory/Results.pm
  • cgi-bin/LJ/Entry.pm
  • cgi-bin/LJ/Poll.pm
  • cgi-bin/LJ/Poll/Question.pm
  • cgi-bin/LJ/Setting/EmailPosting.pm
  • cgi-bin/LJ/SpellCheck.pm
  • cgi-bin/LJ/Talk.pm
  • cgi-bin/LJ/User.pm
  • cgi-bin/LJ/Widget/AddSiteMessages.pm
  • cgi-bin/LJ/Widget/CreateAccount.pm
  • cgi-bin/LJ/Widget/CreateAccountNextSteps.pm
  • cgi-bin/LJ/Widget/CreateAccountProfile.pm
  • cgi-bin/LJ/Widget/CreateAccountProgressMeter.pm
  • cgi-bin/LJ/Widget/CreateAccountTheme.pm
  • cgi-bin/LJ/Widget/Feeds.pm
  • cgi-bin/LJ/Widget/FriendBirthdays.pm
  • cgi-bin/LJ/Widget/FriendInterests.pm
  • cgi-bin/LJ/Widget/ImportStatus.pm
  • cgi-bin/LJ/Widget/InboxFolder.pm
  • cgi-bin/LJ/Widget/LinksList.pm
  • cgi-bin/LJ/Widget/Location.pm
  • cgi-bin/LJ/Widget/Login.pm
  • cgi-bin/LJ/Widget/MoodThemeChooser.pm
  • cgi-bin/LJ/Widget/NavStripChooser.pm
  • cgi-bin/LJ/Widget/S2PropGroup.pm
  • cgi-bin/bml/scheme/celerity.look
  • cgi-bin/bml/scheme/common.look
  • cgi-bin/bml/scheme/global.look
  • cgi-bin/weblib.pl
  • htdocs/admin/faq/readcat.bml
  • htdocs/admin/invites/codetrace.bml
  • htdocs/admin/pay/index.bml
  • htdocs/admin/priv/index.bml
  • htdocs/admin/schema/index.bml
  • htdocs/admin/spamreports.bml
  • htdocs/admin/statushistory.bml
  • htdocs/admin/translate/diff.bml
  • htdocs/admin/translate/editpage.bml
  • htdocs/admin/translate/help-severity.bml
  • htdocs/admin/translate/index.bml
  • htdocs/admin/translate/searchform.bml
  • htdocs/allpics.bml
  • htdocs/community/join.bml
  • htdocs/community/moderate.bml
  • htdocs/community/search.bml
  • htdocs/community/settings.bml
  • htdocs/community/transfer.bml
  • htdocs/customize/advanced/layerbrowse.bml
  • htdocs/customize/advanced/layers.bml
  • htdocs/customize/advanced/styles.bml
  • htdocs/didyouknow/index.bml
  • htdocs/directory.bml
  • htdocs/directorysearch.bml
  • htdocs/editjournal.bml
  • htdocs/editprivacy.bml
  • htdocs/edittags.bml
  • htdocs/export.bml
  • htdocs/feeds/index.bml
  • htdocs/imguploadrte.bml
  • htdocs/inbox/compose.bml
  • htdocs/inbox/index.bml
  • htdocs/interests.bml
  • htdocs/interests.bml.text
  • htdocs/js/colorpicker.js
  • htdocs/js/poll.js
  • htdocs/js/richtext.js
  • htdocs/js/userpicselect.js
  • htdocs/login.bml
  • htdocs/manage/circle/add.bml
  • htdocs/manage/circle/edit.bml
  • htdocs/manage/circle/editfilters.bml
  • htdocs/manage/circle/index.bml
  • htdocs/manage/domain.bml
  • htdocs/manage/emailpost.bml
  • htdocs/manage/externalaccount.bml
  • htdocs/manage/index.bml
  • htdocs/manage/moodthemes.bml
  • htdocs/manage/profile/index.bml
  • htdocs/manage/settings/index.bml
  • htdocs/manage/tags.bml
  • htdocs/moodlist.bml
  • htdocs/openid/approve.bml
  • htdocs/poll/create.bml
  • htdocs/preview/entry.bml
  • htdocs/profile.bml
  • htdocs/rte/palette.html
  • htdocs/shop/account.bml
  • htdocs/shop/entercc.bml
  • htdocs/shop/renames.bml
  • htdocs/stats.bml
  • htdocs/stc/gradation/gradation.css
  • htdocs/support/act.bml
  • htdocs/support/faqsearch.bml
  • htdocs/support/help.bml
  • htdocs/support/highscores.bml
  • htdocs/support/highscores.bml.text
  • htdocs/support/history.bml
  • htdocs/support/see_request.bml
  • htdocs/talkpost.bml
  • htdocs/talkread.bml
  • htdocs/tools/emailmanage.bml
  • htdocs/tools/emailmanage.bml.text
  • htdocs/tools/fck_poll.bml
  • htdocs/tools/recent_comments.bml
  • htdocs/tools/tellafriend.bml
  • htdocs/tools/userpicfactory.bml
  • htdocs/update.bml
  • htdocs/view/index.bml
  • views/admin/themes/category.tt
  • views/shop/points.tt
  • views/shop/transferpoints.tt
--------------------------------------------------------------------------------
diff -r 909f01bd4446 -r 5a3fce12991a bin/upgrading/s2layers/core1.s2
--- a/bin/upgrading/s2layers/core1.s2	Wed Nov 17 19:34:04 2010 +0800
+++ b/bin/upgrading/s2layers/core1.s2	Wed Nov 17 22:56:06 2010 +0800
@@ -2522,7 +2522,7 @@ function YearPage::print_year_links() {
 }
 function YearPage::print_month(YearMonth m) {
     if (not $m.has_entries) { return; }
-    """<table style="margin-left: 25%; margin-right: 25%; margin-top: 1em; margin-bottom: 1em;
+    """<table summary="Monthly calendar with links to each day's entries" style="margin-left: 25%; margin-right: 25%; margin-top: 1em; margin-bottom: 1em;
        border-collapse: collapse; border: 1px solid;" border="1">\n
        <tr><th colspan="7" style="text-align: center; border: 1px solid;">""";
     print $m->month_format();
@@ -2736,7 +2736,7 @@ function EntryPage::print_comment (Comme
     var string poster = defined $c.poster ? $c.poster->as_string() : "<i>$*text_poster_anonymous</i>";
 
     "<a name='$c.anchor'></a><div style='background-color: $barc; margin-top: 10px; width: 100%'>";
-    "<table cellpadding='2' cellspacing='0' summary='0' style='width: 100%'><tr valign='top'>";
+    "<table summary='' cellpadding='2' cellspacing='0' style='width: 100%'><tr valign='top'>";
     if (defined $c.userpic and $*comment_userpic_style != "off") {
         var int w = $c.userpic.width;
         var int h = $c.userpic.height;
@@ -2749,10 +2749,10 @@ function EntryPage::print_comment (Comme
         }
         print "<td style='width: 102px'><img src='$c.userpic.url' width='$w' height='$h' alt='' /></td>";
     }
-    "<td><table style='width: 100%'><tr>";
+    "<td><table summary='' style='width: 100%'><tr>";
 
     "<td align='left' style='width: 50%'>";
-      print "<table>";
+      print "<table summary=''>";
       print safe "<tr><th align='right'>$*text_comment_from</th><td>$poster</td></tr>\n";
       print safe "<tr><th align='right'>$*text_comment_date</th><td style='white-space: nowrap'>";
         print $c->time_display() + "</td></tr>";
@@ -2805,7 +2805,7 @@ function EntryPage::print_comment_partia
 
 function ItemRange::print() {
     if ($.all_subitems_displayed) { return; }
-    print "<table align='center' border='0' cellpadding='3'>";
+    print "<table summary='' align='center' border='0' cellpadding='3'>";
     print "<tr><td align='center' colspan='3'><b>" +
         lang_page_of_pages($.current, $.total) + "</b>";
     print "</td></tr>";
@@ -2838,7 +2838,7 @@ function EntryPage::print_body
     var Entry e = $.entry;
     """<div class="entry" id="$e.dom_id">\n""";
 
-    "<table><tr valign='middle'>";
+    "<table summary=''><tr valign='middle'>";
     if (defined $e.userpic) {
         print "<td>$e.userpic</td>";
     }
@@ -2894,7 +2894,7 @@ function ReplyPage::print_body
         $security = $en.security_icon;
     }
 
-    "<table><tr valign='middle'>";
+    "<table summary=''><tr valign='middle'>";
         if (defined $.replyto.userpic) {
             print "<td>$.replyto.userpic</td>";
         }
diff -r 909f01bd4446 -r 5a3fce12991a bin/upgrading/s2layers/drifting/layout.s2
--- a/bin/upgrading/s2layers/drifting/layout.s2	Wed Nov 17 19:34:04 2010 +0800
+++ b/bin/upgrading/s2layers/drifting/layout.s2	Wed Nov 17 22:56:06 2010 +0800
@@ -1167,7 +1167,7 @@ function YearPage::print_month(YearMonth
     println "</a></h2>";
 
     println "<div class='month'>";
-    println "<table class=\"month-table\"><thead>";
+    println "<table summary=\"Monthly calendar with links to each day's entries\" class=\"month-table\"><thead>";
     foreach var int d (weekdays())
     {
         "<th>" + $*lang_dayname_short[$d] + "</th>";
diff -r 909f01bd4446 -r 5a3fce12991a bin/upgrading/s2layers/negatives/layout.s2
--- a/bin/upgrading/s2layers/negatives/layout.s2	Wed Nov 17 19:34:04 2010 +0800
+++ b/bin/upgrading/s2layers/negatives/layout.s2	Wed Nov 17 22:56:06 2010 +0800
@@ -782,7 +782,7 @@ function YearPage::print_body()
 
 function YearPage::print_month(YearMonth m) {
     if (not $m.has_entries) { return; }
-    """<br /><div class="entry"><table style="width: 100%; border-collapse: collapse;">\n
+    """<br /><div class="entry"><table summary="Monthly calendar with links to each day's entries" style="width: 100%; border-collapse: collapse;">\n
        <tr><th class="comments" colspan="7" style="text-align: center;">""";
     print $m->month_format();
     """</th></tr>\n""";
diff -r 909f01bd4446 -r 5a3fce12991a bin/upgrading/s2layers/zesty/layout.s2
--- a/bin/upgrading/s2layers/zesty/layout.s2	Wed Nov 17 19:34:04 2010 +0800
+++ b/bin/upgrading/s2layers/zesty/layout.s2	Wed Nov 17 22:56:06 2010 +0800
@@ -1659,7 +1659,7 @@ function Page::lay_print_week(YearWeek w
 #
 function Page::lay_print_month(YearMonth m) {
     """
-    <table class="month">
+    <table summary="Monthly calendar with links to each day's entries" class="month">
     <tr>
     """;
     foreach var int d (weekdays()) {
diff -r 909f01bd4446 -r 5a3fce12991a cgi-bin/DW/Setting/XPostAccounts.pm
--- a/cgi-bin/DW/Setting/XPostAccounts.pm	Wed Nov 17 19:34:04 2010 +0800
+++ b/cgi-bin/DW/Setting/XPostAccounts.pm	Wed Nov 17 22:56:06 2010 +0800
@@ -110,7 +110,7 @@ sub option {
 
     $ret .= "<h2>" . $class->ml('setting.xpost.settings') . "</h2>";
     # disable comments on crosspost
-    $ret .= "<table><tr>";
+    $ret .= "<table summary=''><tr>";
     $ret .= "<td><b>" . $class->ml('setting.xpost.comments') . "</b></td><td><label for='${key}xpostdisablecomments'>" . $class->ml('setting.xpost.option.disablecomments') . "</label></td><td>";
     $ret .= LJ::html_check({
         name     => "${key}xpostdisablecomments",
diff -r 909f01bd4446 -r 5a3fce12991a cgi-bin/LJ/Comment.pm
--- a/cgi-bin/LJ/Comment.pm	Wed Nov 17 19:34:04 2010 +0800
+++ b/cgi-bin/LJ/Comment.pm	Wed Nov 17 22:56:06 2010 +0800
@@ -1386,9 +1386,9 @@ sub _format_mail_both {
         }
 
         if ($pichtml) {
-            $body .= "<table><tr valign='top'><td>$pichtml</td><td width='100%'>$intro</td></tr></table>\n";
+            $body .= "<table summary=''><tr valign='top'><td>$pichtml</td><td width='100%'>$intro</td></tr></table>\n";
         } else {
-            $body .= "<table><tr valign='top'><td width='100%'>$intro</td></tr></table>\n";
+            $body .= "<table summary=''><tr valign='top'><td width='100%'>$intro</td></tr></table>\n";
         }
 
         $body .= blockquote($parent ? $parent->body_html : $entry->event_html);
diff -r 909f01bd4446 -r 5a3fce12991a cgi-bin/LJ/Console/Command.pm
--- a/cgi-bin/LJ/Console/Command.pm	Wed Nov 17 19:34:04 2010 +0800
+++ b/cgi-bin/LJ/Console/Command.pm	Wed Nov 17 22:56:06 2010 +0800
@@ -102,7 +102,7 @@ sub as_html {
 sub as_html {
     my $self = shift;
 
-    my $out = "<table border='1' cellpadding='5'><tr>";
+    my $out = "<table summary='' border='1' cellpadding='5'><tr>";
     $out .= "<td><strong>" . LJ::ehtml($self->cmd) . "</strong></td>";
     $out .= "<td>" . LJ::ehtml($_) . "</td>" foreach $self->args;
     $out .= "</tr></table>";
diff -r 909f01bd4446 -r 5a3fce12991a cgi-bin/LJ/Console/Command/InvalidCommand.pm
--- a/cgi-bin/LJ/Console/Command/InvalidCommand.pm	Wed Nov 17 19:34:04 2010 +0800
+++ b/cgi-bin/LJ/Console/Command/InvalidCommand.pm	Wed Nov 17 22:56:06 2010 +0800
@@ -44,7 +44,7 @@ sub as_html {
 sub as_html {
     my $self = shift;
 
-    my $out = "<table border='1' cellpadding='5'><tr>";
+    my $out = "<table summary='' border='1' cellpadding='5'><tr>";
     $out .= "<td><strong>" . LJ::ehtml($self->{command}) . "</strong></td>";
     $out .= "<td>" . LJ::ehtml($_) . "</td>" foreach $self->args;
     $out .= "</tr></table>";
diff -r 909f01bd4446 -r 5a3fce12991a cgi-bin/LJ/Directory/Results.pm
--- a/cgi-bin/LJ/Directory/Results.pm	Wed Nov 17 19:34:04 2010 +0800
+++ b/cgi-bin/LJ/Directory/Results.pm	Wed Nov 17 22:56:06 2010 +0800
@@ -91,7 +91,7 @@ sub render_simple {
 
     my $updated = LJ::get_timeupdate_multi($self->userids);
 
-    my $ret = "<table id='SearchResults' cellspacing='1'>";
+    my $ret = "<table summary='' id='SearchResults' cellspacing='1'>";
     foreach my $u (@users) {
         $ret .= "<tr><td class='SearchResult'>";
         $ret .= $u->ljuser_display . " - " . $u->name_html;
@@ -112,7 +112,7 @@ sub render_pics {
 
     my $updated = LJ::get_timeupdate_multi($self->userids);
 
-    my $ret = "<table id='SearchResults' cellspacing='1'>";
+    my $ret = "<table summary='' id='SearchResults' cellspacing='1'>";
     foreach my $u (@users) {
         $ret .= "</tr>\n<tr>\n" if ($col++ % $tablecols == 0);
 
diff -r 909f01bd4446 -r 5a3fce12991a cgi-bin/LJ/Entry.pm
--- a/cgi-bin/LJ/Entry.pm	Wed Nov 17 19:34:04 2010 +0800
+++ b/cgi-bin/LJ/Entry.pm	Wed Nov 17 22:56:06 2010 +0800
@@ -2313,7 +2313,7 @@ sub currents_table {
     my $ret = '';
     return $ret unless %current;
 
-    $ret .= "<table class='currents' border=0>\n";
+    $ret .= "<table summary='' class='currents' border=0>\n";
     foreach ( sort keys %current ) {
         next unless $current{$_};
 
diff -r 909f01bd4446 -r 5a3fce12991a cgi-bin/LJ/Poll.pm
--- a/cgi-bin/LJ/Poll.pm	Wed Nov 17 19:34:04 2010 +0800
+++ b/cgi-bin/LJ/Poll.pm	Wed Nov 17 22:56:06 2010 +0800
@@ -1065,7 +1065,7 @@ sub render {
             # few opts, display radios
             if ($do_radios) {
 
-                $results_table .= "<table><tr valign='top' align='center'>";
+                $results_table .= "<table summary=''><tr valign='top' align='center'>";
 
                 for (my $at=$from; $at<=$to; $at+=$by) {
 
@@ -1101,7 +1101,7 @@ sub render {
                 $results_table .= LJ::Lang::ml('poll.scaleanswers', { 'mean' => $mean, 'median' => $valmedian, 'stddev' => $stddev });
                 $results_table .= "<br />\n";
                 $do_table = 1;
-                $results_table .= "<table>";
+                $results_table .= "<table summary=''>";
             }
 
             my @items = $self->question($qid)->items;
diff -r 909f01bd4446 -r 5a3fce12991a cgi-bin/LJ/Poll/Question.pm
--- a/cgi-bin/LJ/Poll/Question.pm	Wed Nov 17 19:34:04 2010 +0800
+++ b/cgi-bin/LJ/Poll/Question.pm	Wed Nov 17 22:56:06 2010 +0800
@@ -112,7 +112,7 @@ sub preview_as_html {
 
         # few opts, display radios
         if ($do_radios) {
-            $ret .= "<table><tr valign='top' align='center'>\n";
+            $ret .= "<table summary=''><tr valign='top' align='center'>\n";
             for (my $at = $from; $at <= $to; $at += $by) {
                 $ret .= "<td>" . LJ::html_check({ 'type' => 'radio' }) . "<br />$at</td>\n";
             }
diff -r 909f01bd4446 -r 5a3fce12991a cgi-bin/LJ/Setting/EmailPosting.pm
--- a/cgi-bin/LJ/Setting/EmailPosting.pm	Wed Nov 17 19:34:04 2010 +0800
+++ b/cgi-bin/LJ/Setting/EmailPosting.pm	Wed Nov 17 22:56:06 2010 +0800
@@ -51,7 +51,7 @@ sub option {
                                     aopts => "href='$LJ::SITEROOT/manage/emailpost?mode=help'" } );
     $ret .= " $upgrade_link</p>";
 
-    $ret .= "<table class='setting_table' cellspacing='5' cellpadding='0'>";
+    $ret .= "<table summary='' class='setting_table' cellspacing='5' cellpadding='0'>";
 
     if ( $can_emailpost ) {
         foreach my $i (0..2) {
diff -r 909f01bd4446 -r 5a3fce12991a cgi-bin/LJ/SpellCheck.pm
--- a/cgi-bin/LJ/SpellCheck.pm	Wed Nov 17 19:34:04 2010 +0800
+++ b/cgi-bin/LJ/SpellCheck.pm	Wed Nov 17 22:56:06 2010 +0800
@@ -139,7 +139,7 @@ sub check_html {
     $iwrite->close;
 
 
-    return ( ( $mscnt || $other_bad ) ? "$output<p><b>Suggestions:</b><table cellpadding=3 border=0>$footnotes</table>" : "" );
+    return ( ( $mscnt || $other_bad ) ? "$output<table cellpadding=3 border=0><tr><th>Text</th><th>Suggestions</th></tr>$footnotes</table>" : "" );
 }
 
 1;
diff -r 909f01bd4446 -r 5a3fce12991a cgi-bin/LJ/Talk.pm
--- a/cgi-bin/LJ/Talk.pm	Wed Nov 17 19:34:04 2010 +0800
+++ b/cgi-bin/LJ/Talk.pm	Wed Nov 17 22:56:06 2010 +0800
@@ -179,7 +179,7 @@ sub link_bar
     my $ret;
     if ( @linkele ) {
         $ret = BML::fill_template("standout", {
-            'DATA' => "<table><tr><td valign='middle'>" .
+            'DATA' => "<table summary=''><tr><td valign='middle'>" .
                 join("&nbsp;&nbsp;", @linkele) .
                 "</td></tr></table>",
             });
@@ -1436,10 +1436,10 @@ sub talkform {
     }
 
     # from registered user or anonymous?
-    $ret .= "<table class='talkform'>\n";
+    $ret .= "<table summary='' class='talkform'>\n";
     $ret .= "<tr><td align='right' valign='top'>$BML::ML{'.opt.from'}</td>";
     $ret .= "<td>";
-    $ret .= "<table>"; # Internal for "From" options
+    $ret .= "<table summary=''>"; # Internal for "From" options
     my $screening = LJ::Talk::screening_level( $journalu, $opts->{ditemid} >> 8 ) || '';
 
     if ($editid) {
@@ -1732,7 +1732,7 @@ sub talkform {
     }
     $ljuser_def = "" unless $remote_can_comment;
 
-    $ret .= "<table><tr><td>";
+    $ret .= "<table summary=''><tr><td>";
     $ret .= "$BML::ML{'Username'}:</td><td>";
     $ret .= "<input class='textbox' name='userpost' size='13' maxlength='25' id='username' value='$ljuser_def' onclick='this.value=\"\"' ";
     $ret .= "style='background: url($LJ::IMGPREFIX/silk/identity/user.png) no-repeat; background-color: #fff; background-position: 0px 1px; padding-left: 18px; color: #00C; font-weight: bold;'/>";
@@ -1805,7 +1805,7 @@ sub talkform {
         # spit out a pretty table of all the possible subjecticons
         $ret .= "document.write(\"";
         $ret .= "<blockquote style='display:none;' id='subjectIconList'>";
-        $ret .= "<table border='0' cellspacing='5' cellpadding='0' style='border: 1px solid #AAAAAA'>\");\n";
+        $ret .= "<table summary='' border='0' cellspacing='5' cellpadding='0' style='border: 1px solid #AAAAAA'>\");\n";
 
         foreach my $type (@{$pics->{'types'}}) {
 
diff -r 909f01bd4446 -r 5a3fce12991a cgi-bin/LJ/User.pm
--- a/cgi-bin/LJ/User.pm	Wed Nov 17 19:34:04 2010 +0800
+++ b/cgi-bin/LJ/User.pm	Wed Nov 17 22:56:06 2010 +0800
@@ -8522,7 +8522,7 @@ sub user_search_display {
         next unless LJ::isu($u);
 
         $ret .= "<div class='user-search-display'>";
-        $ret .= "<table style='height: 105px'><tr>";
+        $ret .= "<table summary='' style='height: 105px'><tr>";
 
         $ret .= "<td style='width: 100px; text-align: center;'>";
         $ret .= "<a href='" . $u->allpics_base . "'>";
@@ -8535,7 +8535,7 @@ sub user_search_display {
         }
         $ret .= "</a>";
 
-        $ret .= "</td><td style='padding-left: 5px;' valign='top'><table>";
+        $ret .= "</td><td style='padding-left: 5px;' valign='top'><table summary=''>";
 
         $ret .= "<tr><td class='searchusername' colspan='2' style='text-align: left;'>";
         $ret .= $u->ljuser_display({ head_size => $args{head_size} });
diff -r 909f01bd4446 -r 5a3fce12991a cgi-bin/LJ/Widget/AddSiteMessages.pm
--- a/cgi-bin/LJ/Widget/AddSiteMessages.pm	Wed Nov 17 19:34:04 2010 +0800
+++ b/cgi-bin/LJ/Widget/AddSiteMessages.pm	Wed Nov 17 22:56:06 2010 +0800
@@ -66,7 +66,7 @@ sub render_body {
 
     $ret .= $class->start_form;
 
-    $ret .= "<table><tr><td>Start Date:</td><td>";
+    $ret .= "<table summary=''><tr><td>Start Date:</td><td>";
     $ret .= $class->html_select
         ( name => 'month_start',
           selected => $start_month,
diff -r 909f01bd4446 -r 5a3fce12991a cgi-bin/LJ/Widget/CreateAccount.pm
--- a/cgi-bin/LJ/Widget/CreateAccount.pm	Wed Nov 17 19:34:04 2010 +0800
+++ b/cgi-bin/LJ/Widget/CreateAccount.pm	Wed Nov 17 22:56:06 2010 +0800
@@ -89,7 +89,7 @@ sub render_body {
     $ret .= "<div class='relative-container'>\n";
     $ret .= "<div id='tips_box_arrow'></div>";
     $ret .= "<div id='tips_box'></div>";
-    $ret .= "<table class='create-form' cellspacing='0' cellpadding='3'>\n";
+    $ret .= "<table summary='' class='create-form' cellspacing='0' cellpadding='3'>\n";
 
     ### username
 
diff -r 909f01bd4446 -r 5a3fce12991a cgi-bin/LJ/Widget/CreateAccountNextSteps.pm
--- a/cgi-bin/LJ/Widget/CreateAccountNextSteps.pm	Wed Nov 17 19:34:04 2010 +0800
+++ b/cgi-bin/LJ/Widget/CreateAccountNextSteps.pm	Wed Nov 17 22:56:06 2010 +0800
@@ -27,7 +27,7 @@ sub render_body {
     $ret .= "<h2>" . $class->ml('widget.createaccountnextsteps.title') . "</h2>";
     $ret .= "<p class='intro'>" . $class->ml('widget.createaccountnextsteps.steps', { sitename => $LJ::SITENAMESHORT }) . "</p>";
 
-    $ret .= "<table cellspacing='0' cellpadding='0'>";
+    $ret .= "<table summary='' cellspacing='0' cellpadding='0'>";
     $ret .= "<tr valign='top'><td><ul>";
     $ret .= "<li><a href='$LJ::SITEROOT/update'>" . $class->ml('widget.createaccountnextsteps.steps.post') . "</a></li>";
     $ret .= "<li><a href='$LJ::SITEROOT/editicons'>" . $class->ml('widget.createaccountnextsteps.steps.userpics') . "</a></li>";
diff -r 909f01bd4446 -r 5a3fce12991a cgi-bin/LJ/Widget/CreateAccountProfile.pm
--- a/cgi-bin/LJ/Widget/CreateAccountProfile.pm	Wed Nov 17 19:34:04 2010 +0800
+++ b/cgi-bin/LJ/Widget/CreateAccountProfile.pm	Wed Nov 17 22:56:06 2010 +0800
@@ -41,7 +41,7 @@ sub render_body {
     $ret .= "<h2>" . $class->ml('widget.createaccountprofile.title') . "</h2>";
     $ret .= "<p>" . $class->ml('widget.createaccountprofile.info') . "</p>";
 
-    $ret .= "<table cellspacing='3' cellpadding='0'>\n";
+    $ret .= "<table summary='' cellspacing='3' cellpadding='0'>\n";
 
     ### name
     $ret .= "<tr valign='middle'><td class='field-name'>" . $class->ml('widget.createaccountprofile.field.name') . "</td>\n<td>";
@@ -82,7 +82,7 @@ sub render_body {
     $ret .= "<p class='header'>" . $class->ml('widget.createaccountprofile.field.interests') . " ";
     $ret .= "<span class='header-note'>" . $class->ml('widget.createaccountprofile.field.interests.note') . "</p>\n";
 
-    $ret .= "<table cellspacing='3' cellpadding='0'>\n";
+    $ret .= "<table summary='' cellspacing='3' cellpadding='0'>\n";
 
     my @eintsl;
     my $interests = $u->interests;
diff -r 909f01bd4446 -r 5a3fce12991a cgi-bin/LJ/Widget/CreateAccountProgressMeter.pm
--- a/cgi-bin/LJ/Widget/CreateAccountProgressMeter.pm	Wed Nov 17 19:34:04 2010 +0800
+++ b/cgi-bin/LJ/Widget/CreateAccountProgressMeter.pm	Wed Nov 17 22:56:06 2010 +0800
@@ -33,7 +33,7 @@ sub render_body {
 
     my $ret;
 
-    $ret .= "<table cellspacing='0' cellpadding='0'><tr>";
+    $ret .= "<table summary='' cellspacing='0' cellpadding='0'><tr>";
 
     my $count = 1;
     foreach my $step (@steps_to_show) {
diff -r 909f01bd4446 -r 5a3fce12991a cgi-bin/LJ/Widget/CreateAccountTheme.pm
--- a/cgi-bin/LJ/Widget/CreateAccountTheme.pm	Wed Nov 17 19:34:04 2010 +0800
+++ b/cgi-bin/LJ/Widget/CreateAccountTheme.pm	Wed Nov 17 22:56:06 2010 +0800
@@ -32,7 +32,7 @@ sub render_body {
     $ret .= "<p>" . $class->ml('widget.createaccounttheme.info') . "</p>";
 
     my $count = 0;
-    $ret .= "<table cellspacing='3' cellpadding='0' align='center'>\n";
+    $ret .= "<table summary='' cellspacing='3' cellpadding='0' align='center'>\n";
     foreach my $uniq (@LJ::CREATE_ACCOUNT_THEMES) {
         my $theme = LJ::S2Theme->load_by_uniq($uniq);
         my $image_class = $theme->uniq;
diff -r 909f01bd4446 -r 5a3fce12991a cgi-bin/LJ/Widget/Feeds.pm
--- a/cgi-bin/LJ/Widget/Feeds.pm	Wed Nov 17 19:34:04 2010 +0800
+++ b/cgi-bin/LJ/Widget/Feeds.pm	Wed Nov 17 22:56:06 2010 +0800
@@ -38,7 +38,7 @@ sub render_body {
     my $feednum = 10;
     my $max = ((scalar @rand) < $feednum) ? (scalar @rand) : $feednum;
     $body .= "<div class='feeds-content'>";
-    $body .= "<table class='feeds-table' cellpadding='0' cellspacing='0'>";
+    $body .= "<table summary='' class='feeds-table' cellpadding='0' cellspacing='0'>";
     my $odd = 1;
     foreach my $userid (@rand[0..$max-1]) {
         my $u = LJ::load_userid($userid);
diff -r 909f01bd4446 -r 5a3fce12991a cgi-bin/LJ/Widget/FriendBirthdays.pm
--- a/cgi-bin/LJ/Widget/FriendBirthdays.pm	Wed Nov 17 19:34:04 2010 +0800
+++ b/cgi-bin/LJ/Widget/FriendBirthdays.pm	Wed Nov 17 22:56:06 2010 +0800
@@ -42,7 +42,7 @@ sub render_body {
     my $ret;
     $ret .= "<h2><span>" . $class->ml('widget.friendbirthdays.title') . "</span></h2>";
     $ret .= "<a href='$LJ::SITEROOT/birthdays' class='more-link'>" . $class->ml('widget.friendbirthdays.viewall') . "</a></p>";
-    $ret .= "<div class='indent_sm'><table>";
+    $ret .= "<div class='indent_sm'><table summary=''>";
 
     foreach my $bday (@bdays) {
         my $u = LJ::load_user($bday->[2]);
diff -r 909f01bd4446 -r 5a3fce12991a cgi-bin/LJ/Widget/FriendInterests.pm
--- a/cgi-bin/LJ/Widget/FriendInterests.pm	Wed Nov 17 19:34:04 2010 +0800
+++ b/cgi-bin/LJ/Widget/FriendInterests.pm	Wed Nov 17 22:56:06 2010 +0800
@@ -111,7 +111,7 @@ sub render_body {
     $ret .= "<div id='friend_interests' class='pkg' style='display: none;'>";
     $ret .= $class->ml('widget.friendinterests.intro', {user => $fromu->ljuser_display});
 
-    $ret .= "<table>";
+    $ret .= "<table summary=''>";
     my @fromintsorted = sort keys %$fromints;
     my $cols = 4;
     my $rows = int((scalar(@fromintsorted) + $cols - 1) / $cols);
diff -r 909f01bd4446 -r 5a3fce12991a cgi-bin/LJ/Widget/ImportStatus.pm
--- a/cgi-bin/LJ/Widget/ImportStatus.pm	Wed Nov 17 19:34:04 2010 +0800
+++ b/cgi-bin/LJ/Widget/ImportStatus.pm	Wed Nov 17 22:56:06 2010 +0800
@@ -35,7 +35,7 @@ sub render_body {
 
     if ( scalar keys %$items ) {
         $ret .= "<h2 class='gradient'>" . $class->ml( 'widget.importstatus.header' ) . "</h2>";
-        $ret .= "<table width='100%' class='importer-status'>";
+        $ret .= "<table summary='' width='100%' class='importer-status'>";
 
         my $import_in_progress = 0;
         foreach my $importid ( sort { $b <=> $a } keys %$items ) {
diff -r 909f01bd4446 -r 5a3fce12991a cgi-bin/LJ/Widget/InboxFolder.pm
--- a/cgi-bin/LJ/Widget/InboxFolder.pm	Wed Nov 17 19:34:04 2010 +0800
+++ b/cgi-bin/LJ/Widget/InboxFolder.pm	Wed Nov 17 22:56:06 2010 +0800
@@ -131,7 +131,7 @@ sub render_body {
 
     $messagetable .= qq {
         <div id="${name}_Table" class="NotificationTable">
-        <table id="${name}" class="inbox" cellspacing="0" border="0" cellpadding="0">
+        <table summary='' id="${name}" class="inbox" cellspacing="0" border="0" cellpadding="0">
     };
     $messagetable .= $actionsrow->(1);
     $messagetable .= "<tbody id='${name}_Body'>";
diff -r 909f01bd4446 -r 5a3fce12991a cgi-bin/LJ/Widget/LinksList.pm
--- a/cgi-bin/LJ/Widget/LinksList.pm	Wed Nov 17 19:34:04 2010 +0800
+++ b/cgi-bin/LJ/Widget/LinksList.pm	Wed Nov 17 22:56:06 2010 +0800
@@ -41,7 +41,7 @@ sub render_body {
 
     $ret .= "<p class='detail'>" . $class->ml('widget.linkslist.about') . "</p>";
 
-    $ret .= "<table cellspacing='2' cellpadding='0'><tr valign='top'><td>";
+    $ret .= "<table summary='' cellspacing='2' cellpadding='0'><tr valign='top'><td>";
 
     # how many link inputs to show?
     my $showlinks = $post->{numlinks} || @$linkobj;
diff -r 909f01bd4446 -r 5a3fce12991a cgi-bin/LJ/Widget/Location.pm
--- a/cgi-bin/LJ/Widget/Location.pm	Wed Nov 17 19:34:04 2010 +0800
+++ b/cgi-bin/LJ/Widget/Location.pm	Wed Nov 17 22:56:06 2010 +0800
@@ -65,7 +65,7 @@ sub render_body {
     my $ret;
 
     unless ($minimal_display) {
-        $ret .= "<table class='field_block'>\n";
+        $ret .= "<table summary='' class='field_block'>\n";
 
         $ret .= "<tr><td class='field_class'>" . $class->ml('widget.location.fn.country') . "</td><td>";
     }
diff -r 909f01bd4446 -r 5a3fce12991a cgi-bin/LJ/Widget/Login.pm
--- a/cgi-bin/LJ/Widget/Login.pm	Wed Nov 17 19:34:04 2010 +0800
+++ b/cgi-bin/LJ/Widget/Login.pm	Wed Nov 17 22:56:06 2010 +0800
@@ -139,7 +139,7 @@ sub render_body {
         $ret .= LJ::help_icon('securelogin', '&nbsp;');
 
         if (LJ::Hooks::are_hooks("login_formopts")) {
-            $ret .= "<table>";
+            $ret .= "<table summary=''>";
             $ret .= "<tr><td>" . LJ::Lang::ml('/login.bml.login.otheropts') . "</td><td style='white-space: nowrap'>\n";
             LJ::Hooks::run_hooks("login_formopts", { 'ret' => \$ret });
             $ret .= "</td></tr></table>";
diff -r 909f01bd4446 -r 5a3fce12991a cgi-bin/LJ/Widget/MoodThemeChooser.pm
--- a/cgi-bin/LJ/Widget/MoodThemeChooser.pm	Wed Nov 17 19:34:04 2010 +0800
+++ b/cgi-bin/LJ/Widget/MoodThemeChooser.pm	Wed Nov 17 22:56:06 2010 +0800
@@ -74,7 +74,7 @@ sub render_body {
         my $count = 0;
 
         $ret .= "<div class='moodtheme-preview moodtheme-preview-$show_special'>";
-        $ret .= "<table>";
+        $ret .= "<table summary=''>";
         $ret .= "<tr>" unless $moodtheme_extra;
         foreach my $mood (@show_moods) {
             my %pic;
diff -r 909f01bd4446 -r 5a3fce12991a cgi-bin/LJ/Widget/NavStripChooser.pm
--- a/cgi-bin/LJ/Widget/NavStripChooser.pm	Wed Nov 17 19:34:04 2010 +0800
+++ b/cgi-bin/LJ/Widget/NavStripChooser.pm	Wed Nov 17 22:56:06 2010 +0800
@@ -64,7 +64,7 @@ sub render_body {
         }
     }
 
-    $ret .= "<table>";
+    $ret .= "<table summary=''>";
     $ret .= "<tr><td valign='top'>" . $class->html_check(
         type => "radio",
         name => "control_strip_color",
@@ -122,7 +122,7 @@ sub render_body {
         $ret .= " <label for='control_strip_gradient_custom'>" . $class->ml('widget.navstripchooser.option.color.no_gradient') . "</label><br />";
 
         my $count = 0;
-        $ret .= "<table class='color-picker'>";
+        $ret .= "<table summary='' class='color-picker'>";
         foreach my $prop (@props) {
             $prop = S2::get_property($theme->coreid, $prop)
                 unless ref $prop;
diff -r 909f01bd4446 -r 5a3fce12991a cgi-bin/LJ/Widget/S2PropGroup.pm
--- a/cgi-bin/LJ/Widget/S2PropGroup.pm	Wed Nov 17 19:34:04 2010 +0800
+++ b/cgi-bin/LJ/Widget/S2PropGroup.pm	Wed Nov 17 22:56:06 2010 +0800
@@ -55,7 +55,7 @@ sub render_body {
         $ret .= "<p class='detail'>" . $class->ml('widget.s2propgroup.presentation.note') . "</p>";
 
         $ret .= "<div class='subheader subheader-presentation on' id='subheader__presentation__basic'>" . $class->ml('widget.s2propgroup.presentation.basic') . "</div>";
-        $ret .= "<table cellspacing='0' class='prop-list first' id='proplist__presentation__basic'>";
+        $ret .= "<table summary='' cellspacing='0' class='prop-list first' id='proplist__presentation__basic'>";
         $ret .= $class->language_chooser($u) if $opts{show_lang_chooser};
         foreach my $prop_name (@basic_props) {
             next if $class->skip_prop($props->{$prop_name}, $prop_name, theme => $theme);
@@ -80,7 +80,7 @@ sub render_body {
             # there's no props in this group that are also in this subheader
             unless ($header_printed) {
                 $ret .= "<div class='subheader subheader-presentation on' id='subheader__presentation__additional'>" . $class->ml('widget.s2propgroup.presentation.additional') . "</div>";
-                $ret .= "<table cellspacing='0' class='prop-list' id='proplist__presentation__additional'>";
+                $ret .= "<table summary='' cellspacing='0' class='prop-list' id='proplist__presentation__additional'>";
             }
             $header_printed = 1;
             $row_class = $count % 2 == 0 ? " graybg" : "";
@@ -177,7 +177,7 @@ sub render_body {
                     $prop_list_class = " first" if $subheader_counter == 1;
 
                     $ret .= "<div class='subheader subheader-modules on' id='subheader__modules__${subheader}'>$subheaders{$subheader}</div>";
-                    $ret .= "<table cellspacing='0' class='prop-list$prop_list_class' id='proplist__modules__${subheader}'>";
+                    $ret .= "<table summary='' cellspacing='0' class='prop-list$prop_list_class' id='proplist__modules__${subheader}'>";
                     $header_printed = 1;
                     $subheader_counter++;
                     $count = 1; # reset counter
@@ -228,7 +228,7 @@ sub render_body {
                     $prop_list_class = " first" if $subheader_counter == 1;
 
                     $ret .= "<div class='subheader subheader-$propgroup on' id='subheader__${propgroup}__${subheader}'>$subheaders{$subheader}</div>";
-                    $ret .= "<table cellspacing='0' class='prop-list$prop_list_class' id='proplist__${propgroup}__${subheader}'>";
+                    $ret .= "<table summary='' cellspacing='0' class='prop-list$prop_list_class' id='proplist__${propgroup}__${subheader}'>";
                     $header_printed = 1;
                     $subheader_counter++;
                     $count = 1; # reset counter
diff -r 909f01bd4446 -r 5a3fce12991a cgi-bin/bml/scheme/celerity.look
--- a/cgi-bin/bml/scheme/celerity.look	Wed Nov 17 19:34:04 2010 +0800
+++ b/cgi-bin/bml/scheme/celerity.look	Wed Nov 17 22:56:06 2010 +0800
@@ -78,7 +78,7 @@ accountlinks<=
         $ret .= LJ::html_hidden( returnto => $GET{returnto} );
         $ret .= "<input type='hidden' name='chal' class='lj_login_chal' value='$chal' />\n";
         $ret .= "<input type='hidden' name='response' class='lj_login_response' value='' />\n";
-        $ret .= "<table id='login-table'>";
+        $ret .= "<table summary='' id='login-table'>";
         $ret .= "<tr><td><label for='login_user'>$ML{'sitescheme.accountlinks.login.username'}</label></td>";
         $ret .= "<td class='input-cell' colspan='2'>" . LJ::html_text({
             name => "user",
diff -r 909f01bd4446 -r 5a3fce12991a cgi-bin/bml/scheme/common.look
--- a/cgi-bin/bml/scheme/common.look	Wed Nov 17 19:34:04 2010 +0800
+++ b/cgi-bin/bml/scheme/common.look	Wed Nov 17 22:56:06 2010 +0800
@@ -27,7 +27,7 @@ emailex=><div style='width: 50%; font-fa
 emailex=><div style='width: 50%; font-family: courier; background-color: #efefef; border: dotted #cdcdcd 2px; padding: 5px;'>%%data%%</div>
 
 standout<=
-{DRps}<div class='standout'><table class='standout-inner'><tr><td>%%data%%</td></tr></table></div>
+{DRps}<div class='standout'><table summary='' class='standout-inner'><tr><td>%%data%%</td></tr></table></div>
 <=standout
 
 logo<=
@@ -92,7 +92,7 @@ accountlinks<=
         $ret .= LJ::html_hidden( returnto => $GET{returnto} );
         $ret .= "<input type='hidden' name='chal' class='lj_login_chal' value='$chal' />\n";
         $ret .= "<input type='hidden' name='response' class='lj_login_response' value='' />\n";
-        $ret .= "<table id='login-table'>";
+        $ret .= "<table summary='' id='login-table'>";
         $ret .= "<tr><td><label for='login_user'>$ML{'sitescheme.accountlinks.login.username'}</label></td>";
         $ret .= "<td class='input-cell' colspan='2'>" . LJ::html_text({
             name => "user",
diff -r 909f01bd4446 -r 5a3fce12991a cgi-bin/bml/scheme/global.look
--- a/cgi-bin/bml/scheme/global.look	Wed Nov 17 19:34:04 2010 +0800
+++ b/cgi-bin/bml/scheme/global.look	Wed Nov 17 22:56:06 2010 +0800
@@ -226,7 +226,7 @@ CHOICE=>{P}<dt><a href="%%data2%%"><font
 CHOICE=>{P}<dt><a href="%%data2%%"><font size="+1"><tt><b>%%data1%%</b></tt></font></a><dd><font size="2">%%data3%%</font>
 
 CHOICES<=
-{F}<table width="100%" cellpadding="2" cellspacing="5">
+{F}<table summary="" width="100%" cellpadding="2" cellspacing="5">
 <tr>
 <td valign='top' width="50%">
 <dl>
diff -r 909f01bd4446 -r 5a3fce12991a cgi-bin/weblib.pl
--- a/cgi-bin/weblib.pl	Wed Nov 17 19:34:04 2010 +0800
+++ b/cgi-bin/weblib.pl	Wed Nov 17 22:56:06 2010 +0800
@@ -1576,7 +1576,7 @@ MOODS
                                        });
                 $out .= LJ::help_icon_html('prop_xpost_check');
                 $out .= "<a href = '/manage/settings/?cat=othersites'>" . BML::ml('entryform.xpost.manage') . "</a>";
-                $out .= "</p>\n<table>";
+                $out .= "</p>\n<table summary=''>";
                 $out .= $accthtml;
                 $out .= "</table>\n";
                 
@@ -2784,7 +2784,7 @@ sub control_strip
                 <input type="hidden" name="mode" value="login" />
                 <input type='hidden' name='chal' id='login_chal' class='lj_login_chal' value='$chal' />
                 <input type='hidden' name='response' id='login_response' class='lj_login_response' value='' />
-                <table cellspacing="0" cellpadding="0" style="margin-right: 1em;"><tr><td>
+                <table summary='' cellspacing="0" cellpadding="0" style="margin-right: 1em;"><tr><td>
                 <label for="xc_user">$BML::ML{'/login.bml.login.username'}</label> <input type="text" name="user" size="7" maxlength="27" tabindex="1" id="xc_user" value="" />
                 </td><td>
                 <label style="margin-left: 3px;" for="xc_password">$BML::ML{'/login.bml.login.password'}</label> <input type="password" name="password" size="7" tabindex="2" id="xc_password" class='lj_login_password' />
@@ -2877,7 +2877,7 @@ LOGIN_BAR
     $ret .= join( "&nbsp;&nbsp; ", @view_options );
     $ret .= "</td>";
 
-    return "<table id='lj_controlstrip' cellpadding='0' cellspacing='0'><tr valign='top'>$ret</tr></table>";
+    return "<table summary='' id='lj_controlstrip' cellpadding='0' cellspacing='0'><tr valign='top'>$ret</tr></table>";
 }
 
 sub control_strip_js_inject
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/admin/faq/readcat.bml
--- a/htdocs/admin/faq/readcat.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/admin/faq/readcat.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -79,7 +79,7 @@ body<=
         LJ::CleanHTML::clean_event( \$s, { ljcut_disable => 1 } );
         LJ::CleanHTML::clean_event( \$a, { ljcut_disable => 1 } );
 
-        $ret .= "<p><table bgcolor='#c0c0c0'><tr><td><b>$q</b></td></tr></table></p><div>$s</div><br /><div>$a</div>";
+        $ret .= "<p><table summary='' bgcolor='#c0c0c0'><tr><td><b>$q</b></td></tr></table></p><div>$s</div><br /><div>$a</div>";
     }
     $ret .= "</ul>\n";
 
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/admin/invites/codetrace.bml
--- a/htdocs/admin/invites/codetrace.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/admin/invites/codetrace.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -22,7 +22,7 @@ body<=
 
     $ret .= "<form method='GET'>";
     $ret .= "View invite details: ";
-    $ret .= "<table>";
+    $ret .= "<table summary=''>";
     $ret .= "<tr><td><label>By code: </label></td>";
     $ret .= "<td>" . LJ::html_text( { name => 'code', maxlength => DW::InviteCodes::CODE_LEN, size => DW::InviteCodes::CODE_LEN } ) . "</td></tr>";
     $ret .= "<tr><td><label>By account: </label></td>";
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/admin/pay/index.bml
--- a/htdocs/admin/pay/index.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/admin/pay/index.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -108,7 +108,7 @@ EOF
 <br /><br />
     <form method="post"><input type="hidden" name="givetime" value="1">
     <input type="hidden" name="user" value="$u->{user}">$auth
-<table border='0' cellpadding='4'>
+<table summary='' border='0' cellpadding='4'>
 <tr><td>Give Paid Time:
     <select name="type">
         <option value="paid">Paid Account</option>
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/admin/priv/index.bml
--- a/htdocs/admin/priv/index.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/admin/priv/index.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -208,7 +208,7 @@ body<=
         $ret .= "<input type='hidden' name='user' value='$user' />\n";
         $sth = $dbh->prepare("SELECT pm.prmid, pm.prlid, pm.arg FROM priv_map pm, priv_list pl WHERE pm.prlid=pl.prlid AND pm.userid=$userid ORDER BY pl.privcode,pm.arg");
         $sth->execute;
-        $ret .= "<table cellpadding='5' cellspacing='1' border='1'><tr><td><b>Revoke</b></td><td><b>Privilege</b></td><td><b>Arg</b></td></tr>\n";
+        $ret .= "<table cellpadding='5' cellspacing='1' border='1'><tr><th>Revoke</th><th>Privilege</th><th>Arg</th></tr>\n";
         while (my ($prmid, $prlid, $arg) = $sth->fetchrow_array)
         {
             my $prec = $priv{$prlid};
@@ -294,7 +294,7 @@ body<=
                           "FROM priv_map pm, useridmap u WHERE pm.prlid=$priv AND pm.userid=u.userid$viewarg ".
                           "ORDER BY u.user,pm.arg LIMIT $skip,$limit");
         $sth->execute;
-        $ret .= "<table cellpadding='5' cellspacing='1' border='1'><tr><td><b>Revoke</b></td><td><b>User</b></td><td><b>Arg</b></td></tr>\n";
+        $ret .= "<table cellpadding='5' cellspacing='1' border='1'><tr><th>Revoke</th><th>User</th><th>Arg</th></tr>\n";
 
         my $showgrant = remote_can_grant($remote, $pcode, $FORM{'viewarg'});
         my $foundcount = 0;
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/admin/schema/index.bml
--- a/htdocs/admin/schema/index.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/admin/schema/index.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -48,7 +48,7 @@ body<=
          $table{$name} = { 'public' => $public, 'des' => $des };
      }
 
-     $body .= "<?h1 Tables h1?><?p Click a table for more information. p?><p><table cellpadding=4><tr bgcolor=<?emcolor?>><td><b>Table</b></td><td><b>Description</b></td></tr>\n";
+     $body .= "<?h1 Tables h1?><?p Click a table for more information. p?><p><table cellpadding=4><tr bgcolor=<?emcolor?>><th>Table</th><th>Description</th></tr>\n";
      $sth = $dbh->prepare("SHOW TABLES");
      $sth->execute;
      while (my ($table) = $sth->fetchrow_array) {
@@ -100,12 +100,12 @@ body<=
      $sth = $dbh->prepare("DESCRIBE $table");
      $sth->execute;
      $body .= "<table cellpadding=3><tr bgcolor=<?emcolor?>>";
-     $body .= "<td><b>Key?</b></td>";
-     $body .= "<td><b>Column</b></td>";
-     $body .= "<td><b>Type</b></td>";
-     $body .= "<td><b>Null</b></td>";
-     $body .= "<td><b>Default</b></td>";
-     $body .= "<td><b>Description</b></td>";
+     $body .= "<th>Key?</th>";
+     $body .= "<th>Column</th>";
+     $body .= "<th>Type</th>";
+     $body .= "<th>Null</th>";
+     $body .= "<th>Default</th>";
+     $body .= "<th>Description</th>";
      $body .= "</tr>\n";
      while (my $row = $sth->fetchrow_hashref)
      {
@@ -150,7 +150,7 @@ body<=
      $sth->execute;
      $body .= "<table cellpadding=3><tr bgcolor=<?emcolor?>>";
      foreach my $col (@{$sth->{'NAME'}}) {
-         $body .= "<td><b>$col</b></td>\n";
+         $body .= "<th>$col</th>\n";
      }
      $body .= "</tr>\n";
 
@@ -195,9 +195,9 @@ body<=
      $sth = $dbh->prepare("DESCRIBE $table");
      $sth->execute;
      $body .= "<p><table cellpadding=3><tr bgcolor=<?emcolor?>>";
-     $body .= "<td><b>Column</b></td>";
-     $body .= "<td><b>Type</b></td>";
-     $body .= "<td><b>Description</b></td>";
+     $body .= "<th>Column</th>";
+     $body .= "<th>Type</th>";
+     $body .= "<th>Description</th>";
      $body .= "</tr>\n";
      while (my $row = $sth->fetchrow_hashref)
      {
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/admin/spamreports.bml
--- a/htdocs/admin/spamreports.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/admin/spamreports.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -205,7 +205,7 @@ _c?>
             $body .= "No reports found.";
             return undef;
         }
-        $body .= '<table>';
+        $body .= '<table summary="">';
         my @srids;
         foreach (@$res) {
             my $u2 = LJ::load_userid($_->[1]);
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/admin/statushistory.bml
--- a/htdocs/admin/statushistory.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/admin/statushistory.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -95,7 +95,7 @@ _c?>
     foreach (qw(user admin shtype shdate notes)) {
         my $link = "statushistory?user=$FORM{'user'}&admin=$FORM{'admin'}&type=$FORM{'type'}&orderby=$_";
         $link .= $FORM{'orderby'} eq $_ && $FORM{'flow'} eq 'asc' ? "&flow=desc" : "&flow=asc";
-        $ret .= "<td><b><a href='$link'>$_</a></b></td>";
+        $ret .= "<th><a href='$link'>$_</a></th>";
     }
     $ret .= "</tr>\n";
 
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/admin/translate/diff.bml
--- a/htdocs/admin/translate/diff.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/admin/translate/diff.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -143,7 +143,7 @@ ins {
     $then = LJ::eall($then);
     $then =~ s/\n( *)/"<br \/>" . "&nbsp;"x length($1)/eg;
     
-    $ret .= "<p><table width='100%' border='1'><tr valign='top'><td width='50%'><b>Before:</b><br>$was</td>";
+    $ret .= "<p><table summary='' width='100%' border='1'><tr valign='top'><td width='50%'><b>Before:</b><br>$was</td>";
     $ret .= "<td width='50%'><b>After:</b><br>$then</td></tr></table>";
 
     unlink($was_file, $then_file);
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/admin/translate/editpage.bml
--- a/htdocs/admin/translate/editpage.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/admin/translate/editpage.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -114,7 +114,7 @@
                                  );
 
          # top bar
-         $ret .= "<table bgcolor='#c0c0c0' width='100%'><tr><td><b>Code:</b> ";
+         $ret .= "<table summary='' bgcolor='#c0c0c0' width='100%'><tr><td><b>Code:</b> ";
          if ($dmid != 1) {
              my $d = LJ::Lang::get_dom_id($dmid);
              $ret .= "[$d->{'uniq'}] ";
@@ -208,7 +208,7 @@
      if ($ict) {
          $ret .= LJ::html_hidden("ict", $ict);
          my $disabled = $can_edit ? "" : "disabled='disabled'";
-         $ret .= "<table width='100%' bgcolor='#e0e0e0'><tr><td align='center'><input type='submit' $disabled value='Save' /></td></tr></table>";
+         $ret .= "<table summary='' width='100%' bgcolor='#e0e0e0'><tr><td align='center'><input type='submit' $disabled value='Save' /></td></tr></table>";
      } else {
          $ret .= "No items to show.  (since been deleted, perhaps?)";
      }
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/admin/translate/help-severity.bml
--- a/htdocs/admin/translate/help-severity.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/admin/translate/help-severity.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -1,6 +1,7 @@
 <h1>Description of severity levels:</h1>
 
 <table cellpadding='3'>
+<tr valign='top'><th>Severity</th><th>Description</th></tr>
 <tr valign='top'><td><b>0</b></td><td>Translate is up-to-date</td></tr>
 <tr valign='top'><td><b>1</b></td><td>Parent language has changed a little.  Your translation might need updating.</td></tr>
 <tr valign='top'><td><b>2</b></td><td>Parent language has changed.  Your translation probably needs updating.</td></tr>
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/admin/translate/index.bml
--- a/htdocs/admin/translate/index.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/admin/translate/index.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -52,9 +52,9 @@ body<=
     $ret .= "<p><table border='1' cellspacing='1' cellpadding='3'><tr>";
     foreach (@cols) {
         if ($sortcol eq $_->[0]) {
-            $ret .= "<td><b>$_->[1]</b></td>";
+            $ret .= "<th>$_->[1]</th>";
         } else {
-            $ret .= "<td><b><a href=\"./?s=$_->[0]\">$_->[1]</a></b></td>";
+            $ret .= "<th><a href=\"./?s=$_->[0]\">$_->[1]</a></th>";
         }
         if ($_->[0] eq $sortcol && $_->[3]) { $sorter = $_->[3]; }
     }
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/admin/translate/searchform.bml
--- a/htdocs/admin/translate/searchform.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/admin/translate/searchform.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -63,7 +63,7 @@ _code?>
 <form target='res' action='search' method='get'>
 <input type='hidden' name='lang' value='$l->{lncode}'>
 <input type='hidden' name='search' value='flg'>
-<p><table><tr><td>Prf:</td>
+<p><table summary=""><tr><td>Prf:</td>
 <td><input type='radio' name='searchflagproofed' value='whatev'>Both</td>
 <td><input type='radio' name='searchflagproofed' value='yes'>Yes</td>
 <td><input type='radio' name='searchflagproofed' value='no'>No</td></tr>
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/allpics.bml
--- a/htdocs/allpics.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/allpics.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -190,7 +190,7 @@ _c?>
             $body .= $keyword_sort ? "$ML{'.sort.keyword'}" : '<a href = "' . $u->allpics_base . '?keywordSort=1">' . "$ML{'.sort.keyword'}</a>";
             $body .= "</p>\n";
             
-            $body .= " p?><table class='allpics'>";
+            $body .= " p?><table summary='' class='allpics'>";
         }
         
         ### Keywords
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/community/join.bml
--- a/htdocs/community/join.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/community/join.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -175,7 +175,7 @@ body<=
 
         $ret .= "<form method='post' action='join?comm=$commuser'>";
         $ret .= LJ::form_auth();
-        $ret .= "<table cellpadding='0' cellspacing='1' border='0'><tr>";
+        $ret .= "<table summary='' cellpadding='0' cellspacing='1' border='0'><tr>";
         $ret .= "<td><input type='checkbox' name='addfriend' checked='checked'></td><td>";
         $ret .= $remote->watches( $cu ) ?
                 BML::ml( '.label.addtofriends2.modify', { comm => $cu->ljuser_display } ) :
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/community/moderate.bml
--- a/htdocs/community/moderate.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/community/moderate.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -322,9 +322,14 @@ body<=
         unless (@entries) {
             $ret .= "<i>$ML{'.browse.empty'}</i>";
         } else {
-            $ret .= "<table cellpadding='5'><tr><td><b>$ML{'.brlist.time'}</b></td>" .
-                "<td><b>$ML{'.brlist.poster'}</b></td><td><b>$ML{'.brlist.subject'}</b></td>" .
-                "<td><b>$ML{'.brlist.actions'}</b></td></tr>";
+            $ret .= qq{
+            <table cellpadding='5'>
+                <tr>
+                    <th>$ML{'.brlist.time'}</th>                <th>$ML{'.brlist.poster'}</th>
+                    <th>$ML{'.brlist.subject'}</th>
+                    <th>$ML{'.brlist.actions'}</th>
+                </tr>
+            };
 
             my %users;
             LJ::load_userids_multiple([ map { $_->{'posterid'}, \$users{$_->{'posterid'}} } @entries ]);
@@ -415,7 +420,7 @@ body<=
         $ret .= "</p>";
 
         $ret .= "<p>";
-        $ret .= "<table><tr valign='middle'>";
+        $ret .= "<table summary=''><tr valign='middle'>";
 
         my $kw = $props->{picture_keyword};
         my $icon = LJ::Userpic->new_from_keyword( $up, $kw );
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/community/search.bml
--- a/htdocs/community/search.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/community/search.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -55,7 +55,7 @@ _code?>
 
 <form action="/directory">
 
-<table cellpadding='4' cellspacing='0' border='0'>
+<table summary='' cellpadding='4' cellspacing='0' border='0'>
 
 <!--- location --->
 <?crit
@@ -118,7 +118,7 @@ name=><?_ml .label.displayoptions _ml?>
 name=><?_ml .label.displayoptions _ml?>
 form<=
 
-<table>
+<table summary=''>
 <tr>
 <td align='right'>
 <?_ml .label.outputformat _ml?>
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/community/settings.bml
--- a/htdocs/community/settings.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/community/settings.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -260,7 +260,7 @@ body<=
         LJ::set_active_crumb('createcommunity');
           $ret .= "<?h2 $ML{'.label.commheader'} h2?>" .
               ($mode eq 'modify' ? "<?p $ML{'.label.commchange'} p?>" : "<?p " . BML::ml('.label.commcreate2', {'aopts' => "href='$LJ::SITEROOT/create'"}) . " p?>");
-          $ret .= "<?standout <table width='350' cellpadding='7'><tr valign='top'><td><b>$ML{'.label.maintainer'}</b></td>";
+          $ret .= "<?standout <table summary='' width='350' cellpadding='7'><tr valign='top'><td><b>$ML{'.label.maintainer'}</b></td>";
           $ret .= "<td><?ljuser $remote->{'user'} ljuser?><br />" . BML::ml('.label.maintainer.login2', {'aopts' => "href='$LJ::SITEROOT/login?ret=1'"}) . "</td></tr>";
           $ret .= "<tr valign='top'><td><b>$ML{'.label.community'}</b></td>";
           $ret .= "<td>$ML{'.label.username'}<br /><input name='cuser' maxlength='25' value='$cname' /><br />";
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/community/transfer.bml
--- a/htdocs/community/transfer.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/community/transfer.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -66,7 +66,7 @@ _c?>
     $body .= "<?p $ML{'.body'} p?>";
     $body .= "<form method='post' action='/community/transfer'>";
     $body .= LJ::form_auth();
-    $body .= "<table><tr><td>$ML{'.account'}</td>";
+    $body .= "<table summary=''><tr><td>$ML{'.account'}</td>";
     $body .= "<td>" . LJ::html_text({ name => 'comm', id => 'comm', value => $POST{comm} }) . "</td></tr>\n";
     $body .= "<tr><td></td><td><?inerr $errors{invalidform} inerr?></td></tr>" if $errors{invalidform};
     $body .= "<tr><td></td><td><?inerr $errors{username} inerr?></td></tr>" if $errors{username};
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/customize/advanced/layerbrowse.bml
--- a/htdocs/customize/advanced/layerbrowse.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/customize/advanced/layerbrowse.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -177,7 +177,7 @@ _c?>
     # layerinfo
     if (my $info = $s2info->{'info'}) {
         $body .= "<?h1 $ML{'.layerinfo.header'} h1?>";
-        $body .= "<table id='table_layerbrowse_layerinfo' class='table_layerbrowse' style='margin-bottom: 10px' border='1' cellpadding='2'>";
+        $body .= "<table summary='' id='table_layerbrowse_layerinfo' class='table_layerbrowse' style='margin-bottom: 10px' border='1' cellpadding='2'>";
         foreach my $k (sort keys %$info) {
             my ($ek, $ev) = map { LJ::ehtml($_) } ($k, $info->{$k});
             $title = $ev if $k eq "name";
@@ -224,7 +224,7 @@ _c?>
     # sets
     if (my $set = $s2info->{'set'}) {
         $body .= "<?h1 $ML{'.propertiesset.header'} h1?>";
-        $body .= "<table id='table_layerbrowse_properties' class='table_layerbrowse' style='margin-bottom: 10px' border='1' cellpadding='2' valign='top'>";
+        $body .= "<table summary='' id='table_layerbrowse_properties' class='table_layerbrowse' style='margin-bottom: 10px' border='1' cellpadding='2' valign='top'>";
         foreach my $k (sort keys %$set) {
             my $v = $set->{$k};
 
@@ -239,7 +239,7 @@ _c?>
     my $gb = $s2info->{'global'};
     if (ref $gb eq "HASH" && %$gb) {
         $body .= "<?h1 $ML{'.globalfunctions.header'} h1?>";
-        $body .= "<table id='table_layerbrowse_global' class='table_layerbrowse' style='margin-bottom: 10px' border='1' cellpadding='2' valign='top'>";
+        $body .= "<table summary='' id='table_layerbrowse_global' class='table_layerbrowse' style='margin-bottom: 10px' border='1' cellpadding='2' valign='top'>";
         foreach my $fname (sort keys %$gb) {
             my $rt = $gb->{$fname}->{'returntype'};
             if (defined $class->{$rt}) {
@@ -262,7 +262,7 @@ _c?>
     {
         # class index
         $body .= "<?h1 $ML{'.classes.header'} h1?>";
-        $body .= "<table id='table_layerbrowse_classes' class='table_layerbrowse' style='margin-bottom: 10px'><tr valign='top' align='left'>";
+        $body .= "<table summary='' id='table_layerbrowse_classes' class='table_layerbrowse' style='margin-bottom: 10px'><tr valign='top' align='left'>";
         $body .= "<td width='50%'>$ML{'.classes.sort.alphabetical'}";
         $body .= "<ul>";
         foreach my $cname (sort { lc($a) cmp lc($b) } keys %$class) {
@@ -317,7 +317,7 @@ _c?>
             };
             $add->($add, $cname);
 
-            $body .= "<table id='table_layerbrowse_members' class='table_layerbrowse' style='margin-bottom: 10px' border='1' cellpadding='2' valign='top'><?h2 $ML{'.members.header'} h2?>" if %var;
+            $body .= "<table summary='' id='table_layerbrowse_members' class='table_layerbrowse' style='margin-bottom: 10px' border='1' cellpadding='2' valign='top'><?h2 $ML{'.members.header'} h2?>" if %var;
             foreach (sort keys %var) {
                 my $type = $var{$_}->{'type'};
                 $type =~ s/(\w+)/defined $class->{$1} ? "[class[$1]]" : $1/eg;
@@ -334,7 +334,7 @@ _c?>
             }
             $body .= "</table>" if %var;
             
-            $body .= "<table id='table_layerbrowse_methods' class='table_layerbrowse' style='margin-bottom: 10px' border='1' cellpadding='2' valign='top'><?h2 $ML{'.methods.header'} h2?>" if %func;
+            $body .= "<table summary='' id='table_layerbrowse_methods' class='table_layerbrowse' style='margin-bottom: 10px' border='1' cellpadding='2' valign='top'><?h2 $ML{'.methods.header'} h2?>" if %func;
             foreach (sort keys %func) {
                 my $rt = $func{$_}->{'returntype'};
                 if (defined $class->{$rt}) {
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/customize/advanced/layers.bml
--- a/htdocs/customize/advanced/layers.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/customize/advanced/layers.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -195,7 +195,7 @@ _c?>
     $body .= "<?h1 $ML{'.yourlayers.header'} h1?>\n";
     if (%$ulay) {
         $body .= "<table id='table_yourlayers' style='margin-bottom: 10px' cellpadding='3' border='1'>\n";
-        $body .= "<tr><td><b>$ML{'.yourlayers.table.layerid'}</b></td><td><b>$ML{'.yourlayers.table.type'}</b></td><td><b>$ML{'.yourlayers.table.name'}</b></td><td><b>$ML{'.yourlayers.table.actions'}</b></td></tr>\n";
+        $body .= "<tr><th>$ML{'.yourlayers.table.layerid'}</th><th>$ML{'.yourlayers.table.type'}</th><th>$ML{'.yourlayers.table.name'}</th><th>$ML{'.yourlayers.table.actions'}</th></tr>\n";
         my $lastbase = 0;
         foreach my $lid (sort { $ulay->{$a}->{'b2lid'} <=> $ulay->{$b}->{'b2lid'} || $a <=> $b } 
                          keys %$ulay) 
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/customize/advanced/styles.bml
--- a/htdocs/customize/advanced/styles.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/customize/advanced/styles.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -302,7 +302,7 @@ _c?>
         $body .= "<div><?h1 $ML{'.yourstyles.header'} h1?></div>\n";
 
         # show style listing
-        $body .= "<table style='margin-left: 40px'>\n";
+        $body .= "<table summary='' style='margin-left: 40px'>\n";
         if (%$ustyle) {
             my $journalbase = $u->journal_base;
             foreach my $styleid (sort { $ustyle->{$a} cmp $ustyle->{$b} || $a <=> $b} keys %$ustyle) {
@@ -340,7 +340,7 @@ _c?>
     # note: this little bit of code appears whether there is an id passed or not.
     #       the textbox just has a different purpose depending on the context.
     $body .= "<?h1 " . ($id ? $ML{'.styleoptions.header'} : $ML{'.createstyle.header'}) . " h1?>\n";
-    $body .= "<table style='margin-bottom: 10px'>\n";
+    $body .= "<table summary='' style='margin-bottom: 10px'>\n";
     $body .= "<tr><td>$ML{'.createstyle.label.name'} </td><td>";
     $body .= LJ::html_text({ 'name' => 'stylename', 'size' => '30', 'maxlength' => '255', 
                              'value' => defined $POST{'stylename'} ? $POST{'stylename'} : $style->{'name'} });
@@ -434,7 +434,7 @@ _c?>
     ### core version
 
     $body .= "<?h1 $ML{'.stylelayers.header'} h1?>\n";
-    $body .= "<table>\n";
+    $body .= "<table summary=''>\n";
     $body .= "<tr><td>$ML{'.stylelayers.label.coreversion'} </td><td>";
     my $coresel = $layerselect->('core', 0);
     $body .= $coresel->[0];
@@ -445,7 +445,7 @@ _c?>
 
     ### i18nc / layout
 
-    $body .= "<table style='margin: 10px 0 0 40px'>\n";
+    $body .= "<table summary='' style='margin: 10px 0 0 40px'>\n";
 
     # i18nc
     $body .= "<tr><td>$ML{'.stylelayers.label.corelanguage'} </td><td>";
@@ -468,7 +468,7 @@ _c?>
     ### theme / i18n / user
 
     # theme
-    $body .= "<table style='margin: 10px 0 0 80px'>\n";
+    $body .= "<table summary='' style='margin: 10px 0 0 80px'>\n";
     $body .= "<tr><td>$ML{'.stylelayers.label.language'} </td><td>";
     $body .= $layerselect->('i18n', $layout)->[0];
     $body .= $layerother->('i18n') . "</td></tr>\n";
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/didyouknow/index.bml
--- a/htdocs/didyouknow/index.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/didyouknow/index.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -70,7 +70,7 @@ _c?>
     my $dumpsec = sub {
         my ($head, $para, $content) = @_;
         return unless $$content;
-        $body .= "<?h1 $head h1?><?p $para p?><table cellpadding='4'>$$content</table>\n";
+        $body .= "<?h1 $head h1?><?p $para p?><table summary='' cellpadding='4'>$$content</table>\n";
     };
 
     $dumpsec->("$ML{'.available.title'}", "$ML{'.available.subtitle'}", \$ap_list);
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/directory.bml
--- a/htdocs/directory.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/directory.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -151,7 +151,7 @@ body<=
             <div id="CountryBrowse">
             <?h1 $ML{'.browse.country.title'} h1?>
             <?p $ML{'.browse.country.desc'} p?>
-            <table style='margin-left: 20px' cellpadding='5'>
+            <table summary='' style='margin-left: 20px' cellpadding='5'>
             <tr valign='top'>
             <td align='left'>
             <ul>
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/directorysearch.bml
--- a/htdocs/directorysearch.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/directorysearch.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -63,7 +63,7 @@ _code?>
 
 <form style='margin-top: 1.5em' action='/directory' method='get'>
 
-<table cellpadding='4' cellspacing='0' border='0'>
+<table summary='' cellpadding='4' cellspacing='0' border='0'>
 
 <!--- location --->
 <?crit
@@ -169,7 +169,7 @@ name=><?_ml .display_results _ml?>
 name=><?_ml .display_results _ml?>
 form<=
 
-<table>
+<table summary=''>
 <tr>
 <td align='right'>
 <?_ml .display_by _ml?>
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/editjournal.bml
--- a/htdocs/editjournal.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/editjournal.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -61,7 +61,7 @@ body<=
 
         my %res = %$ref;
 
-        $ret .= "<table style='width: 100%;'><tr><td>";
+        $ret .= "<table summary='' style='width: 100%;'><tr><td>";
         my %props = ();
         for (my $i=1; $i<=$res{'prop_count'}; $i++) {
             $props{$res{"prop_${i}_itemid"}}->{$res{"prop_${i}_name"}} = $res{"prop_${i}_value"};
@@ -72,7 +72,7 @@ body<=
             my $itemid = $res{"events_${i}_itemid"};
             my $ditemid = $itemid * 256 + $res{"events_${i}_anum"};
 
-            $ret .= "<?hr?><table><tr valign='top'><td align='middle'>";
+            $ret .= "<?hr?><table summary=''><tr valign='top'><td align='middle'>";
             $ret .= "<form method='post' action='editjournal$getextra'>\n";
             $ret .= LJ::html_hidden('itemid',$ditemid,'mode',"edit");
             $ret .= LJ::html_submit( "itemid-$ditemid", $ML{'.edit.this.entry'} );
@@ -298,7 +298,7 @@ body<=
                 }
 
                 my $result = "<?h1 $ML{'.success.head'} h1?>";
-                $result .= "<table border='0' width='100%'><tr valign='top'><td>";
+                $result .= "<table summary='' border='0' width='100%'><tr valign='top'><td>";
 
                 my $message;
 
@@ -386,7 +386,7 @@ body<=
 
             # start edit form
             my $ret; my $js;
-            $ret .= "<table><tr><td>";
+            $ret .= "<table summary=''><tr><td>";
             $ret .= "<div style='width: 100%; float: left;'><form method='post' action='editjournal$getextra' id='updateForm' name='updateForm'>";
             $ret .= LJ::form_auth();
             $ret .= LJ::html_hidden('itemid', $ditemid,'mode','edit','edited',1) . "\n";
@@ -530,7 +530,7 @@ body<=
 
         # no authentication needs to be done on this page, it's just a form anyway
 
-        $ret .= "<table style='width: 100%;'><tr><td>";
+        $ret .= "<table summary='' style='width: 100%;'><tr><td>";
 
         # user switcher
         $ret .= "<form action='editjournal' method='get'>\n";
@@ -545,7 +545,7 @@ body<=
         # edit form
         $ret .= "<form action='editjournal$getextra' method='post'>\n";
         $ret .= LJ::html_hidden("mode","edit");
-        $ret .= "<?standout <table>\n";
+        $ret .= "<?standout <table summary=''>\n";
 
         # view type
         $ret .= "<tr valign=\"top\"><td>$ML{'.viewwhat'}</td>\n<td>\n";
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/editprivacy.bml
--- a/htdocs/editprivacy.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/editprivacy.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -96,7 +96,7 @@ body<=
 
         $ret .= "<form method='post' action='./editprivacy'>";
         $ret .= "<?h1 $ML{'.timeframe'} h1?>";
-        $ret .= "<table><tr><td>\n";
+        $ret .= "<table summary=''><tr><td>\n";
         $ret .= LJ::html_check({ 'type' => 'radio', 'name' => 'time',
                                  'value' => 'all', 'id' => 'time_all',
                                  'checked' => ($POST{time} eq 'time_all') })
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/edittags.bml
--- a/htdocs/edittags.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/edittags.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -101,7 +101,7 @@ body<=
 
     $ret .= "<script type='text/javascript'> var cur_taglist = '$logtagstr'; </script>";
 
-    $ret .= '<table class="edittbl" cellpadding="0" cellspacing="0" width="50%">';
+    $ret .= '<table summary="" class="edittbl" cellpadding="0" cellspacing="0" width="50%">';
     $ret .= "<tr><td class='l'>$ML{'.subject'}</td><td>$subj</td></tr>" if $subj;
 
     $ret .= '<form method="POST" action="/edittags" id="edit_tagform">';
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/export.bml
--- a/htdocs/export.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/export.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -47,7 +47,7 @@ body<=
     $ret .= <<'HTMLBLOCK';
 
 <?standout
-<table>
+<table summary="">
 <tr valign='top'><td><?_ml .label.what _ml?></td>
 <td>
     <select name="what" id="what">
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/feeds/index.bml
--- a/htdocs/feeds/index.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/feeds/index.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -228,8 +228,8 @@ body<=
     if (@pop) {
         $ret .= "<?h1 $ML{'.add.pop.title'} h1?><?p $ML{'.add.pop.text'} p?>";
         $ret .= "<p><table cellpadding='3' style='margin-bottom: 10px; width: 80%;'>";
-        $ret .= "<tr><td><b>$ML{'.table.account'}</b></td><td><b>$ML{'.table.feed'}</b></td><td></td>";
-        $ret .= "<td align='right'><b>$ML{'.table.watchers'}</b></td></tr>";
+        $ret .= "<tr><th>$ML{'.table.account'}</th><th>$ML{'.table.feed'}</th><td></td>";
+        $ret .= "<th align='right'>$ML{'.table.watchers'}</th></tr>";
         foreach (@pop) {
             my ($user, $url, $count) = @$_;
             $ret .= "<tr>";
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/imguploadrte.bml
--- a/htdocs/imguploadrte.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/imguploadrte.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -69,10 +69,10 @@ _c?>
     #insert HTML for an image tag, given an image URL and assorted metadata (alt text, dimensions, etc)
     $ret .= qq{
                 <div id="divInfo">
-                        <table cellspacing="1" cellpadding="1" border="0" width="99%" height="99%">
+                        <table summary='' cellspacing="1" cellpadding="1" border="0" width="99%" height="99%">
                         <tr>
                         <td>
-                            <table cellspacing="0" cellpadding="0" width="99%" border="0">
+                            <table summary='' cellspacing="0" cellpadding="0" width="99%" border="0">
                             <tr>
                             <td width="100%"><span fckLang="DlgImgURL">URL</span></td>
                             <td id="tdBrowse" style="DISPLAY: none" nowrap rowspan="2">&nbsp; <input id="btnBrowse" onclick="BrowseServer();" type="button" value="Browse Server" fckLang="DlgBtnBrowseServer"></td></tr>
@@ -86,11 +86,11 @@ _c?>
                        </td></tr>
                        <tr height="100%">
                        <td valign="top">
-                       <table cellspacing="0" cellpadding="0" width="99%" border="0" height="99%">
+                       <table summary='' cellspacing="0" cellpadding="0" width="99%" border="0" height="99%">
                        <tr>
                        <td valign="top">
                        <br />
-                       <table cellspacing="0" cellpadding="0" border="0">
+                       <table summary='' cellspacing="0" cellpadding="0" border="0">
                        <tr>
                        <td nowrap><span fckLang="DlgImgWidth">Width</span>&nbsp;</td>
                        <td>
@@ -104,7 +104,7 @@ _c?>
                        <td><input type="text" size="3" id="txtHeight" onkeyup="OnSizeChanged('Height',this.value);"></td></tr>
                        </table>
                        <br />
-                       <table cellspacing="0" cellpadding="0" border="0">
+                       <table summary='' cellspacing="0" cellpadding="0" border="0">
                        <tr>
                        <td nowrap><span fckLang="DlgImgBorder">Border</span>&nbsp;</td>
                        <td><input type="text" size="2" value="" id="txtBorder" onkeyup="UpdatePreview();"></td></tr>
@@ -132,7 +132,7 @@ _c?>
                        </table></td>
                        <td>&nbsp;&nbsp;&nbsp;</td>
                        <td width="100%" valign="top">
-                       <table cellpadding="0" cellspacing="0" width="100%" style="TABLE-LAYOUT: fixed">
+                       <table summary='' cellpadding="0" cellspacing="0" width="100%" style="TABLE-LAYOUT: fixed">
                        <tr>
                        <td><span fckLang="DlgImgPreview">Preview</span></td></tr>
                        <tr>
@@ -150,7 +150,7 @@ _c?>
         $ret .= qq{
                 <script>InObFCK.setupIframeHandlers();</script>
                 <div id="divLink" style="DISPLAY: none">
-                <table cellspacing="1" cellpadding="1" border="0" width="100%">
+                <table summary='' cellspacing="1" cellpadding="1" border="0" width="100%">
                 <tr>
                 <td>
                 <div>
@@ -165,7 +165,7 @@ _c?>
                 </table>
                 </div>
                 <div id="divAdvanced" style="DISPLAY: none">
-                <table cellspacing="0" cellpadding="0" width="100%" align="center" border="0">
+                <table summary='' cellspacing="0" cellpadding="0" width="100%" align="center" border="0">
                 <tr>
                 <td valign="top" width="50%">
                 <span fckLang="DlgGenId">Id</span><br />
@@ -173,7 +173,7 @@ _c?>
                 </td>
                 <td width="1">&nbsp;&nbsp;</td>
                 <td valign="top">
-                <table cellspacing="0" cellpadding="0" width="100%" align="center" border="0">
+                <table summary='' cellspacing="0" cellpadding="0" width="100%" align="center" border="0">
                 <tr>
                 <td width="60%">
                 <span fckLang="DlgGenLangDir">Language Direction</span><br />
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/inbox/compose.bml
--- a/htdocs/inbox/compose.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/inbox/compose.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -209,7 +209,7 @@ body<=
 
     # Inbox Nav
     $body .= qq{
-        <table class='inbox-compose'><tr><td style="padding-right: 12px">};
+        <table summary='' class='inbox-compose'><tr><td style="padding-right: 12px">};
     $body .= LJ::Widget::InboxFolderNav->render();
     $body .= qq{
         </td>
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/inbox/index.bml
--- a/htdocs/inbox/index.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/inbox/index.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -141,7 +141,7 @@ body<=
 
     # Inbox Nav
     $body .= qq{
-        <table id="table_inbox" style="width: 100%"><tr><td id="table_inbox_folders" valign="top" style="padding-right: 12px">};
+        <table summary='' id="table_inbox" style="width: 100%"><tr><td id="table_inbox_folders" valign="top" style="padding-right: 12px">};
     $body .= LJ::Widget::InboxFolderNav->render( 'page' => 1, 'view' => $view );
 
     $body .= qq{
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/interests.bml
--- a/htdocs/interests.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/interests.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -70,7 +70,7 @@ body<=
         unless ($GET{'mode'} eq 'text') {
             $ret .= LJ::tag_cloud(\%interests);
         } else {
-            $ret .= "<p><table><tr><td><b>$ML{'.interest'}</b></td><td><b>$ML{'.count'}</b></td></tr>";
+            $ret .= "<p><table><tr><th>$ML{'.interest'}</th><th>$ML{'.count'}</th></tr>";
             foreach my $i (sort { $b->{value} <=> $a->{value} } values %interests) {
                 $ret .= "<tr><td><a href='$i->{url}'>$i->{eint}</a></td><td>$i->{value}</td></tr>";
             }
@@ -197,7 +197,7 @@ body<=
 
         $ret .= "<?h1 $ML{'.findsim_do.similar.head'} h1?><?p " .BML::ml(".findsim_do.similar.text", {'user' => LJ::ljuser($u)}) ." p?>";
 
-        $ret .= "<p><table cellpadding='3'><tr valign='bottom'><td><b>#</b></td><td width='250'><b>$ML{'User'}</b></td><td><b>$ML{'.findsim_do.magic'}</b></td></tr>";
+        $ret .= "<p><table cellpadding='3'><tr valign='bottom'><th>#</th><th width='250'>$ML{'.findsim_do.user'}</th><td><b>$ML{'.findsim_do.magic'}</b></td></tr>";
         my $count;
         foreach my $uid (@matches)
         {
@@ -265,7 +265,7 @@ body<=
         }
 
         $ret .= " p?><div style='margin-left: 40px; margin-top: 20px;'>";
-        $ret .= "<table cellpadding='0' cellspacing='0' border='0' width='100%'>";
+        $ret .= "<table summary='' cellpadding='0' cellspacing='0' border='0' width='100%'>";
         my @fromintsorted = sort keys %fromint;
         my $cols = 3;
         my $rows = int((scalar(@fromintsorted) + $cols - 1) / $cols);
@@ -405,7 +405,7 @@ body<=
             $ret .= "<?p " . BML::ml( '.error.longinterest', { sitename => $LJ::SITENAMESHORT, old_int => $e_int_long, new_int => $e_int, maxlen => LJ::CMAX_SITEKEYWORD } ) . " p?>";
         }
 
-        $ret .= "<table>";
+        $ret .= "<table summary=''>";
         $ret .= "<tr valign='middle'><td class='findandmodify'>$ML{'.interested.in'}</td>";
         $ret .= "<td class='findandmodify'><form method='get' action='interests'>";
         $ret .= LJ::html_text({name => 'int', size => 20, value => $interest || $e_int}) . "&nbsp;";
@@ -529,7 +529,7 @@ body<=
 
     my $ret = "";
     $ret .= "<?p $ML{'.interests.text'} p?>";
-    $ret .= "<table cellspacing='5' style='margin-top: 10px; margin-left: 30px; margin-bottom: 10px;'>";
+    $ret .= "<table summary='' cellspacing='5' style='margin-top: 10px; margin-left: 30px; margin-bottom: 10px;'>";
 
     if ( LJ::is_enabled('interests-popular') ) {
         $ret .= "<tr valign='top'><td colspan='2'>";
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/interests.bml.text
--- a/htdocs/interests.bml.text	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/interests.bml.text	Wed Nov 17 22:56:06 2010 +0800
@@ -77,6 +77,8 @@ When you're done, click "Save Changes".
 .findsim_do.similar.head=Similar Users
 
 .findsim_do.similar.text=The following are the most related users to [[user]]
+
+.findsim_do.user=People
 
 .finished.about=When you're done, press the "Save Changes" button below:
 
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/js/colorpicker.js
--- a/htdocs/js/colorpicker.js	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/js/colorpicker.js	Wed Nov 17 22:56:06 2010 +0800
@@ -376,13 +376,13 @@ function _createInterface(p) {
             'button { width: 5em; margin: 5px;}\n'+
             'img { border: 1px solid #000000; padding: 0; margin: 0; }\n'+
             '</style>');
-    d.write('<table cellspacing="5" cellpadding="0" border="0">\n');
+    d.write('<table summary="" cellspacing="5" cellpadding="0" border="0">\n');
     d.write('<tr><td><img src="' + colpic_imgprefix + '/colorpicker/spectrum.png" '+
             'ismap width="512" height="256" id="spectrum"></td>\n');
     d.write('<td><img src="/palimg/colorpicker/longgrad.gif" '+
             'ismap width="25" height="256" id="brightness"></td></tr></table>\n');
     d.write('<form action="about:blank" method="GET" onsubmit="return false;">\n');
-    d.write('<center><table cellspacing="5" cellpadding="0" border="0" width="95%">\n');
+    d.write('<center><table summary="" cellspacing="5" cellpadding="0" border="0" width="95%">\n');
     d.write('<tr><td rowspan="3"><div id="preview" style="background-color: '+curclr+'; '+
             'border: 1px solid #000000; width: 50px; height: 50px; margin-left: 25%;">&nbsp;</div></td>\n');
     _writeControlRow(d,'Hue','fh');
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/js/poll.js
--- a/htdocs/js/poll.js	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/js/poll.js	Wed Nov 17 22:56:06 2010 +0800
@@ -44,7 +44,7 @@ Poll.prototype.outputHTML = function () 
             html += '<input maxlength="' + this.qa[i].maxlength + '" ';
             html += 'size="' + this.qa[i].size + '" type="text">';
         } else if (this.qa[i].atype == "scale") {
-            html += '<table><tbody><tr align="center" valign="top">'
+            html += '<table summary=""><tbody><tr align="center" valign="top">'
             var from = Number(this.qa[i].from);
             var to = Number(this.qa[i].to);
             var by = Number(this.qa[i].by);
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/js/richtext.js
--- a/htdocs/js/richtext.js	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/js/richtext.js	Wed Nov 17 22:56:06 2010 +0800
@@ -27,7 +27,7 @@ function writeRTE(rte, postvar, html, wi
         document.writeln('<style type="text/css">');
         document.writeln('.btnImage {cursor: pointer; cursor: hand;}');
         document.writeln('</style>');
-        document.writeln('<table cellpadding="1" cellspacing="0" border="0">');
+        document.writeln('<table summary="" cellpadding="1" cellspacing="0" border="0">');
         document.writeln('      <tr>');
         document.writeln('              <td><img class="btnImage" src="/img/rte/post_button_bold.gif" width="25" height="24" alt="Bold" title="Bold" onClick="FormatText(\'' + rte + '\', \'bold\', \'\')"></td>');
         document.writeln('              <td><img class="btnImage" src="/img/rte/post_button_italic.gif" width="25" height="24" alt="Italic" title="Italic" onClick="FormatText(\'' + rte + '\', \'italic\')"></td>');
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/js/userpicselect.js
--- a/htdocs/js/userpicselect.js	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/js/userpicselect.js	Wed Nov 17 22:56:06 2010 +0800
@@ -427,7 +427,7 @@ UserpicSelect.dynamic = "\
 
 UserpicSelect.userpics = "\
 [# if(pics && pics.ids) { #] \
-     <table class='ups_table' cellpadding='0' cellspacing='0' id='ups_userpics_t'> [# \
+     <table summary='' class='ups_table' cellpadding='0' cellspacing='0' id='ups_userpics_t'> [# \
        var rownum = 0; \
        for (var i=0; i<pics.ids.length; i++) { \
           var picid = pics.ids[i]; \
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/login.bml
--- a/htdocs/login.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/login.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -112,7 +112,7 @@ _c?>
             return BML::redirect($url);
         }
 
-        $body .= "<table cellpadding='0' cellspacing='0'><tr><td style='padding-right:20px; vertical-align: top'>";
+        $body .= "<table summary='' cellpadding='0' cellspacing='0'><tr><td style='padding-right:20px; vertical-align: top'>";
 
         if ($remote) {
             my $base = $remote->journal_base;
@@ -153,7 +153,7 @@ _c?>
             $body .= "<form action='login$getextra' method='post' id='login'>\n";
             $body .= LJ::form_auth();
             $body .= "<?h2 $ML{'.login.changelog'} h2?>";
-            $body .= "<table cellpadding='3' class='solid-neutral' style='width: 300px; border: 1px solid #aaa'>\n";
+            $body .= "<table summary='' cellpadding='3' class='solid-neutral' style='width: 300px; border: 1px solid #aaa'>\n";
             $body .= "<tr><td colspan='2' style='white-space: nowrap;'>";
             # expiration
             my $curexp = $cursess ? $cursess->exptype : "short";
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/manage/circle/add.bml
--- a/htdocs/manage/circle/add.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/manage/circle/add.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -287,7 +287,7 @@ _c?>
     my $color_switch_checked = $custom_colors ?  "checked=\"checked\"" : "";
 
     ## let them pick the colors
-    my $color_text = "<?p <table><tr><td valign=\"top\"><i>$ML{'.optional'}:</i> ".
+    my $color_text = "<?p <table summary=''><tr><td valign=\"top\"><i>$ML{'.optional'}:</i> ".
              "<input type=\"checkbox\" id=\"color_switch\" name=\"color_switch\" onClick=\"color_display(this);\" $color_switch_checked> </td><td><label for=\"color_switch\">" .
              BML::ml( '.colors.text', { user => $username } ) .
              "</label><br /><span style=\"font-size: 7pt;\">($ML{'.colors.disclaimer'})</span></td></tr></table> p?>";
@@ -304,7 +304,7 @@ _c?>
     $body .= "</script>\n";
 
     $body .= "<noscript>\n";
-    $body .= "<?p <table><tr><td valign='top'><i>$ML{'.optional'}:</i> </td><td>" .
+    $body .= "<?p <table summary=''><tr><td valign='top'><i>$ML{'.optional'}:</i> </td><td>" .
              BML::ml( '.colors.text', { user => $username } ) .
              "<br /><span style='font-size: 7pt;'>($ML{'.colors.disclaimer'})</span></td></tr></table> p?>";
     $body .= "</noscript>\n";
@@ -322,7 +322,7 @@ _c?>
     $ret .= "<?p <noscript>\n<p><span style='font-size: 7pt;'>$ML{'.colors.help.text2'}</span></p>\n</noscript> p?>";
 
     # foreground
-    $ret .= "<table width=\"650\" cellpadding='4'><tr><td><b>$ML{'.colors.fg'}</b></td><td>";
+    $ret .= "<table summary='' width=\"650\" cellpadding='4'><tr><td><b>$ML{'.colors.fg'}</b></td><td>";
 
     # custom color selection
 
@@ -358,7 +358,7 @@ _c?>
 
     ### color swatch
     my $col = 0;
-    $ret .= "<td><table border='0' cellspacing='0' cellpadding='0'>";
+    $ret .= "<td><table summary='' border='0' cellspacing='0' cellpadding='0'>";
 
     # with javascript
     foreach (@color) {
@@ -446,7 +446,7 @@ _c?>
 
     ### color swatch
     my $col = 0;
-    $ret .= "<td><table border='0' cellspacing='0' cellpadding='0'>";
+    $ret .= "<td><table summary='' border='0' cellspacing='0' cellpadding='0'>";
     # with javascript
     foreach (@color) {
         if ($col==0) { $ret .= "<tr>\n"; }
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/manage/circle/edit.bml
--- a/htdocs/manage/circle/edit.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/manage/circle/edit.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -534,7 +534,7 @@ d.open();
 d.open();
 d.write("<html><head><title>$ejs{'mrcolor'}</title></head><body bgcolor='#ffffff' text='#000000'>");
 d.write("<b><font face='Trebuchet MS, Arial, Helvetica' size='4' color='#000066'><i>$ejs{'viewer'}</i></font></b><hr />");
-d.write("<br /><table width='350' align='center' cellpadding='5'><tr valign='middle'>");
+d.write("<br /><table summary='' width='350' align='center' cellpadding='5'><tr valign='middle'>");
 d.write("<td width='80%'><b><font face='Arial, Helvetica' size='2'>");
 d.write("$ejs{'textcolor'}&nbsp; <font color='#000066'>" + fg_color_text);
 d.write("</font></b><br /></td><td width='20%' bgcolor=" + fg_color + ">&nbsp;</td>");
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/manage/circle/editfilters.bml
--- a/htdocs/manage/circle/editfilters.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/manage/circle/editfilters.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -472,7 +472,7 @@ _c?>
 // --></SCRIPT>
 END_JS
 
-    $body .= "<table class='editfilters'><tr style='vertical-align: bottom;'>";
+    $body .= "<table summary='' class='editfilters'><tr style='vertical-align: bottom;'>";
     $body .= "<td nowrap='1' colspan='2'><strong>$ML{'.yourgroups'}</strong></td>";
     $body .= "<td nowrap='1' colspan='2'><strong>$ML{'.ingroup.not'}</strong></td>";
     $body .= "<td nowrap='1'><strong>$ML{'.ingroup'}</strong></td></tr>";
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/manage/circle/index.bml
--- a/htdocs/manage/circle/index.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/manage/circle/index.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -35,7 +35,7 @@ _code?>
 _code?>
 
 <?p <?_ml .about _ml?> p?>
-<table>
+<table summary=''>
 <tr>
   <td class='name'><a href="<?siteroot?>/manage/circle/invite"><?_ml .invite.title _ml?></a></td>
   <td><?_code BML::ml('.invite.about2', { sitename => $LJ::SITENAMESHORT }); _code?></td>
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/manage/domain.bml
--- a/htdocs/manage/domain.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/manage/domain.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -129,7 +129,7 @@ body<=
         $ret .= "<?h2 $ML{'.domainalias.head'} h2?><?p $ML{'.domainalias.about'} p?>\n";
 
         $ret .= "<div style='margin: 20px 0 20px 30px'>";
-        $ret .= "<table><tr><td align='left'><b>$ML{'.domainalias.domainname'}</b></td><td>";
+        $ret .= "<table summary=''><tr><td align='left'><b>$ML{'.domainalias.domainname'}</b></td><td>";
         $ret .= LJ::html_text({ 'name' => 'journaldomain', 'size' => '30',
                                 'maxlength' => '80', 'value' => $u->{'journaldomain'},
                                 'disabled' => ! $has_cap });
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/manage/emailpost.bml
--- a/htdocs/manage/emailpost.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/manage/emailpost.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -397,10 +397,10 @@ body<=
     $ret .= "<form method='post' action='emailpost'>\n";
     $ret .= LJ::form_auth();
     $ret .= "<div style='margin-left:40px;'>";
-    $ret .= "<table border=\"0\"><tr><td>$ML{'.addresses.table.address'}</td>";
-    $ret .= "<td>$ML{'setting.emailposting.option.senderrors'}</td>";
+    $ret .= "<table border=\"0\"><th>$ML{'.addresses.table.address'}</th>";
+    $ret .= "<th>$ML{'setting.emailposting.option.senderrors'}</th>";
     $ret .= "<td>&nbsp;</td>";
-    $ret .= "<td>$ML{'setting.emailposting.option.helpmessage'}</td></tr>";
+    $ret .= "<th>$ML{'setting.emailposting.option.helpmessage'}</th></tr>";
     for(0..2) { # Limited to 3 addresses.
         $ret .= '<tr><td>';
         my $selected = 0;
@@ -428,7 +428,7 @@ body<=
     $ret .= "<?h1 $ML{'.settings.header'} h1?>";
     $ret .= "<?p " . BML::ml('.settings.text', {'aopts' => "href='$LJ::SITEROOT/manage/emailpost?mode=help'"}) . " p?>";
     $ret .= "<div style='margin-left:40px;'>";
-    $ret .= "<table cellspacing='0' class='settings'>";
+    $ret .= "<table summary='' cellspacing='0' class='settings'>";
 
     $ret .= "<tr><td colspan='2'><?h2 $ML{'.settings.entry.header'} h2?></td></tr>";
     $ret .= "<tr><td>$ML{'.settings.entry.userpic'}</td><td>";
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/manage/externalaccount.bml
--- a/htdocs/manage/externalaccount.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/manage/externalaccount.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -70,7 +70,7 @@ use strict;
       <div id='settings_page'>
         <form action="/manage/externalaccount" method="post" id="createacct">
           <div id='xpost_add'>
-            <table class='setting_table'>
+            <table summary='' class='setting_table'>
     };
 
     if ($editpage) {
@@ -113,7 +113,7 @@ use strict;
             onchange => "updateSiteSelection()",
             selected => $POST{site} || '2'
                                           }, @sitevalues);
-        $body .= "<table id='customsite'>";
+        $body .= "<table summary='' id='customsite'>";
     
         $body .= "<tr><td class='setting_label'><label for='servicetype'>" . $ML{'.setting.xpost.option.servicetype'} . "</label></td>";
         $body .= "<td>" . LJ::html_select({
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/manage/index.bml
--- a/htdocs/manage/index.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/manage/index.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -98,7 +98,7 @@ body<=
     my $is_identity_no_email = $u->is_identity && !$u->email_raw;
 
     $ret .= "<?h1 $ML{'.youraccount.header'} h1?><div style='margin-left: 2em;'>";
-    $ret .= "<table width='50%'>";
+    $ret .= "<table summary='' width='50%'>";
     $ret .= "<tr><th align='left'>$ML{'.youraccount.user'}</th><td>" . LJ::ljuser($u) . "</td></tr>";
     $ret .= "<tr><th align='left'>$ML{'.youraccount.name'}</th><td>" . LJ::ehtml($u->{'name'}) . "</td></tr>";
     if ($is_identity_no_email) {
@@ -113,7 +113,7 @@ body<=
 }
 _code?>
 
-<table style="width: 100%; clear: both">
+<table summary='' style="width: 100%; clear: both">
 <tr valign="top"><td style="width: 50%">
 <?block
 header=><?_ml .settings_pref _ml?>
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/manage/moodthemes.bml
--- a/htdocs/manage/moodthemes.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/manage/moodthemes.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -202,7 +202,7 @@ body<=
             # Figure out if this picture is really just inherited from a parent
             my $inherited = ( $pic{moodid} != $mood->{id} ) ? 1 : 0;
 
-            $ret .= "<table>";
+            $ret .= "<table summary=''>";
             if ( $mood->{parent} ) {
                 $ret .= "<tr><td colspan='2'><label for='$mood->{id}inherit'>";
                 $ret .= BML::ml( '.mood.label.inherit',
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/manage/profile/index.bml
--- a/htdocs/manage/profile/index.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/manage/profile/index.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -118,7 +118,7 @@ body<=
         $ret .= "<form method='post' action='./$getextra'>\n";
         $ret .= LJ::form_auth();
 
-        $ret .= "<table width='100%' style='margin: 1em 0;'>\n";
+        $ret .= "<table summary='' width='100%' style='margin: 1em 0;'>\n";
 
         # personal information
         $ret .= qq {
@@ -430,7 +430,7 @@ body<=
 
             $u->{'gizmo'} = $u->gizmo_account();
 
-            $ret .= "<tr><td colspan=3><table>";
+            $ret .= "<tr><td colspan=3><table summary=''>";
             my $oddeven = 0;
 
             foreach my $p (
@@ -508,7 +508,7 @@ body<=
                                      style => "width: 90%" } );
 
         ## CIRCLE
-        $ret .= "<table width='100%' style='margin: 1em 0;'>";
+        $ret .= "<table summary='' width='100%' style='margin: 1em 0;'>";
         $ret .= "<tr class='section_head'><td width='75%' colspan=3>";
         $ret .= "<a name='display'></a>";
         $ret .= $u->is_community ? $ML{'.section.display.members'} : $ML{'.section.display.circle'};
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/manage/settings/index.bml
--- a/htdocs/manage/settings/index.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/manage/settings/index.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -523,7 +523,7 @@ body<=
 
     } else {
         my $setting_ct = 1;
-        $ret .= "<table cellpadding='0' cellspacing='0'>";
+        $ret .= "<table summary='' cellpadding='0' cellspacing='0'>";
         foreach my $setting (@settings) {
             my $errors = $setting->errors_from_save($save_rv);
             my $args = $setting->args_from_save($save_rv);
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/manage/tags.bml
--- a/htdocs/manage/tags.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/manage/tags.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -211,7 +211,7 @@ HEAD
     $ret .= qq{
     <form method="POST" name="tagform" id="tagform">
     $formauth
-    <table id="table_managetags" cellpadding="0" cellspacing="0" align="center">
+    <table summary='' id="table_managetags" cellpadding="0" cellspacing="0" align="center">
     <tr><td valign="top">
         <fieldset>
             <legend>};
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/moodlist.bml
--- a/htdocs/moodlist.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/moodlist.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -130,7 +130,7 @@ body<=
 
         $ret .= "<form action='moodlist' method='get'>\n";
         $ret .= LJ::html_hidden("page", $items{page});
-        $ret .= "<table width='100%' border='0' cellspacing='0' cellpadding='0'><tr><td></td>";
+        $ret .= "<table summary='' width='100%' border='0' cellspacing='0' cellpadding='0'><tr><td></td>";
 
         # Create the table columns for each mood
         my $mname;
@@ -188,7 +188,7 @@ body<=
             my ( $themeid ) = @_;
             my $tobj = DW::Mood->new( $themeid );
 
-            $ret .= "<br /><table width='100%'><tr><td colspan='5' align='center'>";
+            $ret .= "<br /><table summary='' width='100%'><tr><td colspan='5' align='center'>";
 
             if ($GET{'ownerid'}) {
                 $ret .= "<div style='margin-bottom:15px; font-weight:bold'>";
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/openid/approve.bml
--- a/htdocs/openid/approve.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/openid/approve.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -89,7 +89,7 @@ _c?>
 
     $body .= "<div style='overflow: auto; background: #DDD; word-wrap: break-word; color: black; border: 2px solid black; padding: 0.5em; font-size: 13pt'><tt>$dis_site</tt></div>";
     $body .= "<?p " . $ML{'.form.passid'} . " p?>";
-    $body .= "<table align='center'><tr><td><input type='submit' name='yes:once' value='".$ML{'.form.button.yes_this_time'}."' /> ";
+    $body .= "<table summary='' align='center'><tr><td><input type='submit' name='yes:once' value='".$ML{'.form.button.yes_this_time'}."' /> ";
     $body .= "<input type='submit' name='yes:always' value='".$ML{'.form.button.yes_always'}."' /> ";
     $body .= "<input type='submit' name='no' value='".$ML{'.form.button.no'}."' /></td></tr></table>";
     $body .= "</form>";
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/poll/create.bml
--- a/htdocs/poll/create.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/poll/create.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -504,7 +504,7 @@ _c?>
 
             $ret .= "<?h2 " . BML::ml('.questionnum', { 'num' => ($q + 1) }) . " - $TYPENAME{$elem->{'type'}} h2?>\n";
 
-            $ret .= "<table border='0' cellspacing='0' cellpadding='0' width='90%'>\n";
+            $ret .= "<table summary='' border='0' cellspacing='0' cellpadding='0' width='90%'>\n";
             $ret .= "<tr><td align='left' width='15%'>\n";
 
             # can't move the first element up
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/preview/entry.bml
--- a/htdocs/preview/entry.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/preview/entry.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -123,7 +123,7 @@ _c?>
         $ret .= "<p>";
 
         if ($u) {
-            $ret .= "<table><tr valign='middle'>";
+            $ret .= "<table summary=''><tr valign='middle'>";
 
             my $pic = LJ::Userpic->new_from_keyword( $up, $req{prop_picture_keyword} );
             my $imgtag = $pic ? $pic->imgtag : undef;
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/profile.bml
--- a/htdocs/profile.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/profile.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -1,1025 +1,1025 @@
-<?page
-
-#
-# profile.bml
-#
-# Displays information about an account in a viewer friendly manner.
-#
-# Authors:
-#      Mark Smith <mark@dreamwidth.org>
-#      Janine Smith <janine@netrophic.com>
-#
-# Copyright (c) 2009 by Dreamwidth Studios, LLC.
-#
-# This program is free software; you may redistribute it and/or modify it under
-# the same terms as Perl itself. For a copy of the license, please reference
-# 'perldoc perlartistic' or 'perldoc perlgpl'.
-#
-
-body<=
-<?_code
-{
-    use strict;
-    use vars qw/ %GET %POST $title $windowtitle $headextra @errors @warnings /;
-
-    LJ::need_res( "js/profile.js" );
-    LJ::need_res( { priority => $LJ::OLD_RES_PRIORITY }, "stc/profile.css" );
-
-    BML::set_language_scope( '/profile.bml' );
-
-    $title = $ML{'.title'};
-
-    # Used in comparisons so much that useful to have
-    # as a number
-    my $is_full = $GET{mode} eq 'full' ? 1 : 0;
-
-################################################################################
-##### INITIALIZE PROFILE PAGE
-
-    my $r = BML::get_request();
-    $r->notes->{codepath} = "bml.profile";
-
-    # if new-style URLs, get the GET{user} arg from the request notes,
-    # which was set by LiveJournal.pm
-    unless ( $GET{user} ) {
-        $GET{user} = $r->notes->{_journal};
-    }
-
-    my $u;
-    my $username = LJ::canonical_username( $GET{user} );
-    my $userid = $GET{userid}+0;
-    my $remote = LJ::get_remote();
-    if ( $userid ) {
-        $u = LJ::load_userid( $userid );
-
-        # only users with finduser can view profiles by userid (excluding identity accounts)
-        unless ( ( $remote && $remote->has_priv( 'finduser' ) ) || ( $GET{t} eq "I" && $u && $u->is_identity ) ) {
-            $title = $ML{'Error'};
-            return $ML{'.label.reqfinduser'};
-        }
-    } elsif ( $username ) {
-        $u = LJ::load_user( $username );
-
-        # redirect to standard identity url
-        if ( $u && $u->is_identity ) {
-            return BML::redirect("$LJ::SITEROOT/profile?userid=$u->{'userid'}&t=I");
-        }
-    } elsif ( $remote ) {
-        $u = $remote;
-        $userid = $remote->id;
-    } else {
-        $title = $ML{'Error'};
-        return "<?needlogin?>";
-    }
-
-    # error if no user
-    unless ( $u ) {
-        $title = $ML{'Error'};
-        return BML::ml( '.nonexist.body', { user => $username } );
-    }
-
-    LJ::set_active_journal( $u );
-
-    # error if account is purged
-    if ( $u->is_expunged ) {
-        BML::set_status(410); # 410 Gone
-        $title = $ML{'error.purged.title'};
-        return "<?h1 $ML{'error.purged.name'} h1?><?p $ML{'error.purged.text'} p?>";
-    }
-
-    # redirect non-identity profiles to their subdomain urls
-    my $domain = BML::get_client_header( "Host" );
-    if ( $LJ::ONLY_USER_VHOSTS && !$u->is_identity ) {
-        my $url = $u->journal_base . "/profile";
-        $url .= '?mode=full' if $is_full;
-
-        my $good_domain = $url;
-        $good_domain =~ s!^http://!!;
-        $good_domain =~ s!/.*!!;
-        if ( $domain ne $good_domain ) {
-            return BML::redirect( $url );
-        }
-    }
-
-    # block robots?
-    if ( !$u->is_visible || $u->should_block_robots ) {
-        $headextra .= LJ::robot_meta_tags();
-    }
-
-    # renamed?
-    my $renamed_u = $u->get_renamed_user;
-    unless ( $u->equals( $renamed_u ) ) {
-        my $extra = $is_full ? "&mode=full" : '';
-        return BML::redirect( "$LJ::SITEROOT/profile?user=" . $renamed_u->user . "$extra" );
-    }
-
-    # figure out the page title
-    if ( $u->is_community ) {
-        $title = $ML{'.title.communityprofile'};
-    } elsif ( $u->is_personal ) {
-        $title = $ML{'.title.userprofile'};
-    } elsif ( $u->is_syndicated ) {
-        $title = $ML{'.title.syndicatedprofile'};
-    } elsif ( $u->is_identity ) {
-        $title = $ML{'.title.openidprofile'};
-    }
-
-    $windowtitle = $u->display_name . " - $title";
-
-    # can't view suspended/deleted profiles unless you have viewall
-    my $viewall = 0;
-    ( $viewall ) = $remote->view_priv_check( $u, $GET{viewall}, 'profile' )
-        if $remote;
-    unless ( $viewall ) {
-        if ( $u->is_suspended ) {
-            BML::set_status(403); # 403 Forbidden
-            $title = $ML{'error.suspended.title'};
-            return "<?h1 $ML{'error.suspended.name'} h1?><?p " . BML::ml( 'error.suspended.text', { user => $u->ljuser_display, sitename => $LJ::SITENAME } ) . " p?>";
-        }
-        if ( $u->is_deleted ) {
-            BML::set_status(404); # 404 Not Found
-            $title = $ML{'error.deleted.title'};
-            my $del_body = "<?p ";
-
-            if ( $u->prop( 'delete_reason' ) ) {
-                $del_body .= BML::ml( 'error.deleted.text.withreason', { user => $u->display_name, reason => $u->prop( 'delete_reason' ) } );
-            } else {
-                $del_body .= BML::ml( 'error.deleted.text', { user => $u->display_name } );
-            }
-
-            $del_body .= "&nbsp;" . BML::ml( 'error.deleted.leavecomm', { aopts => "href='$LJ::SITEROOT/community/leave?comm=" . $u->user . "'" } ) if $u->is_community && $u->trusts_or_has_member( $remote );
-
-            $del_body .= " p?>";
-            $del_body .= BML::ml( '.error.deleted.purgenotification', { aopts => "href='$LJ::SITEROOT/manage/subscriptions/user?journal=" . $u->user . "'" } )
-                unless LJ::User->is_protected_username( $u->user );
-            return $del_body;
-        }
-    }
-
-    # helper variables for later
-    my $user = $u->user;
-    my $profile = $u->profile_page( $remote, viewall => $viewall );
-
-################################################################################
-##### HELPER SUBS
-
-    my $arrowimg = sub {
-        my $section = $_[0];
-        return LJ::img( 'arrow-down', '', { id => "${section}_arrow",
-                                            align => "absmiddle" } );
-    };
-
-    # given a single item (scalar or hashref), linkify it appropriately
-    # and return it as a string
-    my $linkify = sub {
-        my $l = $_[0];
-        return $l unless ref $l eq 'HASH';
-
-        if ( $l->{text} ) {
-            return qq(<a href="$l->{url}">$l->{text}</a>) if $l->{url};
-            return $l->{text};
-        } elsif ( $l->{email} ) {
-            # the ehtml call here shouldn't be necessary, but just in case they slip in an email
-            # that contains Bad Stuff, escape it
-            return LJ::CleanHTML::mangle_email_address( LJ::ehtml( $l->{email} ) );
-        } else {
-            return "(Error in Linkification)";
-        }
-    };
-
-    # given multiple items in an arrayref, linkify each one appropriately
-    # and return them as one string with the join_string separating each item
-    #
-    # the join_string must be the first item in the arrayref
-    my $linkify_multiple = sub {
-        my $r = $_[0];
-        return $r unless ref $r eq 'ARRAY';
-
-        if ( @$r > 1 ) {
-            my $join_string = shift @$r;
-            my @links;
-            foreach my $l ( @$r ) {
-                next unless $l;
-                push @links, $linkify->( $l );
-            }
-
-            return join( $join_string, @links );
-        }
-
-        return $linkify->( $r->[0] );
-    };
-
-    # Returns true if the given user should be struck out on the profile
-    my $strikeuser = sub {
-        return $_[0]->is_inactive;
-    };
-
-    # Returns true if the user is not struck out or if mode is full
-    my $includeuser = sub {
-        # I've repeated the logic in strikeuser so we don't do another function call
-        return $_[0]->is_individual && ( $is_full || ! $_[0]->is_inactive );
-        # added is_individual because all previous tests were checking for both
-    };
-
-    my $listusers = sub {
-        my $users = $_[0];
-        my @linked_users;
-
-        foreach my $user ( @$users ) {
-            my $linked_u = $linkify->( { url => $user->profile_url, text => $user->display_name } );
-            $linked_u = "<strike>$linked_u</strike>" if $strikeuser->( $user );
-            #if user is logged in and not looking at own profile, use appropiate highlighting for users they have in common
-            if ( $remote && ( $remote != $u ) ) {
-                $linked_u = "<em>$linked_u</em>" if $remote->watches( $user );
-                $linked_u = "<strong>$linked_u</strong>"
-                    if ( $user->is_community ? $remote->member_of( $user ) : $remote->trusts( $user ) );
-            }
-
-            push @linked_users, $linked_u;
-        }
-
-        return join( ', ', @linked_users );
-    };
-
-    my $content_block = sub {
-        my %opts = @_;
-
-        my $collapsible = defined $opts{collapsible} ? $opts{collapsible} : 1;
-        my $header_image = $opts{header_image} ? "<img src='$opts{header_image}' alt='' /> " : '';
-        my $collapse_text = $collapsible ? qq(
-            <span class='expandcollapse on' id='$opts{section_name}_header'>
-                ) . LJ::img( 'arrow-down', '', { id => "$opts{section_name}_arrow",
-                align => "absmiddle" } ) . qq(
-                $header_image <a name='$opts{section_link}'>$ML{$opts{section_name_ml}}</a>
-            </span>
-        ) : "$header_image$ML{$opts{section_name_ml}}";
-
-        my @links = map {
-                qq(<span class="section_link">[<a href="$_->{url}">$_->{text}</a>]</span>)
-            } @{ $opts{links} || [] };
-        my $links = join( ' ', @links );
-
-        return qq(
-            <div class='ljclear'></div>
-            <div class='section'>
-                $collapse_text
-                $links
-            </div>
-            <div class='section_body' id='$opts{section_name}_body'>
-                $opts{body}
-            </div>
-        );
-    };
-
-    my $content_inner_block = sub {
-        my %opts = @_;
-
-        my $hidden = $opts{hidable} && $profile->hide_list( $opts{section_name} );
-        return '' if $hidden && ( !$remote || !$remote->can_manage( $u ) );
-
-        my $section_name = ref $opts{section_name_ml} eq 'HASH' ? BML::ml( $opts{section_name_ml}->{ml}, $opts{section_name_ml}->{opts} ) : $ML{$opts{section_name_ml}};
-        my $section_hidden_text = $hidden ? " <em>$ML{'.label.hidden'}</em>" : '';
-        my $collapsible = defined $opts{collapsible} ? $opts{collapsible} : 1;
-        my ( $collapse_text, $body );
-        if ( $collapsible ) {
-            $collapse_text = qq(
-                <span class='expandcollapse on' id='$opts{section_name}_header'>
-                    ) . LJ::img( 'arrow-down', '', { id => "$opts{section_name}_arrow",
-                    align => "absmiddle" } ) . qq(
-                    <a name='$opts{section_link}'>$section_name$section_hidden_text</a>
-                </span>
-            );
-            $body = qq( <div class='inner_section_body' id='$opts{section_name}_body'>$opts{body}</div> );
-        } else {
-            $collapse_text = "<a name='$opts{section_link}'>$section_name</a>";
-            $body = $opts{body};
-        }
-
-        my @links = map {
-                qq(<span class="inner_section_header_link">[<a href="$_->{url}">$_->{text}</a>]</span>)
-            } @{ $opts{links} || [] };
-        my $links = join( ' ', @links );
-
-        return qq(
-            <p class='inner_section_header$opts{extra_classes}'$opts{extra_attrs}>
-                $collapse_text
-                $links
-            </p>
-            $body
-        );
-    };
-
-    my $mlsn = sub {
-        my ( $ml, $users ) = @_;
-        my $numusers = scalar @$users;
-        my $val = $numusers ?
-            { ml => "$ml.some", opts => { num => $numusers } } :
-            "$ml.none";
-        return $val;
-    };
-
-################################################################################
-##### USERNAME
-
-    # begin the page
-    my $ret = q{ <div id='profile_page'><div id='profile_top'> };
-
-    $ret .= q{ <div class='username'> } . $u->ljuser_display;
-    if ( $u->public_key ) {
-        $ret .= "<a href='$LJ::SITEROOT/pubkey?user=$user'>";
-        $ret .= LJ::img( 'key', '', { border => 0, title => $ML{'.pubkey.alt'},
-                          style => 'vertical-align: middle; border: 0;' } );
-        $ret .= "</a>\n";
-    }
-    $ret .= q{ </div> };
-
-################################################################################
-##### ACTION LINKS
-
-    $ret .= q{ <div class='actions'><ul> };
-
-    foreach my $link ( $profile->action_links ) {
-        my $width = $link->{width} ? "width=\"$link->{width}\"" : "";
-        my $height = $link->{height} ? "height=\"$link->{height}\"" : "";
-
-        if ( $link->{url} ) {
-            $ret .= qq(
-                <li class="$link->{class}" title="$link->{title}">
-                    <a href="$link->{url}">
-                        <img src="$link->{image}" $width $height alt="" />$link->{text}
-                    </a>
-                </li>
-            );
-        } else {
-            $ret .= qq(
-                <li class="$link->{class}" title="$link->{title}">
-                    <img src="$link->{image}" $width $height alt="" />$link->{text}
-                </li>
-            );
-        }
-    }
-
-    $ret .= q{ </ul></div> };
-
-################################################################################
-##### USERPIC
-
-    $ret .= "<div class='user_details'><div class='userpicdiv'>" .
-            $profile->userpic->{imgtag} .
-            "</div><div class='user_details_inner'>";
-
-################################################################################
-##### JOURNAL TITLES
-
-    my $title = $u->prop( "journaltitle" ) ?
-                    LJ::ehtml( $u->prop( "journaltitle" ) ) :
-                    BML::ml( '.details.title', { user => $u->display_username } );
-    my $subtitle;
-    $subtitle = LJ::ehtml( $u->prop( "journalsubtitle" ) )
-        if $u->prop( "journalsubtitle" );
-
-    $ret .= qq{
-        <div class="details_journal">
-            <p class="journal_title">$title</p>
-            <p class="journal_subtitle">$subtitle</p>
-        </div>
-    };
-
-################################################################################
-##### JOURNAL STATISTICS
-
-    $ret .= q{ <div class='details_stats'> };
-
-    # journal warnings
-    $ret .= "<span class='$_->{class}'>$_->{text}</span>" foreach $profile->warnings;
-
-    # account type
-    my $accttype = DW::Pay::get_account_type_name( $u );
-    if ( $accttype ) {
-        my $expiretime;
-        $expiretime = DW::Pay::get_account_expiration_time( $u )
-            if $remote && $remote->can_manage( $u );
-
-        $ret .= "<p>";
-        $ret .= $expiretime > 0 ? BML::ml( '.details.accounttype.expireson', { type => $accttype, date => DateTime->from_epoch( epoch => $expiretime )->date } ) : $accttype;
-        $ret .= "</p>";
-    }
-
-    # journal creation date, journal update time
-    unless ( $u->is_identity ) {
-        my $jcdate = BML::ml( '.details.createdon2', 
-            { createdate => LJ::mysql_time( $u->timecreate )  } );
-        $ret .= "<p>$jcdate (#" . $u->id . '), ' . $u->last_updated;
-        $ret .= "</p>"; 
-    }
-
-    # comment and support stats
-    my $csstats = join( ', ', ( $profile->comment_stats, $profile->support_stats ) );
-    $ret .= qq{<p>$csstats</p>};
-
-    # other statistics
-    $ret .= q{ <p> };
-    $ret .= join( ', ', ( $profile->entry_stats, $profile->tag_stats, $profile->memory_stats, $profile->userpic_stats ) );
-    $ret .= "</p>";
-
-    #extended profile link
-    $ret .= "<p>";
-    if ( $is_full ) {
-        $ret .= BML::ml( '.details.profile.default', { aopts => "href='" . $u->profile_url . "'" } );
-    } else {
-        $ret .= BML::ml( '.details.profile.full', { aopts => "href='" . $u->profile_url . "?mode=full'" } );
-    }
-    $ret .= q{ </p></div></div></div></div> };
-
-################################################################################
-##### BASIC INFORMATION
-
-    my $bibody = '';
-
-    if ( my @rows = $profile->basic_info_rows ) {
-        my @row_texts;
-        foreach my $row (@rows) {
-            my $row_header = shift @$row;
-            my $row_text = "$row_header</th><td>";
-            $row_text .= $linkify_multiple->( $row );
-            push @row_texts, $row_text;
-        }
-
-        $bibody .= q{ <div class="profile"><table><tr><th> };
-        $bibody .= join( '</td></tr><tr><th>', @row_texts );
-        $bibody .= q{ </td></tr></table></div> };
-    }
-
-    if ( my @contacts = $profile->contact_rows ) {
-        $bibody .= qq( <div class="contact"><p class="section_body_title">$ML{'.contact.header'}</p> );
-        $bibody .= join( '<br />', map { $linkify->( $_ ) } @contacts );
-        $bibody .= q{ </div> };
-    };
-
-    $bibody .= BML::ml( '.label.feedchange', { aopts => "href='$LJ::SITEROOT/support'" } ) if $u->is_syndicated;
-
-    if ( $bibody ) {
-        my $links;
-        $links = [ { url => "$LJ::SITEROOT/manage/profile/?authas=" . $u->user, text => $ML{'.section.edit'} } ]
-            if $remote && $remote->can_manage( $u );
-        $ret .= $content_block->(
-            section_name    => 'basics',
-            section_name_ml => '.basicinfo.header',
-            section_link    => 'basics',
-            body            => $bibody,
-            links           => $links,
-        );
-    }
-
-################################################################################
-##### PUBSUBHUBBUB INFORMATION FOR SYNDICATED ACCOUNTS
-
-    my $fredbody = '';
-
-    if ( $is_full && ( my @rows = $profile->hubbub_info_rows ) ) {
-        foreach my $row (@rows) {
-            my @data = (
-                id => $row->{id},
-                pings => $row->{timespinged},
-                huburl => LJ::ehtml( $row->{huburl} ),
-                topicurl => LJ::ehtml( $row->{topicurl} ),
-                lastseen => LJ::ago_text( $row->{lastseen} ),
-                goodfor => LJ::mysql_time( $row->{leasegoodto} ),
-            );
-
-            my @row_texts;
-            while ( @data && ( my ( $ml, $txt ) = splice( @data, 0, 2 ) ) ) {
-                push @row_texts, LJ::Lang::ml( '.label.syn.hubbub.' . $ml ) . '</th><td>' . $txt;
-            }
-
-            $fredbody .= q{ <div class="profile"><table><tr><th> };
-            $fredbody .= join( '</td></tr><tr><th>', @row_texts );
-            $fredbody .= q{ </td></tr></table></div> };
-        }
-    }
-
-    if ( $fredbody ) {
-        $ret .= $content_block->(
-            section_name    => 'hubbub',
-            section_name_ml => '.hubbub.header',
-            section_link    => 'hubbub',
-            body            => $fredbody,
-        );
-    }
-
-
-################################################################################
-##### BIO
-
-    my $biobody = '';
-
-    $biobody .= $profile->bio;
-
-    if ( $biobody ) {
-        my $links;
-        $links = [ { url => "$LJ::SITEROOT/manage/profile/?authas=" . $u->user . "#bio", text => $ML{'.section.edit'} } ]
-            if $remote && $remote->can_manage( $u );
-        $ret .= $content_block->(
-            section_name    => 'bio',
-            section_name_ml => $u->is_individual ? '.bio.header' : '.about.header',
-            section_link    => 'bio',
-            body            => "<div class='usercontent'>$biobody</div>",
-            links           => $links,
-        );
-    }
-
-################################################################################
-##### CONNECT
-
-    my $connectbody = '';
-
-    # interests
-    my @linked_ints;
-    my $intcount = 0;
-    foreach my $int ( $profile->interests ) {
-        push @linked_ints, $linkify->( $int );
-        $intcount++;
-    }
-    my $intlist = join(', ', @linked_ints);
-    if ( $intcount ) {
-        my $links = [];
-        if ( $remote ) {
-            push @$links, { url => "$LJ::SITEROOT/manage/profile/?authas=" . $u->user . "#interests", text => $ML{'.section.edit'} }
-                if $remote->can_manage( $u );
-
-            my $enmasse_link = "$LJ::SITEROOT/interests?mode=enmasse";
-            my $enmasse_text;
-            if ( $remote->equals( $u ) ) {
-                $enmasse_text .= $ML{'.label.interests.removesome2'};
-            } else {
-                $enmasse_link .= "&fromuser=$user";
-                $enmasse_text .= $ML{'.label.interests.modifyyours2'};
-            }
-
-            push @$links, { url => $enmasse_link, text => $enmasse_text };
-        }
-
-        $connectbody .= $content_inner_block->(
-            section_name_ml => { ml => '.label.interests', opts => { num => $intcount } },
-            section_link    => 'interests',
-            extra_classes   => " first",
-            body            => "<div class='inner_section_body'>$intlist</div>",
-            links           => $links,
-            collapsible     => 0,
-        );
-    }
-
-    # external services
-    my $imlist;
-    foreach my $service ( $profile->external_services ) {
-        my $title = $ML{$service->{title_ml}};
-        $imlist .= "<tr class='im_$service->{type}'>";
-        $imlist .= "<td class='im_icon'><img src='$LJ::IMGPREFIX/profile_icons/$service->{image}' alt=\"$title\" title=\"$title\" /></td>";
-        if ( $service->{status_image} ) {
-            my $status_title = $ML{$service->{status_title_ml}};
-            $imlist .= "<td>" . $linkify->( $service ) . "</td>";
-            $imlist .= "<td class='im_status'><img src='$service->{status_image}' alt=\"$status_title\" title=\"$status_title\" width='$service->{status_width}' height='$service->{status_height}' /></td>";
-        } else {
-            $imlist .= "<td colspan='2'>" . $linkify->( $service ) . "</td>";
-        }
-        $imlist .= "</tr>"; 
-    }
-    if ( $imlist ) {
-        my $new_im_margin;
-        $new_im_margin = " style='margin-top: 0;'" unless $intlist;
-        $connectbody .= qq{ <div class="external_services"$new_im_margin> };
-        my $links;
-        $links = [ { url => "$LJ::SITEROOT/manage/profile/?authas=" . $u->user . "#iminfo", text => $ML{'.section.edit'} } ]
-            if $remote && $remote->can_manage( $u );
-        $connectbody .= $content_inner_block->(
-            section_name_ml => '.im.header2',
-            section_link    => 'services',
-            extra_attrs     => $new_im_margin,
-            body            => "<table>$imlist</table>",
-            links           => $links,
-            collapsible     => 0,
-        );
-        $connectbody .= q{ </div> };
-    }
-
-    if ( $connectbody ) {
-        $ret .= $content_block->(
-            section_name    => 'connect',
-            section_name_ml => '.label.connect',
-            section_link    => 'connect',
-            body            => $connectbody,
-        );
-    }
-
-################################################################################
-##### MAINTAINERS/MODERATORS
-
-    my @maintainer_userids = $u->maintainer_userids;
-    my @moderator_userids = $u->moderator_userids;
-
-    if ( @maintainer_userids || @moderator_userids ) {
-        my $us = LJ::load_userids( @maintainer_userids, @moderator_userids );
-
-        my @maintlist = sort { $a->display_name cmp $b->display_name } map { $us->{$_} } @maintainer_userids;
-        my @modlist = sort { $a->display_name cmp $b->display_name } map { $us->{$_} } @moderator_userids;
-
-        my $maintbody;
-        if ( @maintlist ) {
-            $maintbody = $content_inner_block->(
-                section_name    => 'maints',
-                section_name_ml => { ml => '.label.maintainers', opts => { num => scalar @maintlist } },
-                section_link    => 'maintainers',
-                extra_classes   => ' first',
-                body            => $listusers->( \@maintlist ),
-            );
-        }
-
-        my $modbody;
-        if ( @modlist ) {
-            $modbody = $content_inner_block->(
-                section_name    => 'mods',
-                section_link    => 'moderators',
-                section_name_ml => { ml => '.label.moderators', opts => { num => scalar @modlist } },
-                body            => $listusers->( \@modlist ),
-            );
-        }
-
-        if ( $maintbody || $modbody ) {
-            my $links;
-            $links = [ { url => "$LJ::SITEROOT/community/members?authas=" . $u->user, text => $ML{'.section.edit'} } ]
-                if $remote && $remote->can_manage( $u );
-            $ret .= $content_block->(
-                section_name    => 'admins',
-                section_name_ml => '.admins.header',
-                section_link    => 'administrators',
-                links           => $links,
-                body            => "$maintbody$modbody",
-                collapsible     => 0,
-            );
-        }
-    }
-
-################################################################################
-##### WATCH/TRUST/MEMBER/POSTING LISTS
-
-    my ( @trusted_userids, @trusted_by_userids, @mutually_trusted_userids, @not_mutually_trusted_userids, @not_mutually_trusted_by_userids );
-    my ( @watched_userids, @watched_by_userids, @mutually_watched_userids, @not_mutually_watched_userids, @not_mutually_watched_by_userids );
-
-    # no mutual trust lists for identity accounts since they can't trust anyone
-    @trusted_by_userids = $u->trusted_by_userids if $u->is_identity;
-
-    if ( $u->show_mutualfriends ) { # only can return true for personal or identity accounts
-        if ( $u->is_personal ) {
-            @mutually_trusted_userids = $u->mutually_trusted_userids;
-            @not_mutually_trusted_userids = $profile->not_mutually_trusted_userids;
-            @not_mutually_trusted_by_userids = $profile->not_mutually_trusted_by_userids;
-        }
-        @mutually_watched_userids = $u->mutually_watched_userids;
-        @not_mutually_watched_userids = $profile->not_mutually_watched_userids;
-        @not_mutually_watched_by_userids = $profile->not_mutually_watched_by_userids;
-        @watched_userids = $u->watched_userids; # need this one to get watched communities and feeds
-    } else {
-        @trusted_userids = $u->trusted_userids if $u->is_personal;
-        @trusted_by_userids = $u->trusted_by_userids if $u->is_personal;
-        @watched_userids = $u->watched_userids if $u->is_individual;
-        @watched_by_userids = $u->watched_by_userids
-            # This is kind of a hack; we don't want to load these for communities with lots
-            # of subscribers because the profile page chokes and dies.  This won't load them
-            # if the option to hide subscribers is set and the person cannot manage the communities.
-            # It means the profile page is still broken to people who manage the community, though, but
-            # it doesn't break things for smaller communities by not loading them for the admins.
-            # FIXME: This overall situation of profile pages choking up for large amounts of subscribers or members
-            #   needs to be fixed in a more elegant and useful way.
-            unless $u->prop( 'opt_hidefriendofs' ) && ( !$remote || !$remote->can_manage( $u ) );
-    }
-
-    my ( @members_userids, @member_of_userids, @posting_access_to_userids, @posting_access_from_userids );
-    @members_userids = $u->member_userids if $u->is_community;
-    @member_of_userids = $u->member_of_userids if $u->is_personal;
-    @posting_access_to_userids = @{LJ::load_rel_target( $u, 'P' )} if $u->is_personal;
-    @posting_access_from_userids = @{LJ::load_rel_user( $u, 'P' )} if $u->is_community;
-
-    my $us = LJ::load_userids(
-        @trusted_userids, @trusted_by_userids,
-        @mutually_trusted_userids, @not_mutually_trusted_userids, @not_mutually_trusted_by_userids,
-        @watched_userids, @watched_by_userids,
-        @mutually_watched_userids, @not_mutually_watched_userids, @not_mutually_watched_by_userids,
-        @members_userids, @member_of_userids,
-        @posting_access_to_userids, @posting_access_from_userids,
-    );
-
-    # presort various userid arrays
-    @$_ = sort { $us->{$a}->display_name cmp $us->{$b}->display_name } @$_
-        foreach ( \@trusted_userids, \@watched_userids, \@trusted_by_userids, \@watched_by_userids,
-                  \@mutually_trusted_userids, \@mutually_watched_userids, \@mutually_watched_userids,
-                  \@not_mutually_watched_userids, \@not_mutually_trusted_by_userids,
-                  \@not_mutually_watched_by_userids, \@members_userids, \@member_of_userids,
-                  \@posting_access_to_userids, \@posting_access_from_userids );
-
-################################################################################
-##### PEOPLE LISTS
-
-    my ( $trusted_body, $trusted_by_body, $watched_body, $watched_by_body, $members_body, $posting_access_from_body );
-
-    if ( $u->is_identity ) {  # can't be mutual trust
-        my @trusted_by_list = grep { $includeuser->( $_ ) }
-            map { $us->{$_} } @trusted_by_userids;
-        $trusted_by_body = $content_inner_block->(
-            section_name    => 'trusted_by_people',
-            section_name_ml => $mlsn->( '.people.trusted_by', \@trusted_by_list ),
-            section_link    => 'trusted_by',
-            extra_classes   => ' first',
-            body            => $listusers->( \@trusted_by_list ),
-            hidable         => 1,
-        );
-    }
-
-    if ( $u->show_mutualfriends ) { # only can return true for personal or identity accounts
-        if ( $u->is_personal ) {
-            my @mutually_trusted_list = grep { $_->is_individual }
-                map { $us->{$_} } @mutually_trusted_userids;
-            $trusted_body .= $content_inner_block->(
-                section_name    => 'mutually_trusted_people',
-                section_name_ml => $mlsn->( '.people.mutually_trusted', \@mutually_trusted_list ),
-                section_link    => 'mutually_trusted',
-                extra_classes   => ' first',
-                body            => $listusers->( \@mutually_trusted_list ),
-            );
-
-            my @not_mutually_trusted_list = grep { $_->is_individual }
-                map { $us->{$_} } @not_mutually_trusted_userids;
-            $trusted_body .= $content_inner_block->(
-                section_name    => 'not_mutually_trusted_people',
-                section_name_ml => $mlsn->( '.people.not_mutually_trusted', \@not_mutually_trusted_list ),
-                section_link    => 'not_mutually_trusted',
-                body            => $listusers->( \@not_mutually_trusted_list ),
-            );
-
-            my @not_mutually_trusted_by_list = grep { $includeuser->( $_ ) }
-                map { $us->{$_} } @not_mutually_trusted_by_userids;
-            $trusted_by_body = $content_inner_block->(
-                section_name    => 'not_mutually_trusted_by_people',
-                section_name_ml => $mlsn->( '.people.not_mutually_trusted_by', \@not_mutually_trusted_by_list ),
-                section_link    => 'not_mutually_trusted_by',
-                body            => $listusers->( \@not_mutually_trusted_by_list ),
-                hidable         => 1,
-            );
-        }
-
-        my @mutually_watched_list = grep { $_->is_individual }
-            map { $us->{$_} } @mutually_watched_userids;
-        $watched_body .= $content_inner_block->(
-            section_name    => 'mutually_watched_people',
-            section_name_ml => $mlsn->( '.people.mutually_watched', \@mutually_watched_list ),
-            section_link    => 'mutually_watched',
-            body            => $listusers->( \@mutually_watched_list ),
-        );
-
-        my @not_mutually_watched_list = grep { $_->is_individual }
-            map { $us->{$_} } @not_mutually_watched_userids;
-        $watched_body .= $content_inner_block->(
-            section_name    => 'not_mutually_watched_people',
-            section_name_ml => $mlsn->( '.people.not_mutually_watched', \@not_mutually_watched_list ),
-            section_link    => 'not_mutually_watched',
-            body            => $listusers->( \@not_mutually_watched_list ),
-        );
-
-        my @not_mutually_watched_by_list = grep { $includeuser->( $_ ) }
-            map { $us->{$_} } @not_mutually_watched_by_userids;
-        $watched_by_body = $content_inner_block->(
-            section_name    => 'not_mutually_watched_by_people',
-            section_name_ml => $mlsn->( '.people.not_mutually_watched_by', \@not_mutually_watched_by_list ),
-            section_link    => 'not_mutually_watched_by',
-            body            => $listusers->( \@not_mutually_watched_by_list ),
-            hidable         => 1,
-        );
-    } else {  # show_mutualfriends is false
-        if ( $u->is_personal ) {
-            my @trusted_list = grep { $_->is_individual }
-                map { $us->{$_} } @trusted_userids;
-            $trusted_body = $content_inner_block->(
-                section_name    => 'trusted_people',
-                section_name_ml => $mlsn->( '.people.trusted', \@trusted_list ),
-                section_link    => 'trusted',
-                extra_classes   => ' first',
-                body            => $listusers->( \@trusted_list ),
-            );
-
-            my @trusted_by_list = grep { $includeuser->( $_ ) }
-                map { $us->{$_} } @trusted_by_userids;
-            $trusted_by_body = $content_inner_block->(
-                section_name    => 'trusted_by_people',
-                section_name_ml => $mlsn->( '.people.trusted_by', \@trusted_by_list ),
-                section_link    => 'trusted_by',
-                body            => $listusers->( \@trusted_by_list ),
-                hidable         => 1,
-            );
-        }
-
-        if ( $u->is_individual ) {
-            my @watched_list = grep { $_->is_individual }
-                map { $us->{$_} } @watched_userids;
-            $watched_body = $content_inner_block->(
-                section_name    => 'watched_people',
-                section_name_ml => $mlsn->( '.people.watched', \@watched_list ),
-                section_link    => 'watched_people',
-                body            => $listusers->( \@watched_list ),
-            );
-        }
-
-        if ( $u->is_community ) {
-            my @members_list = map { $us->{$_} } @members_userids;
-            $members_body = $content_inner_block->(
-                section_name    => 'members_people',
-                section_name_ml => $mlsn->( '.people.members', \@members_list ),
-                section_link    => 'members',
-                extra_classes   => ' first',
-                body            => $listusers->( \@members_list ),
-            );
-
-            my @posting_access_from_list = map { $us->{$_} } @posting_access_from_userids;
-            $posting_access_from_body = $content_inner_block->(
-                section_name    => 'posting_access_from_people',
-                section_name_ml => $mlsn->( '.people.posting_access_from', \@posting_access_from_list ),
-                section_link    => 'posting_access_from',
-                body            => $listusers->( \@posting_access_from_list ),
-                hidable         => 1,
-            );
-        }
-
-        my @watched_by_list = grep { $includeuser->( $_ ) }
-            map { $us->{$_} } @watched_by_userids;
-        $watched_by_body = $content_inner_block->(
-            section_name    => 'watched_by_people',
-            section_name_ml => $mlsn->( '.people.watched_by', \@watched_by_list ),
-            section_link    => 'watched_by',
-            body            => $listusers->( \@watched_by_list ),
-            hidable         => 1,
-        );
-    }
-
-    if ( $trusted_body || $trusted_by_body || $watched_body || $watched_by_body || $members_body || $posting_access_from_body ) {
-        my $links = [];
-        if ( $u->is_community ) {
-           push @$links, { url => "$LJ::SITEROOT/community/members?authas=" . $u->user, text => $ML{'.section.edit'} }
-                if $remote && $remote->can_manage( $u );
-           push @$links, { url => $u->journal_base . "/read", text => $ML{'.people.viewentries'} };
-        } else {
-            push @$links, { url => "$LJ::SITEROOT/manage/circle/edit", text => $ML{'.section.edit'} }
-                if $remote && $remote->can_manage( $u );
-            push @$links, { url => $u->journal_base . "/read?show=P", text => $ML{'.people.viewentries'} }
-                unless $u->is_syndicated;
-        }
-
-        $ret .= $content_block->(
-            section_name    => 'people',
-            section_name_ml => $u->is_community ? '.members.header' : '.people.header',
-            section_link    => 'people',
-            header_image    => $u->is_community ? '' : "$LJ::IMGPREFIX/silk/identity/user.png",
-            links           => $links,
-            body            => "$trusted_body$trusted_by_body$watched_body$members_body$watched_by_body$posting_access_from_body",
-            collapsible     => 0,
-        );
-    }
-
-################################################################################
-##### COMMUNITY LISTS
-
-    if ( $u->is_individual ) {
-        my ( $member_of_body, $posting_access_to_body, $watched_body );
-
-        if ( $u->is_personal ) {
-            my @member_of_list = map { $us->{$_} } @member_of_userids;
-            $member_of_body = $content_inner_block->(
-                section_name    => 'member_of_comms',
-                section_name_ml => $mlsn->( '.comms.member_of', \@member_of_list ),
-                section_link    => 'member_of',
-                extra_classes   => ' first',
-                body            => $listusers->( \@member_of_list ),
-                hidable         => 1,
-            );
-
-            my @posting_access_to_list = map { $us->{$_} } @posting_access_to_userids;
-            $posting_access_to_body = $content_inner_block->(
-                section_name    => 'posting_access_to_comms',
-                section_name_ml => $mlsn->( '.comms.posting_access_to', \@posting_access_to_list ),
-                section_link    => 'posting_access_to',
-                body            => $listusers->( \@posting_access_to_list ),
-                hidable         => 1,
-            );
-        }
-
-        my @watched_list = grep { $_->is_community }
-            map { $us->{$_} } @watched_userids;
-        $watched_body = $content_inner_block->(
-            section_name    => 'watched_comms',
-            section_name_ml => $mlsn->( '.comms.watched', \@watched_list ),
-            section_link    => 'watched_communities',
-            body            => $listusers->( \@watched_list ),
-        );
-
-        if ( $member_of_body || $posting_access_to_body || $watched_body ) {
-            my $links = [];
-            if ( $remote && $remote->can_manage( $u ) ) {
-                push @$links, { url => "$LJ::SITEROOT/manage/circle/edit", text => $ML{'.section.edit'} };
-            }
-            push @$links, { url => $u->journal_base . "/read?show=C", text => $ML{'.comms.viewentries'} };
-
-            $ret .= $content_block->(
-                section_name    => 'comms',
-                section_name_ml => '.comms.header',
-                section_link    => 'communities',
-                header_image    => "$LJ::IMGPREFIX/silk/identity/community.png",
-                links           => $links,
-                body            => "$member_of_body$watched_body$posting_access_to_body",
-                collapsible     => 0,
-            );
-        }
-    }
-
-################################################################################
-##### FEED LISTS
-
-    if ( $u->is_individual ) {
-        my ( $watched_body );
-
-        my @watched_list = grep { $_->is_syndicated }
-            map { $us->{$_} } @watched_userids;
-        $watched_body = $content_inner_block->(
-            section_name    => 'watched_feeds',
-            section_name_ml => $mlsn->( '.feeds.watched', \@watched_list ),
-            section_link    => 'watched_feeds',
-            extra_classes   => ' first',
-            body            => $listusers->( \@watched_list ),
-        );
-
-        if ( $watched_body ) {
-            my $links = [];
-            if ( $remote && $remote->can_manage( $u ) ) {
-                push @$links, { url => "$LJ::SITEROOT/manage/circle/edit", text => $ML{'.section.edit'} };
-            }
-            push @$links, { url => $u->journal_base . "/read?show=Y", text => $ML{'.feeds.viewentries'} };
-
-            $ret .= $content_block->(
-                section_name    => 'feeds',
-                section_name_ml => '.feeds.header',
-                section_link    => 'feeds',
-                header_image    => "$LJ::IMGPREFIX/silk/identity/feed.png",
-                links           => $links,
-                body            => "$watched_body",
-                collapsible     => 0,
-            );
-        }
-    }
-
-################################################################################
-##### LINKING MODULE
-
-    if ( $u->is_individual || $u->is_community ) {
-
-        my $local_link = "<user name=\"" . $u->display_name . "\">";
-        my $remote_link = $u->ljuser_display( { no_ljuser_class => 1 } );
-
-
-        my $link_body = "<div style='font-style:italic;'>" . BML::ml( '.linking.about' ) . "</div>";
-        $link_body .= BML::ml( '.linking.local', { sitename => $LJ::SITENAMESHORT }) . LJ::html_text({
-                             name      => 'local',
-                             id        => 'local',
-                             size      => 50,
-                             maxlength => 100,
-                             value     => $local_link,
-                             }) . "<br />";
-        $link_body .= "$ML{'.linking.anywhere'} " . LJ::html_text({
-                             name      => 'local',
-                             id        => 'local',
-                             size      => 50,
-                             maxlength => 550,
-                             value     => $remote_link,
-                             }) . "<br />";
-
-        $ret .=  $content_block->(
-            section_name   => 'linking',
-            section_name_ml => '.label.linking',
-            section_link    => 'linking',
-            body           => $link_body,
-            hidable        => 1,
-         );
-    }
-
-
-################################################################################
-##### END
-
-    $ret .= q{ <div class='ljclear'></div> };
-    $ret .= q{ </div> };
-
-    return BML::noparse($ret);
-}
-_code?>
-<=body
-title=><?_code return $title; _code?>
-windowtitle=><?_code return $windowtitle; _code?>
-head<=
-<?_code return $headextra; _code?>
-<=head
-page?>
+<?page
+
+#
+# profile.bml
+#
+# Displays information about an account in a viewer friendly manner.
+#
+# Authors:
+#      Mark Smith <mark@dreamwidth.org>
+#      Janine Smith <janine@netrophic.com>
+#
+# Copyright (c) 2009 by Dreamwidth Studios, LLC.
+#
+# This program is free software; you may redistribute it and/or modify it under
+# the same terms as Perl itself. For a copy of the license, please reference
+# 'perldoc perlartistic' or 'perldoc perlgpl'.
+#
+
+body<=
+<?_code
+{
+    use strict;
+    use vars qw/ %GET %POST $title $windowtitle $headextra @errors @warnings /;
+
+    LJ::need_res( "js/profile.js" );
+    LJ::need_res( { priority => $LJ::OLD_RES_PRIORITY }, "stc/profile.css" );
+
+    BML::set_language_scope( '/profile.bml' );
+
+    $title = $ML{'.title'};
+
+    # Used in comparisons so much that useful to have
+    # as a number
+    my $is_full = $GET{mode} eq 'full' ? 1 : 0;
+
+################################################################################
+##### INITIALIZE PROFILE PAGE
+
+    my $r = BML::get_request();
+    $r->notes->{codepath} = "bml.profile";
+
+    # if new-style URLs, get the GET{user} arg from the request notes,
+    # which was set by LiveJournal.pm
+    unless ( $GET{user} ) {
+        $GET{user} = $r->notes->{_journal};
+    }
+
+    my $u;
+    my $username = LJ::canonical_username( $GET{user} );
+    my $userid = $GET{userid}+0;
+    my $remote = LJ::get_remote();
+    if ( $userid ) {
+        $u = LJ::load_userid( $userid );
+
+        # only users with finduser can view profiles by userid (excluding identity accounts)
+        unless ( ( $remote && $remote->has_priv( 'finduser' ) ) || ( $GET{t} eq "I" && $u && $u->is_identity ) ) {
+            $title = $ML{'Error'};
+            return $ML{'.label.reqfinduser'};
+        }
+    } elsif ( $username ) {
+        $u = LJ::load_user( $username );
+
+        # redirect to standard identity url
+        if ( $u && $u->is_identity ) {
+            return BML::redirect("$LJ::SITEROOT/profile?userid=$u->{'userid'}&t=I");
+        }
+    } elsif ( $remote ) {
+        $u = $remote;
+        $userid = $remote->id;
+    } else {
+        $title = $ML{'Error'};
+        return "<?needlogin?>";
+    }
+
+    # error if no user
+    unless ( $u ) {
+        $title = $ML{'Error'};
+        return BML::ml( '.nonexist.body', { user => $username } );
+    }
+
+    LJ::set_active_journal( $u );
+
+    # error if account is purged
+    if ( $u->is_expunged ) {
+        BML::set_status(410); # 410 Gone
+        $title = $ML{'error.purged.title'};
+        return "<?h1 $ML{'error.purged.name'} h1?><?p $ML{'error.purged.text'} p?>";
+    }
+
+    # redirect non-identity profiles to their subdomain urls
+    my $domain = BML::get_client_header( "Host" );
+    if ( $LJ::ONLY_USER_VHOSTS && !$u->is_identity ) {
+        my $url = $u->journal_base . "/profile";
+        $url .= '?mode=full' if $is_full;
+
+        my $good_domain = $url;
+        $good_domain =~ s!^http://!!;
+        $good_domain =~ s!/.*!!;
+        if ( $domain ne $good_domain ) {
+            return BML::redirect( $url );
+        }
+    }
+
+    # block robots?
+    if ( !$u->is_visible || $u->should_block_robots ) {
+        $headextra .= LJ::robot_meta_tags();
+    }
+
+    # renamed?
+    my $renamed_u = $u->get_renamed_user;
+    unless ( $u->equals( $renamed_u ) ) {
+        my $extra = $is_full ? "&mode=full" : '';
+        return BML::redirect( "$LJ::SITEROOT/profile?user=" . $renamed_u->user . "$extra" );
+    }
+
+    # figure out the page title
+    if ( $u->is_community ) {
+        $title = $ML{'.title.communityprofile'};
+    } elsif ( $u->is_personal ) {
+        $title = $ML{'.title.userprofile'};
+    } elsif ( $u->is_syndicated ) {
+        $title = $ML{'.title.syndicatedprofile'};
+    } elsif ( $u->is_identity ) {
+        $title = $ML{'.title.openidprofile'};
+    }
+
+    $windowtitle = $u->display_name . " - $title";
+
+    # can't view suspended/deleted profiles unless you have viewall
+    my $viewall = 0;
+    ( $viewall ) = $remote->view_priv_check( $u, $GET{viewall}, 'profile' )
+        if $remote;
+    unless ( $viewall ) {
+        if ( $u->is_suspended ) {
+            BML::set_status(403); # 403 Forbidden
+            $title = $ML{'error.suspended.title'};
+            return "<?h1 $ML{'error.suspended.name'} h1?><?p " . BML::ml( 'error.suspended.text', { user => $u->ljuser_display, sitename => $LJ::SITENAME } ) . " p?>";
+        }
+        if ( $u->is_deleted ) {
+            BML::set_status(404); # 404 Not Found
+            $title = $ML{'error.deleted.title'};
+            my $del_body = "<?p ";
+
+            if ( $u->prop( 'delete_reason' ) ) {
+                $del_body .= BML::ml( 'error.deleted.text.withreason', { user => $u->display_name, reason => $u->prop( 'delete_reason' ) } );
+            } else {
+                $del_body .= BML::ml( 'error.deleted.text', { user => $u->display_name } );
+            }
+
+            $del_body .= "&nbsp;" . BML::ml( 'error.deleted.leavecomm', { aopts => "href='$LJ::SITEROOT/community/leave?comm=" . $u->user . "'" } ) if $u->is_community && $u->trusts_or_has_member( $remote );
+
+            $del_body .= " p?>";
+            $del_body .= BML::ml( '.error.deleted.purgenotification', { aopts => "href='$LJ::SITEROOT/manage/subscriptions/user?journal=" . $u->user . "'" } )
+                unless LJ::User->is_protected_username( $u->user );
+            return $del_body;
+        }
+    }
+
+    # helper variables for later
+    my $user = $u->user;
+    my $profile = $u->profile_page( $remote, viewall => $viewall );
+
+################################################################################
+##### HELPER SUBS
+
+    my $arrowimg = sub {
+        my $section = $_[0];
+        return LJ::img( 'arrow-down', '', { id => "${section}_arrow",
+                                            align => "absmiddle" } );
+    };
+
+    # given a single item (scalar or hashref), linkify it appropriately
+    # and return it as a string
+    my $linkify = sub {
+        my $l = $_[0];
+        return $l unless ref $l eq 'HASH';
+
+        if ( $l->{text} ) {
+            return qq(<a href="$l->{url}">$l->{text}</a>) if $l->{url};
+            return $l->{text};
+        } elsif ( $l->{email} ) {
+            # the ehtml call here shouldn't be necessary, but just in case they slip in an email
+            # that contains Bad Stuff, escape it
+            return LJ::CleanHTML::mangle_email_address( LJ::ehtml( $l->{email} ) );
+        } else {
+            return "(Error in Linkification)";
+        }
+    };
+
+    # given multiple items in an arrayref, linkify each one appropriately
+    # and return them as one string with the join_string separating each item
+    #
+    # the join_string must be the first item in the arrayref
+    my $linkify_multiple = sub {
+        my $r = $_[0];
+        return $r unless ref $r eq 'ARRAY';
+
+        if ( @$r > 1 ) {
+            my $join_string = shift @$r;
+            my @links;
+            foreach my $l ( @$r ) {
+                next unless $l;
+                push @links, $linkify->( $l );
+            }
+
+            return join( $join_string, @links );
+        }
+
+        return $linkify->( $r->[0] );
+    };
+
+    # Returns true if the given user should be struck out on the profile
+    my $strikeuser = sub {
+        return $_[0]->is_inactive;
+    };
+
+    # Returns true if the user is not struck out or if mode is full
+    my $includeuser = sub {
+        # I've repeated the logic in strikeuser so we don't do another function call
+        return $_[0]->is_individual && ( $is_full || ! $_[0]->is_inactive );
+        # added is_individual because all previous tests were checking for both
+    };
+
+    my $listusers = sub {
+        my $users = $_[0];
+        my @linked_users;
+
+        foreach my $user ( @$users ) {
+            my $linked_u = $linkify->( { url => $user->profile_url, text => $user->display_name } );
+            $linked_u = "<strike>$linked_u</strike>" if $strikeuser->( $user );
+            #if user is logged in and not looking at own profile, use appropiate highlighting for users they have in common
+            if ( $remote && ( $remote != $u ) ) {
+                $linked_u = "<em>$linked_u</em>" if $remote->watches( $user );
+                $linked_u = "<strong>$linked_u</strong>"
+                    if ( $user->is_community ? $remote->member_of( $user ) : $remote->trusts( $user ) );
+            }
+
+            push @linked_users, $linked_u;
+        }
+
+        return join( ', ', @linked_users );
+    };
+
+    my $content_block = sub {
+        my %opts = @_;
+
+        my $collapsible = defined $opts{collapsible} ? $opts{collapsible} : 1;
+        my $header_image = $opts{header_image} ? "<img src='$opts{header_image}' alt='' /> " : '';
+        my $collapse_text = $collapsible ? qq(
+            <span class='expandcollapse on' id='$opts{section_name}_header'>
+                ) . LJ::img( 'arrow-down', '', { id => "$opts{section_name}_arrow",
+                align => "absmiddle" } ) . qq(
+                $header_image <a name='$opts{section_link}'>$ML{$opts{section_name_ml}}</a>
+            </span>
+        ) : "$header_image$ML{$opts{section_name_ml}}";
+
+        my @links = map {
+                qq(<span class="section_link">[<a href="$_->{url}">$_->{text}</a>]</span>)
+            } @{ $opts{links} || [] };
+        my $links = join( ' ', @links );
+
+        return qq(
+            <div class='ljclear'></div>
+            <div class='section'>
+                $collapse_text
+                $links
+            </div>
+            <div class='section_body' id='$opts{section_name}_body'>
+                $opts{body}
+            </div>
+        );
+    };
+
+    my $content_inner_block = sub {
+        my %opts = @_;
+
+        my $hidden = $opts{hidable} && $profile->hide_list( $opts{section_name} );
+        return '' if $hidden && ( !$remote || !$remote->can_manage( $u ) );
+
+        my $section_name = ref $opts{section_name_ml} eq 'HASH' ? BML::ml( $opts{section_name_ml}->{ml}, $opts{section_name_ml}->{opts} ) : $ML{$opts{section_name_ml}};
+        my $section_hidden_text = $hidden ? " <em>$ML{'.label.hidden'}</em>" : '';
+        my $collapsible = defined $opts{collapsible} ? $opts{collapsible} : 1;
+        my ( $collapse_text, $body );
+        if ( $collapsible ) {
+            $collapse_text = qq(
+                <span class='expandcollapse on' id='$opts{section_name}_header'>
+                    ) . LJ::img( 'arrow-down', '', { id => "$opts{section_name}_arrow",
+                    align => "absmiddle" } ) . qq(
+                    <a name='$opts{section_link}'>$section_name$section_hidden_text</a>
+                </span>
+            );
+            $body = qq( <div class='inner_section_body' id='$opts{section_name}_body'>$opts{body}</div> );
+        } else {
+            $collapse_text = "<a name='$opts{section_link}'>$section_name</a>";
+            $body = $opts{body};
+        }
+
+        my @links = map {
+                qq(<span class="inner_section_header_link">[<a href="$_->{url}">$_->{text}</a>]</span>)
+            } @{ $opts{links} || [] };
+        my $links = join( ' ', @links );
+
+        return qq(
+            <p class='inner_section_header$opts{extra_classes}'$opts{extra_attrs}>
+                $collapse_text
+                $links
+            </p>
+            $body
+        );
+    };
+
+    my $mlsn = sub {
+        my ( $ml, $users ) = @_;
+        my $numusers = scalar @$users;
+        my $val = $numusers ?
+            { ml => "$ml.some", opts => { num => $numusers } } :
+            "$ml.none";
+        return $val;
+    };
+
+################################################################################
+##### USERNAME
+
+    # begin the page
+    my $ret = q{ <div id='profile_page'><div id='profile_top'> };
+
+    $ret .= q{ <div class='username'> } . $u->ljuser_display;
+    if ( $u->public_key ) {
+        $ret .= "<a href='$LJ::SITEROOT/pubkey?user=$user'>";
+        $ret .= LJ::img( 'key', '', { border => 0, title => $ML{'.pubkey.alt'},
+                          style => 'vertical-align: middle; border: 0;' } );
+        $ret .= "</a>\n";
+    }
+    $ret .= q{ </div> };
+
+################################################################################
+##### ACTION LINKS
+
+    $ret .= q{ <div class='actions'><ul> };
+
+    foreach my $link ( $profile->action_links ) {
+        my $width = $link->{width} ? "width=\"$link->{width}\"" : "";
+        my $height = $link->{height} ? "height=\"$link->{height}\"" : "";
+
+        if ( $link->{url} ) {
+            $ret .= qq(
+                <li class="$link->{class}" title="$link->{title}">
+                    <a href="$link->{url}">
+                        <img src="$link->{image}" $width $height alt="" />$link->{text}
+                    </a>
+                </li>
+            );
+        } else {
+            $ret .= qq(
+                <li class="$link->{class}" title="$link->{title}">
+                    <img src="$link->{image}" $width $height alt="" />$link->{text}
+                </li>
+            );
+        }
+    }
+
+    $ret .= q{ </ul></div> };
+
+################################################################################
+##### USERPIC
+
+    $ret .= "<div class='user_details'><div class='userpicdiv'>" .
+            $profile->userpic->{imgtag} .
+            "</div><div class='user_details_inner'>";
+
+################################################################################
+##### JOURNAL TITLES
+
+    my $title = $u->prop( "journaltitle" ) ?
+                    LJ::ehtml( $u->prop( "journaltitle" ) ) :
+                    BML::ml( '.details.title', { user => $u->display_username } );
+    my $subtitle;
+    $subtitle = LJ::ehtml( $u->prop( "journalsubtitle" ) )
+        if $u->prop( "journalsubtitle" );
+
+    $ret .= qq{
+        <div class="details_journal">
+            <p class="journal_title">$title</p>
+            <p class="journal_subtitle">$subtitle</p>
+        </div>
+    };
+
+################################################################################
+##### JOURNAL STATISTICS
+
+    $ret .= q{ <div class='details_stats'> };
+
+    # journal warnings
+    $ret .= "<span class='$_->{class}'>$_->{text}</span>" foreach $profile->warnings;
+
+    # account type
+    my $accttype = DW::Pay::get_account_type_name( $u );
+    if ( $accttype ) {
+        my $expiretime;
+        $expiretime = DW::Pay::get_account_expiration_time( $u )
+            if $remote && $remote->can_manage( $u );
+
+        $ret .= "<p>";
+        $ret .= $expiretime > 0 ? BML::ml( '.details.accounttype.expireson', { type => $accttype, date => DateTime->from_epoch( epoch => $expiretime )->date } ) : $accttype;
+        $ret .= "</p>";
+    }
+
+    # journal creation date, journal update time
+    unless ( $u->is_identity ) {
+        my $jcdate = BML::ml( '.details.createdon2', 
+            { createdate => LJ::mysql_time( $u->timecreate )  } );
+        $ret .= "<p>$jcdate (#" . $u->id . '), ' . $u->last_updated;
+        $ret .= "</p>"; 
+    }
+
+    # comment and support stats
+    my $csstats = join( ', ', ( $profile->comment_stats, $profile->support_stats ) );
+    $ret .= qq{<p>$csstats</p>};
+
+    # other statistics
+    $ret .= q{ <p> };
+    $ret .= join( ', ', ( $profile->entry_stats, $profile->tag_stats, $profile->memory_stats, $profile->userpic_stats ) );
+    $ret .= "</p>";
+
+    #extended profile link
+    $ret .= "<p>";
+    if ( $is_full ) {
+        $ret .= BML::ml( '.details.profile.default', { aopts => "href='" . $u->profile_url . "'" } );
+    } else {
+        $ret .= BML::ml( '.details.profile.full', { aopts => "href='" . $u->profile_url . "?mode=full'" } );
+    }
+    $ret .= q{ </p></div></div></div></div> };
+
+################################################################################
+##### BASIC INFORMATION
+
+    my $bibody = '';
+
+    if ( my @rows = $profile->basic_info_rows ) {
+        my @row_texts;
+        foreach my $row (@rows) {
+            my $row_header = shift @$row;
+            my $row_text = "$row_header</th><td>";
+            $row_text .= $linkify_multiple->( $row );
+            push @row_texts, $row_text;
+        }
+
+        $bibody .= q{ <div class="profile"><table summary=''><tr><th> };
+        $bibody .= join( '</td></tr><tr><th>', @row_texts );
+        $bibody .= q{ </td></tr></table></div> };
+    }
+
+    if ( my @contacts = $profile->contact_rows ) {
+        $bibody .= qq( <div class="contact"><p class="section_body_title">$ML{'.contact.header'}</p> );
+        $bibody .= join( '<br />', map { $linkify->( $_ ) } @contacts );
+        $bibody .= q{ </div> };
+    };
+
+    $bibody .= BML::ml( '.label.feedchange', { aopts => "href='$LJ::SITEROOT/support'" } ) if $u->is_syndicated;
+
+    if ( $bibody ) {
+        my $links;
+        $links = [ { url => "$LJ::SITEROOT/manage/profile/?authas=" . $u->user, text => $ML{'.section.edit'} } ]
+            if $remote && $remote->can_manage( $u );
+        $ret .= $content_block->(
+            section_name    => 'basics',
+            section_name_ml => '.basicinfo.header',
+            section_link    => 'basics',
+            body            => $bibody,
+            links           => $links,
+        );
+    }
+
+################################################################################
+##### PUBSUBHUBBUB INFORMATION FOR SYNDICATED ACCOUNTS
+
+    my $fredbody = '';
+
+    if ( $is_full && ( my @rows = $profile->hubbub_info_rows ) ) {
+        foreach my $row (@rows) {
+            my @data = (
+                id => $row->{id},
+                pings => $row->{timespinged},
+                huburl => LJ::ehtml( $row->{huburl} ),
+                topicurl => LJ::ehtml( $row->{topicurl} ),
+                lastseen => LJ::ago_text( $row->{lastseen} ),
+                goodfor => LJ::mysql_time( $row->{leasegoodto} ),
+            );
+
+            my @row_texts;
+            while ( @data && ( my ( $ml, $txt ) = splice( @data, 0, 2 ) ) ) {
+                push @row_texts, LJ::Lang::ml( '.label.syn.hubbub.' . $ml ) . '</th><td>' . $txt;
+            }
+
+            $fredbody .= q{ <div class="profile"><table summary=''><tr><th> };
+            $fredbody .= join( '</td></tr><tr><th>', @row_texts );
+            $fredbody .= q{ </td></tr></table></div> };
+        }
+    }
+
+    if ( $fredbody ) {
+        $ret .= $content_block->(
+            section_name    => 'hubbub',
+            section_name_ml => '.hubbub.header',
+            section_link    => 'hubbub',
+            body            => $fredbody,
+        );
+    }
+
+
+################################################################################
+##### BIO
+
+    my $biobody = '';
+
+    $biobody .= $profile->bio;
+
+    if ( $biobody ) {
+        my $links;
+        $links = [ { url => "$LJ::SITEROOT/manage/profile/?authas=" . $u->user . "#bio", text => $ML{'.section.edit'} } ]
+            if $remote && $remote->can_manage( $u );
+        $ret .= $content_block->(
+            section_name    => 'bio',
+            section_name_ml => $u->is_individual ? '.bio.header' : '.about.header',
+            section_link    => 'bio',
+            body            => "<div class='usercontent'>$biobody</div>",
+            links           => $links,
+        );
+    }
+
+################################################################################
+##### CONNECT
+
+    my $connectbody = '';
+
+    # interests
+    my @linked_ints;
+    my $intcount = 0;
+    foreach my $int ( $profile->interests ) {
+        push @linked_ints, $linkify->( $int );
+        $intcount++;
+    }
+    my $intlist = join(', ', @linked_ints);
+    if ( $intcount ) {
+        my $links = [];
+        if ( $remote ) {
+            push @$links, { url => "$LJ::SITEROOT/manage/profile/?authas=" . $u->user . "#interests", text => $ML{'.section.edit'} }
+                if $remote->can_manage( $u );
+
+            my $enmasse_link = "$LJ::SITEROOT/interests?mode=enmasse";
+            my $enmasse_text;
+            if ( $remote->equals( $u ) ) {
+                $enmasse_text .= $ML{'.label.interests.removesome2'};
+            } else {
+                $enmasse_link .= "&fromuser=$user";
+                $enmasse_text .= $ML{'.label.interests.modifyyours2'};
+            }
+
+            push @$links, { url => $enmasse_link, text => $enmasse_text };
+        }
+
+        $connectbody .= $content_inner_block->(
+            section_name_ml => { ml => '.label.interests', opts => { num => $intcount } },
+            section_link    => 'interests',
+            extra_classes   => " first",
+            body            => "<div class='inner_section_body'>$intlist</div>",
+            links           => $links,
+            collapsible     => 0,
+        );
+    }
+
+    # external services
+    my $imlist;
+    foreach my $service ( $profile->external_services ) {
+        my $title = $ML{$service->{title_ml}};
+        $imlist .= "<tr class='im_$service->{type}'>";
+        $imlist .= "<td class='im_icon'><img src='$LJ::IMGPREFIX/profile_icons/$service->{image}' alt=\"$title\" title=\"$title\" /></td>";
+        if ( $service->{status_image} ) {
+            my $status_title = $ML{$service->{status_title_ml}};
+            $imlist .= "<td>" . $linkify->( $service ) . "</td>";
+            $imlist .= "<td class='im_status'><img src='$service->{status_image}' alt=\"$status_title\" title=\"$status_title\" width='$service->{status_width}' height='$service->{status_height}' /></td>";
+        } else {
+            $imlist .= "<td colspan='2'>" . $linkify->( $service ) . "</td>";
+        }
+        $imlist .= "</tr>"; 
+    }
+    if ( $imlist ) {
+        my $new_im_margin;
+        $new_im_margin = " style='margin-top: 0;'" unless $intlist;
+        $connectbody .= qq{ <div class="external_services"$new_im_margin> };
+        my $links;
+        $links = [ { url => "$LJ::SITEROOT/manage/profile/?authas=" . $u->user . "#iminfo", text => $ML{'.section.edit'} } ]
+            if $remote && $remote->can_manage( $u );
+        $connectbody .= $content_inner_block->(
+            section_name_ml => '.im.header2',
+            section_link    => 'services',
+            extra_attrs     => $new_im_margin,
+            body            => "<table summary=''>$imlist</table>",
+            links           => $links,
+            collapsible     => 0,
+        );
+        $connectbody .= q{ </div> };
+    }
+
+    if ( $connectbody ) {
+        $ret .= $content_block->(
+            section_name    => 'connect',
+            section_name_ml => '.label.connect',
+            section_link    => 'connect',
+            body            => $connectbody,
+        );
+    }
+
+################################################################################
+##### MAINTAINERS/MODERATORS
+
+    my @maintainer_userids = $u->maintainer_userids;
+    my @moderator_userids = $u->moderator_userids;
+
+    if ( @maintainer_userids || @moderator_userids ) {
+        my $us = LJ::load_userids( @maintainer_userids, @moderator_userids );
+
+        my @maintlist = sort { $a->display_name cmp $b->display_name } map { $us->{$_} } @maintainer_userids;
+        my @modlist = sort { $a->display_name cmp $b->display_name } map { $us->{$_} } @moderator_userids;
+
+        my $maintbody;
+        if ( @maintlist ) {
+            $maintbody = $content_inner_block->(
+                section_name    => 'maints',
+                section_name_ml => { ml => '.label.maintainers', opts => { num => scalar @maintlist } },
+                section_link    => 'maintainers',
+                extra_classes   => ' first',
+                body            => $listusers->( \@maintlist ),
+            );
+        }
+
+        my $modbody;
+        if ( @modlist ) {
+            $modbody = $content_inner_block->(
+                section_name    => 'mods',
+                section_link    => 'moderators',
+                section_name_ml => { ml => '.label.moderators', opts => { num => scalar @modlist } },
+                body            => $listusers->( \@modlist ),
+            );
+        }
+
+        if ( $maintbody || $modbody ) {
+            my $links;
+            $links = [ { url => "$LJ::SITEROOT/community/members?authas=" . $u->user, text => $ML{'.section.edit'} } ]
+                if $remote && $remote->can_manage( $u );
+            $ret .= $content_block->(
+                section_name    => 'admins',
+                section_name_ml => '.admins.header',
+                section_link    => 'administrators',
+                links           => $links,
+                body            => "$maintbody$modbody",
+                collapsible     => 0,
+            );
+        }
+    }
+
+################################################################################
+##### WATCH/TRUST/MEMBER/POSTING LISTS
+
+    my ( @trusted_userids, @trusted_by_userids, @mutually_trusted_userids, @not_mutually_trusted_userids, @not_mutually_trusted_by_userids );
+    my ( @watched_userids, @watched_by_userids, @mutually_watched_userids, @not_mutually_watched_userids, @not_mutually_watched_by_userids );
+
+    # no mutual trust lists for identity accounts since they can't trust anyone
+    @trusted_by_userids = $u->trusted_by_userids if $u->is_identity;
+
+    if ( $u->show_mutualfriends ) { # only can return true for personal or identity accounts
+        if ( $u->is_personal ) {
+            @mutually_trusted_userids = $u->mutually_trusted_userids;
+            @not_mutually_trusted_userids = $profile->not_mutually_trusted_userids;
+            @not_mutually_trusted_by_userids = $profile->not_mutually_trusted_by_userids;
+        }
+        @mutually_watched_userids = $u->mutually_watched_userids;
+        @not_mutually_watched_userids = $profile->not_mutually_watched_userids;
+        @not_mutually_watched_by_userids = $profile->not_mutually_watched_by_userids;
+        @watched_userids = $u->watched_userids; # need this one to get watched communities and feeds
+    } else {
+        @trusted_userids = $u->trusted_userids if $u->is_personal;
+        @trusted_by_userids = $u->trusted_by_userids if $u->is_personal;
+        @watched_userids = $u->watched_userids if $u->is_individual;
+        @watched_by_userids = $u->watched_by_userids
+            # This is kind of a hack; we don't want to load these for communities with lots
+            # of subscribers because the profile page chokes and dies.  This won't load them
+            # if the option to hide subscribers is set and the person cannot manage the communities.
+            # It means the profile page is still broken to people who manage the community, though, but
+            # it doesn't break things for smaller communities by not loading them for the admins.
+            # FIXME: This overall situation of profile pages choking up for large amounts of subscribers or members
+            #   needs to be fixed in a more elegant and useful way.
+            unless $u->prop( 'opt_hidefriendofs' ) && ( !$remote || !$remote->can_manage( $u ) );
+    }
+
+    my ( @members_userids, @member_of_userids, @posting_access_to_userids, @posting_access_from_userids );
+    @members_userids = $u->member_userids if $u->is_community;
+    @member_of_userids = $u->member_of_userids if $u->is_personal;
+    @posting_access_to_userids = @{LJ::load_rel_target( $u, 'P' )} if $u->is_personal;
+    @posting_access_from_userids = @{LJ::load_rel_user( $u, 'P' )} if $u->is_community;
+
+    my $us = LJ::load_userids(
+        @trusted_userids, @trusted_by_userids,
+        @mutually_trusted_userids, @not_mutually_trusted_userids, @not_mutually_trusted_by_userids,
+        @watched_userids, @watched_by_userids,
+        @mutually_watched_userids, @not_mutually_watched_userids, @not_mutually_watched_by_userids,
+        @members_userids, @member_of_userids,
+        @posting_access_to_userids, @posting_access_from_userids,
+    );
+
+    # presort various userid arrays
+    @$_ = sort { $us->{$a}->display_name cmp $us->{$b}->display_name } @$_
+        foreach ( \@trusted_userids, \@watched_userids, \@trusted_by_userids, \@watched_by_userids,
+                  \@mutually_trusted_userids, \@mutually_watched_userids, \@mutually_watched_userids,
+                  \@not_mutually_watched_userids, \@not_mutually_trusted_by_userids,
+                  \@not_mutually_watched_by_userids, \@members_userids, \@member_of_userids,
+                  \@posting_access_to_userids, \@posting_access_from_userids );
+
+################################################################################
+##### PEOPLE LISTS
+
+    my ( $trusted_body, $trusted_by_body, $watched_body, $watched_by_body, $members_body, $posting_access_from_body );
+
+    if ( $u->is_identity ) {  # can't be mutual trust
+        my @trusted_by_list = grep { $includeuser->( $_ ) }
+            map { $us->{$_} } @trusted_by_userids;
+        $trusted_by_body = $content_inner_block->(
+            section_name    => 'trusted_by_people',
+            section_name_ml => $mlsn->( '.people.trusted_by', \@trusted_by_list ),
+            section_link    => 'trusted_by',
+            extra_classes   => ' first',
+            body            => $listusers->( \@trusted_by_list ),
+            hidable         => 1,
+        );
+    }
+
+    if ( $u->show_mutualfriends ) { # only can return true for personal or identity accounts
+        if ( $u->is_personal ) {
+            my @mutually_trusted_list = grep { $_->is_individual }
+                map { $us->{$_} } @mutually_trusted_userids;
+            $trusted_body .= $content_inner_block->(
+                section_name    => 'mutually_trusted_people',
+                section_name_ml => $mlsn->( '.people.mutually_trusted', \@mutually_trusted_list ),
+                section_link    => 'mutually_trusted',
+                extra_classes   => ' first',
+                body            => $listusers->( \@mutually_trusted_list ),
+            );
+
+            my @not_mutually_trusted_list = grep { $_->is_individual }
+                map { $us->{$_} } @not_mutually_trusted_userids;
+            $trusted_body .= $content_inner_block->(
+                section_name    => 'not_mutually_trusted_people',
+                section_name_ml => $mlsn->( '.people.not_mutually_trusted', \@not_mutually_trusted_list ),
+                section_link    => 'not_mutually_trusted',
+                body            => $listusers->( \@not_mutually_trusted_list ),
+            );
+
+            my @not_mutually_trusted_by_list = grep { $includeuser->( $_ ) }
+                map { $us->{$_} } @not_mutually_trusted_by_userids;
+            $trusted_by_body = $content_inner_block->(
+                section_name    => 'not_mutually_trusted_by_people',
+                section_name_ml => $mlsn->( '.people.not_mutually_trusted_by', \@not_mutually_trusted_by_list ),
+                section_link    => 'not_mutually_trusted_by',
+                body            => $listusers->( \@not_mutually_trusted_by_list ),
+                hidable         => 1,
+            );
+        }
+
+        my @mutually_watched_list = grep { $_->is_individual }
+            map { $us->{$_} } @mutually_watched_userids;
+        $watched_body .= $content_inner_block->(
+            section_name    => 'mutually_watched_people',
+            section_name_ml => $mlsn->( '.people.mutually_watched', \@mutually_watched_list ),
+            section_link    => 'mutually_watched',
+            body            => $listusers->( \@mutually_watched_list ),
+        );
+
+        my @not_mutually_watched_list = grep { $_->is_individual }
+            map { $us->{$_} } @not_mutually_watched_userids;
+        $watched_body .= $content_inner_block->(
+            section_name    => 'not_mutually_watched_people',
+            section_name_ml => $mlsn->( '.people.not_mutually_watched', \@not_mutually_watched_list ),
+            section_link    => 'not_mutually_watched',
+            body            => $listusers->( \@not_mutually_watched_list ),
+        );
+
+        my @not_mutually_watched_by_list = grep { $includeuser->( $_ ) }
+            map { $us->{$_} } @not_mutually_watched_by_userids;
+        $watched_by_body = $content_inner_block->(
+            section_name    => 'not_mutually_watched_by_people',
+            section_name_ml => $mlsn->( '.people.not_mutually_watched_by', \@not_mutually_watched_by_list ),
+            section_link    => 'not_mutually_watched_by',
+            body            => $listusers->( \@not_mutually_watched_by_list ),
+            hidable         => 1,
+        );
+    } else {  # show_mutualfriends is false
+        if ( $u->is_personal ) {
+            my @trusted_list = grep { $_->is_individual }
+                map { $us->{$_} } @trusted_userids;
+            $trusted_body = $content_inner_block->(
+                section_name    => 'trusted_people',
+                section_name_ml => $mlsn->( '.people.trusted', \@trusted_list ),
+                section_link    => 'trusted',
+                extra_classes   => ' first',
+                body            => $listusers->( \@trusted_list ),
+            );
+
+            my @trusted_by_list = grep { $includeuser->( $_ ) }
+                map { $us->{$_} } @trusted_by_userids;
+            $trusted_by_body = $content_inner_block->(
+                section_name    => 'trusted_by_people',
+                section_name_ml => $mlsn->( '.people.trusted_by', \@trusted_by_list ),
+                section_link    => 'trusted_by',
+                body            => $listusers->( \@trusted_by_list ),
+                hidable         => 1,
+            );
+        }
+
+        if ( $u->is_individual ) {
+            my @watched_list = grep { $_->is_individual }
+                map { $us->{$_} } @watched_userids;
+            $watched_body = $content_inner_block->(
+                section_name    => 'watched_people',
+                section_name_ml => $mlsn->( '.people.watched', \@watched_list ),
+                section_link    => 'watched_people',
+                body            => $listusers->( \@watched_list ),
+            );
+        }
+
+        if ( $u->is_community ) {
+            my @members_list = map { $us->{$_} } @members_userids;
+            $members_body = $content_inner_block->(
+                section_name    => 'members_people',
+                section_name_ml => $mlsn->( '.people.members', \@members_list ),
+                section_link    => 'members',
+                extra_classes   => ' first',
+                body            => $listusers->( \@members_list ),
+            );
+
+            my @posting_access_from_list = map { $us->{$_} } @posting_access_from_userids;
+            $posting_access_from_body = $content_inner_block->(
+                section_name    => 'posting_access_from_people',
+                section_name_ml => $mlsn->( '.people.posting_access_from', \@posting_access_from_list ),
+                section_link    => 'posting_access_from',
+                body            => $listusers->( \@posting_access_from_list ),
+                hidable         => 1,
+            );
+        }
+
+        my @watched_by_list = grep { $includeuser->( $_ ) }
+            map { $us->{$_} } @watched_by_userids;
+        $watched_by_body = $content_inner_block->(
+            section_name    => 'watched_by_people',
+            section_name_ml => $mlsn->( '.people.watched_by', \@watched_by_list ),
+            section_link    => 'watched_by',
+            body            => $listusers->( \@watched_by_list ),
+            hidable         => 1,
+        );
+    }
+
+    if ( $trusted_body || $trusted_by_body || $watched_body || $watched_by_body || $members_body || $posting_access_from_body ) {
+        my $links = [];
+        if ( $u->is_community ) {
+           push @$links, { url => "$LJ::SITEROOT/community/members?authas=" . $u->user, text => $ML{'.section.edit'} }
+                if $remote && $remote->can_manage( $u );
+           push @$links, { url => $u->journal_base . "/read", text => $ML{'.people.viewentries'} };
+        } else {
+            push @$links, { url => "$LJ::SITEROOT/manage/circle/edit", text => $ML{'.section.edit'} }
+                if $remote && $remote->can_manage( $u );
+            push @$links, { url => $u->journal_base . "/read?show=P", text => $ML{'.people.viewentries'} }
+                unless $u->is_syndicated;
+        }
+
+        $ret .= $content_block->(
+            section_name    => 'people',
+            section_name_ml => $u->is_community ? '.members.header' : '.people.header',
+            section_link    => 'people',
+            header_image    => $u->is_community ? '' : "$LJ::IMGPREFIX/silk/identity/user.png",
+            links           => $links,
+            body            => "$trusted_body$trusted_by_body$watched_body$members_body$watched_by_body$posting_access_from_body",
+            collapsible     => 0,
+        );
+    }
+
+################################################################################
+##### COMMUNITY LISTS
+
+    if ( $u->is_individual ) {
+        my ( $member_of_body, $posting_access_to_body, $watched_body );
+
+        if ( $u->is_personal ) {
+            my @member_of_list = map { $us->{$_} } @member_of_userids;
+            $member_of_body = $content_inner_block->(
+                section_name    => 'member_of_comms',
+                section_name_ml => $mlsn->( '.comms.member_of', \@member_of_list ),
+                section_link    => 'member_of',
+                extra_classes   => ' first',
+                body            => $listusers->( \@member_of_list ),
+                hidable         => 1,
+            );
+
+            my @posting_access_to_list = map { $us->{$_} } @posting_access_to_userids;
+            $posting_access_to_body = $content_inner_block->(
+                section_name    => 'posting_access_to_comms',
+                section_name_ml => $mlsn->( '.comms.posting_access_to', \@posting_access_to_list ),
+                section_link    => 'posting_access_to',
+                body            => $listusers->( \@posting_access_to_list ),
+                hidable         => 1,
+            );
+        }
+
+        my @watched_list = grep { $_->is_community }
+            map { $us->{$_} } @watched_userids;
+        $watched_body = $content_inner_block->(
+            section_name    => 'watched_comms',
+            section_name_ml => $mlsn->( '.comms.watched', \@watched_list ),
+            section_link    => 'watched_communities',
+            body            => $listusers->( \@watched_list ),
+        );
+
+        if ( $member_of_body || $posting_access_to_body || $watched_body ) {
+            my $links = [];
+            if ( $remote && $remote->can_manage( $u ) ) {
+                push @$links, { url => "$LJ::SITEROOT/manage/circle/edit", text => $ML{'.section.edit'} };
+            }
+            push @$links, { url => $u->journal_base . "/read?show=C", text => $ML{'.comms.viewentries'} };
+
+            $ret .= $content_block->(
+                section_name    => 'comms',
+                section_name_ml => '.comms.header',
+                section_link    => 'communities',
+                header_image    => "$LJ::IMGPREFIX/silk/identity/community.png",
+                links           => $links,
+                body            => "$member_of_body$watched_body$posting_access_to_body",
+                collapsible     => 0,
+            );
+        }
+    }
+
+################################################################################
+##### FEED LISTS
+
+    if ( $u->is_individual ) {
+        my ( $watched_body );
+
+        my @watched_list = grep { $_->is_syndicated }
+            map { $us->{$_} } @watched_userids;
+        $watched_body = $content_inner_block->(
+            section_name    => 'watched_feeds',
+            section_name_ml => $mlsn->( '.feeds.watched', \@watched_list ),
+            section_link    => 'watched_feeds',
+            extra_classes   => ' first',
+            body            => $listusers->( \@watched_list ),
+        );
+
+        if ( $watched_body ) {
+            my $links = [];
+            if ( $remote && $remote->can_manage( $u ) ) {
+                push @$links, { url => "$LJ::SITEROOT/manage/circle/edit", text => $ML{'.section.edit'} };
+            }
+            push @$links, { url => $u->journal_base . "/read?show=Y", text => $ML{'.feeds.viewentries'} };
+
+            $ret .= $content_block->(
+                section_name    => 'feeds',
+                section_name_ml => '.feeds.header',
+                section_link    => 'feeds',
+                header_image    => "$LJ::IMGPREFIX/silk/identity/feed.png",
+                links           => $links,
+                body            => "$watched_body",
+                collapsible     => 0,
+            );
+        }
+    }
+
+################################################################################
+##### LINKING MODULE
+
+    if ( $u->is_individual || $u->is_community ) {
+
+        my $local_link = "<user name=\"" . $u->display_name . "\">";
+        my $remote_link = $u->ljuser_display( { no_ljuser_class => 1 } );
+
+
+        my $link_body = "<div style='font-style:italic;'>" . BML::ml( '.linking.about' ) . "</div>";
+        $link_body .= BML::ml( '.linking.local', { sitename => $LJ::SITENAMESHORT }) . LJ::html_text({
+                             name      => 'local',
+                             id        => 'local',
+                             size      => 50,
+                             maxlength => 100,
+                             value     => $local_link,
+                             }) . "<br />";
+        $link_body .= "$ML{'.linking.anywhere'} " . LJ::html_text({
+                             name      => 'local',
+                             id        => 'local',
+                             size      => 50,
+                             maxlength => 550,
+                             value     => $remote_link,
+                             }) . "<br />";
+
+        $ret .=  $content_block->(
+            section_name   => 'linking',
+            section_name_ml => '.label.linking',
+            section_link    => 'linking',
+            body           => $link_body,
+            hidable        => 1,
+         );
+    }
+
+
+################################################################################
+##### END
+
+    $ret .= q{ <div class='ljclear'></div> };
+    $ret .= q{ </div> };
+
+    return BML::noparse($ret);
+}
+_code?>
+<=body
+title=><?_code return $title; _code?>
+windowtitle=><?_code return $windowtitle; _code?>
+head<=
+<?_code return $headextra; _code?>
+<=head
+page?>
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/rte/palette.html
--- a/htdocs/rte/palette.html	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/rte/palette.html	Wed Nov 17 22:56:06 2010 +0800
@@ -36,7 +36,7 @@
 	</script>
 </head>
 <body bgcolor="white" onLoad="InitColorPalette()" leftmargin="0" rightmargin="0" marginwidth="0" marginheight="0" topmargin="0" bottommargin="0">
-<table width="250" height="170" cellpadding="0" cellspacing="1" border="1" align="center">
+<table summary='' width="250" height="170" cellpadding="0" cellspacing="1" border="1" align="center">
 	<tr>
 		<td id="#FFFFFF" bgcolor="#FFFFFF" width="20" height="20"><img width="1" height="1"></td>
 		<td id="#FFCCCC" bgcolor="#FFCCCC" width="20" height="20"><img width="1" height="1"></td>
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/shop/account.bml
--- a/htdocs/shop/account.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/shop/account.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -93,7 +93,7 @@ body<=
     $ret .= "<div style='clear: both;'></div>";
     $ret .= "<form method='post'>";
     $ret .= LJ::form_auth();
-    $ret .= "<table class='shop-table'><tr>";
+    $ret .= "<table summary='' class='shop-table'><tr>";
     $ret .= "<td>" . LJ::Widget::ShopItemOptions->render( option_name => 'accttype', item => 'prem' ) . "</td>";
     $ret .= "<td>" . LJ::Widget::ShopItemOptions->render( option_name => 'accttype', item => 'paid' ) . "</td>"
         if $for ne 'self' || DW::Shop::Item::Account->allow_account_conversion( $remote, 'paid' );
@@ -108,7 +108,7 @@ body<=
     $ret .= "</table>";
 
     if ( $for =~ /^(?:gift|new|random)$/ ) {
-        $ret .= "<table class='shop-table-gift'>";
+        $ret .= "<table summary='' class='shop-table-gift'>";
 
         if ( $for eq 'gift' ) {
             $ret .= "<tr><td>$ML{'.giftfor.username'}</td><td>" . LJ::html_text( { name => 'username', value => LJ::ehtml( $GET{user} ) } ) . "</td></tr>";
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/shop/entercc.bml
--- a/htdocs/shop/entercc.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/shop/entercc.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -108,7 +108,7 @@ body<=
         );
 
         my $out = "<?p $ML{'.about'} p?><?p <strong>" . LJ::Lang::ml( '.about.security', { sitename => $LJ::SITENAME } ) . "</strong> p?>";
-        $out .= "<form method='post'>" . LJ::form_auth() . "<table>";
+        $out .= "<form method='post'>" . LJ::form_auth() . "<table summary=''>";
         while ( my ( $name, $edit ) = splice( @form, 0, 2 ) ) {
             if ( $name eq '--' ) {
                 $out .= "<tr><td colspan='2'>&nbsp;</td></tr>";
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/shop/renames.bml
--- a/htdocs/shop/renames.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/shop/renames.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -77,7 +77,7 @@ body<=
     $ret .= LJ::form_auth();
 
     if ( $for eq "gift" ) {
-        $ret .= "<table class='shop-table-gift'>";
+        $ret .= "<table summary='' class='shop-table-gift'>";
 
         if ( $for eq 'gift' ) {
             $ret .= "<tr><td>$ML{'.giftfor.username'}</td><td>" . LJ::html_text( { name => 'username', value => LJ::ehtml( $GET{user} ) } ) . "</td></tr>";
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/stats.bml
--- a/htdocs/stats.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/stats.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -168,7 +168,7 @@ body<=
  if (@ages) {
      $ret .= "<h1>$ML{'.age.header'}</h1>";
      $ret .= "<p>$ML{'.age.desc'}</p>";
-     $ret .= "<table>\n";
+     $ret .= "<table summary=''>\n";
      my $lastage = 0;
      foreach my $age (@ages) {
          my $width = int(400 * $age{$age}/$maxage);
@@ -208,7 +208,7 @@ body<=
      if ($out) {
          $ret .= "<h1>$ML{'.client.header'}</h1>";
          $ret .= "<p>$ML{'.client.desc'}</p>";
-         $ret .= "<table cellpadding='3'>\n";
+         $ret .= "<table summary='' cellpadding='3'>\n";
          $ret .= $out;
          $ret .= "</table>\n";
      }
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/stc/gradation/gradation.css
--- a/htdocs/stc/gradation/gradation.css	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/stc/gradation/gradation.css	Wed Nov 17 22:56:06 2010 +0800
@@ -368,12 +368,14 @@ table.table_layerbrowse,
 table.table_layerbrowse,
 table.table_layerbrowse td,
 table#table_yourlayers,
+table#table_yourlayers th,
 table#table_yourlayers td { border: 1px solid #888888; }
 
 table#table_layerbrowse_classes,
 table#table_layerbrowse_classes td {border: none; }
 
 table.table_layerbrowse td,
+table#table_yourlayers th,
 table#table_yourlayers td { padding: .15em .25em; }
 
 /**
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/support/act.bml
--- a/htdocs/support/act.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/support/act.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -64,7 +64,7 @@ body<=
      # hidden values
      $ret .= "<input type=\"hidden\" name=\"spid\" value=\"$spid\" />\n";
      $ret .= "<input type=\"hidden\" name=\"auth\" value=\"$auth\" />\n";
-     $ret .= "<table border='0'>\n";
+     $ret .= "<table summary='' border='0'>\n";
  
      $ret .= '<tr valign="middle"><td align="right">From:</td><td>';
      if ($remote && $remote->{'userid'}) {
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/support/faqsearch.bml
--- a/htdocs/support/faqsearch.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/support/faqsearch.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -21,7 +21,7 @@ _c?>
 
     $body = "<?standout $ML{'.info'} standout?><br />";
     $body .= "<form method='GET'>";
-    $body .= "<table><tr><td>$ML{'.label.term'}: </td>";
+    $body .= "<table summary=''><tr><td>$ML{'.label.term'}: </td>";
     $body .= "<td>" . LJ::html_text({ size => 30, value => $GET{'q'}, name => 'q' });
     $body .= "&nbsp;" . LJ::html_submit($ML{'.button.search'});
     $body .= "</td></tr>";
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/support/help.bml
--- a/htdocs/support/help.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/support/help.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -266,9 +266,9 @@ body<=
  my @headers = ( id => "ID#", summary => $ML{'.th.summary'}, area => $ML{'.th.problemarea'}, date => $ML{'.th.posted'} );
  while (my ($sorttype, $desc) = splice(@headers, 0, 2)) {
      if ($sort eq $sorttype) {
-         $ret .= "<td><b>$desc</b></td>\n";
+         $ret .= "<th>$desc</th>\n";
      } else {
-         $ret .= "<td><b><a href='$uri&sort=$sorttype'>$desc</a></b></td>\n";
+         $ret .= "<th><a href='$uri&sort=$sorttype'>$desc</a></th>\n";
      }
  }
  $ret .= "<td><b>$ML{'.th.status'}</b></td>\n";
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/support/highscores.bml
--- a/htdocs/support/highscores.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/support/highscores.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -79,6 +79,13 @@ body<=
  
  $ret .= $navbar;
  $ret .= "<table id='support-highscores'>";
+ $ret .= qq{
+    <tr>
+        <th>$ML{'.header.rank'}</th>
+        <th>$ML{'.header.delta'}</th>
+        <th>$ML{'.header.user'}</th>
+        <th>$ML{'.header.points'}</th>
+    </tr>};
  my $count = 0;
  foreach (@rows)
  {
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/support/highscores.bml.text
--- a/htdocs/support/highscores.bml.text	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/support/highscores.bml.text	Wed Nov 17 22:56:06 2010 +0800
@@ -3,9 +3,16 @@
 
 .down.text=total supporting users, <b>[[count]]</b> displayed.
 
+.header.delta=Delta
+
+.header.points=Points
+
+.header.rank=Rank
+
+.header.user=User
+
+.title=High Scores
+
 .title.text=The following people have helped other users in the support area:
 
 .warn.support=Support high score data is not available.
-
-.title=High Scores
-
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/support/history.bml
--- a/htdocs/support/history.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/support/history.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -115,7 +115,7 @@ body<=
         }
     }
 
-    $ret .= "<table><tr><th colspan='2'>Search for Requests</th></tr>";
+    $ret .= "<table summary=''><tr><th colspan='2'>Search for Requests</th></tr>";
     $ret .= "<form method='get' action='history'>";
     $ret .= "<tr><td>By Email:</td><td><input type='text' name='email'></td></tr>";
     $ret .= "<tr><td>By Username:</td><td><input type='text' name='user'></td></tr>";
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/support/see_request.bml
--- a/htdocs/support/see_request.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/support/see_request.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -308,7 +308,7 @@ body<=
     ### request info table
 
     my $ret = "";
-    $ret .= "<table class='support-requesttable'>\n";
+    $ret .= "<table summary='' class='support-requesttable'>\n";
     $ret .= "<tr><td valign='bottom' align='right'><b>$ML{'.from'}</b></td><td>";
     
     if ( $u->{'defaultpicid'} && !$u->is_suspended ) {
@@ -585,7 +585,7 @@ body<=
         if ($up && LJ::Support::can_see_helper($sp, $remote)) {
             my $picid = $up->get_picid_from_keyword( '_support' ) || $up->{defaultpicid};
             my $icon = $picid ? LJ::Userpic->new( $up, $picid ) : undef;
-            $header = "<table style='margin-top: 15px;'><tr valign='bottom'>";
+            $header = "<table summary='' style='margin-top: 15px;'><tr valign='bottom'>";
             if ( $icon && !$up->is_suspended ) {
                 my $alt = $up->display_name;
                 my $src = $icon->url;
@@ -623,7 +623,7 @@ body<=
 
         # reply
         $ret .= "$header<br />\n";
-        $ret .= "<table class='support-requesttable-$bordercolor'>\n";
+        $ret .= "<table summary='' class='support-requesttable-$bordercolor'>\n";
         $ret .= "<tr><td align='center'>\n";
         if ($le->{faqid}) {
             # faq question
@@ -681,7 +681,7 @@ body<=
     $ret .= LJ::html_hidden('spid', $spid, 'auth', $auth) . "\n";
 
     # form
-    $ret .= "<table class='support-requesttable'>\n";
+    $ret .= "<table summary='' class='support-requesttable'>\n";
     $ret .= "<tr valign='middle'><td align='right'>$ML{'.from'}</td><td>";
     
     if ($remote && $remote->{'userid'}) {
@@ -778,7 +778,7 @@ body<=
     {
         $ret .= "<tr><td align='right'></td><td>\n";
 
-        $ret .= "<table cellpadding='5'>";
+        $ret .= "<table summary='' cellpadding='5'>";
 
         $ret .= "<tr><td>$ML{'.change.cat'}:<br />";
         $ret .= LJ::html_select({ 'name' => 'changecat',
@@ -847,7 +847,7 @@ body<=
 
     if ($lang_ret || $tier_ret) {
         $ret .= "<tr><td align='right'></td><td>\n";
-        $ret .= "<table cellpadding='5'><tr>";
+        $ret .= "<table summary='' cellpadding='5'><tr>";
         $ret .= "$lang_ret$tier_ret";
         $ret .= "</tr></table>";
         $ret .= "</td></tr>\n";
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/talkpost.bml
--- a/htdocs/talkpost.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/talkpost.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -225,7 +225,7 @@ body<=
     LJ::expand_embedded($u, $ditemid, $remote, \$event);
     BML::ebml(\$event);
 
-    $ret .= "<table id='poster'><tr>";
+    $ret .= "<table summary='' id='poster'><tr>";
 
     my $pickw = $init->{'replyto'} ? $parpost->{'picture_keyword'} : $props->{'picture_keyword'};
     LJ::Hooks::run_hook('notify_event_displayed', $entry);
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/talkread.bml
--- a/htdocs/talkread.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/talkread.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -237,7 +237,7 @@ body<=
 }
 
     $ret .= "<p>";
-    $ret .= "<table id='poster'><tr>";
+    $ret .= "<table summary='' id='poster'><tr>";
 
     my ( $userpic, $kw ) = $entry->userpic;
     LJ::Hooks::run_hook('notify_event_displayed', $entry);
@@ -355,7 +355,7 @@ body<=
     ########## make the navcrap
     my $navcrap = '';
     if ($pages > 1) {
-        $navcrap .= "<table id='journalnav'>";
+        $navcrap .= "<table summary='' id='journalnav'>";
         $navcrap .= "<tr><td align='center' colspan='3'>";
         $navcrap .= BML::ml('ljlib.pageofpages',{'page'=>$page, 'total'=>$pages});
         $navcrap .= "</td></tr>";
@@ -440,16 +440,16 @@ body<=
         my $htmlid = LJ::Talk::comment_htmlid( $dtid );
 
         if ($post->{'state'} eq "D") {
-            $ret .= "<p><a name='$htmlid'></a><table class='delcomment'><tr>";
+            $ret .= "<p><a name='$htmlid'></a><table summary='' class='delcomment'><tr>";
             $ret .= "<td><img src='$LJ::IMGPREFIX/dot.gif' alt='' 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='$htmlid'></a><table class='screenedcomment'><tr>";
+            $ret .= "<p><a name='$htmlid'></a><table summary='' class='screenedcomment'><tr>";
             $ret .= "<td><img src='$LJ::IMGPREFIX/dot.gif' alt='' 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='$htmlid'></a><table class='suspendedcomment'><tr>";
+            $ret .= "<p><a name='$htmlid'></a><table summary='' class='suspendedcomment'><tr>";
             $ret .= "<td><img src='$LJ::IMGPREFIX/dot.gif' alt='' height='1' width='" . ($opts->{'depth'} * 25) . "'></td>";
             $ret .= "<td>$ML{'.replysuspended'}";
             if (LJ::Talk::can_delete($remote, $u, $up, $userpost)) {
@@ -485,7 +485,7 @@ body<=
                     $editreason = "($editreason)" if $editreason;
                 }
 
-                $ret .= "<div id='$htmlid'><table width='100%' class='talk-comment'><tbody><tr>";
+                $ret .= "<div id='$htmlid'><table summary='' width='100%' class='talk-comment'><tbody><tr>";
                 $ret .= "<td rowspan='2'><img src='$LJ::IMGPREFIX/dot.gif' alt='' height='1' width='" . ($opts->{'depth'} * 25) . "'></td>";
                 $ret .= "<td id='cmtbar$dtid' class='cmtbar-$level' style='background-color: $bgcolor' width='100%'>";
 
@@ -666,7 +666,7 @@ body<=
                 # link to message
 
                 my $url = LJ::Talk::talkargs( $talkurl, "thread=$dtid", $style_args ) . LJ::Talk::comment_anchor( $dtid );
-                $ret .= "<div id='$htmlid'><table ><tbody><tr>";
+                $ret .= "<div id='$htmlid'><table summary=''><tbody><tr>";
                 $ret .= "<td><img src='$LJ::IMGPREFIX/dot.gif' alt='' height='1' width='" . ($opts->{'depth'} * 25) . "'></td>";
                 $ret .= "<td>";
                 if ($post->{'state'} eq 'F') {
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/tools/emailmanage.bml
--- a/htdocs/tools/emailmanage.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/tools/emailmanage.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -133,6 +133,11 @@ body<=
         $ret .= "<form method='post' action='emailmanage$getextra'>";
         $ret .= LJ::form_auth();
         $ret .= "<table border='1' cellpadding='2' style='margin-bottom: 3px;'>\n";
+        $ret .= qq{<tr>
+                    <th>$ML{'.header.check'}</th>
+                    <th>$ML{'.header.email'}</th>
+                    <th>$ML{'.header.date'}</th>
+                </tr>};
         $ret .= $rows;
         $ret .= "</table>\n";
         $ret .= LJ::html_submit(undef, $ML{'.delete_selected'});
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/tools/emailmanage.bml.text
--- a/htdocs/tools/emailmanage.bml.text	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/tools/emailmanage.bml.text	Wed Nov 17 22:56:06 2010 +0800
@@ -29,6 +29,12 @@ attacker's email address.
 
 .desc.title=Description
 
+.header.check=Select
+
+.header.date=Date Added
+
+.header.email=Email Address
+
 .in_use_since=is in use since [[time]] 
 
 .log.deleted=Deleted: [[email]] @ [[time]]
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/tools/fck_poll.bml
--- a/htdocs/tools/fck_poll.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/tools/fck_poll.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -317,7 +317,7 @@ _c?>
         div.style.display = 'none';
 
         var html = '';
-        html += '<p><table><tr><td>Question #'+(q_num+1)+' </td><td><input name="question_'+q_num+'" type="text" size="50" value=""></td></tr>\n';
+        html += '<p><table summary=""><tr><td>Question #'+(q_num+1)+' </td><td><input name="question_'+q_num+'" type="text" size="50" value=""></td></tr>\n';
         html += '<tr>\n';
         html += '<td>Answer Type </td><td><select name="type_'+q_num+'">\n';
         html += '<option value="--"></option>\n';
@@ -372,7 +372,7 @@ _c?>
     <div id="QArray" style="height: 220px; border: 0px;">
         <div id="qa_0">
             <p>
-            <table>
+            <table summary="">
             <tr><td>Question #1 </td><td><input name="question_0" type="text" size="50" value=""></td></tr>
             <tr><td>Answer Type </td><td><select name="type_0">
             <option value="--"></option>
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/tools/recent_comments.bml
--- a/htdocs/tools/recent_comments.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/tools/recent_comments.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -163,7 +163,7 @@ body<=
         $ret .= $standoutbox->( "received" );
         $ret .= "<?h1 $ML{ '.latest.received' } h1?>";
         $ret .= "<?p " . (%talkids ? BML::ml('.last.num.posted.in', {num => $count}) : "$ML{ '.no.comments.posted' }") . " " . LJ::ljuser($u) . " p?>";
-        $ret .= "<table style='width: 100%' cellpadding='5' cellspacing='0'>";
+        $ret .= "<table summary='' style='width: 100%' cellpadding='5' cellspacing='0'>";
         foreach my $r (@recv) {
             next unless $r->{nodetype} eq "L";
             next if $r->{state} eq "D";
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/tools/tellafriend.bml
--- a/htdocs/tools/tellafriend.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/tools/tellafriend.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -132,7 +132,7 @@ _c?>
  # Display form with info filled in
  $body .= "<form method='post' action='tellafriend'>";
  $body .= LJ::html_hidden({ name => 'mode', value => 'mail' });
- $body .= "<table cellpadding=3 border=0>";
+ $body .= "<table summary='' cellpadding=3 border=0>";
 
  $body .= "<tr><td align=right nowrap>" . BML::ml( ".email.fromfield" ) . "</td><td>" .
           LJ::ehtml($u->{'name'} || $u->{'user'}) .
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/tools/userpicfactory.bml
--- a/htdocs/tools/userpicfactory.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/tools/userpicfactory.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -226,7 +226,7 @@ if (0) {
 
       <?standout <div style='float: right;'>
       <form action="$LJ::SITEROOT/editicons$sfx?authas=$GET{'authas'}" method="POST" enctype='multipart/form-data'>
-      <table cellpadding="4"><tr>
+      <table summary="" cellpadding="4"><tr>
       <td style='whitespace: nowrap'>
         <nobr><input type="checkbox" id="constrain" onchange="setConstrain();" />
         <label for="constrain">Keep square</nobr></label><br /><small>(or hold Shift)</small>
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/update.bml
--- a/htdocs/update.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/update.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -408,7 +408,7 @@ _c?>
                          $remote->set_prop('entry_editor', 'plain');
                  }
 
-                $$body .= "<table width='100%'><tr valign='top'><td>\n\n";
+                $$body .= "<table summary='' width='100%'><tr valign='top'><td>\n\n";
 
                 my ($ju, $itemlink);
                 # short bail if this was posted moderated or some other special case (no itemid but a message)
@@ -506,7 +506,7 @@ _c?>
         }
     }
 
-    $$body .= "<table width='100%'><tr valign='top'><td>";
+    $$body .= "<table summary='' width='100%'><tr valign='top'><td>";
     $print_entry_form->();
     $$body .= "</td>";
     $$body .= "<td>";
diff -r 909f01bd4446 -r 5a3fce12991a htdocs/view/index.bml
--- a/htdocs/view/index.bml	Wed Nov 17 19:34:04 2010 +0800
+++ b/htdocs/view/index.bml	Wed Nov 17 22:56:06 2010 +0800
@@ -145,7 +145,7 @@ _c?>
 
         $body .= "<?standout \n";
         $body .= "<form method='post' action='$LJ::SITEROOT/view/' style='display:inline'><input type='hidden' name='type' value='month' /><input type='hidden' name='user' value='$u->{'user'}' />";
-        $body .= "<table><tr valign='middle'>";
+        $body .= "<table summary=''><tr valign='middle'>";
         $body .= "<td><b>$prev</b></td>";
         $body .= "<td><select name='m'>";
         for (my $i=1;$i<=12;$i++) {
@@ -210,7 +210,7 @@ _c?>
             my $dayview_url = sprintf("$base/%04d/%02d/%02d/",
                                       $year, $month, $day);
             $body .= "<dt><b><a href=\"$dayview_url\">$day$ord</a></b></dt>";
-            $body .= "<dd><table cellpadding=2>";
+            $body .= "<dd><table summary='' cellpadding=2>";
         }
 
         # we need to convert the subject to UTF-8 if it's a pre-Unicode entry
diff -r 909f01bd4446 -r 5a3fce12991a views/admin/themes/category.tt
--- a/views/admin/themes/category.tt	Wed Nov 17 19:34:04 2010 +0800
+++ b/views/admin/themes/category.tt	Wed Nov 17 22:56:06 2010 +0800
@@ -28,7 +28,7 @@ td, th { padding: 4px; }
 [%- ELSE -%]
 [% '.delete.note' | ml %]
 [%- END -%][%- END -%]<br/>
-<table>
+<table summary=''>
 <tbody id="table_data">
 [%- FOREACH lay IN layers.keys.sort -%]
 <tr data-header="1">
diff -r 909f01bd4446 -r 5a3fce12991a views/shop/points.tt
--- a/views/shop/points.tt	Wed Nov 17 19:34:04 2010 +0800
+++ b/views/shop/points.tt	Wed Nov 17 22:56:06 2010 +0800
@@ -5,7 +5,7 @@
 <p>[% '.about' | ml(sitename = site.nameshort) %]</p>
 
 <form method='post'>
-<table class='shop-table-gift'>
+<table summary='' class='shop-table-gift'>
 [% IF foru %]
     <tr><td>[% '.buying.for' | ml %]</td><td>[% foru.ljuser_display %]
         <input type='hidden' name='foruser' value='[% foru.user %]' />
diff -r 909f01bd4446 -r 5a3fce12991a views/shop/transferpoints.tt
--- a/views/shop/transferpoints.tt	Wed Nov 17 19:34:04 2010 +0800
+++ b/views/shop/transferpoints.tt	Wed Nov 17 22:56:06 2010 +0800
@@ -31,7 +31,7 @@
 
         <form method='post'>
             [% dw.form_auth %]
-            <table class='shop-table-gift'>
+            <table summary='' class='shop-table-gift'>
             [% IF foru %]
                 <tr><td>[% '.buying.for' | ml %]</td><td>[% foru.ljuser_display %]
                     <input type='hidden' name='foruser' value='[% foru.user %]' />
--------------------------------------------------------------------------------

Post a comment in response:

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org