Skip to content

Commit

Permalink
Merge pull request #44 from Morkhusz/issue-39-target_blank
Browse files Browse the repository at this point in the history
Proposta de solução para a issue #39
  • Loading branch information
nawarian committed Jun 16, 2019
2 parents 3047946 + 32c5340 commit a1a61de
Show file tree
Hide file tree
Showing 5 changed files with 100 additions and 3 deletions.
26 changes: 26 additions & 0 deletions app/Site/Parsers/MarkdownParser.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<?php

namespace Phpsp\Site\Parsers;

use Mni\FrontYAML\Markdown\MarkdownParser as BaseParser;

class MarkdownParser implements BaseParser
{

/**
* MarkdownParser constructor.
*/
public function __construct(Parsedown $parser)
{
$this->parser = $parser;
}

/**
* @param string $markdown
* @return string
*/
public function parse($markdown)
{
return $this->parser->parse($markdown);
}
}
61 changes: 61 additions & 0 deletions app/Site/Parsers/Parsedown.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
<?php

namespace Phpsp\Site\Parsers;

use ParsedownExtra as BaseParsedown;

class Parsedown extends BaseParsedown
{
private $internalHostName;

public function __construct(string $internalHostName)
{
parent::__construct();
$this->internalHostName = $internalHostName;
}

/**
* Extra link handling
* @param array $excerpt
* @return array
*/
protected function inlineLink($excerpt)
{
$link = parent::inlineLink($excerpt);
if (!isset($link)) {
return null;
}
$href = $link['element']['attributes']['href'];
$ext = strtolower(pathinfo($href, PATHINFO_EXTENSION));
$isImage = in_array($ext, ['gif', 'jpg', 'jpeg', 'png', 'svg']);

// 1. Add target and rel to external links
if ($this->isExternalUrl($href) && !$isImage) {
$link['element']['attributes']['rel'] = 'nofollow';
}

return $link;
}

/**
* Check if a URL is internal or external
* @param string $url
* @param null $internalHostName
* @return bool
*/
protected function isExternalUrl($url)
{
$parsedUrl = parse_url($url);
if (empty($parsedUrl['host'])) {
return false;
}
$parsedInternalHostUrl = parse_url($this->internalHostName);
if (strcasecmp($parsedUrl['host'], $parsedInternalHostUrl['host']) === 0) {
return false;
}

$isNotSubdomain = strpos(strtolower($parsedUrl['host']), strtolower($parsedInternalHostUrl['host'])) == false;

return $isNotSubdomain;
}
}
8 changes: 8 additions & 0 deletions bootstrap.php
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
<?php

use TightenCo\Jigsaw\Jigsaw;
use Mni\FrontYAML\Markdown\MarkdownParser as BaseParser;
use Phpsp\Site\Parsers\MarkdownParser;
use Phpsp\Site\Parsers\Parsedown;

/** @var $container \Illuminate\Container\Container */
/** @var $events \TightenCo\Jigsaw\Events\EventBus */
Expand All @@ -15,3 +18,8 @@
* // Your code here
* });
*/

$container->bind(BaseParser::class, MarkdownParser::class);
$container->bind(Parsedown::class, function ($app) {
return new Parsedown($app->config['baseUrl']);
});
4 changes: 3 additions & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,12 @@
"description": "PHPSP Website - Site estático gerado via Jigsaw",
"require": {
"php": ">=7.2",
"tightenco/jigsaw": "^v1.3.8"
"tightenco/jigsaw": "^v1.3.8",
"mnapoli/front-yaml": "^1.6.0"
},
"autoload": {
"psr-4": {
"Phpsp\\": "app/"
}
},
"authors": [
Expand Down
4 changes: 2 additions & 2 deletions composer.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit a1a61de

Please sign in to comment.