. * * @category WYSIWYG * @package StatusNet * @author Evan Prodromou * @copyright 2010 StatusNet, Inc. * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 * @link http://status.net/ */ if (!defined('STATUSNET')) { // This check helps protect against security problems; // your code file can't be executed directly from the web. exit(1); } /** * Use TinyMCE library to allow rich text editing in the browser * * Converts the notice form in browser to a rich-text editor. * * @category WYSIWYG * @package StatusNet * @author Evan Prodromou * @copyright 2010 StatusNet, Inc. * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 * @link http://status.net/ */ class TinyMCEPlugin extends Plugin { var $html; function onEndShowScripts($action) { if (common_logged_in()) { $action->script(common_path('plugins/TinyMCE/js/jquery.tinymce.js')); $action->inlineScript($this->_inlineScript()); } return true; } function onEndShowStyles($action) { $action->style('span#notice_data-text_container { float: left }'); return true; } function onPluginVersion(&$versions) { $versions[] = array('name' => 'TinyMCE', 'version' => STATUSNET_VERSION, 'author' => 'Evan Prodromou', 'homepage' => 'http://status.net/wiki/Plugin:TinyMCE', 'rawdescription' => _m('Use TinyMCE library to allow rich text editing in the browser')); return true; } function onArgsInitialize(&$args) { if (!array_key_exists('action', $args) || $args['action'] != 'newnotice') { return true; } $raw = $this->_scrub($args['status_textarea']); require_once INSTALLDIR.'/extlib/htmLawed/htmLawed.php'; $config = array('safe' => 1, 'deny_attribute' => 'id,style,on*'); $this->html = htmLawed($raw, $config); $text = html_entity_decode(strip_tags($this->html)); $args['status_textarea'] = $text; return true; } function onStartNoticeSave($notice) { if (!empty($this->html)) { // Stomp on any rendering $notice->rendered = $this->html; } return true; } function _inlineScript() { $path = common_path('plugins/TinyMCE/js/tiny_mce.js'); $scr = <<