Have filters add self as dependencies, rm whitespace.
[xhtml-compiler.git] / XHTMLCompiler / DOMFilter / NewsLinker.php
blob96a26c1c3ca41afe8c66e265bffb06b287cbd575
1 <?php
3 /**
4 * This filter, closely related with the News filter, generates links
5 * between news entries.
6 */
7 class XHTMLCompiler_DOMFilter_NewsLinker extends XHTMLCompiler_DOMFilter
9 protected $name = 'NewsLinker';
10 public function process(DOMDocument $dom, $page, $manager) {
11 if (!isset($page->attr['news'])) return;
12 $manager->addDependency(__FILE__);
14 // calculate forward and backward links
15 $fs = new FSTools();
16 // we assume that one directory up is the years directory. An alternate
17 // algorithm may be needed if we decide to allow further nesting.
18 // This code needs to be factored out
19 $result = $fs->globr(dirname($page->getDirname()), '*.xhtml');
20 // This doesn't work if there is more than one entry in a day
21 sort($result);
22 $prev = $next = null;
23 $found = false;
24 foreach ($result as $i => $entry) {
25 $base = basename($entry);
26 if (strlen($base) < 4 || !ctype_digit(substr($base, 0, 4))) {
27 continue;
29 if ($page->getSourcePath() == $entry) {
30 $found = true;
31 } elseif (!$found) {
32 $prev = $entry;
33 } else {
34 $next = $entry;
35 break;
39 $content = $dom->getElementById('content');
40 $body = $content->parentNode;
41 $nav = $dom->createElement('div');
42 $nav->setAttribute('id', 'news-navigation');
44 if ($prev) {
45 $prevPage = new XHTMLCompiler_Page($prev);
46 if (!$page->isCacheExistent()) {
47 // Force a new cache run
48 $prevPage->touch();
50 $prevDiv = $dom->createElement('div');
51 $prevDiv->setAttribute('class', 'prev');
52 $a = $dom->createElement('a', 'Previous');
53 $a->setAttribute('href', $prevPage->getAbsolutePath());
54 $prevDiv->appendChild($a);
55 $nav->appendchild($prevDiv);
58 $indexDiv = $dom->createElement('div');
59 $indexDiv->setAttribute('class', 'index');
60 $a = $dom->createElement('a', 'Index');
61 $indexDiv->appendChild($a);
62 //$nav->appendChild($indexDiv);
64 if ($next) {
65 $nextPage = new XHTMLCompiler_Page($next);
66 $nextDiv = $dom->createElement('div');
67 $nextDiv->setAttribute('class', 'next');
68 $a = $dom->createElement('a', 'Next');
69 $a->setAttribute('href', $nextPage->getAbsolutePath());
70 $nextDiv->appendChild($a);
71 $nav->appendChild($nextDiv);
74 $body->appendChild($nav);