blob: 2d474169bb36e055a184b384091203e0b8f83e80 [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 {
241 global $_doctypes;
242
243 if ( ! is_array($_doctypes))
244 {
Andrey Andreev2046b1a2012-03-26 21:07:04 +0300245 if (defined('ENVIRONMENT') && is_file(APPPATH.'config/'.ENVIRONMENT.'/doctypes.php'))
Greg Akerd96f8822011-12-27 16:23:47 -0600246 {
247 include(APPPATH.'config/'.ENVIRONMENT.'/doctypes.php');
248 }
249 elseif (is_file(APPPATH.'config/doctypes.php'))
250 {
251 include(APPPATH.'config/doctypes.php');
252 }
Eric Barnes92808342011-03-18 09:02:37 -0400253
bubbafoley0ea04142011-03-17 14:55:41 -0500254 if ( ! is_array($_doctypes))
Derek Allard2067d1a2008-11-13 22:59:24 +0000255 {
256 return FALSE;
257 }
258 }
259
Andrey Andreev2046b1a2012-03-26 21:07:04 +0300260 return isset($_doctypes[$type]) ? $_doctypes[$type] : FALSE;
Derek Allard2067d1a2008-11-13 22:59:24 +0000261 }
262}
263
264// ------------------------------------------------------------------------
265
Derek Allard2067d1a2008-11-13 22:59:24 +0000266if ( ! function_exists('link_tag'))
267{
Timothy Warren01b129a2012-04-27 11:36:50 -0400268 /**
269 * Link
270 *
271 * Generates link to a CSS file
272 *
273 * @param mixed stylesheet hrefs or an array
274 * @param string rel
275 * @param string type
276 * @param string title
277 * @param string media
278 * @param bool should index_page be added to the css path
279 * @return string
280 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000281 function link_tag($href = '', $rel = 'stylesheet', $type = 'text/css', $title = '', $media = '', $index_page = FALSE)
282 {
283 $CI =& get_instance();
Derek Allard2067d1a2008-11-13 22:59:24 +0000284 $link = '<link ';
285
286 if (is_array($href))
287 {
Andrey Andreev1e6b72c2012-01-06 19:09:22 +0200288 foreach ($href as $k => $v)
Derek Allard2067d1a2008-11-13 22:59:24 +0000289 {
Andrey Andreev2046b1a2012-03-26 21:07:04 +0300290 if ($k === 'href' && strpos($v, '://') === FALSE)
Derek Allard2067d1a2008-11-13 22:59:24 +0000291 {
292 if ($index_page === TRUE)
293 {
Derek Allard76763bb2009-09-16 11:25:20 +0000294 $link .= 'href="'.$CI->config->site_url($v).'" ';
Derek Allard2067d1a2008-11-13 22:59:24 +0000295 }
296 else
297 {
Derek Allard76763bb2009-09-16 11:25:20 +0000298 $link .= 'href="'.$CI->config->slash_item('base_url').$v.'" ';
Derek Allard2067d1a2008-11-13 22:59:24 +0000299 }
300 }
301 else
302 {
Andrey Andreev2046b1a2012-03-26 21:07:04 +0300303 $link .= $k.'="'.$v.'" ';
Derek Allard2067d1a2008-11-13 22:59:24 +0000304 }
305 }
Derek Allard2067d1a2008-11-13 22:59:24 +0000306 }
307 else
308 {
Andrey Andreev1e6b72c2012-01-06 19:09:22 +0200309 if (strpos($href, '://') !== FALSE)
Derek Allard2067d1a2008-11-13 22:59:24 +0000310 {
Derek Allard292dcd82009-09-16 11:26:32 +0000311 $link .= 'href="'.$href.'" ';
Derek Allard2067d1a2008-11-13 22:59:24 +0000312 }
313 elseif ($index_page === TRUE)
314 {
Derek Allard76763bb2009-09-16 11:25:20 +0000315 $link .= 'href="'.$CI->config->site_url($href).'" ';
Derek Allard2067d1a2008-11-13 22:59:24 +0000316 }
317 else
318 {
Derek Allard76763bb2009-09-16 11:25:20 +0000319 $link .= 'href="'.$CI->config->slash_item('base_url').$href.'" ';
Derek Allard2067d1a2008-11-13 22:59:24 +0000320 }
321
322 $link .= 'rel="'.$rel.'" type="'.$type.'" ';
323
Alex Bilbie773ccc32012-06-02 11:11:08 +0100324 if ($media !== '')
Derek Allard2067d1a2008-11-13 22:59:24 +0000325 {
326 $link .= 'media="'.$media.'" ';
327 }
328
Alex Bilbie773ccc32012-06-02 11:11:08 +0100329 if ($title !== '')
Derek Allard2067d1a2008-11-13 22:59:24 +0000330 {
331 $link .= 'title="'.$title.'" ';
332 }
Derek Allard2067d1a2008-11-13 22:59:24 +0000333 }
Derek Allard2067d1a2008-11-13 22:59:24 +0000334
Andrey Andreev2046b1a2012-03-26 21:07:04 +0300335 return $link."/>\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000336 }
337}
338
339// ------------------------------------------------------------------------
340
Derek Allard2067d1a2008-11-13 22:59:24 +0000341if ( ! function_exists('meta'))
342{
Timothy Warren01b129a2012-04-27 11:36:50 -0400343 /**
344 * Generates meta tags from an array of key/values
345 *
346 * @param array
347 * @param string
348 * @param string
349 * @param string
350 * @return string
351 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000352 function meta($name = '', $content = '', $type = 'name', $newline = "\n")
353 {
354 // Since we allow the data to be passes as a string, a simple array
355 // or a multidimensional one, we need to do a little prepping.
356 if ( ! is_array($name))
357 {
358 $name = array(array('name' => $name, 'content' => $content, 'type' => $type, 'newline' => $newline));
359 }
Andrey Andreev2046b1a2012-03-26 21:07:04 +0300360 elseif (isset($name['name']))
Derek Allard2067d1a2008-11-13 22:59:24 +0000361 {
362 // Turn single array into multidimensional
Andrey Andreev2046b1a2012-03-26 21:07:04 +0300363 $name = array($name);
Derek Allard2067d1a2008-11-13 22:59:24 +0000364 }
365
366 $str = '';
367 foreach ($name as $meta)
368 {
Andrey Andreevae31eb52012-05-17 14:54:15 +0300369 $type = ( ! isset($meta['type']) OR $meta['type'] === 'name') ? 'name' : 'http-equiv';
370 $name = isset($meta['name']) ? $meta['name'] : '';
371 $content = isset($meta['content']) ? $meta['content'] : '';
372 $newline = isset($meta['newline']) ? $meta['newline'] : "\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000373
374 $str .= '<meta '.$type.'="'.$name.'" content="'.$content.'" />'.$newline;
375 }
376
377 return $str;
378 }
379}
380
381// ------------------------------------------------------------------------
382
Derek Allard2067d1a2008-11-13 22:59:24 +0000383if ( ! function_exists('nbs'))
384{
Timothy Warren01b129a2012-04-27 11:36:50 -0400385 /**
386 * Generates non-breaking space entities based on number supplied
387 *
388 * @param int
389 * @return string
390 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000391 function nbs($num = 1)
392 {
Andrey Andreev1e6b72c2012-01-06 19:09:22 +0200393 return str_repeat('&nbsp;', $num);
Derek Allard2067d1a2008-11-13 22:59:24 +0000394 }
395}
396
Derek Allard2067d1a2008-11-13 22:59:24 +0000397/* End of file html_helper.php */
Andrey Andreev2046b1a2012-03-26 21:07:04 +0300398/* Location: ./system/helpers/html_helper.php */