mirror of
https://github.com/RSS-Bridge/rss-bridge.git
synced 2024-11-29 14:48:52 +03:00
52b90e0873
- the URL was only partially encoded because encodeURI() was used instead of encodeURIComponent() Now the whole URL is urlencoded, and the whole URL is passed as is in the GET parameter 'url'
128 lines
5.1 KiB
JavaScript
128 lines
5.1 KiB
JavaScript
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';
|
|
}
|
|
}
|
|
}
|
|
|
|
function rssbridge_toggle_bridge(){
|
|
var fragment = window.location.hash.substr(1);
|
|
var bridge = document.getElementById(fragment);
|
|
|
|
if(bridge !== null) {
|
|
bridge.getElementsByClassName('showmore-box')[0].checked = true;
|
|
}
|
|
}
|
|
|
|
var rssbridge_feed_finder = (function() {
|
|
/*
|
|
* Code for "Find feed by URL" feature
|
|
*/
|
|
|
|
// Start the Feed search
|
|
async function rssbridge_feed_search(event) {
|
|
const input = document.getElementById('searchfield');
|
|
let content = encodeURIComponent(input.value);
|
|
if (content) {
|
|
const findfeedresults = document.getElementById('findfeedresults');
|
|
findfeedresults.innerHTML = 'Searching for matching feeds ...';
|
|
let baseurl = window.location.protocol + window.location.pathname;
|
|
let url = baseurl + '?action=findfeed&format=Html&url=' + content;
|
|
const response = await fetch(url);
|
|
if (response.ok) {
|
|
const data = await response.json();
|
|
rss_bridge_feed_display_found_feed(data);
|
|
} else {
|
|
rss_bridge_feed_display_feed_search_fail();
|
|
}
|
|
} else {
|
|
rss_bridge_feed_display_find_feed_empty();
|
|
}
|
|
}
|
|
|
|
// Display the found feeds
|
|
function rss_bridge_feed_display_found_feed(obj) {
|
|
const findfeedresults = document.getElementById('findfeedresults');
|
|
|
|
let content = 'Found Feed(s) :';
|
|
|
|
// Let's go throug every Feed found
|
|
for (const element of obj) {
|
|
content += `<div class="search-result">
|
|
<div class="icon">
|
|
<img src="${element.bridgeMeta.icon}" width="60" />
|
|
</div>
|
|
<div class="content">
|
|
<h2><a href="${element.url}">${element.bridgeMeta.name}</a></h2>
|
|
<p>
|
|
<span class="description"><a href="${element.url}">${element.bridgeMeta.description}</a></span>
|
|
</p>
|
|
<div>
|
|
<ul>`;
|
|
|
|
// Now display every Feed parameter
|
|
for (const param in element.bridgeData) {
|
|
content += `<li>${element.bridgeData[param].name} : ${element.bridgeData[param].value}</li>`;
|
|
}
|
|
content += `</div>
|
|
</div>
|
|
</div>`;
|
|
}
|
|
content += '<p><div class="alert alert-info" role="alert">This feed may be only one of the possible feeds. You may find more feeds using one of the bridges with different parameters, for example.</div></p>';
|
|
findfeedresults.innerHTML = content;
|
|
}
|
|
|
|
// Display an error if no feed were found
|
|
function rss_bridge_feed_display_feed_search_fail() {
|
|
const findfeedresults = document.getElementById('findfeedresults');
|
|
findfeedresults.innerHTML = 'No Feed found !<div class="alert alert-info" role="alert">Not every bridge supports feed detection. You can check below within the bridge parameters to create a feed.</div>';
|
|
}
|
|
|
|
// Empty the Found Feed section
|
|
function rss_bridge_feed_display_find_feed_empty() {
|
|
const findfeedresults = document.getElementById('findfeedresults');
|
|
findfeedresults.innerHTML = '';
|
|
}
|
|
|
|
// Add Event to 'Detect Feed" button
|
|
var rssbridge_feed_finder = function() {
|
|
const button = document.getElementById('findfeed');
|
|
button.addEventListener("click", rssbridge_feed_search);
|
|
button.addEventListener("keyup", rssbridge_feed_search);
|
|
};
|
|
return rssbridge_feed_finder;
|
|
}());
|