Qiang Xue
12 years ago
2 changed files with 107 additions and 0 deletions
@ -0,0 +1,69 @@ |
|||||||
|
<?php |
||||||
|
/** |
||||||
|
* @link http://www.yiiframework.com/ |
||||||
|
* @copyright Copyright (c) 2008 Yii Software LLC |
||||||
|
* @license http://www.yiiframework.com/license/ |
||||||
|
*/ |
||||||
|
|
||||||
|
namespace yii\widgets; |
||||||
|
|
||||||
|
use yii\base\Widget; |
||||||
|
|
||||||
|
/** |
||||||
|
* Spaceless widget removes whitespace characters between HTML tags. Whitespaces within HTML tags |
||||||
|
* or in a plain text are always left untouched. |
||||||
|
* |
||||||
|
* Usage example: |
||||||
|
* |
||||||
|
* ```php |
||||||
|
* <body> |
||||||
|
* <?php Spaceless::begin(); ?> |
||||||
|
* <div class="nav-bar"> |
||||||
|
* <!-- tags --> |
||||||
|
* </div> |
||||||
|
* <div class="content"> |
||||||
|
* <!-- tags --> |
||||||
|
* </div> |
||||||
|
* <?php Spaceless::end(); ?> |
||||||
|
* </body> |
||||||
|
* ``` |
||||||
|
* |
||||||
|
* This example will generate the following HTML: |
||||||
|
* |
||||||
|
* ```html |
||||||
|
* <body> |
||||||
|
* <div class="navbar"><!-- other tags --></div><div class="content"><!-- other tags --></div></body> |
||||||
|
* ``` |
||||||
|
* |
||||||
|
* 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 <resurtm@gmail.com> |
||||||
|
* @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())); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,38 @@ |
|||||||
|
<?php |
||||||
|
|
||||||
|
namespace yiiunit\framework\widgets; |
||||||
|
|
||||||
|
use yii\widgets\Spaceless; |
||||||
|
|
||||||
|
class SpacelessTest extends \yiiunit\TestCase |
||||||
|
{ |
||||||
|
public function testWidget() |
||||||
|
{ |
||||||
|
ob_start(); |
||||||
|
ob_implicit_flush(false); |
||||||
|
|
||||||
|
echo "<body>\n"; |
||||||
|
|
||||||
|
Spaceless::begin(); |
||||||
|
echo "\t<div class='wrapper'>\n"; |
||||||
|
|
||||||
|
Spaceless::begin(); |
||||||
|
echo "\t\t<div class='left-column'>\n"; |
||||||
|
echo "\t\t\t<p>This is a left bar!</p>\n"; |
||||||
|
echo "\t\t</div>\n\n"; |
||||||
|
echo "\t\t<div class='right-column'>\n"; |
||||||
|
echo "\t\t\t<p>This is a right bar!</p>\n"; |
||||||
|
echo "\t\t</div>\n"; |
||||||
|
Spaceless::end(); |
||||||
|
|
||||||
|
echo "\t</div>\n"; |
||||||
|
Spaceless::end(); |
||||||
|
|
||||||
|
echo "\t<p>Bye!</p>\n"; |
||||||
|
echo "</body>\n"; |
||||||
|
|
||||||
|
$expected="<body>\n<div class='wrapper'><div class='left-column'><p>This is a left bar!</p>". |
||||||
|
"</div><div class='right-column'><p>This is a right bar!</p></div></div>\t<p>Bye!</p>\n</body>\n"; |
||||||
|
$this->assertEquals($expected,ob_get_clean()); |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue