DokuWiki

It's better when it's simple

User Tools

Site Tools


plugin:new_page_dialog

new page dialog Plugin

Compatible with DokuWiki

2008-05-05

plugin 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.

Last updated on
2011-04-04
Provides
Action
Repository
Source

This extension has not been updated in over 2 years. It may no longer be maintained or supported and may have compatibility issues.

Extension name contains underscore, will not generate popularity points.

Similar to addnewpage, npd

Tagged with button, create, form

:!: Deprecated :!: - For usage with current versions of DokuWiki, please use the new New Page Dialog Plugin, an adopted and forked version of this plugin.

Installation

Install via SVN

go into the /lib/plugins directory and type:

svn co http://svn.bitflux.org/repos/public/misc/dokuwiki/plugins/npd

Download Zip/Tar

Add Button to Template

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')?>&nbsp;
</div>

Note that the button will only be shown, if the browser is JavaScript enabled.

Changelog

  • 2008-07-11 Version 0.4:
    • fixed compatibility with DokuWiki 2008-05-05
  • 2008-05-27 Version 0.3:
    • added many localisations
    • added configuration in order to choose either bottom or link
  • 2007-02-18 Version 0.2:
    • added German language (thanks to Tblue)
    • bugfix for “empty namespaces”
  • 2007-02-17 Version 0.1:
    • initial upload

Demo

A demo of this plugin can be seen at the fckw plugin demo wiki. FIXME

Screenshots

Localization

Please feel free too add your localizations here, I'll add them into the plugin ASAP.

Known Issues

Please report bugs here:

  • Since I updated DokuWiki to the latest release 2009-12-25 “Lemming” this plugin (version 0.5 2008-01-10) doesn't work anymore. The plugin-link /doku.php?id=start&idx=:&npd=1& open a new window, but show the startpage of DokuWiki. Any suggestions?
    • The same has happened in my case.
    • I've to the same problem in my DokuWiki and was unable to find a solution yet.
    • me too here
    • [2012] me too :-(
  • It seems this plugin is not compatible with the indexmenu plugin as it attaches events to the standard index menu tree of DokuWiki and not the indexmenu tree. If there could be any chance to disable the indexmenu plugin in the 'new page' window shown by npd then the problem would be solved, using the standard index tree for the 'new page' window and the indexmenu tree for the rest of the wiki.
  • Hi, I am having the same problem as that described below with DokuWiki 2008-05-05 and npd version 0.4 - pages are not created in the sub-namespace selected but directly under wiki. Any suggestions ?
  • Hi with version DokuWiki-2008-05-05.tgz the plugin doesn't work. When I want to add a new page for example to wiki:test12:test1 called test5 then the page is created in wiki: any ideas? could not reproduce in version 0.4
  • Same problem as above with DokuWiki-2008-05-05, npd 0.4 and dokubook template
  • Cannot I create a new page within an existing folder?? can not reproduce - more info?
  • JS error when creating folder in “empty namespaces” fixed in version 0.2
  • I installed the plugin from the Plugin Manager, using your link to zip file (http://wiki.caillou.ch/_media/playground:npd_v0.2.zip?id=playground%3Aplayground). Installation reported that plugin installed fine, and it is enabled. However, * When clicking on “info” in the plugin manager I get “This plugin returned no information, it may be invalid.”.
    • I cannot create the button for it as described above (I place it in div 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.
    • My DokuWiki version is 2007-06-26b if this helps.</del>

(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.)

Added: How to get rid of the default createpage button?

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

Discussion

  • Ditto. It simply doesn't work deeper than 2 sub-namespaces (DokuWiki 2008-05-05 & 2009-02-14). The good news is, that the code snipped doesn't make it worse :-) ,André 2009/04/20
  • I am having the same problem as Thomas (on DokuWiki 2008-05-05). Any ideas on how to get this working? John, 2009/03/03
  • For some reason, I cannot descend deeper than 2 sub-namespaces. When I click on the third namspace (no matter if I click on the “+” or the name itself), the focus where the new page is created, is back on the root namespace (similar to felix's and glufu's problem). The code snippet glufu provided doesn't work either. I use the latest version (via SVN). Is there a solution? - Thomas, 2009/01/15
  • Zip file download link 404s, at least as of 2008/06/07. Don't know about SVN, since SVN isn't working right on my server. But could someone please fix the zip link? Thx much. — Matt Landry 2008/06/07
  • Hi, it would be great if this plugin would also support an actionlink style link. I would happily integrate support for this plugin into the Arctic Template ;-) which supports both types of actionlinks. — Michael Klier 2008/04/19 01:27
  • Same here, I'm using Arctic Template and the button is simply ugly =)Benoit P. 2008/05/13 14:26
  • Hi chimeric and benoit: i added the config in version 0.3 … install the plugin, go to
    admin → configuration settings → npd plugin settings
    and choose link — pierre spring 2008/06/27 23:25
  • Hey, I'm using artic template, too. It really looks fine with 'link' :-) But there is another Problem. I can't create new pages in subdirectories. The new page will be created at the Namespace “Start - NewPage”, where Start is my Index page. — Felix Weber 2008/08/13 16:42
  • Fine work but i have the same problem like Felix. The value of npd_ns is empty in function npd_save (main.php). BTW: it would be nice if you could implement a exclude function to hide some namespaces in a future version? — Glufu 2008/08/14 10:19
  • You must not click on the name of the namespace but on the little '+' on the left of the namespace. 2008/27/14 10:44
  • my whishlist (14-set-2008)
    • if you click on + of a namespace, the page is created in that namespace. Please do the same if the user click on the namespace name. Because the page is created on the root folder if the user click on a namespace name
    • when the user is editing a page, do not show the “Create new page” button, it does confuse some users
    • it does not work in Google Chrome browser
    • a __MACOSX plugin is installed, but there is no info about it. For what is that plugin?
  • I'm not sure if this solution is okay, but I fixed the problem of felix and me with this snipped of code:
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(/&amp;/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

  • It would if the dialog would open and expand/focus on the current namespace/path when “Create new page” is pressed.
  • To resolve the problem with the creation after 2 sub-namespaces (DokuWiki 2008-05-05 & 2009-02-14) :

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

  • Here below you can find a patch (shown as result of a “diff” command) that solves most issues we could find in this plugin
    • All namespace structure levels are reachable
    • All “clics” have a correct behavior
    • Tested with Firefox and IE

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

  • If you need multiple buttons on page, change the
 $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 = '';
    }

}
plugin/new_page_dialog.txt · Last modified: 2016-01-26 17:27 by Aleksandr