table: Support header=column to make the table header be the first column of the...
authorJoey Hess <joey@kodama.kitenet.net>
Tue, 2 Sep 2008 18:57:20 +0000 (14:57 -0400)
committerJoey Hess <joey@kodama.kitenet.net>
Tue, 2 Sep 2008 18:57:20 +0000 (14:57 -0400)
IkiWiki/Plugin/table.pm
debian/changelog
doc/plugins/table.mdwn
doc/plugins/table/discussion.mdwn
doc/todo/table_with_header_column.mdwn

index 1302646b130084fefd87456d2f905b8c4c2cfea6..55d78a3e1c0e17592a8fc3429f5298614df5f89e 100644 (file)
@@ -22,7 +22,7 @@ sub getsetup () { #{{{
 sub preprocess (@) { #{{{
        my %params =(
                format  => 'auto',
-               header  => 'yes',
+               header  => 'row',
                @_
        );
 
@@ -74,7 +74,7 @@ sub preprocess (@) { #{{{
        }
 
        my $header;
-       if (lc($params{header}) eq "yes") {
+       if (lc($params{header}) eq "row" || lc($params{header}) eq "yes") {
                $header=shift @data;
        }
        if (! @data) {
@@ -86,11 +86,10 @@ sub preprocess (@) { #{{{
                        ? "<table class=\"".$params{class}.'">'
                        : '<table>';
        push @lines, "\t<thead>",
-               genrow($params{page}, $params{destpage}, "th", @$header),
+               genrow(\%params, "th", @$header),
                "\t</thead>" if defined $header;
        push @lines, "\t<tbody>" if defined $header;
-       push @lines, genrow($params{page}, $params{destpage}, "td", @$_)
-               foreach @data;
+       push @lines, genrow(\%params, "td", @$_) foreach @data;
        push @lines, "\t</tbody>" if defined $header;
        push @lines, '</table>';
        my $html = join("\n", @lines);
@@ -153,26 +152,39 @@ sub split_dsv ($$) { #{{{
        return @data;
 } #}}}
 
-sub genrow ($$$@) { #{{{
-       my $page = shift;
-       my $destpage = shift;
+sub genrow ($@) { #{{{
+       my %params=%{shift()};
        my $elt = shift;
        my @data = @_;
 
+       my $page=$params{page};
+       my $destpage=$params{destpage};
+       my $type=pagetype($pagesources{$page});
+
        my @ret;
        push @ret, "\t\t<tr>";
        for (my $x=0; $x < @data; $x++) {
-               my $cell=htmlize($page, $destpage, $data[$x]);
+               my $cell=IkiWiki::htmlize($page, $destpage, $type,
+                        IkiWiki::preprocess($page, $destpage, $data[$x]));
+
+               # automatic colspan for empty cells
                my $colspan=1;
                while ($x+1 < @data && $data[$x+1] eq '') {
                        $x++;
                        $colspan++;
                }
+
+               # check if the first column should be a header
+               my $e=$elt;
+               if ($x == 0 && lc($params{header}) eq "column") {
+                       $e="th";
+               }
+
                if ($colspan > 1) {
-                       push @ret, "\t\t\t<$elt colspan=\"$colspan\">$cell</$elt>"
+                       push @ret, "\t\t\t<$e colspan=\"$colspan\">$cell</$e>"
                }
                else {
-                       push @ret, "\t\t\t<$elt>$cell</$elt>"
+                       push @ret, "\t\t\t<$e>$cell</$e>"
                }
        }
        push @ret, "\t\t</tr>";
@@ -180,12 +192,4 @@ sub genrow ($$$@) { #{{{
        return @ret;
 } #}}}
 
-sub htmlize ($$$) { #{{{
-       my $page = shift;
-       my $destpage = shift;
-
-       return IkiWiki::htmlize($page, $destpage, pagetype($pagesources{$page}),
-               IkiWiki::preprocess($page, $destpage, shift));
-}
-
 1
index 85c550c289a9c1ce6151c4a786877ebe33ebf162..590e066545ae6a74a7ab9e7c29a3aefd879df8bb 100644 (file)
@@ -9,6 +9,8 @@ ikiwiki (2.63) UNRELEASED; urgency=low
   * style.css: Add missing semicolon. Closes: #497176 
   * filecheck: Fall back to testing for binary or plain text files
     if no mime type is detected.
+  * table: Support header=column to make the table header be the first
+    column of the data. (AlexandreDupas)
 
  -- Joey Hess <joeyh@debian.org>  Thu, 28 Aug 2008 16:08:18 -0400
 
index b99bb7cd5d0a9d692ce0c0830d0f0c2caee03f06..2dccb9458be29873780e8e5c8aea3ce5070c4e45 100644 (file)
@@ -41,5 +41,6 @@ cells. For example:
 * `delimiter` - The character used to separate fields. By default,
    DSV format uses a pipe (`|`), and CSV uses a comma (`,`).
 * `class` - A CSS class for the table html element.
-* `header` - Set to "no" to make a table without a header. By default,
-  the first data line is used as the table header.
+* `header` - By default, or if set to "row", the first data line is used
+  as the table header. Set it to "no" to make a table without a header, or
+  "column" to make the first column be the header.
index 7228a83df0504a98bdff2f62c7e2875f5750694f..675f7f7df86a54ad51d403029a16dc01ed56dcfe 100644 (file)
@@ -24,3 +24,8 @@ Here is the links to the patch and to a patched version of the plugin :
 I hope this might be intresting for some ikiwiki user's.
 
 --[[AlexandreDupas]]
+
+> Thanks for the patch, I've merged it in.
+> (Just FYI, in future, I recommend using a unified diff. Also, not
+> renaming variables that don't really need to be renamed makes your patch
+> easier to apply.) --[[Joey]]
index 36aee6f2afe489a9dbe73b830a45ba327e46aa33..a729ffaebe11489397b048111ab618203f9434ef 100644 (file)
@@ -3,3 +3,5 @@ Tables support a header row or no header, but do not support a header column.
 > I have proposed a patch to the table plugin that enable such behaviour: [[table/discussion|plugins/table/discussion]].
 >
 > -- [[AlexandreDupas]]
+
+>> [applied|done]]