DokuWiki - 如何在章节标题上显示编辑按钮

DokuWiki - 如何在章节标题上显示编辑按钮

在 DokuWiki 中,是否有插入与最新的稳定版本(2009-02-14)兼容,可以在部分标题(如 Wikipedia 或 MediaWiki)上显示编辑按钮,而不是在部分文本的末尾显示它们。

默认方式令人困惑,因为当您想要编辑某个部分时,您必须滚动到其内容的末尾并单击那里的编辑按钮。

答案1

好的,我已经想出了如何自己做,下面是解决方案,这样你就可以使用编辑按钮章节标题,如维基百科。

在文本编辑器中打开以下文件。

“\dokuwiki\inc\parser\handler.php”

在 110 号线附近你会发现这个:

    if ($level<=$conf['maxseclevel']) {
        $this->_addCall('section_edit',array($this->status['section_edit_start'], $pos-1, $this->status['section_edit_level'], $this->status['section_edit_title']), $pos);
        $this->status['section_edit_start'] = $pos;
        $this->status['section_edit_level'] = $level;
        $this->status['section_edit_title'] = $title;
    }

将上面的内容替换为以下内容:

    if ($level<=$conf['maxseclevel']) {
        $this->status['section_edit_start'] = $pos;
        $this->status['section_edit_level'] = $level;
        $this->status['section_edit_title'] = $title;
        $this->_addCall('section_edit',array($this->status['section_edit_start'], $pos-1, $this->status['section_edit_level'], $this->status['section_edit_title']), $pos);
    }

保存并关闭 PHP 文件,然后在您的 wiki 上重新加载一篇文章 - 瞧!您已成功“修改” DokuWiki,使其在每个标题附近都有编辑按钮,以编辑相应的部分。

希望这可以帮助。

答案2

由于渲染方式的原因,在 PHP 中似乎无法做到这一点,我们不知道该部分的结束范围,但我们可以在使用 javascript 渲染页面后移动按钮。

对于版本 2016-06-26a“Elenor of Tsort”,编辑 lib/scripts/page.js 并插入:

/**
 * Moves the edit buttons beside the headings once it has the edit end range since we dont know it when rendering the heading in PHP.
 */
moveEditButtonsToHeadings: function(){
    jQuery('form.btn_secedit').each(function(){
    var $tgt = jQuery(this).parent(),
        $editButton = jQuery(this).parent(),
            nr = $tgt.attr('class').match(/(\s+|^)editbutton_(\d+)(\s+|$)/)[2];

        // Walk the dom tree in reverse to find the sibling which is or contains the section edit marker
        while($tgt.length > 0 && !($tgt.hasClass('sectionedit' + nr) || $tgt.find('.sectionedit' + nr).length)) {
            $tgt = $tgt.prev();
        }

        // move the edit button and adjust the styles
        $tgt.css('display', 'inline-block');
        $editButton.detach().insertAfter($tgt);
        if ($tgt.prop("tagName") == 'H1') {
            $editButton.css('marginTop', '0.4em');
        } else if ($tgt.prop("tagName") == 'H2') {
            $editButton.css('marginTop', '0.2em');
        } else {
            $editButton.css('marginTop', '0.0em');
        }
        $editButton.css('marginRight', '10px');
        $editButton.css('float', 'left');
    });
},

sectionHighlight2: function() {
    jQuery('div.secedit')
        .mouseover(function(){
            var $tgt = jQuery(this),
                $level = $tgt.next();
            $level.addClass('section_highlight');
        })
        .mouseout(function(){
            var $tgt = jQuery(this),
                $level = $tgt.next();
            $level.removeClass('section_highlight');
        });
}

修改init函数来调用两个新函数,并且注释掉旧的sectionHighlight。

init: function(){
    //dw_page.sectionHighlight();
    dw_page.moveEditButtonsToHeadings();
    dw_page.sectionHighlight2();
    jQuery('a.fn_top').mouseover(dw_page.footnoteDisplay);
    dw_page.makeToggle('#dw__toc h3','#dw__toc > div');
}

相关内容