public function updateCMSFields(FieldList $fields) { Requirements::javascript(TINYMCE4_DIR . "/javascript/HtmlEditorField.js"); Requirements::css(TINYMCE4_DIR . "/css/HtmlEditorField.css"); if (Member::currentUser()) { CustomHtmlEditorConfig::set_active(Member::currentUser()->getHtmlEditorConfigForCMS()); } $fields->replaceField("Content", CustomHtmlEditorField::create("Content", _t('SiteTree.HTMLEDITORTITLE', "Content", 'HTML editor title'))->addExtraClass('stacked')); }
function init() { if (Member::currentUser()) { CustomHtmlEditorConfig::set_active(Member::currentUser()->getHtmlEditorConfigForCMS()); } Requirements::block(MCE_ROOT . 'tiny_mce_src.js'); Requirements::block(FRAMEWORK_DIR . "/javascript/HtmlEditorField.js"); // Set default values in the config if missing. These things can't be defined in the config // file because insufficient information exists when that is being processed $htmlEditorConfig = CustomHtmlEditorConfig::get_active(); $htmlEditorConfig->setOption('language', i18n::get_tinymce_lang()); if (!$htmlEditorConfig->getOption('content_css')) { $cssFiles = array(); $cssFiles[] = FRAMEWORK_ADMIN_DIR . '/css/editor.css'; // Use theme from the site config if (class_exists('SiteConfig') && ($config = SiteConfig::current_site_config()) && $config->Theme) { $theme = $config->Theme; } elseif (Config::inst()->get('SSViewer', 'theme_enabled') && Config::inst()->get('SSViewer', 'theme')) { $theme = Config::inst()->get('SSViewer', 'theme'); } else { $theme = false; } if ($theme) { $cssFiles[] = THEMES_DIR . "/{$theme}/css/editor.css"; } else { if (project()) { $cssFiles[] = project() . '/css/editor.css'; } } // Remove files that don't exist foreach ($cssFiles as $k => $cssFile) { if (!file_exists(BASE_PATH . '/' . $cssFile)) { unset($cssFiles[$k]); } } $htmlEditorConfig->setOption('content_css', implode(',', $cssFiles)); } CustomHtmlEditorConfig::require_js(); }
/** * Includes the JavaScript neccesary for this field to work using the {@link Requirements} system. */ public static function include_js() { $configObj = CustomHtmlEditorConfig::get_active(); // compile list of plugins $internalPlugins = array(); foreach ($configObj->getPlugins() as $plugin => $path) { if (!$path) { $internalPlugins[] = $plugin; } } // use cachefly tinymce 4 version Requirements::javascript('//tinymce.cachefly.net/4/tinymce.min.js?plugins=' . implode(',', $internalPlugins) . '&themes=modern&languages=en&diskcache=true&src=false'); Requirements::customScript($configObj->generateJS(), 'htmlEditorConfig'); // block old scripts Requirements::block(MCE_ROOT . 'tiny_mce_src.js'); Requirements::block(FRAMEWORK_DIR . "/javascript/HtmlEditorField.js"); // load replacements Requirements::javascript(TINYMCE4_DIR . "/javascript/HtmlEditorField.js"); if (Member::currentUser()) { CustomHtmlEditorConfig::set_active(Member::currentUser()->getHtmlEditorConfigForCMS()); } }
/** * Generate the JavaScript that will set TinyMCE's configuration: * - Parse all configurations into JSON objects to be used in JavaScript * - Includes TinyMCE and configurations using the {@link Requirements} system */ public static function require_js() { require_once TINYMCE4_PATH . '/thirdparty/tinymce/tiny_mce_gzip.php'; $useGzip = Config::inst()->get('CustomHtmlEditorField', 'use_gzip'); $configs = array(); $externalPlugins = array(); $internalPlugins = array(); $languages = array(); foreach (self::$configs as $configID => $config) { $settings = $config->settings; // parse plugins $configPlugins = array(); foreach ($config->plugins as $plugin => $path) { if (!$path) { $configPlugins[] = $plugin; $internalPlugins[] = $plugin; } else { $configPlugins[] = '-' . $plugin; if (!array_key_exists($plugin, $externalPlugins)) { $externalPlugins[$plugin] = sprintf('tinymce.PluginManager.load("%s", "%s");', $plugin, $path); } } } // save config plugins settings $settings['plugins'] = implode(',', $configPlugins); // buttons foreach ($config->buttons as $i => $buttons) { // $settings['theme_advanced_buttons'.$i] = implode(',', $buttons); // tinymce3 $settings['toolbar' . $i] = implode(',', $buttons); // tinymce4 } // languages $languages[] = $config->getOption('language'); // save this config settings $configs[$configID] = $settings; } // tinyMCE JS requirement if ($useGzip) { $tag = TinyMCE4_Compressor::renderTag(array('url' => TINYMCE4_DIR . '/thirdparty/tinymce/tiny_mce_gzip.php', 'plugins' => implode(',', $internalPlugins), 'themes' => 'advanced', 'languages' => implode(",", array_filter($languages))), true); preg_match('/src="([^"]*)"/', $tag, $matches); Requirements::javascript(html_entity_decode($matches[1])); } else { Requirements::javascript(TINYMCE4_DIR . '/thirdparty/tinymce/jquery.tinymce.min.js'); } // block old scripts Requirements::block(MCE_ROOT . 'tiny_mce_src.js'); Requirements::block(FRAMEWORK_DIR . "/javascript/HtmlEditorField.js"); Requirements::block('htmlEditorConfig'); // load replacements Requirements::javascript(TINYMCE4_DIR . "/javascript/HtmlEditorField.js"); if (Member::currentUser()) { CustomHtmlEditorConfig::set_active(Member::currentUser()->getHtmlEditorConfigForCMS()); } // prepare external plugins js string $externalPlugins = array_values($externalPlugins); $externalPlugins = implode("\n\t", $externalPlugins); // tinyMCE config object and external plugings $configsJS = "\nif((typeof tinyMCE != 'undefined')) {\n\t{$externalPlugins}\n\tvar ssTinyMceConfig = " . Convert::raw2json($configs) . ";\n}"; Requirements::customScript($configsJS, 'customHtmlEditorConfig'); }