diff --git a/lib/classes/ForumEntry.php b/lib/classes/ForumEntry.php index 95721d75c2f74251f946c24038bf1a2f4d3a95fc..f18fbb2141c42b0e19528d928ec6fe2e54d5061d 100644 --- a/lib/classes/ForumEntry.php +++ b/lib/classes/ForumEntry.php @@ -146,7 +146,9 @@ class ForumEntry implements PrivacyObject if (Studip\Markup::isHtml($description)) { // remove all blockquote tags $dom = new DOMDocument(); + $old_libxml_error = libxml_use_internal_errors(true); $dom->loadHtml($description, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD); + libxml_use_internal_errors($old_libxml_error); $nodes = iterator_to_array($dom->getElementsByTagName('blockquote')); foreach ($nodes as $node) { diff --git a/lib/classes/Markup.class.php b/lib/classes/Markup.class.php index 26204aa7f5be8d534ddee56ac087711e33da59e9..0944f422564f3314369c66f3944a869b2f9cd29d 100644 --- a/lib/classes/Markup.class.php +++ b/lib/classes/Markup.class.php @@ -285,6 +285,8 @@ class Markup code div[class|style] em + figure[class|style] + figcaption h1 h2 h3 @@ -305,7 +307,7 @@ class Markup small sub sup - table[class] + table[class|style] tbody td[colspan|rowspan|style] thead @@ -340,7 +342,9 @@ class Markup 'height', 'color', 'background-color', // needed by span, td - 'float' + 'border-style', + 'float', + 'border' ]); if ($autoformat) { @@ -375,6 +379,9 @@ class Markup 'controls' => 'Text', // Bool triggers bug in HTMLPurifier ]); + $def->addElement('figcaption', 'Inline', 'Flow', 'Common'); + $def->addElement('figure', 'Block', 'Optional: (figcaption, Flow) | (Flow, figcaption) | Flow', 'Common'); + return new \HTMLPurifier($config); } diff --git a/lib/models/Courseware/BlockTypes/Text.php b/lib/models/Courseware/BlockTypes/Text.php index 7edeebc9262e359fb6c77acefbea5587010bdee7..4bccd883895bf563841a4f2d22f4d9d7440df21a 100644 --- a/lib/models/Courseware/BlockTypes/Text.php +++ b/lib/models/Courseware/BlockTypes/Text.php @@ -70,7 +70,9 @@ class Text extends BlockType $files = []; if ($payload['text']) { + $old_libxml_error = libxml_use_internal_errors(true); $document->loadHTML($payload['text']); + libxml_use_internal_errors($old_libxml_error); $imageElements = $document->getElementsByTagName('img'); foreach ($imageElements as $element) { if (!$element instanceof \DOMElement || !$element->hasAttribute('src')) { @@ -82,6 +84,7 @@ class Text extends BlockType } } } + return $files; } diff --git a/resources/assets/stylesheets/scss/content.scss b/resources/assets/stylesheets/scss/content.scss index acfb03e19ecc3132778644cb4c655f204fef5215..aca9cb0a96df5465f304de8cf155d7ffdc9ebb87 100644 --- a/resources/assets/stylesheets/scss/content.scss +++ b/resources/assets/stylesheets/scss/content.scss @@ -54,6 +54,24 @@ pre { // pre-formatted content breaks the Stud.IP Layout! white-space: pre-wrap; } + + figure { + display: table; + margin: 0.9em auto; + + table { + width: 100%; + height: 100%; + border-collapse: collapse; + border-spacing: 0; + + td { + border: unset; + min-width: 2em; + padding: 0.4em; + } + } + } } // Emphasize tt tags a little bit so ##monospace## blocks will stick out.