From 477fd5fbc5aff40e9ab3818498cd90c70e8b431e Mon Sep 17 00:00:00 2001 From: resurtm Date: Thu, 20 Jun 2013 19:59:46 +0600 Subject: [PATCH 1/2] Add spaceless widget. --- framework/yii/widgets/Spaceless.php | 67 ++++++++++++++++++++++++++ tests/unit/framework/widgets/SpacelessTest.php | 38 +++++++++++++++ 2 files changed, 105 insertions(+) create mode 100644 framework/yii/widgets/Spaceless.php create mode 100644 tests/unit/framework/widgets/SpacelessTest.php diff --git a/framework/yii/widgets/Spaceless.php b/framework/yii/widgets/Spaceless.php new file mode 100644 index 0000000..846914c --- /dev/null +++ b/framework/yii/widgets/Spaceless.php @@ -0,0 +1,67 @@ + + * + * + *
+ * + *
+ * + * + * ``` + * + * This example will generate the following HTML: + * ```html + * + *
+ * ``` + * + * This method is not designed for content compression (you should use `gzip` output compression to + * achieve it). Main intention is to strip out extra whitespace characters between HTML tags in order + * to avoid browser rendering quirks in some circumstances (e.g. newlines between inline-block elements). + * + * Note, never use this method with `pre` or `textarea` tags. It's not that trivial to deal with such tags + * as it may seem at first sight. For this case you should consider using + * [HTML Tidy Project](http://tidy.sourceforge.net/) instead. + * + * @see http://tidy.sourceforge.net/ + * @author resurtm + * @since 2.0 + */ +class Spaceless extends Widget +{ + /** + * Starts capturing an output to be cleaned from whitespace characters between HTML tags. + */ + public function init() + { + ob_start(); + ob_implicit_flush(false); + } + + /** + * Marks the end of content to be cleaned from whitespace characters between HTML tags. + * Stops capturing an output and echoes cleaned result. + */ + public function run() + { + echo trim(preg_replace('/>\s+<', ob_get_clean())); + } +} diff --git a/tests/unit/framework/widgets/SpacelessTest.php b/tests/unit/framework/widgets/SpacelessTest.php new file mode 100644 index 0000000..9b67600 --- /dev/null +++ b/tests/unit/framework/widgets/SpacelessTest.php @@ -0,0 +1,38 @@ +\n"; + + Spaceless::begin(); + echo "\t
\n"; + + Spaceless::begin(); + echo "\t\t
\n"; + echo "\t\t\t

This is a left bar!

\n"; + echo "\t\t
\n\n"; + echo "\t\t
\n"; + echo "\t\t\t

This is a right bar!

\n"; + echo "\t\t
\n"; + Spaceless::end(); + + echo "\t
\n"; + Spaceless::end(); + + echo "\t

Bye!

\n"; + echo "\n"; + + $expected="\n

This is a left bar!

". + "

This is a right bar!

\t

Bye!

\n\n"; + $this->assertEquals($expected,ob_get_clean()); + } +} From aa8fbd965137f3a1e0487a380548851dd26786b1 Mon Sep 17 00:00:00 2001 From: resurtm Date: Thu, 20 Jun 2013 20:26:47 +0600 Subject: [PATCH 2/2] PHPDoc Markdown newlines before code blocks added. --- framework/yii/widgets/Spaceless.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/framework/yii/widgets/Spaceless.php b/framework/yii/widgets/Spaceless.php index 846914c..8115f85 100644 --- a/framework/yii/widgets/Spaceless.php +++ b/framework/yii/widgets/Spaceless.php @@ -14,6 +14,7 @@ use yii\base\Widget; * or in a plain text are always left untouched. * * Usage example: + * * ```php * * @@ -28,6 +29,7 @@ use yii\base\Widget; * ``` * * This example will generate the following HTML: + * * ```html * *