Index: Editor.php =================================================================== --- Editor.php (revisione 820) +++ Editor.php (revisione 841) @@ -48,6 +48,19 @@ protected $_module = 'dijit.Editor'; /** + * @var array Maps non-core plugin to module basename + */ + protected $_pluginsModules = array( + 'createLink' => 'LinkDialog', + 'insertImage' => 'LinkDialog', + 'fontName' => 'FontChoice', + 'fontSize' => 'FontChoice', + 'formatBlock' => 'FontChoice', + 'foreColor' => 'TextColor', + 'hiliteColor' => 'TextColor' + ); + + /** * JSON-encoded parameters * @var array */ @@ -64,6 +77,12 @@ */ public function editor($id, $value = null, $params = array(), $attribs = array()) { + if (isset($params['plugins'])) { + foreach ($this->_getRequiredModules($params['plugins']) as $module) { + $this->dojo->requireModule($module); + } + } + $hiddenName = $id; if (array_key_exists('id', $attribs)) { $hiddenId = $attribs['id']; @@ -93,6 +112,25 @@ } /** + * Generates the list of required modules to include, if any is needed. + * + * @param array $plugins plugins to include + * @return array + */ + protected function _getRequiredModules(array $plugins) + { + $modules = array(); + foreach ($plugins as $commandName) { + if (isset($this->_pluginsModules[$commandName])) { + $pluginName = $this->_pluginsModules[$commandName]; + $modules[] = 'dijit._editor.plugins.' . $pluginName; + } + } + + return array_unique($modules); + } + + /** * Normalize editor element name * * @param string $name