From: Louis <spalax@gresille.org>
Date: Sat, 5 Jul 2014 10:11:18 +0000 (+0200)
Subject: Simplifying code
X-Git-Tag: 3.20150107~77^2~11
X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/commitdiff_plain/7f18c1ce48630507b744fa56b83999e8ca684606?hp=--cc

Simplifying code

Thanks to review from http://ikiwiki.info/todo/calendar_autocreate/
---

7f18c1ce48630507b744fa56b83999e8ca684606
diff --git a/IkiWiki/Plugin/calendar.pm b/IkiWiki/Plugin/calendar.pm
index 9a3a1584b..037262816 100644
--- a/IkiWiki/Plugin/calendar.pm
+++ b/IkiWiki/Plugin/calendar.pm
@@ -142,42 +142,46 @@ sub calendarlink($;$) {
 
 sub gencalendaryear {
 	my $year = shift;
+	my %params = @_;
 
-	if ($config{calendar_autocreate}) {
+	return unless $config{calendar_autocreate};
 
-		# Building year page
-		my $page = calendarlink($year);
+	# Building year page
+	my $page = calendarlink($year);
+	my $pagefile = newpagefile($page, $config{default_pageext});
+	add_autofile(
+		$pagefile, "calendar",
+		sub {return autocreate($page, $pagefile, $year);}
+	);
+
+	# Building month pages
+	foreach my $month (qw{01 02 03 04 05 06 07 08 09 10 11 12}) {
+		my $page = calendarlink($year, $month);
 		my $pagefile = newpagefile($page, $config{default_pageext});
 		add_autofile(
 			$pagefile, "calendar",
-			sub {return autocreate($page, $pagefile, $year);}
+			sub {return autocreate($page, $pagefile, $year, $month);}
 		);
+	}
 
-		# Building month pages
-		foreach my $month (qw{01 02 03 04 05 06 07 08 09 10 11 12}) {
-			my $page = calendarlink($year, $month);
-			my $pagefile = newpagefile($page, $config{default_pageext});
-			add_autofile(
-				$pagefile, "calendar",
-				sub {return autocreate($page, $pagefile, $year, $month);}
-			);
-		}
-
-		# Filling potential gaps in years (e.g. calendar goes from 2010 to 2014,
-		# and we just added year 2005. We have to had years 2006 to 2009.
-		if (not exists $wikistate{calendar}{minyear}) {
-			$wikistate{calendar}{minyear} = $year;
-		} elsif ($wikistate{calendar}{minyear} > $year) {
-			gencalendaryear($year + 1);
-			$wikistate{calendar}{minyear} -= 1;
-		}
-		if (not exists $wikistate{calendar}{maxyear}) {
-			$wikistate{calendar}{maxyear} = $year;
+	# Filling potential gaps in years (e.g. calendar goes from 2010 to 2014,
+	# and we just added year 2005. We have to had years 2006 to 2009).
+	return if $params{norecurse};
+	if (not exists $wikistate{calendar}{minyear}) {
+		$wikistate{calendar}{minyear} = $year;
+	} elsif ($wikistate{calendar}{minyear} > $year) {
+		foreach my $other ($year + 1 .. $wikistate{calendar}{minyear} - 1) {
+			gencalendaryear($other, norecurse => 1);
 		}
-		if ($wikistate{calendar}{maxyear} < $year) {
-			gencalendaryear($year - 1);
-			$wikistate{calendar}{maxyear} += 1;
+		$wikistate{calendar}{minyear} = $year;
+	}
+	if (not exists $wikistate{calendar}{maxyear}) {
+		$wikistate{calendar}{maxyear} = $year;
+	} elsif ($wikistate{calendar}{maxyear} < $year) {
+		foreach my $other ($wikistate{calendar}{maxyear} + 1 .. $year - 1) {
+			gencalendaryear($other, norecurse => 1);
 		}
+		$wikistate{calendar}{maxyear} = $year;
 	}
 }