summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Barnes <eric@ericlbarnes.com>2012-07-29 06:15:40 +0200
committerEric Barnes <eric@ericlbarnes.com>2012-07-29 06:15:40 +0200
commitacedd2b1a37b22cb04b01038f21876ddfe38b83a (patch)
treeb3b0a1a347abcbe9c2484072f8d859575654a9aa
parent62ab8b24fc37a25eab9205c46321fa41729e5faf (diff)
Adding a common stringify_attributes function for dealing with attributes through out various helpers.
Signed-off-by: Eric Barnes <eric@ericlbarnes.com>
-rw-r--r--system/core/Common.php49
-rw-r--r--system/helpers/date_helper.php17
-rw-r--r--system/helpers/html_helper.php41
-rw-r--r--system/helpers/url_helper.php50
-rw-r--r--tests/codeigniter/core/Common_test.php31
5 files changed, 88 insertions, 100 deletions
diff --git a/system/core/Common.php b/system/core/Common.php
index 06b162264..d4d01f813 100644
--- a/system/core/Common.php
+++ b/system/core/Common.php
@@ -598,5 +598,54 @@ if ( ! function_exists('html_escape'))
}
}
+// ------------------------------------------------------------------------
+
+if ( ! function_exists('_stringify_attributes'))
+{
+ /**
+ * Attributes To String
+ *
+ * Helper function used to convert an array or object of
+ * attributes to a string
+ *
+ * @param mixed
+ * @return string
+ */
+ function _stringify_attributes($attributes, $js = FALSE)
+ {
+ if (is_object($attributes) && count($attributes) > 0)
+ {
+ $attributes = (array) $attributes;
+ }
+
+ if (is_array($attributes))
+ {
+ $atts = '';
+ if (count($attributes) === 0)
+ {
+ return $atts;
+ }
+ foreach ($attributes as $key => $val)
+ {
+ if ($js)
+ {
+ $atts .= $key.'='.$val.',';
+ }
+ else
+ {
+ $atts .= ' '.$key.'="'.$val.'"';
+ }
+ }
+ return rtrim($atts, ',');
+ }
+ elseif (is_string($attributes) && strlen($attributes) > 0)
+ {
+ return ' '.$attributes;
+ }
+
+ return $attributes;
+ }
+}
+
/* End of file Common.php */
/* Location: ./system/core/Common.php */ \ No newline at end of file
diff --git a/system/helpers/date_helper.php b/system/helpers/date_helper.php
index a45b3d7ac..a792f09a2 100644
--- a/system/helpers/date_helper.php
+++ b/system/helpers/date_helper.php
@@ -575,22 +575,7 @@ if ( ! function_exists('timezone_menu'))
$menu .= ' class="'.$class.'"';
}
- // Generate a string from the attributes submitted, if any
- if (is_array($attributes))
- {
- $atts = '';
- foreach ($attributes as $key => $val)
- {
- $atts .= ' '.$key.'="'.$val.'"';
- }
- $attributes = $atts;
- }
- elseif (is_string($attributes) && strlen($attributes) > 0)
- {
- $attributes = ' '.$attributes;
- }
-
- $menu .= $attributes.">\n";
+ $menu .= _stringify_attributes($attributes).">\n";
foreach (timezones() as $key => $val)
{
diff --git a/system/helpers/html_helper.php b/system/helpers/html_helper.php
index 96234bb02..9843e804e 100644
--- a/system/helpers/html_helper.php
+++ b/system/helpers/html_helper.php
@@ -51,7 +51,7 @@ if ( ! function_exists('heading'))
*/
function heading($data = '', $h = '1', $attributes = '')
{
- return '<h'.$h._html_attributes_to_string($attributes).'>'.$data.'</h'.$h.'>';
+ return '<h'.$h._stringify_attributes($attributes).'>'.$data.'</h'.$h.'>';
}
}
@@ -120,7 +120,7 @@ if ( ! function_exists('_list'))
$out = str_repeat(' ', $depth);
// Write the opening list tag
- $out .= '<'.$type._html_attributes_to_string($attributes).">\n";
+ $out .= '<'.$type._stringify_attributes($attributes).">\n";
// Cycle through the list elements. If an array is
// encountered we will recursively call _list()
@@ -215,7 +215,7 @@ if ( ! function_exists('img'))
}
}
- return $img._html_attributes_to_string($attributes).'/>';
+ return $img._stringify_attributes($attributes).'/>';
}
}
@@ -393,40 +393,5 @@ if ( ! function_exists('nbs'))
}
}
-if ( ! function_exists('_html_attributes_to_string'))
-{
- /**
- * Attributes To String
- *
- * Helper function used to convert array or object of attributes to a string
- *
- * @param mixed
- * @param bool
- * @return string
- */
- function _html_attributes_to_string($attributes)
- {
- if (is_object($attributes) && count($attributes) > 0)
- {
- $attributes = (array) $attributes;
- }
-
- if (is_array($attributes) && count($attributes) > 0)
- {
- $atts = '';
- foreach ($attributes as $key => $val)
- {
- $atts .= ' '.$key.'="'.$val.'"';
- }
- return $atts;
- }
- elseif (is_string($attributes) && strlen($attributes) > 0)
- {
- return ' '.$attributes;
- }
-
- return $attributes;
- }
-}
/* End of file html_helper.php */
/* Location: ./system/helpers/html_helper.php */ \ No newline at end of file
diff --git a/system/helpers/url_helper.php b/system/helpers/url_helper.php
index 39e6343a6..57208c948 100644
--- a/system/helpers/url_helper.php
+++ b/system/helpers/url_helper.php
@@ -165,7 +165,7 @@ if ( ! function_exists('anchor'))
if ($attributes !== '')
{
- $attributes = _parse_attributes($attributes);
+ $attributes = _stringify_attributes($attributes);
}
return '<a href="'.$site_url.'"'.$attributes.'>'.$title.'</a>';
@@ -221,10 +221,10 @@ if ( ! function_exists('anchor_popup'))
unset($attributes[$key]);
}
- $attributes = empty($attributes) ? '' : _parse_attributes($attributes);
+ $attributes = _stringify_attributes($attributes);
return '<a href="'.$site_url
- .'" onclick="window.open(\''.$site_url."', '".$window_name."', '"._parse_attributes($atts, TRUE)."'); return false;\""
+ .'" onclick="window.open(\''.$site_url."', '".$window_name."', '"._stringify_attributes($atts, TRUE)."'); return false;\""
.$attributes.'>'.$title.'</a>';
}
}
@@ -250,7 +250,7 @@ if ( ! function_exists('mailto'))
$title = $email;
}
- return '<a href="mailto:'.$email.'"'._parse_attributes($attributes).'>'.$title.'</a>';
+ return '<a href="mailto:'.$email.'"'._stringify_attributes($attributes).'>'.$title.'</a>';
}
}
@@ -560,47 +560,5 @@ if ( ! function_exists('redirect'))
}
}
-// ------------------------------------------------------------------------
-
-if ( ! function_exists('_parse_attributes'))
-{
- /**
- * Parse out the attributes
- *
- * Some of the functions use this
- *
- * @param array
- * @param bool
- * @return string
- */
- function _parse_attributes($attributes, $javascript = FALSE)
- {
- if (is_string($attributes))
- {
- return ($attributes !== '') ? ' '.$attributes : '';
- }
-
- $att = '';
- foreach ($attributes as $key => $val)
- {
- if ($javascript === TRUE)
- {
- $att .= $key.'='.$val.',';
- }
- else
- {
- $att .= ' '.$key.'="'.$val.'"';
- }
- }
-
- if ($javascript === TRUE && $att !== '')
- {
- return substr($att, 0, -1);
- }
-
- return $att;
- }
-}
-
/* End of file url_helper.php */
/* Location: ./system/helpers/url_helper.php */ \ No newline at end of file
diff --git a/tests/codeigniter/core/Common_test.php b/tests/codeigniter/core/Common_test.php
index f9bf6c27f..27d48efc2 100644
--- a/tests/codeigniter/core/Common_test.php
+++ b/tests/codeigniter/core/Common_test.php
@@ -10,4 +10,35 @@ class Common_test extends CI_TestCase {
$this->assertEquals(FALSE, is_php('9999.9.9'));
}
+ // ------------------------------------------------------------------------
+
+ public function test_stringify_attributes()
+ {
+ $this->assertEquals(' class="foo" id="bar"', _stringify_attributes(array('class' => 'foo', 'id' => 'bar')));
+
+ $atts = new Stdclass;
+ $atts->class = 'foo';
+ $atts->id = 'bar';
+ $this->assertEquals(' class="foo" id="bar"', _stringify_attributes($atts));
+
+ $atts = new Stdclass;
+ $this->assertEquals('', _stringify_attributes($atts));
+
+ $this->assertEquals(' class="foo" id="bar"', _stringify_attributes('class="foo" id="bar"'));
+
+ $this->assertEquals('', _stringify_attributes(array()));
+ }
+
+ // ------------------------------------------------------------------------
+
+ public function test_stringify_js_attributes()
+ {
+ $this->assertEquals('width=800,height=600', _stringify_attributes(array('width' => '800', 'height' => '600'), TRUE));
+
+ $atts = new Stdclass;
+ $atts->width = 800;
+ $atts->height = 600;
+ $this->assertEquals('width=800,height=600', _stringify_attributes($atts, TRUE));
+ }
+
} \ No newline at end of file