ソースを参照

[core] extract HTMLUtils methods to make them functions

Methods displayBridgeCard, sanitize, defaultImageSrcTo are now
functions in lib/html.php
getHelperButtinsFormat and getFormHeader are now anonymous functions
defined in displayBridgeCard

Signed-off-by: Pierre Mazière <pierre.maziere@gmx.com>
Pierre Mazière 7 年 前
コミット
747be13849

+ 2 - 3
bridges/AcrimedBridge.php

@@ -13,10 +13,9 @@ class AcrimedBridge extends FeedExpander {
     protected function parseItem($newsItem){
         $item = parent::parseItem($newsItem);
 
-        $hs = new HTMLSanitizer();
         $articlePage = getSimpleHTMLDOM($newsItem->link);
-        $article = $hs->sanitize($articlePage->find('article.article1', 0)->innertext);
-        $article = HTMLSanitizer::defaultImageSrcTo($article, static::URI);
+        $article = sanitize($articlePage->find('article.article1', 0)->innertext);
+        $article = defaultImageSrcTo($article, static::URI);
         $item['content'] = $article;
 
         return $item;

+ 1 - 3
bridges/CourrierInternationalBridge.php

@@ -27,9 +27,7 @@ class CourrierInternationalBridge extends BridgeAbstract{
 
             $page = getSimpleHTMLDOM($item['uri']);
 
-            $cleaner = new HTMLSanitizer();
-
-            $item['content'] = $cleaner->sanitize($page->find("div.article-text")[0]);
+            $item['content'] = sanitize($page->find("div.article-text")[0]);
             $item['title'] = strip_tags($article->find(".title")[0]);
 
             $dateTime = date_parse($page->find("time")[0]);

+ 1 - 1
bridges/WorldOfTanksBridge.php

@@ -59,7 +59,7 @@ class WorldOfTanksBridge extends BridgeAbstract {
         debugMessage("loading page ".$item['uri']);
         $articlePage = getSimpleHTMLDOMCached($item['uri']);
         $content = $articlePage->find('.l-content', 0);
-        HTMLSanitizer::defaultImageSrcTo($content, self::URI);
+        defaultImageSrcTo($content, self::URI);
         $item['title'] = $content->find('h1', 0)->innertext;
         $item['content'] = $content->find('.b-content', 0)->innertext;
         $item['timestamp'] = $content->find('.b-statistic_time', 0)->getAttribute("data-timestamp");

+ 2 - 2
index.php

@@ -188,11 +188,11 @@ $formats = Format::searchInformation();
 		$bridgeList = Bridge::listBridges();
 		foreach($bridgeList as $bridgeName){
 			if(Bridge::isWhitelisted($whitelist_selection, $bridgeName)){
-				echo HTMLUtils::displayBridgeCard($bridgeName, $formats);
+				echo displayBridgeCard($bridgeName, $formats);
 						$activeFoundBridgeCount++;
 			} elseif($showInactive) {
 				// inactive bridges
-				$inactiveBridges .= HTMLUtils::displayBridgeCard($bridgeName, $formats, false) . PHP_EOL;
+				$inactiveBridges .= displayBridgeCard($bridgeName, $formats, false) . PHP_EOL;
 			}
 		}
 		echo $inactiveBridges;

+ 0 - 307
lib/HTMLUtils.php

@@ -1,307 +0,0 @@
-<?php
-class HTMLUtils {
-	public static function displayBridgeCard($bridgeName, $formats, $isActive = true){
-		$bridgeElement = Bridge::create($bridgeName);
-		$bridgeClass = $bridgeName . 'Bridge';
-
-		if($bridgeElement == false)
-			return "";
-
-		$name = '<a href="' . $bridgeClass::URI . '">' . $bridgeClass::NAME . '</a>';
-		$description = $bridgeClass::DESCRIPTION;
-
-		$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($bridgeClass::PARAMETERS) == 0){
-
-			$card .= HTMLUtils::getFormHeader($bridgeName);
-
-			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;
-				}
-
-				$card .= HTMLUtils::getHelperButtonsFormat($formats);
-			} else {
-				$card .= '<span style="font-weight: bold;">Inactive</span>';
-			}
-
-			$card .= '</form>' . PHP_EOL;
-		}
-
-		$hasGlobalParameter = array_key_exists('global', $bridgeClass::PARAMETERS);
-
-		if($hasGlobalParameter){
-			$globalParameters = $bridgeClass::PARAMETERS['global'];
-		}
-
-		foreach($bridgeClass::PARAMETERS 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 .= HTMLUtils::getFormHeader($bridgeName);
-
-			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;
-				}
-				$card .= HTMLUtils::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">' . $bridgeClass::MAINTAINER . '</p>';
-		$card .= '</section>';
-
-		return $card;
-	}
-
-	private static function getHelperButtonsFormat($formats){
-		$buttons = '';
-		foreach($formats as $name){
-			$buttons .= '<button type="submit" name="format" value="'
-			. $name
-			. '">'
-			. $name
-			. '</button>'
-			. PHP_EOL;
-		}
-
-		return $buttons;
-	}
-
-	private static function getFormHeader($bridge){
-		return <<<EOD
-			<form method="GET" action="?">
-				<input type="hidden" name="action" value="display" />
-				<input type="hidden" name="bridge" value="{$bridge}" />
-EOD;
-	}
-}
-
-class HTMLSanitizer {
-
-	var $tagsToRemove;
-	var $keptAttributes;
-	var $onlyKeepText;
-
-	public static $DEFAULT_CLEAR_TAGS = ["script", "iframe", "input", "form"];
-	public static $KEPT_ATTRIBUTES = ["title", "href", "src"];
-	public static $ONLY_TEXT = [];
-
-	public function __construct($tags_to_remove = null
-	, $kept_attributes = null
-	, $only_keep_text = null){
-		$this->tagsToRemove = is_null($tags_to_remove) ? HTMLSanitizer::$DEFAULT_CLEAR_TAGS : $tags_to_remove;
-		$this->keptAttributes = is_null($kept_attributes) ? HTMLSanitizer::$KEPT_ATTRIBUTES : $kept_attributes;
-		$this->onlyKeepText = is_null($only_keep_text) ? HTMLSanitizer::$ONLY_TEXT : $only_keep_text;
-	}
-
-	public function sanitize($textToSanitize){
-		$htmlContent = str_get_html($textToSanitize);
-
-		foreach($htmlContent->find('*[!b38fd2b1fe7f4747d6b1c1254ccd055e]') as $element){
-			if(in_array($element->tag, $this->onlyKeepText)){
-				$element->outertext = $element->plaintext;
-			} elseif(in_array($element->tag, $this->tagsToRemove)){
-				$element->outertext = '';
-			} else {
-				foreach($element->getAllAttributes() as $attributeName => $attribute){
-					if(!in_array($attributeName, $this->keptAttributes))
-						$element->removeAttribute($attributeName);
-				}
-			}
-		}
-
-		return $htmlContent;
-	}
-
-	public static function defaultImageSrcTo($content, $server){
-		foreach($content->find('img') as $image){
-			if(is_null(strpos($image->src, "http"))
-			&& is_null(strpos($image->src, "//"))
-			&& is_null(strpos($image->src, "data:")))
-				$image->src = $server . $image->src;
-		}
-		return $content;
-	}
-}

+ 1 - 1
lib/RssBridge.php

@@ -15,7 +15,7 @@ require __DIR__ . '/BridgeAbstract.php';
 require __DIR__ . '/FeedExpander.php';
 require __DIR__ . '/Cache.php';
 require __DIR__ . '/CacheAbstract.php';
-require __DIR__ . '/HTMLUtils.php';
+require __DIR__ . '/html.php';
 require __DIR__ . '/error.php';
 require __DIR__ . '/contents.php';
 

+ 292 - 0
lib/html.php

@@ -0,0 +1,292 @@
+<?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($bridge){
+		return <<<EOD
+			<form method="GET" action="?">
+				<input type="hidden" name="action" value="display" />
+				<input type="hidden" name="bridge" value="{$bridge}" />
+EOD;
+	};
+
+	$bridgeElement = Bridge::create($bridgeName);
+	$bridgeClass = $bridgeName . 'Bridge';
+
+	if($bridgeElement == false)
+		return "";
+
+	$name = '<a href="' . $bridgeClass::URI . '">' . $bridgeClass::NAME . '</a>';
+	$description = $bridgeClass::DESCRIPTION;
+
+	$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($bridgeClass::PARAMETERS) == 0){
+
+		$card .= $getFormHeader($bridgeName);
+
+		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;
+			}
+
+			$card .= $getHelperButtonsFormat($formats);
+		} else {
+			$card .= '<span style="font-weight: bold;">Inactive</span>';
+		}
+
+		$card .= '</form>' . PHP_EOL;
+	}
+
+	$hasGlobalParameter = array_key_exists('global', $bridgeClass::PARAMETERS);
+
+	if($hasGlobalParameter){
+		$globalParameters = $bridgeClass::PARAMETERS['global'];
+	}
+
+	foreach($bridgeClass::PARAMETERS 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);
+
+		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;
+			}
+			$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">' . $bridgeClass::MAINTAINER . '</p>';
+	$card .= '</section>';
+
+	return $card;
+}
+
+function sanitize($textToSanitize
+	,$removedTags=array('script','iframe','input','form')
+	,$keptAttributes=array('title','href','src')
+	,$keptText=array()){
+	$htmlContent = str_get_html($textToSanitize);
+
+	foreach($htmlContent->find('*[!b38fd2b1fe7f4747d6b1c1254ccd055e]') as $element){
+		if(in_array($element->tag, $keptText)){
+			$element->outertext = $element->plaintext;
+		} elseif(in_array($element->tag, $removedTags)){
+			$element->outertext = '';
+		} else {
+			foreach($element->getAllAttributes() as $attributeName => $attribute){
+				if(!in_array($attributeName, $keptAttributes))
+					$element->removeAttribute($attributeName);
+			}
+		}
+	}
+
+	return $htmlContent;
+}
+
+function defaultImageSrcTo($content, $server){
+	foreach($content->find('img') as $image){
+		if(is_null(strpos($image->src, "http"))
+			&& is_null(strpos($image->src, "//"))
+			&& is_null(strpos($image->src, "data:")))
+			$image->src = $server . $image->src;
+	}
+	return $content;
+}
+
+?>