Просмотр исходного кода

Implements OpenSearch support, closes #107

Kadin Buckton 6 лет назад
Родитель
Сommit
8bffb61e68
3 измененных файлов с 25 добавлено и 0 удалено
  1. 11 0
      src/routes/search.nim
  2. 2 0
      src/views/general.nim
  3. 12 0
      src/views/opensearch.nimf

+ 11 - 0
src/routes/search.nim

@@ -6,6 +6,8 @@ import router_utils
 import ".."/[query, types, api, agents]
 import ../views/[general, search]
 
+include "../views/opensearch.nimf"
+
 export search
 
 proc createSearchRouter*(cfg: Config) =
@@ -33,3 +35,12 @@ proc createSearchRouter*(cfg: Config) =
 
     get "/hashtag/@hash":
       redirect("/search?q=" & encodeUrl("#" & @"hash"))
+
+    get "/opensearch":
+      var url = ""
+      if cfg.useHttps:
+        url = "https://" & cfg.hostname & "/search?q="
+      else:
+        url = "http://" & cfg.hostname & "/search?q="
+      resp Http200, {"Content-Type": "application/opensearchdescription+xml"},
+                    generateOpenSearchXML(cfg.title, cfg.hostname, url)

+ 2 - 0
src/views/general.nim

@@ -43,6 +43,8 @@ proc renderHead*(prefs: Prefs; cfg: Config; titleText=""; desc=""; video="";
     link(rel="icon", type="image/png", sizes="16x16", href="/favicon-16x16.png")
     link(rel="manifest", href="/site.webmanifest")
     link(rel="mask-icon", href="/safari-pinned-tab.svg", color="#ff6c60")
+    link(rel="search", type="application/opensearchdescription+xml", title=cfg.title,
+                            href="http://localhost:8080/opensearch")
 
     if prefs.hlsPlayback:
       script(src="/js/hls.light.min.js")

+ 12 - 0
src/views/opensearch.nimf

@@ -0,0 +1,12 @@
+#? stdtmpl(subsChar = '$', metaChar = '#')
+#proc generateOpenSearchXML*(name, hostname, url: string): string =
+#  result = ""
+<?xml version="1.0" encoding="UTF-8"?>
+<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/"
+                       xmlns:moz="http://www.mozilla.org/2006/browser/search/">
+  <ShortName>${name}</ShortName>
+  <Description>Twitter search via ${hostname}</Description>
+  <InputEncoding>UTF-8</InputEncoding>
+  <Url type="text/html" template="${url}{searchTerms}" />
+</OpenSearchDescription>
+#end proc