AutorÃa | 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;
/**
* Special base class which provides helper methods for tables.
*
* @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 brickfield_accessibility_table_test extends brickfield_accessibility_test {
/**
* Takes the element object of a main table and returns the number of rows and columns in it.
* @param \stdClass $table
* @return array An array with the 'rows' value showing the number of rows, and column showing the number of columns
*/
public function get_table(\stdClass $table): array {
$rows = 0;
$columns = 0;
$firstrow = true;
if ($table->tagName != 'table') {
return false;
}
foreach ($table->childNodes as $child) {
if (property_exists($child, 'tagName') && $child->tagName == 'tr') {
$rows++;
if ($firstrow) {
foreach ($child->childNodes as $columnchild) {
if ($columnchild->tagName == 'th' || $columnchild->tagName == 'td') {
$columns++;
}
}
$firstrow = false;
}
}
}
return ['rows' => $rows, 'columns' => $columns];
}
/**
* Finds whether or not the table is a data table. Checks that the
* table has a logical order and uses 'th' or 'thead' tags to illustrate
* the page author thought it was a data table.
* @param object $table The DOMElement object of the table tag
* @return bool TRUE if the element is a data table, otherwise false
*/
public function is_data($table): bool {
if ($table->tagName != 'table') {
return false;
}
foreach ($table->childNodes as $child) {
if (property_exists($child, 'tagName') && $child->tagName == 'tr') {
foreach ($child->childNodes as $rowchild) {
if (property_exists($rowchild, 'tagName') && $rowchild->tagName == 'th') {
return true;
}
}
}
if (property_exists($child, 'tagName') && $child->tagName == 'thead') {
return true;
}
}
return false;
}
}