diff --git a/src/Amara/Varcon/HtmlCrawler.php b/src/Amara/Varcon/HtmlCrawler.php index 1ac8d1e..8720225 100644 --- a/src/Amara/Varcon/HtmlCrawler.php +++ b/src/Amara/Varcon/HtmlCrawler.php @@ -48,15 +48,26 @@ public function crawlAndModify($content, callable $callable) $this->stripDoctypeHtmlBodyAndHeadElements($document); $xpath = new DOMXPath($document); + $nodes = $xpath->query(implode('|', $this->xpathExpressions)); - $textNodes = $xpath->query(implode('|', $this->xpathExpressions)); + $isContentModified = false; - /** @var DOMNode $textNode */ - foreach ($textNodes as $textNode) { - $textNode->nodeValue = $callable($textNode->nodeValue); + /** @var DOMNode $node */ + foreach ($nodes as $node) { + $modifiedNodeValue = $callable($node->nodeValue); + + if ($node->nodeValue != $modifiedNodeValue) { + $isContentModified = true; + + $node->nodeValue = $modifiedNodeValue; + } + } + + if (false === $isContentModified) { + return $content; } - return $document->saveHTML($document->documentElement); + return trim($document->saveHTML()); } /** diff --git a/tests/Amara/Varcon/HtmlCrawlerTest.php b/tests/Amara/Varcon/HtmlCrawlerTest.php index 2176ab9..8ef758a 100644 --- a/tests/Amara/Varcon/HtmlCrawlerTest.php +++ b/tests/Amara/Varcon/HtmlCrawlerTest.php @@ -46,6 +46,10 @@ public function provideCrawlAndModifyWithChangedXpathExpressions() $html = 'Text text text', $changedHtml = 'Text text text', ], + [ + $html = 'Unchanged', + $changedHtml = 'Unchanged', + ], ]; } } diff --git a/tests/Amara/Varcon/HtmlTranslatorTest.php b/tests/Amara/Varcon/HtmlTranslatorTest.php index a386b64..13beeb8 100644 --- a/tests/Amara/Varcon/HtmlTranslatorTest.php +++ b/tests/Amara/Varcon/HtmlTranslatorTest.php @@ -13,7 +13,7 @@ public function testTranslatePreservesWhitespace() $htmlTranslator = new HtmlTranslator(); $this->assertSame( - '

Colour pyjama паралелепипед

', // Tests UTF8 characters as well + '

Colour pyjama паралелепипед

', // Tests UTF8 characters as well $htmlTranslator->translate( '

Color pajama паралелепипед

', 'A', @@ -58,13 +58,12 @@ public function provideTranslate() { return [ [ - $html = '

Text & text text

', - $translatedHtml = '

Translated & translated translated

', + $html = '

Text & text text

More text

More text

', + $translatedHtml = '

Translated & translated translated

More translated

More translated

', ], [ - // Some day, this will stay as • ..some ..day $html = '

• Text & text: text

', - $translatedHtml = '

• Translated & translated: translated

', + $translatedHtml = '

• Translated & translated: translated

', ], [ $html = 'Text text text',