HtmlNavbar   A
last analyzed

Complexity

Total Complexity 33

Size/Duplication

Total Lines 177
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 86
c 1
b 0
f 0
dl 0
loc 177
rs 9.76
wmc 33

18 Methods

Rating   Name   Duplication   Size   Complexity  
A getZone() 0 15 5
A fromDatabaseObject() 0 2 1
A setFluid() 0 7 2
A setBrand() 0 3 1
A setNavZones() 0 10 5
A scrollspy() 0 3 1
A fromArray() 0 2 1
A setClass() 0 3 1
A setBrandTarget() 0 3 1
A setBrandHref() 0 3 1
A setBrandImage() 0 4 1
A addZone() 0 8 2
A getZoneToInsertIn() 0 9 3
A addElement() 0 5 2
A addElements() 0 4 1
A run() 0 9 3
A __construct() 0 7 1
A cssInverse() 0 3 1
1
<?php
2
3
namespace Ajax\bootstrap\html;
4
5
use Ajax\JsUtils;
6
use Ajax\bootstrap\components\Scrollspy;
7
use Ajax\bootstrap\html\content\HtmlNavzone;
8
use Ajax\bootstrap\html\base\CssNavbar;
9
use Ajax\common\html\BaseHtml;
10
use Ajax\common\html\html5\HtmlImg;
11
/**
12
 * Twitter Bootstrap HTML Navbar component
13
 * @author jc
14
 * @version 1.001
15
 */
16
class HtmlNavbar extends BaseHtml {
17
	protected $navZones;
18
	protected $class="navbar-default";
19
	protected $brand="Brand";
20
	protected $brandHref="#";
21
	protected $brandTarget="_self";
22
	protected $brandImage="";
23
	protected $scrollspy;
24
	protected $hasScrollspy=false;
25
	protected $scrollspyId="body";
26
	protected $fluid="container-fluid";
27
28
	/**
29
	 *
30
	 * @param string $identifier the id
31
	 */
32
	public function __construct($identifier, $brand="Brand", $brandHref="#") {
33
		parent::__construct($identifier);
34
		$this->_template=include 'templates/tplNavbar.php';
35
		$this->navZones=array ();
36
		$this->class="navbar-default";
37
		$this->brand=$brand;
38
		$this->brandHref=$brandHref;
39
40
	}
41
42
	public function setClass($class) {
43
		$this->class=$class;
44
		return $this;
45
	}
46
47
	public function setBrand($brand) {
48
		$this->brand=$brand;
49
		return $this;
50
	}
51
52
	public function setBrandHref($brandHref) {
53
		$this->brandHref=$brandHref;
54
		return $this;
55
	}
56
57
	public function setBrandTarget($brandTarget) {
58
		$this->brandTarget=$brandTarget;
59
		return $this;
60
	}
61
62
	public function setBrandImage($imageSrc) {
63
		$this->brandImage=new HtmlImg("brand-img-".$this->_identifier,$imageSrc,$this->brand);
64
		$this->brand="";
65
		return $this;
66
	}
67
68
	/**
69
	 * adds a new zone of type $type
70
	 * @param string $type one of nav, form, btn, right, left
71
	 * @param string $identifier
72
	 * @return HtmlNavzone
73
	 */
74
	public function addZone($type="nav", $identifier=NULL) {
75
		if (!isset($identifier)) {
76
			$nb=sizeof($this->navZones)+1;
77
			$identifier=$this->identifier."-navzone-".$nb;
78
		}
79
		$zone=HtmlNavzone::$type($identifier);
80
		$this->navZones []=$zone;
81
		return $zone;
82
	}
83
84
	public function addElement($element, HtmlNavzone $zone=NULL) {
85
		$zone=$this->getZoneToInsertIn($zone);
86
		if ($element instanceof HtmlDropdown)
87
			$element->setMTagName("li");
88
		$zone->addElement($element);
89
	}
90
91
	public function addElements($elements, HtmlNavzone $zone=NULL) {
92
		$zone=$this->getZoneToInsertIn($zone);
93
		$zone->addElements($elements);
94
		return $zone;
95
	}
96
97
	/**
98
	 * /* (non-PHPdoc)
99
	 * @see BaseHtml::addProperties()
100
	 */
101
	public function fromArray($array) {
102
		return parent::fromArray($array);
103
	}
104
105
	public function setNavZones($navZones) {
106
		if (\is_array($navZones)) {
107
			foreach ( $navZones as $zoneType => $zoneArray ) {
108
				if (is_string($zoneType)) {
109
					$zone=$this->addZone($zoneType);
110
					$zone->fromArray($zoneArray);
111
				} else if (is_string($zoneArray))
112
					$this->addElement($zoneArray);
113
				else
114
					$this->addElements($zoneArray);
115
			}
116
		}
117
	}
118
119
	/**
120
	 *
121
	 * @param HtmlNavzone $zone
122
	 * @return HtmlNavzone
123
	 */
124
	public function getZoneToInsertIn($zone=NULL) {
125
		if (!isset($zone)) {
126
			$nb=sizeof($this->navZones);
127
			if ($nb<1)
128
				$zone=$this->addZone();
129
			else
130
				$zone=$this->navZones [$nb-1];
131
		}
132
		return $zone;
133
	}
134
135
	/**
136
	 *
137
	 * @param int $index
138
	 * @return HtmlNavzone
139
	 */
140
	public function getZone($index) {
141
		$zone=null;
142
		$nb=sizeof($this->navZones);
143
		if (is_int($index)) {
0 ignored issues
show
introduced by
The condition is_int($index) is always true.
Loading history...
144
			if ($index<$nb)
145
				$zone=$this->navZones [$index];
146
		} else {
147
			for($i=0; $i<$nb; $i++) {
148
				if ($this->navZones [$i]->getIdentifier()===$index) {
149
					$zone=$this->navZones [$i];
150
					break;
151
				}
152
			}
153
		}
154
		return $zone;
155
	}
156
157
	public function run(JsUtils $js) {
158
		foreach ( $this->navZones as $zone ) {
159
			$zone->run($js);
160
		}
161
		if ($this->hasScrollspy) {
162
			$this->scrollspy=new Scrollspy($js);
163
			$this->scrollspy->attach($this->scrollspyId);
164
			$this->scrollspy->setTarget("#".$this->identifier);
165
			$this->scrollspy->compile($js);
166
		}
167
	}
168
169
	public function cssInverse() {
170
		$this->addToMember($this->class, CssNavbar::NAVBAR_INVERSE);
171
		return $this;
172
	}
173
174
	public function scrollspy($attachTo="body") {
175
		$this->hasScrollspy=true;
176
		$this->scrollspyId=$attachTo;
177
	}
178
179
	public function setFluid($fluid) {
180
		if($fluid===true){
181
			$this->fluid="container-fluid";
182
		}else{
183
			$this->fluid="container";
184
		}
185
		return $this;
186
	}
187
188
	/* (non-PHPdoc)
189
	 * @see \Ajax\bootstrap\html\base\BaseHtml::fromDatabaseObject()
190
	 */
191
	public function fromDatabaseObject($object, $function) {
192
		$this->addElement($function($object));
193
	}
194
195
}
196