Browse Source

add basic wiktionary support

Andrew Dolgov 11 months ago
parent
commit
337bd2bdf5
4 changed files with 35 additions and 1 deletions
  1. 9 0
      backend.php
  2. 24 0
      js/read.js
  3. 1 1
      js/reader.js
  4. 1 0
      read.html

+ 9 - 0
backend.php

@@ -231,6 +231,15 @@
 
 		break;
 
+	case "wikisearch":
+		$query = urlencode(strip_tags($_REQUEST['query']));
+		$url = "https://en.wiktionary.org/w/api.php?titles=${query}&action=query&prop=extracts&format=json&exlimit=1";
+
+		if ($resp = file_get_contents($url)) {
+			print $resp;
+		}
+
+		break;
 	case "define":
 
 		if (defined('DICT_ENABLED') && DICT_ENABLED) {

+ 24 - 0
js/read.js

@@ -344,6 +344,30 @@ function init_reader() {
 		window.open("https://duckduckgo.com/?q=" + $(".dict_query").val());
 	});
 
+	$(".wiki_search_btn").on("click", function() {
+		$(".dict_result").html("Loading, please wait...");
+
+		$.post("backend.php", {op: "wikisearch", query: $(".dict_query").val()})
+			.then((resp) => {
+				try {
+					let tmp = "";
+
+					$.each(resp.query.pages, (i,p) => {
+						tmp += p.extract;
+					});
+
+					$(".dict_result").html(tmp && tmp != "undefined" ? tmp : "No definition found for " + $(".dict_query").val() + ".");
+				} catch (e) {
+					console.error(e);
+					$(".dict_result").text("Error while processing data: " + e);
+				}
+			})
+			.fail((e) => {
+				console.error(e);
+				$(".dict_result").text("Error while retrieving data.");
+			})
+	});
+
 	function toc_loc_msg(href) {
 		try {
 			const cfiBase = book.spine.get(href).cfiBase;

+ 1 - 1
js/reader.js

@@ -18,7 +18,7 @@ $(document).ready(function() {
 
 		const sel = getSelection().toString().trim();
 
-		if (!sel.match(/^\w+$/)) {
+		if (sel.match(/^$/)) {
 			parent.toggle_fullscreen();
 		}
 	});

+ 1 - 0
read.html

@@ -131,6 +131,7 @@
 			<div class="dict_result"> </div>
       </div>
       <div class="modal-footer">
+        <button type="button" class="wiki_search_btn btn-default btn">Wiktionary</button>
         <button type="button" class="dict_search_btn btn-default btn">Web search</button>
         <button type="button" class="btn btn-primary" data-dismiss="modal">Close</button>
       </div>