blob: 80a27876f0e905b71c20e460bb891d776eedff4b [file] [log] [blame]
Andrey Andreevc5536aa2012-11-01 17:33:58 +02001<?php
Derek Allard2067d1a2008-11-13 22:59:24 +00002/**
3 * CodeIgniter
4 *
Phil Sturgeon07c1ac82012-03-09 17:03:37 +00005 * An open source application development framework for PHP 5.2.4 or newer
Derek Allard2067d1a2008-11-13 22:59:24 +00006 *
Derek Jonesf4a4bd82011-10-20 12:18:42 -05007 * NOTICE OF LICENSE
Andrey Andreev1e6b72c2012-01-06 19:09:22 +02008 *
Derek Jonesf4a4bd82011-10-20 12:18:42 -05009 * Licensed under the Open Software License version 3.0
Andrey Andreev1e6b72c2012-01-06 19:09:22 +020010 *
Derek Jonesf4a4bd82011-10-20 12:18:42 -050011 * This source file is subject to the Open Software License (OSL 3.0) that is
12 * bundled with this package in the files license.txt / license.rst. It is
13 * also available through the world wide web at this URL:
14 * http://opensource.org/licenses/OSL-3.0
15 * If you did not receive a copy of the license and are unable to obtain it
16 * through the world wide web, please send an email to
17 * licensing@ellislab.com so we can send you a copy immediately.
18 *
Derek Allard2067d1a2008-11-13 22:59:24 +000019 * @package CodeIgniter
Derek Jonesf4a4bd82011-10-20 12:18:42 -050020 * @author EllisLab Dev Team
Andrey Andreev80500af2013-01-01 08:16:53 +020021 * @copyright Copyright (c) 2008 - 2013, EllisLab, Inc. (http://ellislab.com/)
Derek Jonesf4a4bd82011-10-20 12:18:42 -050022 * @license http://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0)
Derek Allard2067d1a2008-11-13 22:59:24 +000023 * @link http://codeigniter.com
24 * @since Version 1.0
25 * @filesource
26 */
Andrey Andreevc5536aa2012-11-01 17:33:58 +020027defined('BASEPATH') OR exit('No direct script access allowed');
Derek Allard2067d1a2008-11-13 22:59:24 +000028
Derek Allard2067d1a2008-11-13 22:59:24 +000029/**
30 * CodeIgniter HTML Helpers
31 *
32 * @package CodeIgniter
33 * @subpackage Helpers
34 * @category Helpers
Derek Jonesf4a4bd82011-10-20 12:18:42 -050035 * @author EllisLab Dev Team
Derek Allard2067d1a2008-11-13 22:59:24 +000036 * @link http://codeigniter.com/user_guide/helpers/html_helper.html
37 */
38
39// ------------------------------------------------------------------------
40
Derek Allard2067d1a2008-11-13 22:59:24 +000041if ( ! function_exists('heading'))
42{
Timothy Warren01b129a2012-04-27 11:36:50 -040043 /**
44 * Heading
45 *
46 * Generates an HTML heading tag.
47 *
48 * @param string content
49 * @param int heading level
50 * @param string
51 * @return string
52 */
Greg Aker826429c2011-04-18 09:40:19 -050053 function heading($data = '', $h = '1', $attributes = '')
Derek Allard2067d1a2008-11-13 22:59:24 +000054 {
Eric Barnesacedd2b2012-07-29 00:15:40 -040055 return '<h'.$h._stringify_attributes($attributes).'>'.$data.'</h'.$h.'>';
Derek Allard2067d1a2008-11-13 22:59:24 +000056 }
57}
58
59// ------------------------------------------------------------------------
60
Derek Allard2067d1a2008-11-13 22:59:24 +000061if ( ! function_exists('ul'))
62{
Timothy Warren01b129a2012-04-27 11:36:50 -040063 /**
64 * Unordered List
65 *
66 * Generates an HTML unordered list from an single or multi-dimensional array.
67 *
68 * @param array
69 * @param mixed
70 * @return string
71 */
Derek Allard2067d1a2008-11-13 22:59:24 +000072 function ul($list, $attributes = '')
73 {
74 return _list('ul', $list, $attributes);
75 }
76}
77
78// ------------------------------------------------------------------------
79
Derek Allard2067d1a2008-11-13 22:59:24 +000080if ( ! function_exists('ol'))
81{
Timothy Warren01b129a2012-04-27 11:36:50 -040082 /**
83 * Ordered List
84 *
85 * Generates an HTML ordered list from an single or multi-dimensional array.
86 *
87 * @param array
88 * @param mixed
89 * @return string
90 */
Derek Allard2067d1a2008-11-13 22:59:24 +000091 function ol($list, $attributes = '')
92 {
93 return _list('ol', $list, $attributes);
94 }
95}
96
97// ------------------------------------------------------------------------
98
Derek Allard2067d1a2008-11-13 22:59:24 +000099if ( ! function_exists('_list'))
100{
Timothy Warren01b129a2012-04-27 11:36:50 -0400101 /**
102 * Generates the list
103 *
104 * Generates an HTML ordered list from an single or multi-dimensional array.
105 *
106 * @param string
107 * @param mixed
108 * @param mixed
109 * @param int
110 * @return string
111 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000112 function _list($type = 'ul', $list, $attributes = '', $depth = 0)
113 {
114 // If an array wasn't submitted there's nothing to do...
115 if ( ! is_array($list))
116 {
117 return $list;
118 }
119
120 // Set the indentation based on the depth
Andrey Andreev1e6b72c2012-01-06 19:09:22 +0200121 $out = str_repeat(' ', $depth);
Derek Allard2067d1a2008-11-13 22:59:24 +0000122
Derek Allard2067d1a2008-11-13 22:59:24 +0000123 // Write the opening list tag
Eric Barnesacedd2b2012-07-29 00:15:40 -0400124 $out .= '<'.$type._stringify_attributes($attributes).">\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000125
Derek Jones4b9c6292011-07-01 17:40:48 -0500126 // Cycle through the list elements. If an array is
Derek Allard2067d1a2008-11-13 22:59:24 +0000127 // encountered we will recursively call _list()
128
129 static $_last_list_item = '';
130 foreach ($list as $key => $val)
131 {
132 $_last_list_item = $key;
133
Andrey Andreev1e6b72c2012-01-06 19:09:22 +0200134 $out .= str_repeat(' ', $depth + 2).'<li>';
Derek Allard2067d1a2008-11-13 22:59:24 +0000135
136 if ( ! is_array($val))
137 {
138 $out .= $val;
139 }
140 else
141 {
Andrey Andreev1e6b72c2012-01-06 19:09:22 +0200142 $out .= $_last_list_item."\n"._list($type, $val, '', $depth + 4).str_repeat(' ', $depth + 2);
Derek Allard2067d1a2008-11-13 22:59:24 +0000143 }
144
145 $out .= "</li>\n";
146 }
147
Andrey Andreev1e6b72c2012-01-06 19:09:22 +0200148 // Set the indentation for the closing tag and apply it
149 return $out.str_repeat(' ', $depth).'</'.$type.">\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000150 }
151}
152
153// ------------------------------------------------------------------------
154
Derek Allard2067d1a2008-11-13 22:59:24 +0000155if ( ! function_exists('br'))
156{
Timothy Warren01b129a2012-04-27 11:36:50 -0400157 /**
158 * Generates HTML BR tags based on number supplied
159 *
Andrey Andreev53b8ef52012-11-08 21:38:53 +0200160 * @param int $count Number of times to repeat the tag
Timothy Warren01b129a2012-04-27 11:36:50 -0400161 * @return string
162 */
Andrey Andreev53b8ef52012-11-08 21:38:53 +0200163 function br($count = 1)
Derek Allard2067d1a2008-11-13 22:59:24 +0000164 {
Andrey Andreev53b8ef52012-11-08 21:38:53 +0200165 return str_repeat('<br />', $count);
Derek Allard2067d1a2008-11-13 22:59:24 +0000166 }
167}
168
169// ------------------------------------------------------------------------
170
Derek Allard2067d1a2008-11-13 22:59:24 +0000171if ( ! function_exists('img'))
172{
Timothy Warren01b129a2012-04-27 11:36:50 -0400173 /**
174 * Image
175 *
176 * Generates an <img /> element
177 *
178 * @param mixed
179 * @param bool
Eric Barnes62ab8b22012-07-28 14:57:04 -0400180 * @param mixed
Timothy Warren01b129a2012-04-27 11:36:50 -0400181 * @return string
182 */
Eric Barnes62ab8b22012-07-28 14:57:04 -0400183 function img($src = '', $index_page = FALSE, $attributes = '')
Derek Allard2067d1a2008-11-13 22:59:24 +0000184 {
185 if ( ! is_array($src) )
186 {
187 $src = array('src' => $src);
188 }
189
Derek Allarda0905f32010-07-05 08:11:33 -0400190 // If there is no alt attribute defined, set it to an empty string
191 if ( ! isset($src['alt']))
192 {
193 $src['alt'] = '';
194 }
195
Derek Allard2067d1a2008-11-13 22:59:24 +0000196 $img = '<img';
197
Andrey Andreev1e6b72c2012-01-06 19:09:22 +0200198 foreach ($src as $k => $v)
Derek Allard2067d1a2008-11-13 22:59:24 +0000199 {
Andrey Andreev2046b1a2012-03-26 21:07:04 +0300200 if ($k === 'src' && strpos($v, '://') === FALSE)
Derek Allard2067d1a2008-11-13 22:59:24 +0000201 {
202 $CI =& get_instance();
203
204 if ($index_page === TRUE)
205 {
Greg Akerf7d162a2010-11-09 14:52:28 -0600206 $img .= ' src="'.$CI->config->site_url($v).'"';
Derek Allard2067d1a2008-11-13 22:59:24 +0000207 }
208 else
209 {
Greg Akerf7d162a2010-11-09 14:52:28 -0600210 $img .= ' src="'.$CI->config->slash_item('base_url').$v.'"';
Derek Allard2067d1a2008-11-13 22:59:24 +0000211 }
212 }
213 else
214 {
Andrey Andreev2046b1a2012-03-26 21:07:04 +0300215 $img .= ' '.$k.'="'.$v.'"';
Derek Allard2067d1a2008-11-13 22:59:24 +0000216 }
217 }
218
Andrey Andreev6a64f852012-08-15 11:16:47 +0300219 return $img._stringify_attributes($attributes).' />';
Derek Allard2067d1a2008-11-13 22:59:24 +0000220 }
221}
222
223// ------------------------------------------------------------------------
224
Derek Allard2067d1a2008-11-13 22:59:24 +0000225if ( ! function_exists('doctype'))
226{
Timothy Warren01b129a2012-04-27 11:36:50 -0400227 /**
228 * Doctype
229 *
230 * Generates a page document type declaration
231 *
Przemyslaw Tomaszewski8711aeb2012-07-22 03:28:41 +0200232 * Examples of valid options: html5, xhtml-11, xhtml-strict, xhtml-trans,
233 * xhtml-frame, html4-strict, html4-trans, and html4-frame.
234 * All values are saved in the doctypes config file.
Timothy Warren01b129a2012-04-27 11:36:50 -0400235 *
236 * @param string type The doctype to be generated
237 * @return string
238 */
Derek Allard93bddd12009-04-14 19:27:38 +0000239 function doctype($type = 'xhtml1-strict')
Derek Allard2067d1a2008-11-13 22:59:24 +0000240 {
Andrey Andreev06879112013-01-29 15:05:02 +0200241 static $doctypes;
Derek Allard2067d1a2008-11-13 22:59:24 +0000242
Andrey Andreev06879112013-01-29 15:05:02 +0200243 if ( ! is_array($doctypes))
Derek Allard2067d1a2008-11-13 22:59:24 +0000244 {
Andrey Andreev06879112013-01-29 15:05:02 +0200245 if (file_exists(APPPATH.'config/doctypes.php'))
Greg Akerd96f8822011-12-27 16:23:47 -0600246 {
247 include(APPPATH.'config/doctypes.php');
248 }
Eric Barnes92808342011-03-18 09:02:37 -0400249
Andrey Andreev06879112013-01-29 15:05:02 +0200250 if (file_exists(APPPATH.'config/'.ENVIRONMENT.'/doctypes.php'))
Derek Allard2067d1a2008-11-13 22:59:24 +0000251 {
Andrey Andreev06879112013-01-29 15:05:02 +0200252 include(APPPATH.'config/'.ENVIRONMENT.'/doctypes.php');
253 }
254
255 if (empty($_doctypes) OR ! is_array($_doctypes))
256 {
257 $doctypes = array();
Derek Allard2067d1a2008-11-13 22:59:24 +0000258 return FALSE;
259 }
Andrey Andreev06879112013-01-29 15:05:02 +0200260
261 $doctypes = $_doctypes;
Derek Allard2067d1a2008-11-13 22:59:24 +0000262 }
263
Andrey Andreev06879112013-01-29 15:05:02 +0200264 return isset($doctypes[$type]) ? $doctypes[$type] : FALSE;
Derek Allard2067d1a2008-11-13 22:59:24 +0000265 }
266}
267
268// ------------------------------------------------------------------------
269
Derek Allard2067d1a2008-11-13 22:59:24 +0000270if ( ! function_exists('link_tag'))
271{
Timothy Warren01b129a2012-04-27 11:36:50 -0400272 /**
273 * Link
274 *
275 * Generates link to a CSS file
276 *
277 * @param mixed stylesheet hrefs or an array
278 * @param string rel
279 * @param string type
280 * @param string title
281 * @param string media
282 * @param bool should index_page be added to the css path
283 * @return string
284 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000285 function link_tag($href = '', $rel = 'stylesheet', $type = 'text/css', $title = '', $media = '', $index_page = FALSE)
286 {
287 $CI =& get_instance();
Derek Allard2067d1a2008-11-13 22:59:24 +0000288 $link = '<link ';
289
290 if (is_array($href))
291 {
Andrey Andreev1e6b72c2012-01-06 19:09:22 +0200292 foreach ($href as $k => $v)
Derek Allard2067d1a2008-11-13 22:59:24 +0000293 {
Andrey Andreev2046b1a2012-03-26 21:07:04 +0300294 if ($k === 'href' && strpos($v, '://') === FALSE)
Derek Allard2067d1a2008-11-13 22:59:24 +0000295 {
296 if ($index_page === TRUE)
297 {
Derek Allard76763bb2009-09-16 11:25:20 +0000298 $link .= 'href="'.$CI->config->site_url($v).'" ';
Derek Allard2067d1a2008-11-13 22:59:24 +0000299 }
300 else
301 {
Derek Allard76763bb2009-09-16 11:25:20 +0000302 $link .= 'href="'.$CI->config->slash_item('base_url').$v.'" ';
Derek Allard2067d1a2008-11-13 22:59:24 +0000303 }
304 }
305 else
306 {
Andrey Andreev2046b1a2012-03-26 21:07:04 +0300307 $link .= $k.'="'.$v.'" ';
Derek Allard2067d1a2008-11-13 22:59:24 +0000308 }
309 }
Derek Allard2067d1a2008-11-13 22:59:24 +0000310 }
311 else
312 {
Andrey Andreev1e6b72c2012-01-06 19:09:22 +0200313 if (strpos($href, '://') !== FALSE)
Derek Allard2067d1a2008-11-13 22:59:24 +0000314 {
Derek Allard292dcd82009-09-16 11:26:32 +0000315 $link .= 'href="'.$href.'" ';
Derek Allard2067d1a2008-11-13 22:59:24 +0000316 }
317 elseif ($index_page === TRUE)
318 {
Derek Allard76763bb2009-09-16 11:25:20 +0000319 $link .= 'href="'.$CI->config->site_url($href).'" ';
Derek Allard2067d1a2008-11-13 22:59:24 +0000320 }
321 else
322 {
Derek Allard76763bb2009-09-16 11:25:20 +0000323 $link .= 'href="'.$CI->config->slash_item('base_url').$href.'" ';
Derek Allard2067d1a2008-11-13 22:59:24 +0000324 }
325
326 $link .= 'rel="'.$rel.'" type="'.$type.'" ';
327
Alex Bilbie773ccc32012-06-02 11:11:08 +0100328 if ($media !== '')
Derek Allard2067d1a2008-11-13 22:59:24 +0000329 {
330 $link .= 'media="'.$media.'" ';
331 }
332
Alex Bilbie773ccc32012-06-02 11:11:08 +0100333 if ($title !== '')
Derek Allard2067d1a2008-11-13 22:59:24 +0000334 {
335 $link .= 'title="'.$title.'" ';
336 }
Derek Allard2067d1a2008-11-13 22:59:24 +0000337 }
Derek Allard2067d1a2008-11-13 22:59:24 +0000338
Andrey Andreev2046b1a2012-03-26 21:07:04 +0300339 return $link."/>\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000340 }
341}
342
343// ------------------------------------------------------------------------
344
Derek Allard2067d1a2008-11-13 22:59:24 +0000345if ( ! function_exists('meta'))
346{
Timothy Warren01b129a2012-04-27 11:36:50 -0400347 /**
348 * Generates meta tags from an array of key/values
349 *
350 * @param array
351 * @param string
352 * @param string
353 * @param string
354 * @return string
355 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000356 function meta($name = '', $content = '', $type = 'name', $newline = "\n")
357 {
358 // Since we allow the data to be passes as a string, a simple array
359 // or a multidimensional one, we need to do a little prepping.
360 if ( ! is_array($name))
361 {
362 $name = array(array('name' => $name, 'content' => $content, 'type' => $type, 'newline' => $newline));
363 }
Andrey Andreev2046b1a2012-03-26 21:07:04 +0300364 elseif (isset($name['name']))
Derek Allard2067d1a2008-11-13 22:59:24 +0000365 {
366 // Turn single array into multidimensional
Andrey Andreev2046b1a2012-03-26 21:07:04 +0300367 $name = array($name);
Derek Allard2067d1a2008-11-13 22:59:24 +0000368 }
369
370 $str = '';
371 foreach ($name as $meta)
372 {
Andrey Andreevae31eb52012-05-17 14:54:15 +0300373 $type = ( ! isset($meta['type']) OR $meta['type'] === 'name') ? 'name' : 'http-equiv';
374 $name = isset($meta['name']) ? $meta['name'] : '';
375 $content = isset($meta['content']) ? $meta['content'] : '';
376 $newline = isset($meta['newline']) ? $meta['newline'] : "\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000377
378 $str .= '<meta '.$type.'="'.$name.'" content="'.$content.'" />'.$newline;
379 }
380
381 return $str;
382 }
383}
384
385// ------------------------------------------------------------------------
386
Derek Allard2067d1a2008-11-13 22:59:24 +0000387if ( ! function_exists('nbs'))
388{
Timothy Warren01b129a2012-04-27 11:36:50 -0400389 /**
390 * Generates non-breaking space entities based on number supplied
391 *
392 * @param int
393 * @return string
394 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000395 function nbs($num = 1)
396 {
Andrey Andreev1e6b72c2012-01-06 19:09:22 +0200397 return str_repeat('&nbsp;', $num);
Derek Allard2067d1a2008-11-13 22:59:24 +0000398 }
399}
400
Derek Allard2067d1a2008-11-13 22:59:24 +0000401/* End of file html_helper.php */
Andrey Andreev2046b1a2012-03-26 21:07:04 +0300402/* Location: ./system/helpers/html_helper.php */