From e942c2032ffb2933aa6be09603802e072e72e64d Mon Sep 17 00:00:00 2001 From: Taylor Otwell Date: Thu, 22 Mar 2012 15:06:36 -0500 Subject: [PATCH] Added macro support to HTML class to match Form class. --- laravel/html.php | 41 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 3 deletions(-) diff --git a/laravel/html.php b/laravel/html.php index 9268acc8..bcb69628 100644 --- a/laravel/html.php +++ b/laravel/html.php @@ -2,6 +2,25 @@ class HTML { + /** + * The registered custom macros. + * + * @var array + */ + public static $macros = array(); + + /** + * Registers a custom macro. + * + * @param string $name + * @param Closure $input + * @return void + */ + public static function macro($name, $macro) + { + static::$macros[$name] = $macro; + } + /** * Convert HTML characters to entities. * @@ -319,7 +338,7 @@ public static function attributes($attributes) { // For numeric keys, we will assume that the key and the value are the // same, as this will conver HTML attributes such as "required" that - // may be specified as required="required". + // may be specified as required="required", etc. if (is_numeric($key)) $key = $value; if ( ! is_null($value)) @@ -345,8 +364,7 @@ protected static function obfuscate($value) { // To properly obfuscate the value, we will randomly convert each // letter to its entity or hexadecimal representation, keeping a - // bot from sniffing the randomly obfuscated letters from the - // page and guarding against e-mail harvesting. + // bot from sniffing the randomly obfuscated letters. switch (rand(1, 3)) { case 1: @@ -365,4 +383,21 @@ protected static function obfuscate($value) return $safe; } + /** + * Dynamically handle calls to custom macros. + * + * @param string $method + * @param array $parameters + * @return mixed + */ + public static function __callStatic($method, $parameters) + { + if (isset(static::$macros[$method])) + { + return call_user_func_array(static::$macros[$method], $parameters); + } + + throw new \Exception("Method [$method] does not exist."); + } + }