Skip to content

Commit

Permalink
General: Stabilize twig template usage
Browse files Browse the repository at this point in the history
Signed-off-by: Sean Molenaar <[email protected]>
  • Loading branch information
SMillerDev committed Apr 20, 2021
1 parent ff63909 commit 96625a2
Show file tree
Hide file tree
Showing 22 changed files with 264 additions and 158 deletions.
6 changes: 3 additions & 3 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -75,10 +75,10 @@ jobs:
run: echo "::add-matcher::${{ runner.tool_cache }}/phpunit.json"

- name: Run test suite
run: composer run-script test
run: ./vendor/bin/phpunit --configuration tests/phpunit.xml --coverage-clover=coverage.xml --exclude-group twig

- name: PHPStan
run: phpstan analyse --level=5 src/
run: ./vendor/bin/phpstan analyse --level=5 src/

- name: PHPCS
run: phpcs --standard=tests/phpcs.xml --ignore=\*Minifier.php src/ | cs2pr
Expand Down Expand Up @@ -110,7 +110,7 @@ jobs:
run: composer update --no-interaction --no-suggest

- name: Run test suite
run: composer run-script test-sonar
run: ./vendor/bin/phpunit --configuration tests/phpunit.xml --exclude-group twig --coverage-clover=./var/coverage/clover.xml

- name: Code coverage Scan
uses: codecov/codecov-action@v1
Expand Down
6 changes: 0 additions & 6 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -38,12 +38,6 @@
"phpstan/phpstan": "^0.12.17"
},
"scripts": {
"test": [
"vendor/bin/phpunit --configuration tests/phpunit.xml --coverage-clover=coverage.xml"
],
"test-sonar": [
"vendor/bin/phpunit --configuration tests/phpunit.xml --coverage-clover=./var/coverage/clover.xml"
],
"phar": [
"vendor/bin/phing phar",
"sha256sum build/out/*"
Expand Down
4 changes: 3 additions & 1 deletion src/PHPDraft/Model/Elements/ArrayStructureElement.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@

namespace PHPDraft\Model\Elements;

use Michelf\MarkdownExtra;

/**
* Class ArrayStructureElement.
*/
Expand Down Expand Up @@ -58,7 +60,7 @@ public function __toString(): string
if (is_string($this->value)) {
$type = $this->get_element_as_html($this->element);

return '<tr><td>' . $this->key . '</td><td>' . $type . '</td><td>' . $this->description . '</td></tr>';
return '<tr><td>' . $this->key . '</td><td>' . $type . '</td><td>' . MarkdownExtra::defaultTransform($this->description) . '</td></tr>';
}

$return = '';
Expand Down
2 changes: 1 addition & 1 deletion src/PHPDraft/Model/Elements/BasicStructureElement.php
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ protected function parse_common(object $object, array &$dependencies): void
$this->description = htmlentities($object->meta->description);
}
if ($this->description !== null) {
$encoded = htmlentities($this->description, ENT_COMPAT, null, false);
$encoded = htmlentities($this->description, ENT_COMPAT, 'ISO-8859-1', false);
$this->description = $encoded;
}

Expand Down
4 changes: 3 additions & 1 deletion src/PHPDraft/Model/Elements/EnumStructureElement.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@

namespace PHPDraft\Model\Elements;

use Michelf\MarkdownExtra;

class EnumStructureElement extends BasicStructureElement
{
/**
Expand Down Expand Up @@ -80,7 +82,7 @@ public function __toString(): string
if (is_string($this->value)) {
$type = $this->get_element_as_html($this->element);

return '<tr><td>' . $this->key->value . '</td><td>' . $type . '</td><td>' . $this->description . '</td></tr>';
return '<tr><td>' . $this->key->value . '</td><td>' . $type . '</td><td>' . MarkdownExtra::defaultTransform($this->description) . '</td></tr>';
}

$return = '';
Expand Down
6 changes: 4 additions & 2 deletions src/PHPDraft/Model/Elements/ObjectStructureElement.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@

namespace PHPDraft\Model\Elements;

use Michelf\MarkdownExtra;

/**
* Class ObjectStructureElement.
*/
Expand All @@ -20,7 +22,7 @@ class ObjectStructureElement extends BasicStructureElement

/**
* Object representation before parsing
* @var \stdClass
* @var \stdClass|null
*/
private $object;

Expand Down Expand Up @@ -212,7 +214,7 @@ protected function construct_string_return(string $value): string
'<td>' . '<span>' . $this->key->value . '</span>' . $variable . '</td>' .
'<td>' . $type . '</td>' .
'<td> <span class="status">' . $this->status . '</span></td>' .
'<td>' . $this->description . '</td>' .
'<td>' . MarkdownExtra::defaultTransform($this->description) . '</td>' .
'<td>' . $value . '</td>' .
'</tr>';
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ public function testToStringWithString(): void
$this->class->key->value = 'key';
$this->class->element = 'string';
$return = $this->class->__toString();
$this->assertSame('<tr><td>key</td><td><code>string</code></td><td></td></tr>', $return);
$this->assertSame('<tr><td>key</td><td><code>string</code></td><td>' . PHP_EOL . '</td></tr>', $return);
}

/**
Expand All @@ -91,7 +91,7 @@ public function testToStringWithStringComplex(): void
$this->class->key->value = 'key';
$this->class->element = 'Car';
$return = $this->class->__toString();
$this->assertSame('<tr><td>key</td><td><a class="code" title="Car" href="#object-car">Car</a></td><td></td></tr>', $return);
$this->assertSame('<tr><td>key</td><td><a class="code" title="Car" href="#object-car">Car</a></td><td>' . PHP_EOL . '</td></tr>', $return);
}

/**
Expand Down
16 changes: 8 additions & 8 deletions src/PHPDraft/Model/Elements/Tests/ObjectStructureElementTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -360,7 +360,7 @@ public function testToStringArray(): void
$val->value = 'stuff';
$this->class->value = [$val];
$return = $this->class->__toString();
$this->assertSame('<table class="table table-striped mdl-data-table mdl-js-data-table "><tr><td></td><td><a class="code" title="things" href="#object-things">things</a></td><td></td></tr></table>', $return);
$this->assertSame('<table class="table table-striped mdl-data-table mdl-js-data-table "><tr><td></td><td><a class="code" title="things" href="#object-things">things</a></td><td>' . PHP_EOL . '</td></tr></table>', $return);
}

/**
Expand All @@ -374,7 +374,7 @@ public function testToStringNullValue(): void
$this->class->key->value = 'hello';
$this->class->type = 'mixed';
$return = $this->class->__toString();
$this->assertSame('<tr><td><span>hello</span></td><td><a class="code" title="mixed" href="#object-mixed">mixed</a></td><td> <span class="status"></span></td><td></td><td></td></tr>', $return);
$this->assertSame('<tr><td><span>hello</span></td><td><a class="code" title="mixed" href="#object-mixed">mixed</a></td><td> <span class="status"></span></td><td>' . PHP_EOL . '</td><td></td></tr>', $return);
}

/**
Expand All @@ -389,7 +389,7 @@ public function testToStringObjectValue(): void
$this->class->value = new ObjectStructureElement();
$this->class->type = 'object';
$return = $this->class->__toString();
$this->assertSame('<tr><td><span>hello</span></td><td><code>object</code></td><td> <span class="status"></span></td><td></td><td><div class="sub-struct"><span class="example-value pull-right">{ }</span></div></td></tr>', $return);
$this->assertSame('<tr><td><span>hello</span></td><td><code>object</code></td><td> <span class="status"></span></td><td>' . PHP_EOL . '</td><td><div class="sub-struct"><span class="example-value pull-right">{ }</span></div></td></tr>', $return);
}

/**
Expand All @@ -406,7 +406,7 @@ public function testToStringArrayValue(): void
$this->class->value->value = 'value';
$this->class->type = 'array';
$return = $this->class->__toString();
$this->assertSame('<tr><td><span>hello</span></td><td><code>array</code></td><td> <span class="status"></span></td><td></td><td><div class="array-struct"><tr><td></td><td><a class="code" title="value" href="#object-value">value</a></td><td></td></tr></div></td></tr>', $return);
$this->assertSame('<tr><td><span>hello</span></td><td><code>array</code></td><td> <span class="status"></span></td><td>' . PHP_EOL . '</td><td><div class="array-struct"><tr><td></td><td><a class="code" title="value" href="#object-value">value</a></td><td>' . PHP_EOL . '</td></tr></div></td></tr>', $return);
}

/**
Expand All @@ -426,7 +426,7 @@ public function testToStringEnumValue(): void
$this->class->value->key->value = 'key';
$this->class->value->type = 'enum';
$return = $this->class->__toString();
$this->assertSame('<div class="enum-struct"><tr><td>key</td><td><a class="code" title="value" href="#object-value">value</a></td><td></td></tr></div>', $return);
$this->assertSame('<div class="enum-struct"><tr><td>key</td><td><a class="code" title="value" href="#object-value">value</a></td><td>' . PHP_EOL . '</td></tr></div>', $return);
}

/**
Expand All @@ -441,7 +441,7 @@ public function testToStringBoolValue(): void
$this->class->value = true;
$this->class->type = 'boolean';
$return = $this->class->__toString();
$this->assertSame('<tr><td><span>hello</span></td><td><code>boolean</code></td><td> <span class="status"></span></td><td></td><td><span class="example-value pull-right">true</span></td></tr>', $return);
$this->assertSame('<tr><td><span>hello</span></td><td><code>boolean</code></td><td> <span class="status"></span></td><td>' . PHP_EOL . '</td><td><span class="example-value pull-right">true</span></td></tr>', $return);
}

/**
Expand All @@ -456,7 +456,7 @@ public function testToStringOtherValue(): void
$this->class->value = 'world';
$this->class->type = 'Cow';
$return = $this->class->__toString();
$this->assertSame('<tr><td><span>hello</span></td><td><a class="code" title="Cow" href="#object-cow">Cow</a></td><td> <span class="status"></span></td><td></td><td><span class="example-value pull-right">world</span></td></tr>', $return);
$this->assertSame('<tr><td><span>hello</span></td><td><a class="code" title="Cow" href="#object-cow">Cow</a></td><td> <span class="status"></span></td><td>' . PHP_EOL . '</td><td><span class="example-value pull-right">world</span></td></tr>', $return);
}

/**
Expand All @@ -471,6 +471,6 @@ public function testToStringOtherValueTypeKnown(): void
$this->class->key->value = 'hello';
$this->class->value = 'world';
$return = $this->class->__toString();
$this->assertSame('<tr><td><span>hello</span></td><td><code>string</code></td><td> <span class="status"></span></td><td></td><td><span class="example-value pull-right">world</span></td></tr>', $return);
$this->assertSame('<tr><td><span>hello</span></td><td><code>string</code></td><td> <span class="status"></span></td><td>' . PHP_EOL . '</td><td><span class="example-value pull-right">world</span></td></tr>', $return);
}
}
20 changes: 20 additions & 0 deletions src/PHPDraft/Out/HTML/default/main.css
Original file line number Diff line number Diff line change
Expand Up @@ -225,4 +225,24 @@ span.HEAD {
}
span.PATCH {
color: var(--patch-color);
}

h1.media-heading {
max-width: 80%;
word-break: break-word;
}

.host-information {
position: absolute;
top: 0;
right: 0;
}

.host-information label.host-dropdown {
}

.host-information label.host-dropdown select {
border: 0 none rgba(0,0,0,0);
display: inherit;
width: auto;
}
21 changes: 11 additions & 10 deletions src/PHPDraft/Out/HTML/default/main.twig
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
<title>{{ data.TITLE }}</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.13.0/css/all.css" integrity="sha384-Bfad6CLCknfcloXFOyFnlgtENryhrpZCe29RTifKEixXQZ38WheV+i/6YWSzkz3V" crossorigin="anonymous">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.6.0/css/bootstrap.min.css" integrity="sha512-P5MgMn1jBN01asBgU0z60Qk4QxiXo86+wlFahKrsQf37c9cro517WzVSPPV1tDKzhku2iJ2FVgL67wG03SGnNA==" crossorigin="anonymous" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css" integrity="sha512-iBBXm8fW90+nuLcSKlbmrPcLa0OT92xO1BIsZ+ywDWZCvqsWgccV3gFoRBv0z+8dLJgyAHIhR35VZc2oM/gI1w==" crossorigin="anonymous" />
{% for style in css %}
<link rel="stylesheet" href="{{ style }}">
{% endfor %}
Expand All @@ -15,9 +15,10 @@
<div class="container-fluid">
<div class="media">
<div class="media-body">
<h1 class="media-heading">{{ data.TITLE|raw }}
<h1 class="media-heading">{{ data.TITLE|raw }}</h1>
<section class="host-information">
{% if data.ALT_HOST %}
<label>
<label class="host-dropdown">
Host:
<select class="form-control">
<option selected>{{ data.HOST }}</option>
Expand All @@ -27,9 +28,9 @@
</select>
</label>
{%- else %}
<small>{{ data.HOST }}</small>
<label class="host-dropdown">Host: {{ data.HOST }}</label>
{% endif %}
</h1>
</section>
{% if data.DESC %}
{{ data.DESC|markdown_to_html }}
{% endif %}
Expand Down Expand Up @@ -73,10 +74,10 @@
<script src="{{ script }}"></script>
{% endfor %}
<!-- JS, Popper.js, and jQuery -->
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/anchor-js/4.2.2/anchor.min.js" integrity="sha256-E4RlfxwyJVmkkk0szw7LYJxuPlp6evtPSBDlWHsYYL8=" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js" integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.slim.js" integrity="sha512-HNbo1d4BaJjXh+/e6q4enTyezg5wiXvY3p/9Vzb20NIvkJghZxhzaXeffbdJuuZSxFhJP87ORPadwmU9aN3wSA==" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/anchor-js/4.3.1/anchor.min.js" integrity="sha512-zPB79j2C+3sFS9zcA3vg/z6bVKzJVEyu9pY5w89akQRys76zpAT2t6S3wZKla3QQ14O5l/Yt0RUQ/DHXx82Y5g==" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.1/umd/popper.min.js" integrity="sha512-ubuT8Z88WxezgSqf3RLuNi5lmjstiJcyezx34yIU2gAHonIi27Na7atqzUZCOoY4CExaoFumzOsFQ2Ch+I/HCw==" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.6.0/js/bootstrap.min.js" integrity="sha512-XKa9Hemdy1Ui3KSGgJdgMyYlUg1gM+QhL6cnlyTe2qzMCYm4nAZ1PsVerQzTTXzonUR+dmswHqgJPuwCq1MaAg==" crossorigin="anonymous"></script>
<script>{{ template_js|minify_js|raw }}</script>
</body>
</html>
12 changes: 6 additions & 6 deletions src/PHPDraft/Out/HTML/material/main.twig
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
<title>{{ data.TITLE }}</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.13.0/css/all.css" integrity="sha384-Bfad6CLCknfcloXFOyFnlgtENryhrpZCe29RTifKEixXQZ38WheV+i/6YWSzkz3V" crossorigin="anonymous">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css" integrity="sha512-UJfAaOlIRtdR+0P6C3KUoTDAxVTuy3lnSXLyLKlHYJlcSU8Juge/mjeaxDNMlw9LgeIotgz5FP8eUQPhX1q10A==" crossorigin="anonymous" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css" integrity="sha512-iBBXm8fW90+nuLcSKlbmrPcLa0OT92xO1BIsZ+ywDWZCvqsWgccV3gFoRBv0z+8dLJgyAHIhR35VZc2oM/gI1w==" crossorigin="anonymous" />
{% for style in css %}
<link rel="stylesheet" href="{{ style }}">
{% endfor %}
Expand Down Expand Up @@ -81,10 +81,10 @@
<script src="{{ script|minify_js|raw }}"></script>
{% endfor %}
<!-- JS, Popper.js, and jQuery -->
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/anchor-js/4.2.2/anchor.min.js" integrity="sha256-E4RlfxwyJVmkkk0szw7LYJxuPlp6evtPSBDlWHsYYL8=" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.slim.js" integrity="sha512-HNbo1d4BaJjXh+/e6q4enTyezg5wiXvY3p/9Vzb20NIvkJghZxhzaXeffbdJuuZSxFhJP87ORPadwmU9aN3wSA==" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/anchor-js/4.3.1/anchor.min.js" integrity="sha512-zPB79j2C+3sFS9zcA3vg/z6bVKzJVEyu9pY5w89akQRys76zpAT2t6S3wZKla3QQ14O5l/Yt0RUQ/DHXx82Y5g==" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.1/umd/popper.min.js" integrity="sha512-ubuT8Z88WxezgSqf3RLuNi5lmjstiJcyezx34yIU2gAHonIi27Na7atqzUZCOoY4CExaoFumzOsFQ2Ch+I/HCw==" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js" integrity="sha512-NiWqa2rceHnN3Z5j6mSAvbwwg3tiwVNxiAQaaSMSXnRRDh5C2mk/+sKQRw8qjV1vN4nf8iK2a0b048PnHbyx+Q==" crossorigin="anonymous"></script>
<script>{{ template_js|raw }}</script>
</body>
</html>
4 changes: 4 additions & 0 deletions src/PHPDraft/Out/Tests/TemplateRendererTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,7 @@ public function testGetTemplateFailsEmpty(): void {

/**
* @covers \PHPDraft\Out\TemplateRenderer::get
* @group twig
*/
public function testGetTemplate(): void {
$json = '{"content": [{"content": "hello"}]}';
Expand All @@ -214,6 +215,7 @@ public function testGetTemplate(): void {

/**
* @covers \PHPDraft\Out\TemplateRenderer::get
* @group twig
*/
public function testGetTemplateSorting(): void {
$this->set_reflection_property_value('sorting', 3);
Expand All @@ -224,6 +226,7 @@ public function testGetTemplateSorting(): void {

/**
* @covers \PHPDraft\Out\TemplateRenderer::get
* @group twig
*/
public function testGetTemplateMetaData(): void {
$this->set_reflection_property_value('sorting', 3);
Expand All @@ -241,6 +244,7 @@ public function testGetTemplateMetaData(): void {

/**
* @covers \PHPDraft\Out\TemplateRenderer::get
* @group twig
*/
public function testGetTemplateCategories(): void {
$this->set_reflection_property_value('sorting', 3);
Expand Down
1 change: 1 addition & 0 deletions src/PHPDraft/Out/Tests/TwigFactoryTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ class TwigFactoryTest extends LunrBaseTest
* Check factory
*
* @covers \PHPDraft\Out\TwigFactory::get
* @group twig
*/
public function testFactory(): void
{
Expand Down
2 changes: 0 additions & 2 deletions src/PHPDraft/Out/TwigFactory.php
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
<?php


namespace PHPDraft\Out;


use Lukasoppermann\Httpstatus\Httpstatus;
use MatthiasMullie\Minify\CSS;
use MatthiasMullie\Minify\JS;
Expand Down
2 changes: 1 addition & 1 deletion src/PHPDraft/Parse/DrafterAPI.php
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ protected function parse(): void
*
* @param string $message API blueprint to parse
*
* @return false|resource|\CurlHandle
* @return false|resource
*/
public static function curl_init_drafter(string $message)
{
Expand Down
6 changes: 0 additions & 6 deletions src/PHPDraft/Parse/Tests/HtmlGeneratorTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,6 @@ class HtmlGeneratorTest extends LunrBaseTest
*/
protected $class;

/**
* Test reflection
* @var ReflectionClass
*/
protected $reflection;

/**
* Set up
* @requires ext-uopz
Expand Down
Loading

0 comments on commit 96625a2

Please sign in to comment.