diff --git a/nasg.py b/nasg.py
index c8c1129..08e4e3e 100644
--- a/nasg.py
+++ b/nasg.py
@@ -326,6 +326,7 @@ class MarkdownDoc(object):
@property
def dt(self):
+ """ this returns a timestamp, not an arrow object """
maybe = self.mtime
for key in ['published', 'date']:
t = self.meta.get(key, None)
@@ -500,7 +501,6 @@ class Singular(MarkdownDoc):
maybe = self.dt
if len(self.comments):
for c in self.comments.values():
-
if c.dt > maybe:
maybe = c.dt
return maybe
@@ -1574,7 +1574,7 @@ class Search(PHPFile):
return ret
def append(self, post):
- mtime = int(post.mtime)
+ mtime = int(post.published.timestamp)
check = self.check(post.name)
if (check and check < mtime):
self.db.execute('''
@@ -1602,24 +1602,22 @@ class Search(PHPFile):
self.is_changed = True
@property
- def renderfile(self):
- return os.path.join(
- settings.paths.get('build'),
- 'search.php'
- )
-
- @property
- def templatefile(self):
- return 'Search.j2.php'
+ def templates(self):
+ return ['Search.j2.php', 'OpenSearch.j2.php', 'OpenSearch.j2.xml']
async def _render(self):
- r = J2.get_template(self.templatefile).render({
- 'post': {},
- 'site': settings.site,
- 'menu': settings.menu,
- 'meta': settings.meta,
- })
- writepath(self.renderfile, r)
+ for template in self.templates:
+ r = J2.get_template(template).render({
+ 'post': {},
+ 'site': settings.site,
+ 'menu': settings.menu,
+ 'meta': settings.meta,
+ })
+ target = os.path.join(
+ settings.paths.get('build'),
+ template.replace('.j2', '').lower()
+ )
+ writepath(target, r)
class IndexPHP(PHPFile):
diff --git a/templates/OpenSearch.j2.php b/templates/OpenSearch.j2.php
new file mode 100644
index 0000000..09e2aae
--- /dev/null
+++ b/templates/OpenSearch.j2.php
@@ -0,0 +1,66 @@
+prepare("
+ SELECT
+ url, category, title, snippet(data, '', '', '[...]', 5, 24), mtime
+ FROM
+ data
+ WHERE
+ data MATCH :q
+ ORDER BY
+ category
+");
+$sql->bindValue(':q', $q);
+$query = $sql->execute();
+$results = array();
+if($query) {
+ while ($row = $query->fetchArray(SQLITE3_ASSOC)) {
+ array_push($results, $row);
+ }
+}
+
+foreach ($results as $row) {
+ $item_node = $channel_node->appendChild($xml->createElement("item"));
+ $title_node = $item_node->appendChild($xml->createElement("title", $row['title']));
+ $link_node = $item_node->appendChild($xml->createElement("link", $row['url']));
+ $guid_link = $xml->createElement("guid", $row['url']);
+ $guid_link->setAttribute("isPermaLink","true");
+ $guid_node = $item_node->appendChild($guid_link);
+ $description_node = $item_node->appendChild($xml->createElement("description"));
+ $description_contents = $xml->createCDATASection(htmlentities($row["snippet(data, '', '', '[...]', 5, 24)"]));
+ $description_node->appendChild($description_contents);
+ $date_rfc = gmdate(DATE_RFC2822, $row['mtime']);
+ $pub_date = $xml->createElement("pubDate", $date_rfc);
+ $pub_date_node = $item_node->appendChild($pub_date);
+}
+
+header('Content-Type: text/xml; charset=utf-8', true);
+
+$xml = new DOMDocument("1.0", "UTF-8");
+$xml->preserveWhiteSpace = false;
+$xml->formatOutput = true;
+
+$rss = $xml->createElement("rss");
+$rss_node = $xml->appendChild($rss);
+$rss_node->setAttribute("version","2.0");
+
+
+$rss_node->setAttribute("xmlns:dc","http://a9.com/-/spec/opensearch/1.1/");
+
+$channel = $xml->createElement("channel");
+$channel_node = $rss_node->appendChild($channel);
+
+$channel_node->appendChild($xml->createElement("title", "Search results for: {$_GET['q']}"));
+$channel_node->appendChild($xml->createElement("link", "{{ site.url }}"));
+$channel_node->appendChild($xml->createElement("description", "Search {{ site.name }} for {$_GET['q']}"));
+
+$channel_node->appendChild($xml->createElement("openSearch:totalResults", sizeof($results)));
+$channel_node->appendChild($xml->createElement("openSearch:startIndex", 1));
+$channel_node->appendChild($xml->createElement("openSearch:itemsPerPage", sizeof($results)));
+
+$build_date = gmdate(DATE_RFC2822, time());
+$channel_node->appendChild($xml->createElement("lastBuildDate", $build_date));
+
+echo $xml->saveXML();
diff --git a/templates/OpenSearch.j2.xml b/templates/OpenSearch.j2.xml
new file mode 100644
index 0000000..bf9faf4
--- /dev/null
+++ b/templates/OpenSearch.j2.xml
@@ -0,0 +1,9 @@
+
+
+ {{ site.name }}
+ Search {{ site.name }}
+
+
+ {{ site.image }}
+ UTF-8
+
diff --git a/templates/base.j2.html b/templates/base.j2.html
index f0fc7b3..3004150 100644
--- a/templates/base.j2.html
+++ b/templates/base.j2.html
@@ -23,6 +23,7 @@
+