register_hook('TPL_METAHEADER_OUTPUT', 'BEFORE', $this, 'moaieditor_main'); } // Main function public function moaieditor_main (Doku_Event &$event, $param) { global $ACT, $INFO, $conf, $lang; // Exit if not in edit mode if (!in_array($ACT, ['edit'])) { return; } // Pass some data to Javascript $jsinfo = array( // Configuration options 'hide_editor_by_default' => $this->getConf('hide_editor_by_default'), 'editor_width_side_by_side' => $this->getConf('editor_width_side_by_side'), 'editor_width_top_bottom' => $this->getConf('editor_width_top_bottom'), 'editor_width_single_pane' => $this->getConf('editor_width_single_pane'), // Docinfo 'docinfo' => $this->getDocinfo(), // Editor intro message 'intromsg' => $this->getEditorIntroMessage(), ); $event->data['script'][] = array( 'type' => 'text/javascript', '_data' => 'JSINFO.plugin_moaieditor = ' . json_encode($jsinfo), ); // Simulate template messages (for testing template compatibility) if( isset($_GET['fakemsg']) || MOAIED_FAKE_MESSAGES) $this->simulate_template_messages(); } // ─────────────────────────────────────────── public function getEditorIntroMessage () { # The editor intro message is rendered here: inc/Ui/Editor.php -> show() # In editor mode, it can be of two types: 'editrev' or 'edit' # /inc/lang/en/edit.txt "**You've loaded an old revision of the document!** If you save it, you will create a new version with this data." # /inc/lang/en/editrev.txt "Edit the page and hit ''Save''. See [[wiki:syntax]] for Wiki syntax. Please edit the page only if you can **improve** it. If you want to test some things, learn to make your first steps on the [[playground:playground|playground]]." global $REV; global $INFO; $wr = $INFO['writable'] && !$INFO['locked']; if (!$wr) return null; $type = ($REV) ? 'editrev' : 'edit'; // intro locale text (edit, rditrev, or read) $html = p_locale_xhtml($type); return ['type'=>$type, 'html'=>$html]; } // ─────────────────────────────────────────── // Get document info (mostly copied from 'tpl_pageinfo' but we want to format the data differently) public function getDocinfo () { global $conf, $lang, $INFO, $ID; // Document info will not exist when creating a new page if (!$INFO['exists']) return null; // Document path on disk $fn = $INFO['filepath']; if (!$conf['fullpath']) { if ($INFO['rev']) $fn = str_replace($conf['olddir'] . '/', '', $fn); else $fn = str_replace($conf['datadir'] . '/', '', $fn); } $fn = utf8_decodeFN($fn); // Last modification time $dateLocal = dformat($INFO['lastmod']); $dateIso = date(DATE_ISO8601, $INFO['lastmod']); // Edited by if ($INFO['editor']) $by = $lang['by'].' '.editorinfo($INFO['editor']).''; else $by = '('.$lang['external_edit'].')'; // Return it return [ 'labelPath' => 'Document path on disk', 'labelMod' => $lang['lastmod'], 'path' => "data/pages/$fn", 'time' => "", 'by' => $by ]; } // ─────────────────────────────────────────── public function simulate_template_messages () { global $MSG; $MSG[] = ['msg'=>'Error message (-1)', 'lvl'=>'error', 'allow'=>0, 'line'=>'', 'file'=>'']; $MSG[] = ['msg'=>'Info message (0)', 'lvl'=>'info', 'allow'=>0, 'line'=>'', 'file'=>'']; $MSG[] = ['msg'=>'Success message (1)', 'lvl'=>'success', 'allow'=>0, 'line'=>'', 'file'=>'']; $MSG[] = ['msg'=>'Notify message (2)', 'lvl'=>'notify', 'allow'=>0, 'line'=>'', 'file'=>'']; } } // End class