From 502799a74cc31924b12b6914aa18a3dd217327d9 Mon Sep 17 00:00:00 2001 From: Dag Date: Sat, 6 Aug 2022 23:12:30 +0200 Subject: [PATCH] feat: use bridge description and short name in search (#2952) * refactor: search.js * feat: use bridge description and short name in search * fix bug in previous merge commit Also reformat string from tabs to spaces --- lib/BridgeAbstract.php | 11 +++-- lib/BridgeCard.php | 23 ++++++---- lib/BridgeInterface.php | 2 + lib/BridgeList.php | 16 ++++--- static/search.js | 96 ++++++++++++++++------------------------- 5 files changed, 74 insertions(+), 74 deletions(-) diff --git a/lib/BridgeAbstract.php b/lib/BridgeAbstract.php index e91c8ae9..5752f55b 100644 --- a/lib/BridgeAbstract.php +++ b/lib/BridgeAbstract.php @@ -264,7 +264,7 @@ abstract class BridgeAbstract implements BridgeInterface public function loadConfiguration() { foreach (static::CONFIGURATION as $optionName => $optionValue) { - $section = (new ReflectionClass($this))->getShortName(); + $section = $this->getShortName(); $configurationOption = Configuration::getConfig($section, $optionName); if ($configurationOption !== null) { @@ -384,7 +384,7 @@ abstract class BridgeAbstract implements BridgeInterface $cache = $cacheFactory->create(); // Create class name without the namespace part - $scope = (new \ReflectionClass($this))->getShortName(); + $scope = $this->getShortName(); $cache->setScope($scope); $cache->setKey($key); if ($cache->getTime() < time() - $duration) { @@ -404,9 +404,14 @@ abstract class BridgeAbstract implements BridgeInterface $cacheFactory = new CacheFactory(); $cache = $cacheFactory->create(); - $scope = (new \ReflectionClass($this))->getShortName(); + $scope = $this->getShortName(); $cache->setScope($scope); $cache->setKey($key); $cache->saveData($value); } + + public function getShortName(): string + { + return (new \ReflectionClass($this))->getShortName(); + } } diff --git a/lib/BridgeCard.php b/lib/BridgeCard.php index 900671ca..727680cf 100644 --- a/lib/BridgeCard.php +++ b/lib/BridgeCard.php @@ -58,12 +58,19 @@ final class BridgeCard ]; } + $shortName = $bridge->getShortName(); $card = << -

{$name}

-

{$description}

- - +
+ +

{$name}

+

{$description}

+ + CARD; // If we don't have any parameter for the bridge, we print a generic form to load it. @@ -116,9 +123,9 @@ CARD; private static function getFormHeader($bridgeClassName, $isHttps = false, $parameterName = '') { $form = << - - +
+ + EOD; if (!empty($parameterName)) { diff --git a/lib/BridgeInterface.php b/lib/BridgeInterface.php index 6cf949c8..b461ed12 100644 --- a/lib/BridgeInterface.php +++ b/lib/BridgeInterface.php @@ -143,4 +143,6 @@ interface BridgeInterface * @return array|null List of bridge parameters or null if detection failed. */ public function detectParameters($url); + + public function getShortName(): string; } diff --git a/lib/BridgeList.php b/lib/BridgeList.php index 41b1f267..077b39ac 100644 --- a/lib/BridgeList.php +++ b/lib/BridgeList.php @@ -36,7 +36,7 @@ final class BridgeList return '' . BridgeList::getHead() - . '' + . '' . BridgeList::getHeader() . BridgeList::getSearchbar() . BridgeList::getBridges($showInactive, $totalBridges, $totalActiveBridges) @@ -152,10 +152,16 @@ EOD; return << -

Search

- +

Search

+
EOD; } diff --git a/static/search.js b/static/search.js index 788286d8..93bede3d 100644 --- a/static/search.js +++ b/static/search.js @@ -1,60 +1,40 @@ -function search() { - - var searchTerm = document.getElementById('searchfield').value; - var searchableElements = document.getElementsByTagName('section'); - - var regexMatch = new RegExp(searchTerm, 'i'); - - // Attempt to create anchor from search term (will default to 'localhost' on failure) - var searchTermUri = document.createElement('a'); - searchTermUri.href = searchTerm; - - if(searchTermUri.hostname == 'localhost') { - searchTermUri = null; - } else { - - // Ignore "www." - if(searchTermUri.hostname.indexOf('www.') === 0) { - searchTermUri.hostname = searchTermUri.hostname.substr(4); - } - - } - - for(var i = 0; i < searchableElements.length; i++) { - - var textValue = searchableElements[i].getAttribute('data-ref'); - var anchors = searchableElements[i].getElementsByTagName('a'); - - if(anchors != null && anchors.length > 0) { - - var uriValue = anchors[0]; // First anchor is bridge URI - - // Ignore "www." - if(uriValue.hostname.indexOf('www.') === 0) { - uriValue.hostname = uriValue.hostname.substr(4); - } - - } - - if(textValue != null && uriValue != null) { - - if(textValue.match(regexMatch) != null || - uriValue.hostname.match(regexMatch) || - searchTermUri != null && - uriValue.hostname != 'localhost' && ( - uriValue.href.match(regexMatch) != null || - uriValue.hostname == searchTermUri.hostname)) { - - searchableElements[i].style.display = 'block'; - - } else { - - searchableElements[i].style.display = 'none'; - - } - - } - - } +function rssbridge_list_search() { + function remove_www_from_url(url) { + if (url.hostname.indexOf('www.') === 0) { + url.hostname = url.hostname.substr(4); + } + } + var search = document.getElementById('searchfield').value; + var searchAsUrl = document.createElement('a'); + searchAsUrl.href = search; + remove_www_from_url(searchAsUrl); + var bridgeCards = document.querySelectorAll('section.bridge-card'); + for (var i = 0; i < bridgeCards.length; i++) { + var bridgeName = bridgeCards[i].getAttribute('data-ref'); + var bridgeShortName = bridgeCards[i].getAttribute('data-short-name'); + var bridgeDescription = bridgeCards[i].querySelector('.description'); + var bridgeUrl = bridgeCards[i].getElementsByTagName('a')[0]; + remove_www_from_url(bridgeUrl); + bridgeCards[i].style.display = 'none'; + if (!bridgeName || !bridgeUrl) { + continue; + } + var searchRegex = new RegExp(search, 'i'); + if (bridgeName.match(searchRegex)) { + bridgeCards[i].style.display = 'block'; + } + if (bridgeShortName.match(searchRegex)) { + bridgeCards[i].style.display = 'block'; + } + if (bridgeDescription.textContent.match(searchRegex)) { + bridgeCards[i].style.display = 'block'; + } + if (bridgeUrl.toString().match(searchRegex)) { + bridgeCards[i].style.display = 'block'; + } + if (bridgeUrl.hostname === searchAsUrl.hostname) { + bridgeCards[i].style.display = 'block'; + } + } }