summaryrefslogtreecommitdiff
path: root/js
diff options
context:
space:
mode:
Diffstat (limited to 'js')
-rw-r--r--js/catalog-search.js50
1 files changed, 50 insertions, 0 deletions
diff --git a/js/catalog-search.js b/js/catalog-search.js
new file mode 100644
index 00000000..ac7ef57a
--- /dev/null
+++ b/js/catalog-search.js
@@ -0,0 +1,50 @@
+/*
+ * catalog-search.js
+ * https://github.com/mgrabovsky/lainchan/blob/catalog-search/js/catalog-search.js
+ *
+ * Released under the MIT license
+ * Copyright (c) 2015 Matěj Grabovský <matej.grabovsky@gmail.com>
+ *
+ * Usage:
+ * $config['additional_javascript'][] = 'js/jquery.min.js';
+ * $config['additional_javascript'][] = 'js/catalog-search.js';
+ */
+
+(function() {
+
+var catalogSearch = function() {
+ var $controls = $('.controls'),
+ $threads = $('.threads .thread'),
+ $searchLabel = $('<label for="catalog_search">Search: </label>'),
+ $searchBox = $('<input id="catalog_search" type="search" placeholder="Search" />');
+
+ $controls.append($searchLabel)
+ .append($searchBox);
+
+ $searchBox.keyup(function() {
+ var $found = searchThreads($threads, this.value);
+ $threads.hide();
+ $found.show();
+ });
+
+ var m = location.hash.match(/[#&]s=([^&]+)/);
+ if(m) {
+ $searchBox.val(decodeURIComponent(m[1])).keyup();
+ }
+};
+
+// Filter threads by their content, given a regex. Can be extended to load data
+// remotely and filter by multiple fields
+var searchThreads = function($threads, query) {
+ var re = new RegExp(query, 'mi');
+ return $threads.filter(function() {
+ return re.test($('.replies', this).text());
+ });
+};
+
+// Only load in the catalog
+if (active_page == 'catalog') {
+ onready(catalogSearch);
+}
+
+}());