aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuchen Pei <id@ypei.org>2023-07-24 11:56:38 +1000
committerYuchen Pei <id@ypei.org>2023-07-24 11:56:38 +1000
commitb2416995f4c1c29a3caf192c01193ae012857431 (patch)
tree797e63d4f4b61ec134483bb7f5462e64798ed240
parentf2d3c6ca51bfbf7620ddde9faf83ec5fd973abf5 (diff)
Make mediawiki the default engine
-rw-r--r--wiki-engine.el26
-rw-r--r--wiki-utils.el14
2 files changed, 19 insertions, 21 deletions
diff --git a/wiki-engine.el b/wiki-engine.el
index 8f666ef..dd72ce4 100644
--- a/wiki-engine.el
+++ b/wiki-engine.el
@@ -29,6 +29,10 @@
(require 'wiki-utils)
(require 'wiki-markup)
+;; TODO: make this a defcustom
+(defvar wiki-default-engine 'mediawiki
+ "The default wiki engine, when one is not supplied.")
+
(defun wiki-engine-html-url (site title)
"Return the url of the html webpage of TITLE on SITE."
(format "%s%s" (plist-get (alist-get site wiki-sites) :base-url)
@@ -74,10 +78,14 @@ And switch to the corresponding buffer."
(_ (kill-buffer)))
(wiki-save-string-and-switch to-insert title dir)))
+(defun wiki-compute-engine (site-info)
+ "Return :engine of SITE-INFO, or the default engine."
+ (or (plist-get site-info :engine) wiki-default-engine))
+
(defun wiki-engine-wiki-url (site title)
"Construct the url to fetch wiki of TITLE from SITE."
(let* ((site-info (alist-get site wiki-sites))
- (engine (plist-get site-info :engine))
+ (engine (wiki-compute-engine site-info))
(base-url (plist-get site-info :base-url)))
(pcase engine
('mediawiki (format "%s%s?action=raw" base-url title))
@@ -92,7 +100,7 @@ If the site has a `local' engine, \"fetch\" locally. Otherwise,
if `wiki-fetch-prefer-local' is non-nil, try fetching locally,
and if the title cannot be found locally, fetch remotely."
(when (string-empty-p title) (setq title "Main Page"))
- (let* ((engine (plist-get (alist-get site-id wiki-sites) :engine))
+ (let* ((engine (wiki-compute-engine (alist-get site-id wiki-sites)))
(found-local
(when (or wiki-fetch-prefer-local (eq engine 'local))
(wiki-find-file title (wiki-locate-dir site-id)
@@ -108,10 +116,16 @@ and if the title cannot be found locally, fetch remotely."
(setq-local wiki-site site-id
wiki-title title))))))
+(defun wiki-engine-mediawiki-api-wiki (base-url title)
+ (wiki-url-fetch-json
+ (format
+ "%sapi.php?action=query&format=json&titles=%s&prop=revisions&rvprop=content&rvslots=main"
+ base-url title)))
+
(defun wiki-engine-mediawiki-api-fetch (site-id title)
"Fetch TITLE from site with SITE-ID using mediawiki api."
(when (string-empty-p title) (setq title "Main Page"))
- (let* ((engine (plist-get (alist-get site-id wiki-sites) :engine))
+ (let* ((engine (wiki-compute-engine (alist-get site-id wiki-sites)))
(base-url (plist-get (alist-get site-id wiki-sites) :base-url))
(found-local
(when (or wiki-fetch-prefer-local (eq engine 'local))
@@ -132,10 +146,8 @@ and if the title cannot be found locally, fetch remotely."
'pages (alist-get
'query
(wiki-url-fetch-json
- (format
- "%sapi.php?action=query&titles=%s&prop=revisions&rvprop=content&rvslots=main&format=json"
- base-url
- title)
+ (wiki-engine-mediawiki-api-wiki
+ base-url title)
))))))
0))))
title
diff --git a/wiki-utils.el b/wiki-utils.el
index 61357d2..8408a4c 100644
--- a/wiki-utils.el
+++ b/wiki-utils.el
@@ -63,7 +63,6 @@ Assuming the current buffer to be a `url-retrieve' response buffer."
(defvar wiki-sites
'((local)
(archwiki :base-url "https://wiki.archlinux.org/title/"
- :engine mediawiki
:display-name "ArchWiki")
(debian-wiki :base-url "https://wiki.debian.org/"
:engine moinmoin
@@ -72,31 +71,24 @@ Assuming the current buffer to be a `url-retrieve' response buffer."
:engine oddmuse
:display-name "EmacsWiki")
(esp :base-url "https://wiki.endsoftwarepatents.org/wiki/"
- :engine mediawiki
:display-name "ESP Wiki")
(fandom-recipes :base-url "https://recipes.fandom.com/wiki/"
- :engine mediawiki
:display-name "Fandom Recipes Wiki")
(fsd :base-url "https://directory.fsf.org/wiki/"
- :engine mediawiki
:display-name "Free Software Directory")
(haskell-wiki :base-url "https://wiki.haskell.org/"
- :engine mediawiki
:display-name "Haskell Wiki")
(libreplanet :base-url "https://libreplanet.org/wiki/"
- :engine mediawiki
:display-name "Libreplanet Wiki")
(oddmuse :base-url "https://oddmuse.org/wiki/"
:engine oddmuse
:display-name "Oddmuse")
(parabolawiki :base-url "https://wiki.parabola.nu/"
- :engine mediawiki
:display-name "ParabolaWiki")
(python-wiki :base-url "https://wiki.python.org/moin/"
:engine moinmoin
:display-name "Python Wiki")
(termux-wiki :base-url "https://wiki.termux.com/wiki/"
- :engine mediawiki
:display-name "Termux Wiki")
(ubuntu-wiki :base-url "https://wiki.ubuntu.com/"
:engine moinmoin
@@ -106,23 +98,17 @@ Assuming the current buffer to be a `url-retrieve' response buffer."
:engine moinmoin
:display-name "Ubuntu Community Help Wiki")
(wikihow :base-url "https://www.wikihow.com/"
- :engine mediawiki
:display-name "wikiHow"
:fetcher wiki-engine-mediawiki-api-fetch)
(wikiindex :base-url "https://wikiindex.org/"
- :engine mediawiki
:display-name "WikiIndex")
(wikipedia-en :base-url "https://en.wikipedia.org/wiki/"
- :engine mediawiki
:display-name "Wikipedia EN")
(wikipedia-zh :base-url "https://zh.wikipedia.org/wiki/"
- :engine mediawiki
:display-name "Wikipedia ZH")
(wikivoyage-en :base-url "https://en.wikivoyage.org/wiki/"
- :engine mediawiki
:display-name "Wikivoyage EN")
(wiktionary-en :base-url "https://en.wiktionary.org/wiki/"
- :engine mediawiki
:display-name "Wiktionary EN")
)
"Alist of wiki sites.