blob: e229d796ee8d04ae5e82a761b010d6062e342331 [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
darwinel871754a2014-02-11 17:34:57 +010021 * @copyright Copyright (c) 2008 - 2014, 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 */
Rasmus Lerdorfe736f492013-05-18 10:25:03 -0400112 function _list($type = 'ul', $list = array(), $attributes = '', $depth = 0)
Derek Allard2067d1a2008-11-13 22:59:24 +0000113 {
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 Andreevea41c8a2014-02-26 18:31:02 +0200121 $out = str_repeat(' ', $depth)
122 // Write the opening list tag
123 .'<'.$type._stringify_attributes($attributes).">\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000124
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('img'))
156{
Timothy Warren01b129a2012-04-27 11:36:50 -0400157 /**
158 * Image
159 *
160 * Generates an <img /> element
161 *
162 * @param mixed
163 * @param bool
Eric Barnes62ab8b22012-07-28 14:57:04 -0400164 * @param mixed
Timothy Warren01b129a2012-04-27 11:36:50 -0400165 * @return string
166 */
Eric Barnes62ab8b22012-07-28 14:57:04 -0400167 function img($src = '', $index_page = FALSE, $attributes = '')
Derek Allard2067d1a2008-11-13 22:59:24 +0000168 {
169 if ( ! is_array($src) )
170 {
171 $src = array('src' => $src);
172 }
173
Derek Allarda0905f32010-07-05 08:11:33 -0400174 // If there is no alt attribute defined, set it to an empty string
175 if ( ! isset($src['alt']))
176 {
177 $src['alt'] = '';
178 }
179
Derek Allard2067d1a2008-11-13 22:59:24 +0000180 $img = '<img';
181
Andrey Andreev1e6b72c2012-01-06 19:09:22 +0200182 foreach ($src as $k => $v)
Derek Allard2067d1a2008-11-13 22:59:24 +0000183 {
Andrey Andreev2046b1a2012-03-26 21:07:04 +0300184 if ($k === 'src' && strpos($v, '://') === FALSE)
Derek Allard2067d1a2008-11-13 22:59:24 +0000185 {
Derek Allard2067d1a2008-11-13 22:59:24 +0000186 if ($index_page === TRUE)
187 {
Andrey Andreev119d8a72014-01-08 15:27:53 +0200188 $img .= ' src="'.get_instance()->config->site_url($v).'"';
Derek Allard2067d1a2008-11-13 22:59:24 +0000189 }
190 else
191 {
Andrey Andreev119d8a72014-01-08 15:27:53 +0200192 $img .= ' src="'.get_instance()->config->slash_item('base_url').$v.'"';
Derek Allard2067d1a2008-11-13 22:59:24 +0000193 }
194 }
195 else
196 {
Andrey Andreev2046b1a2012-03-26 21:07:04 +0300197 $img .= ' '.$k.'="'.$v.'"';
Derek Allard2067d1a2008-11-13 22:59:24 +0000198 }
199 }
200
Andrey Andreev6a64f852012-08-15 11:16:47 +0300201 return $img._stringify_attributes($attributes).' />';
Derek Allard2067d1a2008-11-13 22:59:24 +0000202 }
203}
204
205// ------------------------------------------------------------------------
206
Derek Allard2067d1a2008-11-13 22:59:24 +0000207if ( ! function_exists('doctype'))
208{
Timothy Warren01b129a2012-04-27 11:36:50 -0400209 /**
210 * Doctype
211 *
212 * Generates a page document type declaration
213 *
Przemyslaw Tomaszewski8711aeb2012-07-22 03:28:41 +0200214 * Examples of valid options: html5, xhtml-11, xhtml-strict, xhtml-trans,
215 * xhtml-frame, html4-strict, html4-trans, and html4-frame.
216 * All values are saved in the doctypes config file.
Timothy Warren01b129a2012-04-27 11:36:50 -0400217 *
218 * @param string type The doctype to be generated
219 * @return string
220 */
Derek Allard93bddd12009-04-14 19:27:38 +0000221 function doctype($type = 'xhtml1-strict')
Derek Allard2067d1a2008-11-13 22:59:24 +0000222 {
Andrey Andreev06879112013-01-29 15:05:02 +0200223 static $doctypes;
Derek Allard2067d1a2008-11-13 22:59:24 +0000224
Andrey Andreev06879112013-01-29 15:05:02 +0200225 if ( ! is_array($doctypes))
Derek Allard2067d1a2008-11-13 22:59:24 +0000226 {
Andrey Andreev06879112013-01-29 15:05:02 +0200227 if (file_exists(APPPATH.'config/doctypes.php'))
Greg Akerd96f8822011-12-27 16:23:47 -0600228 {
229 include(APPPATH.'config/doctypes.php');
230 }
Eric Barnes92808342011-03-18 09:02:37 -0400231
Andrey Andreev06879112013-01-29 15:05:02 +0200232 if (file_exists(APPPATH.'config/'.ENVIRONMENT.'/doctypes.php'))
Derek Allard2067d1a2008-11-13 22:59:24 +0000233 {
Andrey Andreev06879112013-01-29 15:05:02 +0200234 include(APPPATH.'config/'.ENVIRONMENT.'/doctypes.php');
235 }
236
237 if (empty($_doctypes) OR ! is_array($_doctypes))
238 {
239 $doctypes = array();
Derek Allard2067d1a2008-11-13 22:59:24 +0000240 return FALSE;
241 }
Andrey Andreev06879112013-01-29 15:05:02 +0200242
243 $doctypes = $_doctypes;
Derek Allard2067d1a2008-11-13 22:59:24 +0000244 }
245
Andrey Andreev06879112013-01-29 15:05:02 +0200246 return isset($doctypes[$type]) ? $doctypes[$type] : FALSE;
Derek Allard2067d1a2008-11-13 22:59:24 +0000247 }
248}
249
250// ------------------------------------------------------------------------
251
Derek Allard2067d1a2008-11-13 22:59:24 +0000252if ( ! function_exists('link_tag'))
253{
Timothy Warren01b129a2012-04-27 11:36:50 -0400254 /**
255 * Link
256 *
257 * Generates link to a CSS file
258 *
259 * @param mixed stylesheet hrefs or an array
260 * @param string rel
261 * @param string type
262 * @param string title
263 * @param string media
264 * @param bool should index_page be added to the css path
265 * @return string
266 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000267 function link_tag($href = '', $rel = 'stylesheet', $type = 'text/css', $title = '', $media = '', $index_page = FALSE)
268 {
269 $CI =& get_instance();
Derek Allard2067d1a2008-11-13 22:59:24 +0000270 $link = '<link ';
271
272 if (is_array($href))
273 {
Andrey Andreev1e6b72c2012-01-06 19:09:22 +0200274 foreach ($href as $k => $v)
Derek Allard2067d1a2008-11-13 22:59:24 +0000275 {
Andrey Andreev2046b1a2012-03-26 21:07:04 +0300276 if ($k === 'href' && strpos($v, '://') === FALSE)
Derek Allard2067d1a2008-11-13 22:59:24 +0000277 {
278 if ($index_page === TRUE)
279 {
Derek Allard76763bb2009-09-16 11:25:20 +0000280 $link .= 'href="'.$CI->config->site_url($v).'" ';
Derek Allard2067d1a2008-11-13 22:59:24 +0000281 }
282 else
283 {
Derek Allard76763bb2009-09-16 11:25:20 +0000284 $link .= 'href="'.$CI->config->slash_item('base_url').$v.'" ';
Derek Allard2067d1a2008-11-13 22:59:24 +0000285 }
286 }
287 else
288 {
Andrey Andreev2046b1a2012-03-26 21:07:04 +0300289 $link .= $k.'="'.$v.'" ';
Derek Allard2067d1a2008-11-13 22:59:24 +0000290 }
291 }
Derek Allard2067d1a2008-11-13 22:59:24 +0000292 }
293 else
294 {
Andrey Andreev1e6b72c2012-01-06 19:09:22 +0200295 if (strpos($href, '://') !== FALSE)
Derek Allard2067d1a2008-11-13 22:59:24 +0000296 {
Derek Allard292dcd82009-09-16 11:26:32 +0000297 $link .= 'href="'.$href.'" ';
Derek Allard2067d1a2008-11-13 22:59:24 +0000298 }
299 elseif ($index_page === TRUE)
300 {
Derek Allard76763bb2009-09-16 11:25:20 +0000301 $link .= 'href="'.$CI->config->site_url($href).'" ';
Derek Allard2067d1a2008-11-13 22:59:24 +0000302 }
303 else
304 {
Derek Allard76763bb2009-09-16 11:25:20 +0000305 $link .= 'href="'.$CI->config->slash_item('base_url').$href.'" ';
Derek Allard2067d1a2008-11-13 22:59:24 +0000306 }
307
308 $link .= 'rel="'.$rel.'" type="'.$type.'" ';
309
Alex Bilbie773ccc32012-06-02 11:11:08 +0100310 if ($media !== '')
Derek Allard2067d1a2008-11-13 22:59:24 +0000311 {
312 $link .= 'media="'.$media.'" ';
313 }
314
Alex Bilbie773ccc32012-06-02 11:11:08 +0100315 if ($title !== '')
Derek Allard2067d1a2008-11-13 22:59:24 +0000316 {
317 $link .= 'title="'.$title.'" ';
318 }
Derek Allard2067d1a2008-11-13 22:59:24 +0000319 }
Derek Allard2067d1a2008-11-13 22:59:24 +0000320
Andrey Andreev2046b1a2012-03-26 21:07:04 +0300321 return $link."/>\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000322 }
323}
324
325// ------------------------------------------------------------------------
326
Derek Allard2067d1a2008-11-13 22:59:24 +0000327if ( ! function_exists('meta'))
328{
Timothy Warren01b129a2012-04-27 11:36:50 -0400329 /**
330 * Generates meta tags from an array of key/values
331 *
332 * @param array
333 * @param string
334 * @param string
335 * @param string
336 * @return string
337 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000338 function meta($name = '', $content = '', $type = 'name', $newline = "\n")
339 {
340 // Since we allow the data to be passes as a string, a simple array
341 // or a multidimensional one, we need to do a little prepping.
342 if ( ! is_array($name))
343 {
344 $name = array(array('name' => $name, 'content' => $content, 'type' => $type, 'newline' => $newline));
345 }
Andrey Andreev2046b1a2012-03-26 21:07:04 +0300346 elseif (isset($name['name']))
Derek Allard2067d1a2008-11-13 22:59:24 +0000347 {
348 // Turn single array into multidimensional
Andrey Andreev2046b1a2012-03-26 21:07:04 +0300349 $name = array($name);
Derek Allard2067d1a2008-11-13 22:59:24 +0000350 }
351
352 $str = '';
353 foreach ($name as $meta)
354 {
Andrey Andreevea41c8a2014-02-26 18:31:02 +0200355 $type = (isset($meta['type']) && $meta['type'] !== 'name') ? 'http-equiv' : 'name';
Andrey Andreevae31eb52012-05-17 14:54:15 +0300356 $name = isset($meta['name']) ? $meta['name'] : '';
357 $content = isset($meta['content']) ? $meta['content'] : '';
358 $newline = isset($meta['newline']) ? $meta['newline'] : "\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000359
360 $str .= '<meta '.$type.'="'.$name.'" content="'.$content.'" />'.$newline;
361 }
362
363 return $str;
364 }
365}
366
367// ------------------------------------------------------------------------
368
Andrey Andreevea41c8a2014-02-26 18:31:02 +0200369if ( ! function_exists('br'))
370{
371 /**
372 * Generates HTML BR tags based on number supplied
373 *
Andrey Andreev59f04262014-02-26 19:04:36 +0200374 * @deprecated 3.0.0 Use str_repeat() instead
Andrey Andreevea41c8a2014-02-26 18:31:02 +0200375 * @param int $count Number of times to repeat the tag
376 * @return string
377 */
378 function br($count = 1)
379 {
380 return str_repeat('<br />', $count);
381 }
382}
383
384// ------------------------------------------------------------------------
385
Derek Allard2067d1a2008-11-13 22:59:24 +0000386if ( ! function_exists('nbs'))
387{
Timothy Warren01b129a2012-04-27 11:36:50 -0400388 /**
389 * Generates non-breaking space entities based on number supplied
390 *
Andrey Andreev59f04262014-02-26 19:04:36 +0200391 * @deprecated 3.0.0 Use str_repeat() instead
Timothy Warren01b129a2012-04-27 11:36:50 -0400392 * @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 Andreevc5a7c5f2013-07-17 20:10:09 +0300402/* Location: ./system/helpers/html_helper.php */