Compare commits

...

2 commits

Author SHA1 Message Date
Knah Tsaeb 645557480c Change tag style 2016-09-14 11:13:49 +02:00
Knah Tsaeb e68e261882 [upd] Parsedown to 1.6.0 2016-08-26 14:26:21 +02:00
5 changed files with 124 additions and 80 deletions

View file

@ -17,7 +17,7 @@ class Parsedown
{ {
# ~ # ~
const version = '1.5.3'; const version = '1.6.0';
# ~ # ~
@ -107,12 +107,6 @@ class Parsedown
# ~ # ~
protected $DefinitionTypes = array(
'[' => array('Reference'),
);
# ~
protected $unmarkedBlockTypes = array( protected $unmarkedBlockTypes = array(
'Code', 'Code',
); );
@ -121,7 +115,7 @@ class Parsedown
# Blocks # Blocks
# #
private function lines(array $lines) protected function lines(array $lines)
{ {
$CurrentBlock = null; $CurrentBlock = null;
@ -169,7 +163,7 @@ class Parsedown
# ~ # ~
if (isset($CurrentBlock['incomplete'])) if (isset($CurrentBlock['continuable']))
{ {
$Block = $this->{'block'.$CurrentBlock['type'].'Continue'}($Line, $CurrentBlock); $Block = $this->{'block'.$CurrentBlock['type'].'Continue'}($Line, $CurrentBlock);
@ -181,12 +175,10 @@ class Parsedown
} }
else else
{ {
if (method_exists($this, 'block'.$CurrentBlock['type'].'Complete')) if ($this->isBlockCompletable($CurrentBlock['type']))
{ {
$CurrentBlock = $this->{'block'.$CurrentBlock['type'].'Complete'}($CurrentBlock); $CurrentBlock = $this->{'block'.$CurrentBlock['type'].'Complete'}($CurrentBlock);
} }
unset($CurrentBlock['incomplete']);
} }
} }
@ -224,9 +216,9 @@ class Parsedown
$Block['identified'] = true; $Block['identified'] = true;
} }
if (method_exists($this, 'block'.$blockType.'Continue')) if ($this->isBlockContinuable($blockType))
{ {
$Block['incomplete'] = true; $Block['continuable'] = true;
} }
$CurrentBlock = $Block; $CurrentBlock = $Block;
@ -253,7 +245,7 @@ class Parsedown
# ~ # ~
if (isset($CurrentBlock['incomplete']) and method_exists($this, 'block'.$CurrentBlock['type'].'Complete')) if (isset($CurrentBlock['continuable']) and $this->isBlockCompletable($CurrentBlock['type']))
{ {
$CurrentBlock = $this->{'block'.$CurrentBlock['type'].'Complete'}($CurrentBlock); $CurrentBlock = $this->{'block'.$CurrentBlock['type'].'Complete'}($CurrentBlock);
} }
@ -286,6 +278,16 @@ class Parsedown
return $markup; return $markup;
} }
protected function isBlockContinuable($Type)
{
return method_exists($this, 'block'.$Type.'Continue');
}
protected function isBlockCompletable($Type)
{
return method_exists($this, 'block'.$Type.'Complete');
}
# #
# Code # Code
@ -394,16 +396,16 @@ class Parsedown
protected function blockFencedCode($Line) protected function blockFencedCode($Line)
{ {
if (preg_match('/^(['.$Line['text'][0].']{3,})[ ]*([\w-]+)?[ ]*$/', $Line['text'], $matches)) if (preg_match('/^['.$Line['text'][0].']{3,}[ ]*([\w-]+)?[ ]*$/', $Line['text'], $matches))
{ {
$Element = array( $Element = array(
'name' => 'code', 'name' => 'code',
'text' => '', 'text' => '',
); );
if (isset($matches[2])) if (isset($matches[1]))
{ {
$class = 'language-'.$matches[2]; $class = 'language-'.$matches[1];
$Element['attributes'] = array( $Element['attributes'] = array(
'class' => $class, 'class' => $class,
@ -673,7 +675,9 @@ class Parsedown
if (preg_match('/^<(\w*)(?:[ ]*'.$this->regexHtmlAttribute.')*[ ]*(\/)?>/', $Line['text'], $matches)) if (preg_match('/^<(\w*)(?:[ ]*'.$this->regexHtmlAttribute.')*[ ]*(\/)?>/', $Line['text'], $matches))
{ {
if (in_array($matches[1], $this->textLevelElements)) $element = strtolower($matches[1]);
if (in_array($element, $this->textLevelElements))
{ {
return; return;
} }
@ -987,15 +991,13 @@ class Parsedown
{ {
$markup = ''; $markup = '';
$unexaminedText = $text; # $excerpt is based on the first occurrence of a marker
$markerPosition = 0; while ($excerpt = strpbrk($text, $this->inlineMarkerList))
while ($excerpt = strpbrk($unexaminedText, $this->inlineMarkerList))
{ {
$marker = $excerpt[0]; $marker = $excerpt[0];
$markerPosition += strpos($unexaminedText, $marker); $markerPosition = strpos($text, $marker);
$Excerpt = array('text' => $excerpt, 'context' => $text); $Excerpt = array('text' => $excerpt, 'context' => $text);
@ -1008,34 +1010,42 @@ class Parsedown
continue; continue;
} }
if (isset($Inline['position']) and $Inline['position'] > $markerPosition) # position is ahead of marker # makes sure that the inline belongs to "our" marker
if (isset($Inline['position']) and $Inline['position'] > $markerPosition)
{ {
continue; continue;
} }
# sets a default inline position
if ( ! isset($Inline['position'])) if ( ! isset($Inline['position']))
{ {
$Inline['position'] = $markerPosition; $Inline['position'] = $markerPosition;
} }
# the text that comes before the inline
$unmarkedText = substr($text, 0, $Inline['position']); $unmarkedText = substr($text, 0, $Inline['position']);
# compile the unmarked text
$markup .= $this->unmarkedText($unmarkedText); $markup .= $this->unmarkedText($unmarkedText);
# compile the inline
$markup .= isset($Inline['markup']) ? $Inline['markup'] : $this->element($Inline['element']); $markup .= isset($Inline['markup']) ? $Inline['markup'] : $this->element($Inline['element']);
# remove the examined text
$text = substr($text, $Inline['position'] + $Inline['extent']); $text = substr($text, $Inline['position'] + $Inline['extent']);
$unexaminedText = $text;
$markerPosition = 0;
continue 2; continue 2;
} }
$unexaminedText = substr($excerpt, 1); # the marker does not belong to an inline
$markerPosition ++; $unmarkedText = substr($text, 0, $markerPosition + 1);
$markup .= $this->unmarkedText($unmarkedText);
$text = substr($text, $markerPosition + 1);
} }
$markup .= $this->unmarkedText($text); $markup .= $this->unmarkedText($text);
@ -1476,7 +1486,7 @@ class Parsedown
return self::$instances[$name]; return self::$instances[$name];
} }
$instance = new self(); $instance = new static();
self::$instances[$name] = $instance; self::$instances[$name] = $instance;

View file

@ -90,8 +90,8 @@
onclick="showQrCode(this); return false;" class="qrcode" data-permalink="{$scripturl}?{$value.linkdate|smallHash}"><img src="images/qrcode.png#" title="QR-Code" alt="qrcode logo"></a></span> - <span class="linkurl" title="Short link">{$value.url|htmlspecialchars}</span> onclick="showQrCode(this); return false;" class="qrcode" data-permalink="{$scripturl}?{$value.linkdate|smallHash}"><img src="images/qrcode.png#" title="QR-Code" alt="qrcode logo"></a></span> - <span class="linkurl" title="Short link">{$value.url|htmlspecialchars}</span>
<br> <br>
{if="$value.tags"} {if="$value.tags"}
<div class="linktaglist"> <div class="tags">
{loop="value.taglist"}<span class="linktag" title="Add tag"><a href="?addtag={$value|urlencode}">{$value|htmlspecialchars}</a></span> {/loop} {loop="value.taglist"}<a href="?addtag={$value|urlencode}">{$value|htmlspecialchars}</a> {/loop}
</div> </div>
{/if} {/if}
</div> </div>

View file

@ -621,33 +621,51 @@ a, .linkdescription a {
text-decoration: none; text-decoration: none;
} }
.linktaglist { .tags a {
line-height: 200%; float: left;
padding-top: 0.3em; background: #777;
color: #fff;
text-decoration: none;
margin: 0 0 10px 18px;
padding: 2px 10px 1px;
border-top-right-radius: 3px;
border-bottom-right-radius: 3px;
position: relative;
transition: all .25s linear;
text-shadow: 0 1px 1px rgba(0, 0, 0, 0.4);
white-space: nowrap;
line-height: 21px;
} }
.linktag { .tags a:before {
background: linear-gradient(#F2F2F2,#ffffff); content: "";
background-color: #ffffff; border-style: solid;
background-image: url(../../images/tag_blue.png); border-color: transparent #777 transparent transparent;
background-position: 3px center; border-width: 12px 13px 12px 0;
background-repeat: no-repeat; position: absolute;
border-radius: 3px 3px 3px 3px; left: -13px;
box-shadow: 0 0 2px rgba(0,0,0,0.5); top: 0;
cursor: pointer; transition: all .25s linear;
font-size: 9pt;
height: 20px;
padding: 3px 3px 3px 20px;
} }
.linktag:hover { .tags a:after {
border-color: #555573; background: none repeat scroll 0 0 #FFFFFF;
color: #000; border-radius: 50% 50% 50% 50%;
box-shadow: 0 1px 1px #737373 inset;
content: "";
height: 5px;
left: -1px;
position: absolute;
top: 10px;
width: 5px;
} }
.linktag a { .tags a:hover {
color: #777; background-color: #333;
text-decoration: none; color: #a2dd42;
}
.tags a:hover:before {
border-color: transparent #333 transparent transparent;
} }
.linkshort a { .linkshort a {

View file

@ -633,36 +633,52 @@ a, .linkdescription a {
color: #3465A4; color: #3465A4;
text-decoration: none; text-decoration: none;
} }
.tags a {
.linktaglist { float: left;
line-height: 200%; background: #777;
padding-top: 0.3em; color: #fff;
text-decoration: none;
margin: 0 0 10px 18px;
padding: 2px 10px 1px;
border-top-right-radius: 3px;
border-bottom-right-radius: 3px;
position: relative;
transition: all .25s linear;
text-shadow: 0 1px 1px rgba(0, 0, 0, 0.4);
white-space: nowrap;
line-height: 21px;
} }
.linktag { .tags a:before {
background: linear-gradient(#F2F2F2,#ffffff); content: "";
background-color: #ffffff; border-style: solid;
background-image: url(../../images/tag_blue.png); border-color: transparent #777 transparent transparent;
background-position: 3px center; border-width: 12px 13px 12px 0;
background-repeat: no-repeat; position: absolute;
border-radius: 3px 3px 3px 3px; left: -13px;
box-shadow: 0 0 2px rgba(0,0,0,0.5); top: 0;
cursor: pointer; transition: all .25s linear;
font-size: 9pt;
height: 20px;
padding: 3px 3px 3px 20px;
} }
.linktag:hover { .tags a:after {
border-color: #555573; background: none repeat scroll 0 0 #FFFFFF;
color: #000; border-radius: 50% 50% 50% 50%;
box-shadow: 0 1px 1px #737373 inset;
content: "";
height: 5px;
left: -1px;
position: absolute;
top: 10px;
width: 5px;
} }
.linktag a { .tags a:hover {
color: #777; background-color: #333;
text-decoration: none; color: #a2dd42;
}
.tags a:hover:before {
border-color: transparent #333 transparent transparent;
} }
.linkshort a { .linkshort a {
color: #393964; color: #393964;
text-decoration: none; text-decoration: none;

View file

@ -90,8 +90,8 @@
onclick="showQrCode(this); return false;" class="qrcode" data-permalink="{$scripturl}?{$value.linkdate|smallHash}"><img src="images/qrcode.png#" title="QR-Code" alt="qrcode logo"></a></span> - <span class="linkurl" title="Short link">{$value.url|htmlspecialchars}</span> onclick="showQrCode(this); return false;" class="qrcode" data-permalink="{$scripturl}?{$value.linkdate|smallHash}"><img src="images/qrcode.png#" title="QR-Code" alt="qrcode logo"></a></span> - <span class="linkurl" title="Short link">{$value.url|htmlspecialchars}</span>
<br> <br>
{if="$value.tags"} {if="$value.tags"}
<div class="linktaglist"> <div class="tags">
{loop="value.taglist"}<span class="linktag" title="Add tag"><a href="?addtag={$value|urlencode}">{$value|htmlspecialchars}</a></span> {/loop} {loop="value.taglist"}<a href="?addtag={$value|urlencode}">{$value|htmlspecialchars}</a> {/loop}
</div> </div>
{/if} {/if}
</div> </div>