Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
<?php// This file is part of Moodle - http://moodle.org///// Moodle is free software: you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation, either version 3 of the License, or// (at your option) any later version.//// Moodle is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.//// You should have received a copy of the GNU General Public License// along with Moodle. If not, see <http://www.gnu.org/licenses/>.namespace tool_brickfield\local\htmlchecker\common\checks;use DOMXPath;use tool_brickfield\local\htmlchecker\common\brickfield_accessibility_color_test;/*** Brickfield accessibility HTML checker library.** @package tool_brickfield* @copyright 2020 onward: Brickfield Education Labs, www.brickfield.ie* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later*/class css_text_has_contrast extends brickfield_accessibility_color_test {/** @var int The default severity code for this test. */public $defaultseverity = \tool_brickfield\local\htmlchecker\brickfield_accessibility::BA_TEST_SEVERE;/** @var string The default background color. */public $defaultbackground = '#ffffff';/** @var string The default color. */public $defaultcolor = '#000000';/*** The main check function. This is called by the parent class to actually check content*/public function check(): void {if (isset($this->options['css_background'])) {$this->defaultbackground = $this->options['css_background'];}if (isset($this->options['css_foreground'])) {$this->defaultcolor = $this->options['css_foreground'];}$xpath = new DOMXPath($this->dom);// Selects all nodes that have a style attribute OR 'strong' OR 'em' elements that:// Contain only the text in their text nodes// OR Have text nodes AND text nodes that are not equal to the string-value of the context node// OR Have a text node descendant that equals the string-value of the context node and has no style attributes.$entries = $xpath->query('//*[(text() = . or ( ./*[text() != .]) or (.//*[text() = . and not(@style)]))and ((@style) or (name() = "strong") or (name() = "em"))]');foreach ($entries as $element) {$style = $this->css->get_style($element);if (isset($style['background-color']) || isset($style['color'])) {if (!isset($style['background-color'])) {$style['background-color'] = $this->defaultbackground;}if (!isset($style['color'])) {$style['color'] = $this->defaultcolor;}if ((isset($style['background']) || isset($style['background-color'])) && isset($style['color']) &&$element->nodeValue) {$background = (isset($style['background-color'])) ? $style['background-color'] : $style['background'];if (!$background || !empty($this->options['css_only_use_default'])) {$background = $this->defaultbackground;}$style['color'] = '#' . $this->convert_color($style['color']);$style['background-color'] = '#' . $this->convert_color($background);if (substr($background, 0, 3) == "rgb") {$background = '#' . $this->convert_color($background);}$luminosity = $this->get_luminosity($style['color'], $background);$fontsize = 0;$bold = false;$italic = false;if (isset($style['font-size'])) {$fontsize = $this->get_fontsize($style['font-size']);}if (isset($style['font-weight'])) {preg_match_all('!\d+!', $style['font-weight'], $matches);if (count($matches) > 0) {if ($matches >= 700) {$bold = true;} else {if ($style['font-weight'] === 'bold' || $style['font-weight'] === 'bolder') {$bold = true;}}}} else if ($element->tagName === "strong") {$bold = true;$style['font-weight'] = "bold";} else {$style['font-weight'] = "normal";}if (isset($style['font-style'])) {if ($style['font-style'] === "italic") {$italic = true;}} else if ($element->tagName === "em") {$italic = true;$style['font-style'] = "italic";} else {$style['font-style'] = "normal";}if ($element->tagName === 'h1' || $element->tagName === 'h2' || $element->tagName === 'h3' ||$element->tagName === 'h4' || $element->tagName === 'h5' || $element->tagName === 'h6' ||$fontsize >= 18 || $fontsize >= 14 && $bold) {if ($luminosity < 3) {$message = 'heading: background-color: ' . $background . '; color:' . $style["color"] .'; font-style: ' . $style['font-style'] . '; font-weight: ' . $style['font-weight'] . '; ';$this->add_report($element, $message);}} else {if ($luminosity < 4.5) {$message = 'text: background-color: ' . $background . '; color:' . $style["color"] . '; font-style: ' .$style['font-style'] . '; font-weight: ' . $style['font-weight'] . '; ';$this->add_report($element, $message);}}}}}}}