Passed
Push — master ( 6da082...c653a4 )
by Jean-Christophe
03:08
created

HtmlTD   A

Complexity

Total Complexity 28

Size/Duplication

Total Lines 147
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 74
c 1
b 0
f 0
dl 0
loc 147
rs 10
wmc 28

17 Methods

Rating   Name   Duplication   Size   Complexity  
A setWidth() 0 7 2
A conditionalCellFormat() 0 5 2
A addValue() 0 3 1
A setContainer() 0 4 1
A setRowspan() 0 7 2
A setRowspanned() 0 7 2
A getRowspan() 0 5 2
A setSelectable() 0 5 2
A mergeCol() 0 7 2
A mergeRow() 0 6 2
A compile() 0 3 2
A getColspan() 0 5 2
A toDelete() 0 3 1
A setValue() 0 3 1
A setColspan() 0 7 2
A apply() 0 3 1
A __construct() 0 12 1
1
<?php
2
namespace Ajax\semantic\html\content\table;
3
4
use Ajax\semantic\html\base\HtmlSemDoubleElement;
5
use Ajax\semantic\html\base\traits\TextAlignmentTrait;
6
use Ajax\semantic\html\base\constants\Variation;
7
use Ajax\semantic\html\base\constants\State;
8
use Ajax\semantic\html\base\traits\TableElementTrait;
9
use Ajax\semantic\html\elements\html5\HtmlLink;
10
use Ajax\semantic\html\base\constants\Wide;
11
use Ajax\JsUtils;
12
13
class HtmlTD extends HtmlSemDoubleElement {
14
	use TextAlignmentTrait,TableElementTrait;
15
16
	private $_container;
17
18
	private $_row;
19
20
	private $_col;
21
22
	private $_colMerged = false;
23
24
	private $_rowMerged = false;
25
26
	private $_deleted = false;
27
28
	/**
29
	 *
30
	 * @param string $identifier
31
	 * @param mixed $content
32
	 * @param string $tagName
33
	 */
34
	public function __construct($identifier, $content = NULL, $tagName = "td") {
35
		parent::__construct($identifier, $tagName, "", $content);
36
		$this->_variations = [
37
			Variation::COLLAPSING
38
		];
39
		$this->_states = [
40
			State::ACTIVE,
41
			State::POSITIVE,
42
			State::NEGATIVE,
43
			State::WARNING,
44
			State::ERROR,
45
			State::DISABLED
46
		];
47
	}
48
49
	public function setContainer($container, $row, $col) {
50
		$this->_container = $container;
51
		$this->_row = $row;
52
		$this->_col = $col;
53
	}
54
55
	public function setValue($value) {
56
		$this->content = $value;
57
		return $this;
58
	}
59
60
	public function addValue($value) {
61
		$this->addContent($value);
62
		return $this;
63
	}
64
65
	public function setRowspan($rowspan) {
66
		$to = min($this->_container->count(), $this->_row + $rowspan - 1);
67
		for ($i = $to; $i > $this->_row; $i --) {
68
			$this->_container->toDelete($i, $this->_col);
69
		}
70
		$this->setProperty("rowspan", $rowspan);
71
		return $this->_container->_setMerged(true);
72
	}
73
74
	public function setRowspanned($rowspan) {
75
		$to = min($this->_container->count(), $this->_row + $rowspan - 1);
76
		for ($i = $to; $i > $this->_row; $i --) {
77
			$this->_container->toRowspanned($i, $this->_col);
78
		}
79
		$this->setProperty("rowspan", $rowspan);
80
		return $this->_container->_setMerged(true);
81
	}
82
83
	public function mergeRow() {
84
		if (! $this->_rowMerged) {
85
			$this->_rowMerged = true;
86
			return $this->setRowspan($this->_container->count());
87
		}
88
		return $this->_container;
89
	}
90
91
	public function mergeCol() {
92
		if (! $this->_colMerged) {
93
			$this->_colMerged = true;
94
			return $this->setColspan($this->_container->getRow($this->_row)
95
				->count());
96
		}
97
		return $this->_container;
98
	}
99
100
	public function setColspan($colspan) {
101
		$to = min($this->_container->getRow($this->_row)->count(), $this->_col + $colspan - 1);
102
		for ($i = $to; $i > $this->_col; $i --) {
103
			$this->_container->delete($this->_row, $this->_col + 1);
104
		}
105
		$this->setProperty("colspan", $colspan);
106
		return $this->_container;
107
	}
108
109
	public function getColspan() {
110
		$colspan = 1;
111
		if (\array_key_exists("colspan", $this->properties))
112
			$colspan = $this->getProperty("colspan");
113
		return $colspan;
114
	}
115
116
	public function getRowspan() {
117
		$rowspan = 1;
118
		if (\array_key_exists("rowspan", $this->properties))
119
			$rowspan = $this->getProperty("rowspan");
120
		return $rowspan;
121
	}
122
123
	public function conditionalCellFormat($callback, $format) {
124
		if ($callback($this)) {
125
			$this->addToProperty("class", $format);
126
		}
127
		return $this;
128
	}
129
130
	public function apply($callback) {
131
		$callback($this);
132
		return $this;
133
	}
134
135
	public function setSelectable($href = "#") {
136
		if (\is_string($this->content)) {
137
			$this->content = new HtmlLink("", $href, $this->content);
138
		}
139
		return $this->addToProperty("class", "selectable");
140
	}
141
142
	public function setWidth($width) {
143
		if (\is_int($width)) {
144
			$width = Wide::getConstants()["W" . $width];
145
		}
146
		$this->addToPropertyCtrl("class", $width, Wide::getConstants());
147
		return $this->addToPropertyCtrl("class", "wide", array(
148
			"wide"
149
		));
150
	}
151
152
	public function toDelete() {
153
		$this->_deleted = true;
154
		return $this;
155
	}
156
157
	public function compile(JsUtils $js = NULL, &$view = NULL) {
158
		if (! $this->_deleted)
159
			return parent::compile($js, $view);
160
	}
161
}
162