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