Yet another "New Page Dialog", with focus on the way people are used to store files. It aims to resemble a regular "Save As" dialog with "Add Folder" functionality.
Compatible with DokuWiki
2008-05-05
Yet another "New Page Dialog", with focus on the way people are used to store files. It aims to resemble a regular "Save As" dialog with "Add Folder" functionality.
Plugin name contains underscore, will not generate popularity points.
Similar to addnewpage
go into the /lib/plugins directory and type:
svn co http://svn.bitflux.org/repos/public/misc/dokuwiki/plugins/npd
Decide where you want to insert the “Create New Page” button in your template and insert the following code:
if (!plugin_isdisabled('npd') && ($npd =& plugin_load('helper', 'npd'))) { $npd->html_new_page_button(); }
Most likely you want to do that in the /lib/tpl/default/main.php inside the <div id="bar__bottomright"/> as follows:
<div class="bar-right" id="bar__bottomright"> <?php if (!plugin_isdisabled('npd') && ($npd =& plugin_load('helper', 'npd'))) $npd->html_new_page_button(); ?> <?php tpl_button('subscription')?> <?php tpl_button('admin')?> <?php tpl_button('profile')?> <?php tpl_button('login')?> <?php tpl_button('index')?> <?php tpl_button('top')?> </div>
Note that the button will only be shown, if the browser is JavaScript enabled.
A demo of this plugin can be seen at the fckw plugin demo wiki.
Please feel free too add your localizations here, I'll add them into the plugin ASAP.
Please report bugs here:
class="bar-right" id="bar__bottomright", just as it is done in the example above); but nothing happens at all. I can place some regular text there, e.g. “a button”, and I then see it in the bar; however, the code to create the new page dialog button does nothing.
(Possible) SOLUTION (22-02-2008): probably your plugin is not well installed. I got at first the same
result. Just unpack the zip file manually to /lib/plugins/ and then it has to work fine.Remember to
change the main.php in the directory of your current theme which can differ from the default theme.
For example: /lib/tpl/mytheme/main.php.
(When your current theme is another theme than the default theme, this plugin will probably look
different than the one in the example here, because of another stylesheet.)
After you have installed this plugin, users still see the default createpage button of DokuWiki
next to the createpagebutton of this plugin. They will also try to use the default createpage button
which leads to pages without namespaces. If you want your users to maintain namespaces in your
DokuWiki when they are creating a page, you must in that case get rid of the default createpage button.
Here's how to do that:
Locate the /inc/template.php file. Locate the following code in the function tpl_button($type) :
case 'edit': #most complicated type - we need to decide on current action if($ACT == 'show' || $ACT == 'search'){ if($INFO['writable']){ if(!empty($INFO['draft'])){ echo html_btn('draft',$ID,'e',array('do' => 'draft'),'post'); }else{ if($INFO['exists']){ echo html_btn('edit',$ID,'e',array('do' => 'edit','rev' => $REV),'post'); }else{ echo html_btn('create',$ID,'e',array('do' => 'edit','rev' => $REV),'post'); } } }else{ if(!actionOK('source')) return false; //pseudo action echo html_btn('source',$ID,'v',array('do' => 'edit','rev' => $REV),'post'); } }else{ echo html_btn('show',$ID,'v',array('do' => 'show')); } break;
And then change it to this (ie. comment the create button):
case 'edit': #most complicated type - we need to decide on current action if($ACT == 'show' || $ACT == 'search'){ if($INFO['writable']){ if(!empty($INFO['draft'])){ echo html_btn('draft',$ID,'e',array('do' => 'draft'),'post'); }else{ if($INFO['exists']){ echo html_btn('edit',$ID,'e',array('do' => 'edit','rev' => $REV),'post'); /* }else{ echo html_btn('create',$ID,'e',array('do' => 'edit','rev' => $REV),'post');*/ } } }else{ if(!actionOK('source')) return false; //pseudo action echo html_btn('source',$ID,'v',array('do' => 'edit','rev' => $REV),'post'); } }else{ echo html_btn('show',$ID,'v',array('do' => 'show')); } break;
That's all folks!
What about simply not calling tpl_button('edit') in the main.php of the template in case of the “show” action?if($ACT != 'show') tpl_button('edit');— Michael Klier 2008/04/19 01:29
I get rid from default button in so manner.. . . . . . <div class="bar-left" id="bar__topleft"> <?php # tpl_button('edit')?> <?php if( $INFO['exists'] === true ) tpl_button('edit') ; if (!plugin_isdisabled('npd') && ($npd =& plugin_load('helper', 'npd'))) { $npd->html_new_page_button(); } ?> <?php tpl_button('history')?> </div> . . . . . .— Vasiliy Pedak 2011/01/23 22:13
function setNameSpace(node){
var nameSpace = '';
nameSpace = node.parentNode.parentNode.innerHTML;
if (nameSpace.substring(0,8) == '<A href='){
nameSpace = nameSpace.substring(nameSpace.indexOf('href=')+6);
nameSpace = nameSpace.substring(0,nameSpace.indexOf('\"'));
nameSpace = nameSpace.replace(/&/g,'&');
window.location.href = nameSpace;
}
return nameSpace;
}
just add ist to the main.php of this template and add the following line at the and of the function getEventElement(e)
setNameSpace(node);
Glufu 2008/09/23 12:09
Replace in the file plugins/npd/tpl/main.php
- <input type="text" class="" style="display: none;" id="npd_ns" value="<?php echo trim($_REQUEST['idx'], ":"); ?>"/> + <input type="text" class="" style="display: none;" id="npd_ns" value="<?php echo urlencode(trim($_REQUEST['idx'],':')); ?>"/>
and in the function npd_save :
- opener.location.href = "doku.php?do=editfckw&id=" + $('npd_ns').value + ":" + page_name; + opener.location.href = "doku.php?do=editfckw&id=" + $('npd_ns').value + "%3A" + page_name;
SoX 2009/05/29 17:51
Some of the presented code lines come from tips found on the web, thanks to their respective authors
diff -r npd_original/helper.php npd_patch/helper.php
4a5
> * @author Patched by Benoît Locher <benoit.locher(at)skf(dot)com> and Matthieu Rioteau <matthieu.rioteau(at)skf(dot)com>
80c81
< $ret .= '<a rel="nofollow" url="'.$url.'" style="display:none;" id="npd_create_button" class="action npd" href="#">'.$label.'</a>';
---
> $ret .= '<a rel="nofollow" href="'.$url.'" style="display:none;" id="npd_create_button" class="action npd">'.$label.'</a>';
83c84
< $ret .= '<form class="button"><div class="no">';
---
> $ret .= '<form class="button" action="'.$url.'"><div class="no">';
89,90d89
< // the url attribute will be used by the JavaScript
< $ret .= 'url="'.$url.'" ';
diff -r npd_original/js/button.js npd_patch/js/button.js
6,7c6,12
<
< npd_clicked_url = button.getAttribute('url');
---
>
> if (button.nodeName.toLowerCase() == 'a') {
> npd_clicked_url = button.getAttribute('href');
> } else {
> npd_clicked_url = button.parentNode.parentNode.getAttribute('action');
> }
>
diff -r npd_original/tpl/main.php npd_patch/tpl/main.php
12a13
> * @author Patched by Benoît Locher <benoit.locher(at)skf(dot)com> and Matthieu Rioteau <matthieu.rioteau(at)skf(dot)com>
104c105
< opener.location.href = "doku.php?do=edit&id=" + $('npd_ns').value + ":" + page_name;
---
> opener.location.href = "doku.php?do=edit&id=" + $('npd_ns').value + "%3A" + page_name;
217a219,226
> switch (li.nodeName.toLowerCase()) {
> case "strong":
> li = li.parentNode.parentNode.parentNode;
> break;
> case "a":
> li = li.parentNode.parentNode;
> break;
> }
238c247,248
< if (a == $('npd_ns').value) {
---
> var a = a.replace(/%3A/gi, ":");
> if (a == $('npd_ns').value.replace(/%3A/gi, ":")) {
374c384
< <input type="text" class="" style="display: none;" id="npd_ns" value="<?php echo trim($_REQUEST['idx'], ":"); ?>"/>
---
> <input type="text" class="" style="display: none;" id="npd_ns" value="<?php echo urlencode(trim($_REQUEST['idx'],':')); ?>"/>
BL & MR 2009/06/16 14:23
$ret .= '<a rel="nofollow" href="'.$url.'" style="display:none;" id="npd_create_button" class="action npd">'.$label.'</a>'; ... $ret .= '<input id="npd_create_button" type="submit" value="'.htmlspecialchars($label).'" class="button" ';
lines in helper.php to
$ret .= '<a name="npd_button" rel="nofollow"href="'.$url.'" style="display:none;" id="npd_create_button" class="action npd">'.$label.'</a>'; ... $ret .= '<input name="npd_button" id="npd_create_button" type="submit" value="'.htmlspecialchars($label).'" class="button" ';
and the init_npd() function in /js/button.js to
function init_npd()
{
var links = document.getElementsByName('npd_button');
var links_length = links.length;
for(i=0; i<links_length; i++)
{
if (links[i].nodeName.toLowerCase() == 'a')
{
npd_clicked_url = links[i].getAttribute('href');
} else {
npd_clicked_url = links[i].parentNode.parentNode.getAttribute('action');
}
addEvent(links[i], "click", npd_clicked);
// show the button
links[i].style.display = '';
}
}