*/ /** * Handles the inserting of a new table in a running edit session */ class action_plugin_edittable_newtable extends DokuWiki_Action_Plugin { /** * Register its handlers with the DokuWiki's event controller */ function register(Doku_Event_Handler $controller) { $controller->register_hook('TOOLBAR_DEFINE', 'AFTER', $this, 'toolbar'); //$controller->register_hook('ACTION_ACT_PREPROCESS', 'BEFORE', $this, 'handle_newtable'); $controller->register_hook('PLUGIN_EDITTABLE_PREPROCESS_NEWTABLE', 'BEFORE', $this, 'handle_newtable'); } /** * Add a button for inserting tables to the toolbar array * * @param Doku_Event $event */ public function toolbar(Doku_Event $event) { $event->data[] = array( 'title' => $this->getLang('add_table'), 'type' => 'NewTable', 'icon' => '../../plugins/edittable/images/add_table.png', 'block' => true ); } /** * Handle the click on the new table button in the toolbar * * @param Doku_Event $event */ public function handle_newtable(Doku_Event $event) { global $INPUT; global $TEXT; if (!$INPUT->post->has('edittable__new')) return; /* * $fields['pre'] has all data before the selection when the "Insert table" button was clicked * $fields['text'] has all data inside the selection when the "Insert table" button was clicked * $fields['suf'] has all data after the selection when the "Insert table" button was clicked * $TEXT has the table created by the editor (from action_plugin_edittable_editor::handle_table_post()) */ $fields = $INPUT->post->arr('edittable__new'); // clean the fields (undos formText()) and update the post and request arrays $fields['pre'] = cleanText($fields['pre']); $fields['text'] = cleanText($fields['text']); $fields['suf'] = cleanText($fields['suf']); $INPUT->post->set('edittable__new', $fields); $event->data = act_clean($event->data); switch ($event->data) { case 'preview': // preview view of a table edit $INPUT->post->set('target', 'table'); break; case 'edit': // edit view of a table (first edit) $INPUT->post->set('target', 'table'); $TEXT = "^ ^ ^\n"; foreach (explode("\n", $fields['text']) as $line) { $TEXT .= "| $line | |\n"; } break; case 'draftdel': // not sure if/how this would happen, we restore all data and hand over to section edit $INPUT->post->set('target', 'section'); $TEXT = $fields['pre'].$fields['text'].$fields['suf']; $event->data = 'edit'; break; case 'save': // return to edit page $INPUT->post->set('target', 'section'); $TEXT = $fields['pre'].$TEXT.$fields['suf']; $event->data = 'edit'; break; } } }