From: Joey Hess <joey@kodama.kitenet.net>
Date: Sat, 2 Aug 2008 18:35:23 +0000 (-0400)
Subject: basic form display done
X-Git-Tag: 2.60~122
X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/commitdiff_plain/b0f4767448670ca53aa84e1748a887c7bfccd4f3

basic form display done
---

diff --git a/IkiWiki/Plugin/websetup.pm b/IkiWiki/Plugin/websetup.pm
index e1536a1a7..a30475977 100644
--- a/IkiWiki/Plugin/websetup.pm
+++ b/IkiWiki/Plugin/websetup.pm
@@ -12,6 +12,56 @@ sub import { #{{{
 	     call => \&formbuilder_setup);
 } # }}}
 
+sub addfields ($$@) {
+	my $form=shift;
+	my $section=shift;
+
+	while (@_) {
+		my $key=shift;
+		my %info=%{shift()};
+
+		next if ! $info{safe} || $info{type} eq "internal";
+
+		my $description=exists $info{description_html} ? $info{description_html} : $info{description};
+
+		my $value=$config{$key};
+		# multiple plugins can have the same key
+		my $name=$section.".".$key;
+
+		if ($info{type} eq "string") {
+			$form->field(
+				name => $name,
+				label => $description,
+				comment => exists $info{example} && length $info{example} && $info{example} ne $value ? "<br/ ><small>Example: <tt>$info{example}</tt></small>" : "",
+				type => "text",
+				value => $value,
+				size => 60,
+				fieldset => $section,
+			);
+		}
+		elsif ($info{type} eq "integer") {
+			$form->field(
+				name => $name,
+				label => $description,
+				type => "text",
+				value => $value,
+				validate => '/^[0-9]+$/',
+				fieldset => $section,
+			);
+		}
+		elsif ($info{type} eq "boolean") {
+			$form->field(
+				name => $name,
+				label => "",
+				type => "checkbox",
+				value => $value,
+				options => [ [ 1 => $description ] ],
+				fieldset => $section,
+			);
+		}
+	}
+}
+
 sub showform ($$) { #{{{
 	my $cgi=shift;
 	my $session=shift;
@@ -30,6 +80,7 @@ sub showform ($$) { #{{{
 		header => 0,
 		charset => "utf-8",
 		method => 'POST',
+		javascript => 0,
 		params => $cgi,
 		action => $config{cgiurl},
 		template => {type => 'div'},
@@ -46,9 +97,12 @@ sub showform ($$) { #{{{
 
 	$form->field(name => "do", type => "hidden", value => "setup",
 		force => 1);
-
-	if (! $form->submitted) {
-		# TODO
+	addfields($form, gettext("main"), IkiWiki::getsetup());
+	require IkiWiki::Setup;
+	foreach my $pair (IkiWiki::Setup::getsetup()) {
+		my $plugin=$pair->[0];
+		my $setup=$pair->[1];
+		addfields($form, $plugin." ".gettext("plugin"), @{$setup});
 	}
 
 	if ($form->submitted eq "Cancel") {