responsive table head
This commit is contained in:
parent
aa921cadf8
commit
62ae3267d2
Binary file not shown.
After Width: | Height: | Size: 719 B |
Binary file not shown.
After Width: | Height: | Size: 801 B |
Binary file not shown.
After Width: | Height: | Size: 686 B |
Binary file not shown.
After Width: | Height: | Size: 764 B |
|
@ -2040,6 +2040,8 @@ class htmlInputCheckbox extends htmlElement {
|
||||||
protected $elementsToEnable = array();
|
protected $elementsToEnable = array();
|
||||||
/** list of input elements to disable when checked */
|
/** list of input elements to disable when checked */
|
||||||
protected $elementsToDisable = array();
|
protected $elementsToDisable = array();
|
||||||
|
/** onclick event code */
|
||||||
|
private $onClick;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -2167,7 +2169,11 @@ class htmlInputCheckbox extends htmlElement {
|
||||||
if (!empty($onChange)) {
|
if (!empty($onChange)) {
|
||||||
$onChange = ' onChange="' . $onChange . '"';
|
$onChange = ' onChange="' . $onChange . '"';
|
||||||
}
|
}
|
||||||
echo '<input type="checkbox" id="' . $this->name . '" name="' . $this->name . '"' . $classes . $tabindexValue . $onChange . $checked . $disabled . '>';
|
$onClick = '';
|
||||||
|
if (!empty($this->onClick)) {
|
||||||
|
$onClick = ' onclick="' . $this->onClick . '"';
|
||||||
|
}
|
||||||
|
echo '<input type="checkbox" id="' . $this->name . '" name="' . $this->name . '"' . $classes . $tabindexValue . $onChange . $onClick . $checked . $disabled . '>';
|
||||||
echo $script;
|
echo $script;
|
||||||
if ($this->transient) {
|
if ($this->transient) {
|
||||||
return array();
|
return array();
|
||||||
|
@ -2250,6 +2256,15 @@ class htmlInputCheckbox extends htmlElement {
|
||||||
return 'tr';
|
return 'tr';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the onclick code.
|
||||||
|
*
|
||||||
|
* @param string $code JS code
|
||||||
|
*/
|
||||||
|
public function setOnClick($code) {
|
||||||
|
$this->onClick = $code;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -4663,6 +4678,10 @@ class htmlResponsiveTable extends htmlElement {
|
||||||
|
|
||||||
/** highlighted rows */
|
/** highlighted rows */
|
||||||
private $highlighted = array();
|
private $highlighted = array();
|
||||||
|
/** CSS class for odd row numbers */
|
||||||
|
private $cssOddRow;
|
||||||
|
/** CSS class for even row numbers */
|
||||||
|
private $cssEvenRow;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates the table.
|
* Creates the table.
|
||||||
|
@ -4689,7 +4708,8 @@ class htmlResponsiveTable extends htmlElement {
|
||||||
$classes[] = 'responsive-table';
|
$classes[] = 'responsive-table';
|
||||||
echo '<table class="' . implode(' ', $classes) . '">';
|
echo '<table class="' . implode(' ', $classes) . '">';
|
||||||
echo '<thead>';
|
echo '<thead>';
|
||||||
echo '<tr>';
|
$headClass = empty($this->cssOddRow) ? '' : ' class="' . $this->cssOddRow . '"';
|
||||||
|
echo '<tr ' . $headClass . '>';
|
||||||
$counter = 0;
|
$counter = 0;
|
||||||
foreach ($this->titles as $title) {
|
foreach ($this->titles as $title) {
|
||||||
$width = '';
|
$width = '';
|
||||||
|
@ -4706,8 +4726,18 @@ class htmlResponsiveTable extends htmlElement {
|
||||||
$counter = 0;
|
$counter = 0;
|
||||||
foreach ($this->data as $row) {
|
foreach ($this->data as $row) {
|
||||||
$cssClass = '';
|
$cssClass = '';
|
||||||
|
$cssClasses = array();
|
||||||
if (in_array($counter, $this->highlighted)) {
|
if (in_array($counter, $this->highlighted)) {
|
||||||
$cssClass = ' class="bold"';
|
$cssClasses[] = 'bold';
|
||||||
|
}
|
||||||
|
if (!empty($this->cssEvenRow) && ($counter % 2 === 0)) {
|
||||||
|
$cssClasses[] = $this->cssEvenRow;
|
||||||
|
}
|
||||||
|
if (!empty($this->cssOddRow) && ($counter % 2 === 1)) {
|
||||||
|
$cssClasses[] = $this->cssOddRow;
|
||||||
|
}
|
||||||
|
if (!empty($cssClasses)) {
|
||||||
|
$cssClass = ' class="' . implode(' ', $cssClasses) . '"';
|
||||||
}
|
}
|
||||||
echo '<tr ' . $cssClass . '>';
|
echo '<tr ' . $cssClass . '>';
|
||||||
for ($i = 0; $i < $titleCount; $i++) {
|
for ($i = 0; $i < $titleCount; $i++) {
|
||||||
|
@ -4728,6 +4758,18 @@ class htmlResponsiveTable extends htmlElement {
|
||||||
$this->widths = $widths;
|
$this->widths = $widths;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the CSS classes for odd and even rows.
|
||||||
|
* The title row counts as row number -1.
|
||||||
|
*
|
||||||
|
* @param string $oddClass class for odd rows
|
||||||
|
* @param string $evenClass class for even rows
|
||||||
|
*/
|
||||||
|
public function setRowClasses($oddClass, $evenClass) {
|
||||||
|
$this->cssOddRow = $oddClass;
|
||||||
|
$this->cssEvenRow = $evenClass;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -202,6 +202,7 @@ class lamList {
|
||||||
$this->listDrawNavigationBar(sizeof($this->entries));
|
$this->listDrawNavigationBar(sizeof($this->entries));
|
||||||
echo ("<br>\n");
|
echo ("<br>\n");
|
||||||
echo "<div id=\"listScrollArea\" style=\"overflow: auto; padding: 1px;\">";
|
echo "<div id=\"listScrollArea\" style=\"overflow: auto; padding: 1px;\">";
|
||||||
|
$this->printAccountTable($this->entries);
|
||||||
// account table head
|
// account table head
|
||||||
$this->listPrintTableHeader();
|
$this->listPrintTableHeader();
|
||||||
// account table body
|
// account table body
|
||||||
|
@ -215,6 +216,8 @@ class lamList {
|
||||||
// navigation bar
|
// navigation bar
|
||||||
$this->listDrawNavigationBar(sizeof($this->entries));
|
$this->listDrawNavigationBar(sizeof($this->entries));
|
||||||
echo ("<br>\n");
|
echo ("<br>\n");
|
||||||
|
$accounts = array();
|
||||||
|
$this->printAccountTable($accounts);
|
||||||
// account table head
|
// account table head
|
||||||
$this->listPrintTableHeader();
|
$this->listPrintTableHeader();
|
||||||
echo "</table><br>\n";
|
echo "</table><br>\n";
|
||||||
|
@ -388,11 +391,105 @@ class lamList {
|
||||||
protected function getFilterAsTextForURL() {
|
protected function getFilterAsTextForURL() {
|
||||||
$text = '';
|
$text = '';
|
||||||
foreach ($this->filters as $attr => $filter) {
|
foreach ($this->filters as $attr => $filter) {
|
||||||
$text .= "&filter" . strtolower($attr) . '=' . $filter;
|
$text .= "&filter" . strtolower($attr) . '=' . $filter;
|
||||||
}
|
}
|
||||||
return $text;
|
return $text;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prints the entry list
|
||||||
|
*
|
||||||
|
* @param array $info entries
|
||||||
|
*/
|
||||||
|
private function printAccountTable(&$info) {
|
||||||
|
$scope = $this->type->getScope();
|
||||||
|
$titles = $this->descArray;
|
||||||
|
array_unshift($titles, _('Actions'));
|
||||||
|
$data = array();
|
||||||
|
$data[] = $this->getSortingElements();
|
||||||
|
$data[] = $this->getFilterElements();
|
||||||
|
|
||||||
|
$table = new htmlResponsiveTable($titles, $data);
|
||||||
|
$table->setRowClasses($scope . '-dark', $scope . '-bright');
|
||||||
|
$table->setCSSClasses(array($scope . '-border accountlist'));
|
||||||
|
|
||||||
|
parseHtml(null, $table, array(), false, $this->tabindex, $scope);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the elements to show in sorting row.
|
||||||
|
*
|
||||||
|
* @return htmlElement[] elements
|
||||||
|
*/
|
||||||
|
private function getSortingElements() {
|
||||||
|
$filter = $this->getFilterAsTextForURL();
|
||||||
|
$sortElements = array(new htmlOutputText(_('Sort sequence')));
|
||||||
|
foreach ($this->attrArray as $attributeName) {
|
||||||
|
$link = "list.php?type=" . $this->type->getId() . "&".
|
||||||
|
"sort=" . strtolower($attributeName) . $filter . "&norefresh=y";
|
||||||
|
$buttons = new htmlGroup();
|
||||||
|
if (strtolower($attributeName) == $this->sortColumn) {
|
||||||
|
if ($this->sortDirection < 0) {
|
||||||
|
$buttons->addElement(new htmlLink(null, $link . '&sortdirection=1', '../../graphics/downarrows.png'));
|
||||||
|
$buttons->addElement(new htmlLink(null, $link . '&sortdirection=-1', '../../graphics/uparrows-black.png'));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$buttons->addElement(new htmlLink(null, $link . '&sortdirection=1', '../../graphics/downarrows-black.png'));
|
||||||
|
$buttons->addElement(new htmlLink(null, $link . '&sortdirection=-1', '../../graphics/uparrows.png'));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$buttons->addElement(new htmlLink(null, $link . '&sortdirection=1', '../../graphics/downarrows.png'));
|
||||||
|
$buttons->addElement(new htmlLink(null, $link . '&sortdirection=-1', '../../graphics/uparrows.png'));
|
||||||
|
}
|
||||||
|
$sortElements[] = $buttons;
|
||||||
|
}
|
||||||
|
return $sortElements;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the elements to show in filter row.
|
||||||
|
*
|
||||||
|
* @return htmlElement[] elements
|
||||||
|
*/
|
||||||
|
private function getFilterElements() {
|
||||||
|
$actionElement = new htmlGroup();
|
||||||
|
$selectAll = new htmlInputCheckbox('tableSelectAll', false);
|
||||||
|
$selectAll->setCSSClasses(array('align-middle'));
|
||||||
|
$selectAll->setOnClick('list_switchAccountSelection();');
|
||||||
|
$actionElement->addElement($selectAll);
|
||||||
|
$actionElement->addElement(new htmlSpacer('1rem', null));
|
||||||
|
$actionElement->addElement(new htmlOutputText(_('Filter')));
|
||||||
|
$filterButton = new htmlButton('apply_filter', 'filter.png', true);
|
||||||
|
$filterButton->setTitle(_("Here you can input simple filter expressions (e.g. 'value' or 'v*'). The filter is case-insensitive."));
|
||||||
|
$actionElement->addElement($filterButton);
|
||||||
|
if (sizeof($this->filters) > 0) {
|
||||||
|
$clearFilterButton = new htmlButton('clear_filter', 'clearFilter.png', true);
|
||||||
|
$clearFilterButton->setTitle(_('Clear filter'));
|
||||||
|
$actionElement->addElement($clearFilterButton);
|
||||||
|
}
|
||||||
|
|
||||||
|
$filterElements = array($actionElement);
|
||||||
|
$clearFilter = isset($_POST['clear_filter']);
|
||||||
|
foreach ($this->attrArray as $attributeName) {
|
||||||
|
$attributeName = strtolower($attributeName);
|
||||||
|
if ($this->canBeFiltered($attributeName)) {
|
||||||
|
$value = "";
|
||||||
|
if (!$clearFilter && isset($this->filters[$attributeName])) {
|
||||||
|
$value = $this->filters[$attributeName];
|
||||||
|
}
|
||||||
|
$filterInput = new htmlInputField('filter' . $attributeName, $value);
|
||||||
|
$filterInput->setCSSClasses(array($this->type->getScope() . '-bright'));
|
||||||
|
$filterInput->setOnKeyPress("SubmitForm('apply_filter', event);");
|
||||||
|
$filterElements[] = $filterInput;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$filterElements[] = new htmlOutputText('');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $filterElements;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Prints the attribute and filter row at the account table head
|
* Prints the attribute and filter row at the account table head
|
||||||
*/
|
*/
|
||||||
|
@ -981,7 +1078,7 @@ class lamList {
|
||||||
}
|
}
|
||||||
// get sort order
|
// get sort order
|
||||||
if (isset($_GET['sortdirection'])) {
|
if (isset($_GET['sortdirection'])) {
|
||||||
$this->sortDirection = $_GET['sortdirection'];
|
$this->sortDirection = htmlspecialchars($_GET['sortdirection']);
|
||||||
}
|
}
|
||||||
// check search suffix
|
// check search suffix
|
||||||
if (isset($_POST['suffix'])) {
|
if (isset($_POST['suffix'])) {
|
||||||
|
|
|
@ -78,11 +78,15 @@ table.responsive-table {
|
||||||
margin-top: 1rem;
|
margin-top: 1rem;
|
||||||
table-layout: fixed;
|
table-layout: fixed;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
border-collapse: collapse;
|
||||||
}
|
}
|
||||||
|
|
||||||
table.responsive-table th {
|
table.responsive-table th {
|
||||||
text-align: left;
|
text-align: left;
|
||||||
padding: 0;
|
padding-bottom: 0.5rem;
|
||||||
|
padding-top: 0.5rem;
|
||||||
|
padding-right: 0.3rem;
|
||||||
|
padding-left: 0.3rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
table.responsive-table td {
|
table.responsive-table td {
|
||||||
|
@ -90,8 +94,8 @@ table.responsive-table td {
|
||||||
vertical-align: top;
|
vertical-align: top;
|
||||||
padding-bottom: 0.5rem;
|
padding-bottom: 0.5rem;
|
||||||
padding-top: 0.5rem;
|
padding-top: 0.5rem;
|
||||||
padding-right: 0.1rem;
|
padding-right: 0.3rem;
|
||||||
padding-left: 0.1rem;
|
padding-left: 0.3rem;
|
||||||
word-break: break-all;
|
word-break: break-all;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue