Browse Source

Separate index and bridge card generating code into a separate classes (#734)

[html] Generate index and bridge cards using separate clases

Move HTML generating code from 'index.php' to 'Index.php', separating components into static functions.

Move HTML generation code for bridge cards from 'html.php' to 'BridgeCard.php', separating components into static functions.
LogMANOriginal 5 years ago
parent
commit
d83f2f285b
5 changed files with 390 additions and 380 deletions
  1. 3 80
      index.php
  2. 259 0
      lib/BridgeCard.php
  3. 126 0
      lib/BridgeList.php
  4. 2 0
      lib/RssBridge.php
  5. 0 300
      lib/html.php

+ 3 - 80
index.php

@@ -95,6 +95,7 @@ try {
 		$whitelist_selection = array_map('strtolower', $whitelist_selection);
 	}
 
+	$showInactive = filter_input(INPUT_GET, 'show_inactive', FILTER_VALIDATE_BOOLEAN);
 	$action = array_key_exists('action', $params) ? $params['action'] : null;
 	$bridge = array_key_exists('bridge', $params) ? $params['bridge'] : null;
 
@@ -180,8 +181,8 @@ try {
 			header('Content-Type: text/html');
 			die(buildBridgeException($e, $bridge));
 		}
-
-		die;
+	} else {
+		echo BridgeList::create($whitelist_selection, $showInactive);
 	}
 } catch(HttpException $e) {
 	http_response_code($e->getCode());
@@ -190,81 +191,3 @@ try {
 } catch(\Exception $e) {
 	die($e->getMessage());
 }
-
-$formats = Format::searchInformation();
-
-?>
-<!DOCTYPE html>
-<html lang="en">
-<head>
-	<meta charset="utf-8">
-	<meta name="viewport" content="width=device-width, initial-scale=1.0" />
-	<meta name="description" content="Rss-bridge" />
-	<title>RSS-Bridge</title>
-	<link href="static/style.css" rel="stylesheet">
-	<script src="static/search.js"></script>
-	<script src="static/select.js"></script>
-	<noscript>
-		<style>
-			.searchbar {
-				display: none;
-			}
-		</style>
-	</noscript>
-</head>
-
-<body onload="search()">
-	<?php
-		$status = '';
-		if(defined('DEBUG') && DEBUG === true) {
-			$status .= 'debug mode active';
-		}
-
-		$query = filter_input(INPUT_GET, 'q');
-
-		echo <<<EOD
-	<header>
-		<h1>RSS-Bridge</h1>
-		<h2>·Reconnecting the Web·</h2>
-		<p class="status">{$status}</p>
-	</header>
-	<section class="searchbar">
-		<h3>Search</h3>
-		<input type="text" name="searchfield"
-			id="searchfield" placeholder="Enter the bridge you want to search for"
-			onchange="search()" onkeyup="search()" value="{$query}">
-	</section>
-
-EOD;
-
-		$activeFoundBridgeCount = 0;
-		$showInactive = filter_input(INPUT_GET, 'show_inactive', FILTER_VALIDATE_BOOLEAN);
-		$inactiveBridges = '';
-		$bridgeList = Bridge::listBridges();
-		foreach($bridgeList as $bridgeName) {
-			if(Bridge::isWhitelisted($whitelist_selection, strtolower($bridgeName))) {
-				echo displayBridgeCard($bridgeName, $formats);
-						$activeFoundBridgeCount++;
-			} elseif($showInactive) {
-				// inactive bridges
-				$inactiveBridges .= displayBridgeCard($bridgeName, $formats, false) . PHP_EOL;
-			}
-		}
-		echo $inactiveBridges;
-	?>
-	<section class="footer">
-		<a href="https://github.com/RSS-Bridge/rss-bridge">RSS-Bridge ~ Public Domain</a><br />
-		<p class="version"> <?= Configuration::getVersion() ?> </p>
-		<?= $activeFoundBridgeCount; ?>/<?= count($bridgeList) ?> active bridges. <br />
-		<?php
-			if($activeFoundBridgeCount !== count($bridgeList)) {
-				// FIXME: This should be done in pure CSS
-				if(!$showInactive)
-					echo '<a href="?show_inactive=1"><button class="small">Show inactive bridges</button></a><br />';
-				else
-					echo '<a href="?show_inactive=0"><button class="small">Hide inactive bridges</button></a><br />';
-			}
-		?>
-	</section>
-	</body>
-</html>

+ 259 - 0
lib/BridgeCard.php

@@ -0,0 +1,259 @@
+<?php
+final class BridgeCard {
+
+	private static function buildFormatButtons($formats) {
+		$buttons = '';
+
+		foreach($formats as $name) {
+			$buttons .= '<button type="submit" name="format" value="'
+			. $name
+			. '">'
+			. $name
+			. '</button>'
+			. PHP_EOL;
+		}
+
+		return $buttons;
+	}
+
+	private static function getFormHeader($bridgeName, $isHttps = false) {
+		$form = <<<EOD
+			<form method="GET" action="?">
+				<input type="hidden" name="action" value="display" />
+				<input type="hidden" name="bridge" value="{$bridgeName}" />
+EOD;
+
+		if(!$isHttps) {
+			$form .= '<div class="secure-warning">Warning :
+This bridge is not fetching its content through a secure connection</div>';
+		}
+
+		return $form;
+	}
+
+	private static function getForm($bridgeName,
+	$formats,
+	$isActive = false,
+	$isHttps = false,
+	$parameterName = '',
+	$parameters = array()) {
+		$form = BridgeCard::getFormHeader($bridgeName, $isHttps);
+
+		foreach($parameters as $id => $inputEntry) {
+			if(!isset($inputEntry['exampleValue']))
+				$inputEntry['exampleValue'] = '';
+
+			if(!isset($inputEntry['defaultValue']))
+				$inputEntry['defaultValue'] = '';
+
+			$idArg = 'arg-'
+				. urlencode($bridgeName)
+				. '-'
+				. urlencode($parameterName)
+				. '-'
+				. urlencode($id);
+
+			$form .= '<label for="'
+				. $idArg
+				. '">'
+				. filter_var($inputEntry['name'], FILTER_SANITIZE_STRING)
+				. ' : </label>'
+				. PHP_EOL;
+
+			if(!isset($inputEntry['type']) || $inputEntry['type'] === 'text') {
+				$form .= BridgeCard::getTextInput($inputEntry, $idArg, $id);
+			} elseif($inputEntry['type'] === 'number') {
+				$form .= BridgeCard::getNumberInput($inputEntry, $idArg, $id);
+			} else if($inputEntry['type'] === 'list') {
+				$form .= BridgeCard::getListInput($inputEntry, $idArg, $id);
+			} elseif($inputEntry['type'] === 'checkbox') {
+				$form .= BridgeCard::getCheckboxInput($inputEntry, $idArg, $id);
+			}
+		}
+
+		if($isActive) {
+			$form .= BridgeCard::buildFormatButtons($formats);
+		} else {
+			$form .= '<span style="font-weight: bold;">Inactive</span>';
+		}
+
+		return $form . '</form>' . PHP_EOL;
+	}
+
+	private static function getInputAttributes($entry) {
+		$retVal = '';
+
+		if(isset($entry['required']) && $entry['required'] === true)
+			$retVal .= ' required';
+
+		if(isset($entry['pattern']))
+			$retVal .= ' pattern="' . $entry['pattern'] . '"';
+
+		if(isset($entry['title']))
+			$retVal .= ' title="' . filter_var($entry['title'], FILTER_SANITIZE_STRING) . '"';
+
+		return $retVal;
+	}
+
+	private static function getTextInput($entry, $id, $name) {
+		return '<input '
+		. BridgeCard::getInputAttributes($entry)
+		. ' id="'
+		. $id
+		. '" type="text" value="'
+		. filter_var($entry['defaultValue'], FILTER_SANITIZE_STRING)
+		. '" placeholder="'
+		. filter_var($entry['exampleValue'], FILTER_SANITIZE_STRING)
+		. '" name="'
+		. $name
+		. '" /><br>'
+		. PHP_EOL;
+	}
+
+	private static function getNumberInput($entry, $id, $name) {
+		return '<input '
+		. BridgeCard::getInputAttributes($entry)
+		. ' id="'
+		. $id
+		. '" type="number" value="'
+		. filter_var($entry['defaultValue'], FILTER_SANITIZE_NUMBER_INT)
+		. '" placeholder="'
+		. filter_var($entry['exampleValue'], FILTER_SANITIZE_NUMBER_INT)
+		. '" name="'
+		. $name
+		. '" /><br>'
+		. PHP_EOL;
+	}
+
+	private static function getListInput($entry, $id, $name) {
+		$list = '<select '
+		. BridgeCard::getInputAttributes($entry)
+		. ' id="'
+		. $id
+		. '" name="'
+		. $name
+		. '" >';
+
+		foreach($entry['values'] as $name => $value) {
+			if(is_array($value)) {
+				$list .= '<optgroup label="' . htmlentities($name) . '">';
+				foreach($value as $subname => $subvalue) {
+					if($entry['defaultValue'] === $subname
+						|| $entry['defaultValue'] === $subvalue) {
+						$list .= '<option value="'
+							. $subvalue
+							. '" selected>'
+							. $subname
+							. '</option>';
+					} else {
+						$list .= '<option value="'
+							. $subvalue
+							. '">'
+							. $subname
+							. '</option>';
+					}
+				}
+				$list .= '</optgroup>';
+			} else {
+				if($entry['defaultValue'] === $name
+					|| $entry['defaultValue'] === $value) {
+					$list .= '<option value="'
+						. $value
+						. '" selected>'
+						. $name
+						. '</option>';
+				} else {
+					$list .= '<option value="'
+						. $value
+						. '">'
+						. $name
+						. '</option>';
+				}
+			}
+		}
+
+		$list .= '</select><br>';
+
+		return $list;
+	}
+
+	private static function getCheckboxInput($entry, $id, $name) {
+		return '<input '
+		. BridgeCard::getInputAttributes($entry)
+		. ' id="'
+		. $id
+		. '" type="checkbox" name="'
+		. $name
+		. '" '
+		. ($entry['defaultValue'] === 'checked' ?: '')
+		. ' /><br>'
+		. PHP_EOL;
+	}
+
+	static function displayBridgeCard($bridgeName, $formats, $isActive = true){
+
+		$bridge = Bridge::create($bridgeName);
+
+		if($bridge == false)
+			return '';
+
+		$isHttps = strpos($bridge->getURI(), 'https') === 0;
+
+		$uri = $bridge->getURI();
+		$name = $bridge->getName();
+		$description = $bridge->getDescription();
+		$parameters = $bridge->getParameters();
+
+		if(defined('PROXY_URL') && PROXY_BYBRIDGE) {
+			$parameters['global']['_noproxy'] = array(
+				'name' => 'Disable proxy (' . ((defined('PROXY_NAME') && PROXY_NAME) ? PROXY_NAME : PROXY_URL) . ')',
+				'type' => 'checkbox'
+			);
+		}
+
+		if(CUSTOM_CACHE_TIMEOUT) {
+			$parameters['global']['_cache_timeout'] = array(
+				'name' => 'Cache timeout in seconds',
+				'type' => 'number',
+				'defaultValue' => $bridge->getCacheTimeout()
+			);
+		}
+
+		$card = <<<CARD
+			<section id="bridge-{$bridgeName}" data-ref="{$bridgeName}">
+				<h2><a href="{$uri}">{$name}</a></h2>
+				<p class="description">{$description}</p>
+				<input type="checkbox" class="showmore-box" id="showmore-{$bridgeName}" />
+				<label class="showmore" for="showmore-{$bridgeName}">Show more</label>
+CARD;
+
+		// If we don't have any parameter for the bridge, we print a generic form to load it.
+		if(count($parameters) === 0
+		|| count($parameters) === 1 && array_key_exists('global', $parameters)) {
+
+			$card .= BridgeCard::getForm($bridgeName, $formats, $isActive, $isHttps);
+
+		} else {
+
+			foreach($parameters as $parameterName => $parameter) {
+				if(!is_numeric($parameterName) && $parameterName === 'global')
+					continue;
+
+				if(array_key_exists('global', $parameters))
+					$parameter = array_merge($parameter, $parameters['global']);
+
+				if(!is_numeric($parameterName))
+					$card .= '<h5>' . $parameterName . '</h5>' . PHP_EOL;
+
+				$card .= BridgeCard::getForm($bridgeName, $formats, $isActive, $isHttps, $parameterName, $parameter);
+			}
+
+		}
+
+		$card .= '<label class="showless" for="showmore-' . $bridgeName . '">Show less</label>';
+		$card .= '<p class="maintainer">' . $bridge->getMaintainer() . '</p>';
+		$card .= '</section>';
+
+		return $card;
+	}
+}

+ 126 - 0
lib/BridgeList.php

@@ -0,0 +1,126 @@
+<?php
+final class BridgeList {
+
+	private static function getHead() {
+		return <<<EOD
+<head>
+	<meta charset="utf-8">
+	<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+	<meta name="description" content="RSS-Bridge" />
+	<title>RSS-Bridge</title>
+	<link href="static/style.css" rel="stylesheet">
+	<script src="static/search.js"></script>
+	<script src="static/select.js"></script>
+	<noscript>
+		<style>
+			.searchbar {
+				display: none;
+			}
+		</style>
+	</noscript>
+</head>
+EOD;
+	}
+
+	private static function getBridges($whitelist, $showInactive, &$totalBridges, &$totalActiveBridges) {
+
+		$body = '';
+		$totalActiveBridges = 0;
+		$inactiveBridges = '';
+
+		$bridgeList = Bridge::listBridges();
+		$formats = Format::searchInformation();
+
+		$totalBridges = count($bridgeList);
+
+		foreach($bridgeList as $bridgeName) {
+
+			if(Bridge::isWhitelisted($whitelist, strtolower($bridgeName))) {
+
+				$body .= BridgeCard::displayBridgeCard($bridgeName, $formats);
+				$totalActiveBridges++;
+
+			} elseif($showInactive) {
+
+				// inactive bridges
+				$inactiveBridges .= BridgeCard::displayBridgeCard($bridgeName, $formats, false) . PHP_EOL;
+
+			}
+
+		}
+
+		$body .= $inactiveBridges;
+
+		return $body;
+	}
+
+	private static function getHeader() {
+		$status = '';
+
+		if(defined('DEBUG') && DEBUG === true) {
+			$status .= 'debug mode active';
+		}
+
+		return <<<EOD
+<header>
+	<h1>RSS-Bridge</h1>
+	<h2>·Reconnecting the Web·</h2>
+	<p class="status">{$status}</p>
+</header>
+EOD;
+	}
+
+	private static function getSearchbar() {
+		$query = filter_input(INPUT_GET, 'q');
+
+		return <<<EOD
+<section class="searchbar">
+	<h3>Search</h3>
+	<input type="text" name="searchfield"
+		id="searchfield" placeholder="Enter the bridge you want to search for"
+		onchange="search()" onkeyup="search()" value="{$query}">
+</section>
+EOD;
+	}
+
+	private static function getFooter($totalBridges, $totalActiveBridges, $showInactive) {
+		$version = Configuration::getVersion();
+
+		$inactive = '';
+
+		if($totalActiveBridges !== $totalBridges) {
+
+			if(!$showInactive) {
+				$inactive = '<a href="?show_inactive=1"><button class="small">Show inactive bridges</button></a><br>';
+			} else {
+				$inactive = '<a href="?show_inactive=0"><button class="small">Hide inactive bridges</button></a><br>';
+			}
+
+		}
+
+		return <<<EOD
+<section class="footer">
+	<a href="https://github.com/rss-bridge/rss-bridge">RSS-Bridge ~ Public Domain</a><br>
+	<p class="version">{$version}</p>
+	{$totalActiveBridges}/{$totalBridges} active bridges.<br>
+	{$inactive}
+</section>
+EOD;
+	}
+
+	static function create($whitelist, $showInactive = true) {
+
+		$totalBridges = 0;
+		$totalActiveBridges = 0;
+
+		return '<!DOCTYPE html><html lang="en">'
+		. BridgeList::getHead()
+		. '<body onload="search()">'
+		. BridgeList::getHeader()
+		. BridgeList::getSearchbar()
+		. BridgeList::getBridges($whitelist, $showInactive, $totalBridges, $totalActiveBridges)
+		. BridgeList::getFooter($totalBridges, $totalActiveBridges, $showInactive)
+		. '</body></html>';
+
+	}
+}

+ 2 - 0
lib/RssBridge.php

@@ -16,6 +16,8 @@ require __DIR__ . '/FeedExpander.php';
 require __DIR__ . '/Cache.php';
 require __DIR__ . '/Authentication.php';
 require __DIR__ . '/Configuration.php';
+require __DIR__ . '/BridgeCard.php';
+require __DIR__ . '/BridgeList.php';
 
 require __DIR__ . '/validation.php';
 require __DIR__ . '/html.php';

+ 0 - 300
lib/html.php

@@ -1,304 +1,4 @@
 <?php
-function displayBridgeCard($bridgeName, $formats, $isActive = true){
-
-	$getHelperButtonsFormat = function($formats){
-		$buttons = '';
-		foreach($formats as $name) {
-			$buttons .= '<button type="submit" name="format" value="'
-				. $name
-				. '">'
-				. $name
-				. '</button>'
-				. PHP_EOL;
-		}
-
-		return $buttons;
-	};
-
-	$getFormHeader = function($bridgeName){
-		return <<<EOD
-			<form method="GET" action="?">
-				<input type="hidden" name="action" value="display" />
-				<input type="hidden" name="bridge" value="{$bridgeName}" />
-EOD;
-	};
-
-	$bridge = Bridge::create($bridgeName);
-
-	if($bridge == false)
-		return '';
-
-	$HTTPSWarning = '';
-	if(strpos($bridge->getURI(), 'https') !== 0) {
-
-		$HTTPSWarning = '<div class="secure-warning">Warning :
-						This bridge is not fetching its content through a secure connection</div>';
-
-	}
-
-	$name = '<a href="' . $bridge->getURI() . '">' . $bridge->getName() . '</a>';
-	$description = $bridge->getDescription();
-
-	$card = <<<CARD
-		<section id="bridge-{$bridgeName}" data-ref="{$bridgeName}">
-			<h2>{$name}</h2>
-			<p class="description">
-				{$description}
-			</p>
-			<input type="checkbox" class="showmore-box" id="showmore-{$bridgeName}" />
-			<label class="showmore" for="showmore-{$bridgeName}">Show more</label>
-CARD;
-
-	// If we don't have any parameter for the bridge, we print a generic form to load it.
-	if(count($bridge->getParameters()) == 0) {
-
-		$card .= $getFormHeader($bridgeName);
-		$card .= $HTTPSWarning;
-
-		if($isActive) {
-			if(defined('PROXY_URL') && PROXY_BYBRIDGE) {
-				$idArg = 'arg-'
-					. urlencode($bridgeName)
-					. '-'
-					. urlencode('proxyoff')
-					. '-'
-					. urlencode('_noproxy');
-
-				$card .= '<input id="'
-					. $idArg
-					. '" type="checkbox" name="_noproxy" />'
-					. PHP_EOL;
-
-				$card .= '<label for="'
-					. $idArg
-					. '">Disable proxy ('
-					. ((defined('PROXY_NAME') && PROXY_NAME) ? PROXY_NAME : PROXY_URL)
-					. ')</label><br />'
-					. PHP_EOL;
-			} if(CUSTOM_CACHE_TIMEOUT) {
-				$idArg = 'arg-'
-					. urlencode($bridgeName)
-					. '-'
-					. urlencode('_cache_timeout');
-
-				$card .= '<label for="'
-					. $idArg
-					. '">Cache timeout in seconds : </label>'
-					. PHP_EOL;
-
-				$card .= '<input id="'
-					. $idArg
-					. '" type="number" value="'
-					. $bridge->getCacheTimeout()
-					. '" name="_cache_timeout" /><br />'
-					. PHP_EOL;
-			}
-			$card .= $getHelperButtonsFormat($formats);
-		} else {
-			$card .= '<span style="font-weight: bold;">Inactive</span>';
-		}
-
-		$card .= '</form>' . PHP_EOL;
-	}
-
-	$hasGlobalParameter = array_key_exists('global', $bridge->getParameters());
-
-	if($hasGlobalParameter) {
-		$globalParameters = $bridge->getParameters()['global'];
-	}
-
-	foreach($bridge->getParameters() as $parameterName => $parameter) {
-		if(!is_numeric($parameterName) && $parameterName == 'global')
-			continue;
-
-		if($hasGlobalParameter)
-			$parameter = array_merge($parameter, $globalParameters);
-
-		if(!is_numeric($parameterName))
-			$card .= '<h5>' . $parameterName . '</h5>' . PHP_EOL;
-
-		$card .= $getFormHeader($bridgeName);
-		$card .= $HTTPSWarning;
-
-		foreach($parameter as $id => $inputEntry) {
-			$additionalInfoString = '';
-
-			if(isset($inputEntry['required']) && $inputEntry['required'] === true)
-				$additionalInfoString .= ' required';
-
-			if(isset($inputEntry['pattern']))
-				$additionalInfoString .= ' pattern="' . $inputEntry['pattern'] . '"';
-
-			if(isset($inputEntry['title']))
-				$additionalInfoString .= ' title="' . $inputEntry['title'] . '"';
-
-			if(!isset($inputEntry['exampleValue']))
-				$inputEntry['exampleValue'] = '';
-
-			if(!isset($inputEntry['defaultValue']))
-				$inputEntry['defaultValue'] = '';
-
-			$idArg = 'arg-'
-				. urlencode($bridgeName)
-				. '-'
-				. urlencode($parameterName)
-				. '-'
-				. urlencode($id);
-
-			$card .= '<label for="'
-				. $idArg
-				. '">'
-				. $inputEntry['name']
-				. ' : </label>'
-				. PHP_EOL;
-
-			if(!isset($inputEntry['type']) || $inputEntry['type'] == 'text') {
-				$card .= '<input '
-					. $additionalInfoString
-					. ' id="'
-					. $idArg
-					. '" type="text" value="'
-					. $inputEntry['defaultValue']
-					. '" placeholder="'
-					. $inputEntry['exampleValue']
-					. '" name="'
-					. $id
-					. '" /><br />'
-					. PHP_EOL;
-			} elseif($inputEntry['type'] == 'number') {
-				$card .= '<input '
-					. $additionalInfoString
-					. ' id="'
-					. $idArg
-					. '" type="number" value="'
-					. $inputEntry['defaultValue']
-					. '" placeholder="'
-					. $inputEntry['exampleValue']
-					. '" name="'
-					. $id
-					. '" /><br />'
-					. PHP_EOL;
-			} else if($inputEntry['type'] == 'list') {
-				$card .= '<select '
-					. $additionalInfoString
-					. ' id="'
-					. $idArg
-					. '" name="'
-					. $id
-					. '" >';
-
-				foreach($inputEntry['values'] as $name => $value) {
-					if(is_array($value)) {
-						$card .= '<optgroup label="' . htmlentities($name) . '">';
-						foreach($value as $subname => $subvalue) {
-							if($inputEntry['defaultValue'] === $subname
-								|| $inputEntry['defaultValue'] === $subvalue) {
-								$card .= '<option value="'
-									. $subvalue
-									. '" selected>'
-									. $subname
-									. '</option>';
-							} else {
-								$card .= '<option value="'
-									. $subvalue
-									. '">'
-									. $subname
-									. '</option>';
-							}
-						}
-						$card .= '</optgroup>';
-					} else {
-						if($inputEntry['defaultValue'] === $name
-							|| $inputEntry['defaultValue'] === $value) {
-							$card .= '<option value="'
-								. $value
-								. '" selected>'
-								. $name
-								. '</option>';
-						} else {
-							$card .= '<option value="'
-								. $value
-								. '">'
-								. $name
-								. '</option>';
-						}
-					}
-				}
-				$card .= '</select><br >';
-			} elseif($inputEntry['type'] == 'checkbox') {
-				if($inputEntry['defaultValue'] === 'checked')
-					$card .= '<input '
-					. $additionalInfoString
-					. ' id="'
-					. $idArg
-					. '" type="checkbox" name="'
-					. $id
-					. '" checked /><br />'
-					. PHP_EOL;
-				else
-					$card .= '<input '
-					. $additionalInfoString
-					. ' id="'
-					. $idArg
-					. '" type="checkbox" name="'
-					. $id
-					. '" /><br />'
-					. PHP_EOL;
-			}
-		}
-
-		if($isActive) {
-			if(defined('PROXY_URL') && PROXY_BYBRIDGE) {
-				$idArg = 'arg-'
-					. urlencode($bridgeName)
-					. '-'
-					. urlencode('proxyoff')
-					. '-'
-					. urlencode('_noproxy');
-
-				$card .= '<input id="'
-					. $idArg
-					. '" type="checkbox" name="_noproxy" />'
-					. PHP_EOL;
-
-				$card .= '<label for="'
-					. $idArg
-					. '">Disable proxy ('
-					. ((defined('PROXY_NAME') && PROXY_NAME) ? PROXY_NAME : PROXY_URL)
-					. ')</label><br />'
-					. PHP_EOL;
-			} if(CUSTOM_CACHE_TIMEOUT) {
-				$idArg = 'arg-'
-					. urlencode($bridgeName)
-					. '-'
-					. urlencode('_cache_timeout');
-
-				$card .= '<label for="'
-					. $idArg
-					. '">Cache timeout in seconds : </label>'
-					. PHP_EOL;
-
-				$card .= '<input id="'
-					. $idArg
-					. '" type="number" value="'
-					. $bridge->getCacheTimeout()
-					. '" name="_cache_timeout" /><br />'
-					. PHP_EOL;
-			}
-			$card .= $getHelperButtonsFormat($formats);
-		} else {
-			$card .= '<span style="font-weight: bold;">Inactive</span>';
-		}
-		$card .= '</form>' . PHP_EOL;
-	}
-
-	$card .= '<label class="showless" for="showmore-' . $bridgeName . '">Show less</label>';
-	$card .= '<p class="maintainer">' . $bridge->getMaintainer() . '</p>';
-	$card .= '</section>';
-
-	return $card;
-}
-
 function sanitize($textToSanitize,
 $removedTags = array('script', 'iframe', 'input', 'form'),
 $keptAttributes = array('title', 'href', 'src'),