Просмотр исходного кода

ZF-9026: Method to add renderer groups

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@20955 44c647ce-9c0f-0410-b52a-842ac1e357ba
kokx 16 лет назад
Родитель
Сommit
1d5754f0a1

+ 28 - 0
library/Zend/Markup/Renderer/RendererAbstract.php

@@ -670,6 +670,34 @@ abstract class Zend_Markup_Renderer_RendererAbstract
     }
 
     /**
+     * Add a render group
+     *
+     * @param string $name
+     * @param array $allowedInside
+     * @param array $allowsInside
+     *
+     * @return void
+     */
+    public function addGroup($name, array $allowedInside = array(), array $allowsInside = array())
+    {
+        $this->_groups[$name] = $allowsInside;
+
+        foreach ($allowedInside as $group) {
+            $this->_groups[$group][] = $name;
+        }
+    }
+
+    /**
+     * Get group definitions
+     *
+     * @return array
+     */
+    public function getGroups()
+    {
+        return $this->_groups;
+    }
+
+    /**
      * Set the default filters
      *
      * @return void

+ 37 - 0
tests/Zend/Markup/BbcodeAndHtmlTest.php

@@ -483,6 +483,43 @@ BBCODE;
             $this->_markup->render('[img]http://google.com/"<script>alert(1)</script>[/img]'));
     }
 
+    public function testAddGroup()
+    {
+        $m = $this->_markup;
+
+        $m->addGroup('table', array('block'));
+        $m->addGroup('table-row', array('table'));
+        $m->addGroup('table-cell', array('table-row'), array('inline', 'inline-empty'));
+
+        $m->addMarkup(
+            'table',
+            Zend_Markup_Renderer_RendererAbstract::TYPE_REPLACE,
+            array(
+                'tag'   => 'table',
+                'group' => 'table'
+            )
+        );
+        $m->addMarkup(
+            'tr',
+            Zend_Markup_Renderer_RendererAbstract::TYPE_REPLACE,
+            array(
+                'tag'   => 'tr',
+                'group' => 'table-row'
+            )
+        );
+        $m->addMarkup(
+            'td',
+            Zend_Markup_Renderer_RendererAbstract::TYPE_REPLACE,
+            array(
+                'tag'   => 'td',
+                'group' => 'table-cell'
+            )
+        );
+
+        $this->assertEquals('<table><tr><td>test</td></tr></table>',
+            $m->render('[table][tr][td]test[/td][/tr][/table]'));
+    }
+
 }
 
 // Call Zend_Markup_BbcodeAndHtmlTest::main()