From ae60b5845f6fdaf613c72573543c776cb06dc9b3 Mon Sep 17 00:00:00 2001 From: ansuz Date: Thu, 31 Aug 2017 18:12:13 +0200 Subject: [PATCH] implement search-by-tag for filesData --- www/common/userObject.js | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/www/common/userObject.js b/www/common/userObject.js index 8317728a0..216c3f738 100644 --- a/www/common/userObject.js +++ b/www/common/userObject.js @@ -387,12 +387,40 @@ define([ }; exp.search = function (value) { if (typeof(value) !== "string") { return []; } + value = value.trim(); var res = []; // Search title var allFilesList = files[FILES_DATA]; var lValue = value.toLowerCase(); + + // parse the search string into tags + var tags; + lValue.replace(/^#(.*)/, function (all, t) { + tags = t.split(/\s+/) + .map(function (tag) { + return tag.replace(/^#/, ''); + }).filter(function (x) { + return x; + }); + }); + + /* returns true if an entry's tags are at least a partial match for + one of the specified tags */ + var containsSearchedTag = function (T) { + if (!tags) { return false; } + if (!T.length) { return false; } + return tags.some(function (tag) { + return T.some(function (t) { + return t.indexOf(tag) !== -1; + }); + }); + }; + getFiles([FILES_DATA]).forEach(function (id) { var data = allFilesList[id]; + if (Array.isArray(data.tags) && containsSearchedTag(data.tags)) { + res.push(id); + } else if ((data.title && data.title.toLowerCase().indexOf(lValue) !== -1) || (data.filename && data.filename.toLowerCase().indexOf(lValue) !== -1)) { res.push(id);