';
- * @endcode
+ * ```
*/
public function __set($name, $value)
{
@@ -79,14 +79,13 @@ class JSLikeHTMLElement extends \DOMElement
} else {
// $value is probably ill-formed
$f = new \DOMDocument();
- $value = mb_convert_encoding($value, 'HTML-ENTITIES', 'UTF-8');
// Using will generate a warning, but so will bad HTML
// (and by this point, bad HTML is what we've got).
// We use it (and suppress the warning) because an HTML fragment will
// be wrapped around tags which we don't really want to keep.
// Note: despite the warning, if loadHTML succeeds it will return true.
- $result = $f->loadHTML('' . $value . '');
+ $result = $f->loadHTML('' . $value . '');
if ($result) {
$import = $f->getElementsByTagName('htmlfragment')->item(0);
@@ -105,9 +104,9 @@ class JSLikeHTMLElement extends \DOMElement
/**
* Used for getting innerHTML like it's done in JavaScript:.
*
- * @code
+ * ```php
* $string = $div->innerHTML;
- * @endcode
+ * ```
*/
public function __get($name)
{
diff --git a/src/Readability.php b/src/Readability.php
index 8c1e62b..1d2d2f5 100644
--- a/src/Readability.php
+++ b/src/Readability.php
@@ -144,7 +144,7 @@ class Readability implements LoggerAwareInterface
// HACK: replace linebreaks plus br's with p's
'!( ]*>[ \r\n\s]*){2,}!i' => '
',
// replace noscripts
- //'!?noscript>!is' => '',
+ // '!?noscript>!is' => '',
// replace fonts to spans
'!<(/?)font[^>]*>!is' => '<\\1span>',
];
@@ -155,8 +155,8 @@ class Readability implements LoggerAwareInterface
// replace empty tags that break layouts
'!<(?:a|div|p|figure)[^>]+/>!is' => '',
// remove all attributes on text tags
- //'!<(\s*/?\s*(?:blockquote|br|hr|code|div|article|span|footer|aside|p|pre|dl|li|ul|ol)) [^>]+>!is' => "<\\1>",
- //single newlines cleanup
+ // '!<(\s*/?\s*(?:blockquote|br|hr|code|div|article|span|footer|aside|p|pre|dl|li|ul|ol)) [^>]+>!is' => "<\\1>",
+ // single newlines cleanup
"/\n+/" => "\n",
// modern web...
'!
]*>\s* '
setAttribute('style', 'color: inherit; text-decoration: none;');
$articleLink->setAttribute('name', 'readabilityLink-' . $linkCount);
$footnote->setInnerHtml('^ ');
- $footnoteLink->setInnerHtml(('' !== $footnoteLink->getAttribute('title') ? $footnoteLink->getAttribute('title') : $linkText));
+ $footnoteLink->setInnerHtml('' !== $footnoteLink->getAttribute('title') ? $footnoteLink->getAttribute('title') : $linkText);
$footnoteLink->setAttribute('name', 'readabilityFootnoteLink-' . $linkCount);
$footnote->appendChild($footnoteLink);
@@ -796,7 +796,7 @@ class Readability implements LoggerAwareInterface
*/
public function addFlag($flag)
{
- $this->flags = $this->flags | $flag;
+ $this->flags |= $flag;
}
/**
@@ -806,13 +806,14 @@ class Readability implements LoggerAwareInterface
*/
public function removeFlag($flag)
{
- $this->flags = $this->flags & ~$flag;
+ $this->flags &= ~$flag;
}
/**
* Debug.
*
* @deprecated use $this->logger->debug() instead
+ *
* @codeCoverageIgnore
*/
protected function dbg($msg)
@@ -824,6 +825,7 @@ class Readability implements LoggerAwareInterface
* Dump debug info.
*
* @deprecated since Monolog gather log, we don't need it
+ *
* @codeCoverageIgnore
*/
protected function dump_dbg()
@@ -973,11 +975,11 @@ class Readability implements LoggerAwareInterface
* Using a variety of metrics (content score, classname, element types), find the content that is
* most likely to be the stuff a user wants to read. Then return it wrapped up in a div.
*
- * @param \DOMElement $page
+ * @param ?\DOMElement $page
*
* @return \DOMElement|false
*/
- protected function grabArticle(\DOMElement $page = null)
+ protected function grabArticle($page = null)
{
if (!$page) {
$page = $this->dom;
@@ -992,7 +994,7 @@ class Readability implements LoggerAwareInterface
$allElements = $page->getElementsByTagName('*');
- for ($nodeIndex = 0; ($node = $allElements->item($nodeIndex)); ++$nodeIndex) {
+ for ($nodeIndex = 0; $node = $allElements->item($nodeIndex); ++$nodeIndex) {
$tagName = $node->tagName;
$nodeContent = $node->getInnerHTML();
@@ -1136,9 +1138,9 @@ class Readability implements LoggerAwareInterface
// Remove unlikely candidates
$unlikelyMatchString = $node->getAttribute('class') . ' ' . $node->getAttribute('id') . ' ' . $node->getAttribute('style');
- if (mb_strlen($unlikelyMatchString) > 3 && // don't process "empty" strings
- preg_match($this->regexps['unlikelyCandidates'], $unlikelyMatchString) &&
- !preg_match($this->regexps['okMaybeItsACandidate'], $unlikelyMatchString)
+ if (mb_strlen($unlikelyMatchString) > 3 // don't process "empty" strings
+ && preg_match($this->regexps['unlikelyCandidates'], $unlikelyMatchString)
+ && !preg_match($this->regexps['okMaybeItsACandidate'], $unlikelyMatchString)
) {
$this->logger->debug('Removing unlikely candidate (using conf) ' . $node->getNodePath() . ' by "' . $unlikelyMatchString . '" with readability ' . ($node->hasAttribute('readability') ? (int) $node->getAttributeNode('readability')->value : 0));
$node->parentNode->removeChild($node);
@@ -1289,8 +1291,8 @@ class Readability implements LoggerAwareInterface
// To ensure a node does not interfere with readability styles, remove its classnames & ids.
// Now done via RegExp post_filter.
- //$nodeToAppend->removeAttribute('class');
- //$nodeToAppend->removeAttribute('id');
+ // $nodeToAppend->removeAttribute('class');
+ // $nodeToAppend->removeAttribute('id');
// Append sibling and subtract from our list as appending removes a node.
$articleContent->appendChild($nodeToAppend);
}
@@ -1430,7 +1432,7 @@ class Readability implements LoggerAwareInterface
unset($tidy);
}
- $this->html = mb_convert_encoding($this->html, 'HTML-ENTITIES', 'UTF-8');
+ $this->html = '' . (string) $this->html;
if ('html5lib' === $this->parser || 'html5' === $this->parser) {
$this->dom = (new HTML5())->loadHTML($this->html);
diff --git a/tests/ReadabilityTest.php b/tests/ReadabilityTest.php
index a8e8cfb..b190a8e 100644
--- a/tests/ReadabilityTest.php
+++ b/tests/ReadabilityTest.php
@@ -325,35 +325,38 @@ class ReadabilityTest extends \PHPUnit\Framework\TestCase
}
// dummy function to be used to the next test
- public function error2Exception($code, $string, $file, $line, $context)
+ public function error2Exception($code, $string, $file, $line)
{
throw new \Exception($string, $code);
}
public function testAutoClosingIframeNotThrowingException()
{
- error_reporting(\E_ALL | \E_STRICT);
- ini_set('display_errors', true);
- set_error_handler([$this, 'error2Exception'], \E_ALL | \E_STRICT);
-
- $data = '
-
-
-
-
-
-
-
-
-
-
-
-
3D Touch — будущее мобильных игр
-
Автор: Сергей Пак | Просмотров: 1363 | Опубликовано: 14 сентября 2015
-
-
Компания Apple представила новую технологию 3D Touch, которая является прямым потомком более ранней версии Force Touch — последняя, напомним, используется сейчас в трекпадах Macbook Pro и Macbook 2015. Теперь управлять устройством стало в разы проще, и Force Touch открывает перед пользователями новые возможности, но при этом 3D Touch — это про другое. Дело в том, что теперь и на мобильных устройствах интерфейс будет постепенно меняться, кардинальные перемены ждут мобильный гейминг, потому что здесь разработчики действительно могут разгуляться.
-
-
Итак, просто представьте себе, что iPhone 6S — это, по большому счету, отличная игровая приставка, которую вы носите с собой, а еще она может выдавать невероятной красоты картинку. Но проблема заключается, пожалуй, в том, что управлять персонажем в играх довольно трудно — он неповоротлив, обладает заторможенной реакцией, а игровой клиент зачастую требует перегруза интерфейса для того, чтобы обеспечить максимально большое количество возможностей. Благодаря трехуровневому нажатию можно избавиться от лишних кнопок и обеспечить более качественный обзор местности, и при этом пользователь будет закрывать пальцами минимальное пространство.
Автор: Сергей Пак | Просмотров: 1363 | Опубликовано: 14 сентября 2015
+
+
Компания Apple представила новую технологию 3D Touch, которая является прямым потомком более ранней версии Force Touch — последняя, напомним, используется сейчас в трекпадах Macbook Pro и Macbook 2015. Теперь управлять устройством стало в разы проще, и Force Touch открывает перед пользователями новые возможности, но при этом 3D Touch — это про другое. Дело в том, что теперь и на мобильных устройствах интерфейс будет постепенно меняться, кардинальные перемены ждут мобильный гейминг, потому что здесь разработчики действительно могут разгуляться.
+
+
Итак, просто представьте себе, что iPhone 6S — это, по большому счету, отличная игровая приставка, которую вы носите с собой, а еще она может выдавать невероятной красоты картинку. Но проблема заключается, пожалуй, в том, что управлять персонажем в играх довольно трудно — он неповоротлив, обладает заторможенной реакцией, а игровой клиент зачастую требует перегруза интерфейса для того, чтобы обеспечить максимально большое количество возможностей. Благодаря трехуровневому нажатию можно избавиться от лишних кнопок и обеспечить более качественный обзор местности, и при этом пользователь будет закрывать пальцами минимальное пространство.