Browse Source

ZF-11511: Add support for extraPlugins in Editor form dijit

- Added accessors for "ExtraPlugins"

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@24192 44c647ce-9c0f-0410-b52a-842ac1e357ba
matthew 14 years ago
parent
commit
0b836d6293

+ 98 - 0
library/Zend/Dojo/Form/Element/Editor.php

@@ -596,4 +596,102 @@ class Zend_Dojo_Form_Element_Editor extends Zend_Dojo_Form_Element_Dijit
         }
         return $this->getDijitParam('updateInterval');
     }
+
+    /**
+     * Add a single editor extra plugin.
+     *
+     * @param  string $plugin
+     * @return Zend_Dojo_Form_Element_Editor
+     */
+    public function addExtraPlugin($plugin)
+    {
+        $plugin = (string) $plugin;
+        $extraPlugins = $this->getExtraPlugins();
+        if (in_array($plugin, $extraPlugins)) {
+            return $this;
+        }
+    
+        $extraPlugins[] = (string) $plugin;
+        $this->setDijitParam('extraPlugins', $extraPlugins);
+        return $this;
+    }
+    
+    /**
+     * Add multiple extra plugins.
+     *
+     * @param  array $extraPlugins
+     * @return Zend_Dojo_Form_Element_Editor
+     */
+    public function addExtraPlugins(array $plugins)
+    {
+        foreach ($plugins as $plugin) {
+            $this->addExtraPlugin($plugin);
+        }
+        return $this;
+    }
+    
+    /**
+     * Overwrite many extra plugins at once.
+     *
+     * @param  array $plugins
+     * @return Zend_Dojo_Form_Element_Editor
+     */
+    public function setExtraPlugins(array $plugins)
+    {
+        $this->clearExtraPlugins();
+        $this->addExtraPlugins($plugins);
+        return $this;
+    }
+    
+    /**
+     * Get all extra plugins.
+     *
+     * @return array
+     */
+    public function getExtraPlugins()
+    {
+        if (!$this->hasDijitParam('extraPlugins')) {
+            return array();
+        }
+        return $this->getDijitParam('extraPlugins');
+    }
+    
+    /**
+     * Is a given extra plugin registered?
+     *
+     * @param  string $plugin
+     * @return bool
+     */
+    public function hasExtraPlugin($plugin)
+    {
+        $extraPlugins = $this->getExtraPlugins();
+        return in_array((string) $plugin, $extraPlugins);
+    }
+    
+    /**
+     * Remove a given extra plugin.
+     *
+     * @param  string $plugin
+     * @return Zend_Dojo_Form_Element_Editor
+     */
+    public function removeExtraPlugin($plugin)
+    {
+        $extraPlugins = $this->getExtraPlugins();
+        if (false === ($index = array_search($plugin, $extraPlugins))) {
+            return $this;
+        }
+        unset($extraPlugins[$index]);
+        $this->setDijitParam('extraPlugins', $extraPlugins);
+        return $this;
+    }
+    
+    /**
+     * Clear all extra plugins.
+     *
+     * @return Zend_Dojo_Form_Element_Editor
+     */
+    public function clearExtraPlugins()
+    {
+        return $this->removeDijitParam('extraPlugins');
+    }
 }

+ 21 - 0
tests/Zend/Dojo/Form/Element/EditorTest.php

@@ -291,6 +291,27 @@ class Zend_Dojo_Form_Element_EditorTest extends PHPUnit_Framework_TestCase
         $this->assertEquals($this->element->getDijitParam('minHeight'), $this->element->getMinHeight());
         $this->assertEquals('10em', $this->element->getMinHeight());
     }
+
+    /** @group ZF-11511 */
+    public function testShouldNotHaveExtraPluginsByDefault()
+    {
+        $extraPlugins = $this->element->getExtraPlugins();
+        $this->assertTrue(empty($extraPlugins));
+    }
+
+    /** @group ZF-11511 */
+    public function testExtraPluginAccessorsShouldProxyToDijitParams()
+    {
+        $this->element->setExtraPlugins(array('undo', 'bold', 'italic'));
+        $this->assertTrue($this->element->hasDijitParam('extraPlugins'));
+        $this->assertTrue($this->element->hasExtraPlugin('bold'));
+        $this->assertEquals($this->element->getDijitParam('extraPlugins'), $this->element->getExtraPlugins());
+
+        $this->element->removeExtraPlugin('bold');
+        $this->assertFalse($this->element->hasExtraPlugin('bold'), var_export($this->element->getExtraPlugins(), 1));
+        $extraPlugins = $this->element->getDijitParam('extraPlugins');
+        $this->assertNotContains('bold', $extraPlugins, var_export($extraPlugins, 1));
+    }
 }
 
 // Call Zend_Dojo_Form_Element_EditorTest::main() if this source file is executed directly.