From bd075ee409099a20d405a5fa6b92f2fe637781bc Mon Sep 17 00:00:00 2001 From: Kijin Sung Date: Fri, 14 May 2021 22:40:38 +0900 Subject: [PATCH] Add getBodyClassList() and removeBodyClass() methods to Context https://xetown.com/questions/1569477 --- classes/context/Context.class.php | 62 ++++++++++++++++++++++++------ tests/unit/classes/ContextTest.php | 9 ++++- 2 files changed, 58 insertions(+), 13 deletions(-) diff --git a/classes/context/Context.class.php b/classes/context/Context.class.php index a836928c9..d36beb2dd 100644 --- a/classes/context/Context.class.php +++ b/classes/context/Context.class.php @@ -2383,21 +2383,26 @@ class Context self::$_instance->html_header .= (self::$_instance->html_header ? "\n" : '') . $header; } - public static function clearHtmlHeader() - { - self::$_instance->html_header = ''; - } - /** * Returns added html code by addHtmlHeader() * * @return string Added html code before */ - public static function getHtmlHeader() + public static function getHtmlHeader(): string { return self::$_instance->html_header; } + /** + * Remove all content added by addHtmlHeader() + * + * @return void + */ + public static function clearHtmlHeader() + { + self::$_instance->html_header = ''; + } + /** * Add css class to Html Body * @@ -2405,19 +2410,52 @@ class Context */ public static function addBodyClass($class_name) { - self::$_instance->body_class[] = $class_name; + $class_name = strval($class_name); + if (!in_array($class_name, self::$_instance->body_class)) + { + self::$_instance->body_class[] = $class_name; + } + } + + /** + * Remove css class from Html Body + * + * @param string $class_name class name + */ + public static function removeBodyClass($class_name) + { + $class_name = strval($class_name); + self::$_instance->body_class = array_values(array_filter(self::$_instance->body_class, function($str) use($class_name) { + return $str !== $class_name; + })); } /** * Return css class to Html Body * - * @return string Return class to html body + * @return array */ - public static function getBodyClass() + public static function getBodyClassList(): array { - $class_list = self::$_instance->body_class; - - return (count($class_list) > 0) ? sprintf(' class="%s"', implode(' ', array_unique($class_list))) : ''; + return self::$_instance->body_class; + } + + /** + * Return css class to Html Body + * + * @deprecated + * @return string + */ + public static function getBodyClass(): string + { + if (count(self::$_instance->body_class)) + { + return sprintf(' class="%s"', implode(' ', self::$_instance->body_class)); + } + else + { + return ''; + } } /** diff --git a/tests/unit/classes/ContextTest.php b/tests/unit/classes/ContextTest.php index d652477da..e5637dad4 100644 --- a/tests/unit/classes/ContextTest.php +++ b/tests/unit/classes/ContextTest.php @@ -60,10 +60,17 @@ class ContextTest extends \Codeception\TestCase\Test $this->assertEquals(Context::getBodyClass(), ' class="red green"'); Context::addBodyClass('blue'); $this->assertEquals(Context::getBodyClass(), ' class="red green blue"'); - + Context::addBodyClass('yellow'); + $this->assertEquals(Context::getBodyClassList(), ['red', 'green', 'blue', 'yellow']); + + // remove class manually + Context::removeBodyClass('yellow'); + $this->assertEquals(Context::getBodyClassList(), ['red', 'green', 'blue']); + // remove duplicated class Context::addBodyClass('red'); $this->assertEquals(Context::getBodyClass(), ' class="red green blue"'); + $this->assertEquals(Context::getBodyClassList(), ['red', 'green', 'blue']); } public function testSetRequestMethod()