new_page_dialog plugin by Pierre Spring
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 2008-07-11. Provides Action.
Compatible with DokuWiki 2008-05-05.
Similar to addnewpage, newpagebutton.
go into the /lib/plugins directory and type:
svn co http://svn.bitflux.org/repos/public/misc/dokuwiki/plugins/npd
The zip can be found here
Decide where you want to insert the “Create New Page” button in your template and insert the 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 JS enabled.
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
A demo of this plugin can be seen at the fckw plugin demo wiki.
For now, localization only exists for English,German and Dutch. Please feel free too add your localizations here, I'll add them into the plugin ASAP.
There are two files for localization.
The lang.php file:
/** * english language file for the "New Page Dialog" plugin * * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) * @author Pierre Spring <pierre.spring[curly thing]liip[full stop]ch> */ /* buttons */ $lang['btn_create_new_page'] = 'Create New Page'; $lang['btn_create_page'] = 'Create Page'; $lang['btn_new_folder'] = 'New Folder'; $lang['btn_ok'] = 'OK'; /* dialogs */ $lang['dlg_confirm_page_name'] = 'Are you sure you want to \ncreate a page called:\n'; $lang['dlg_new_folder'] = 'Enter new folder name:'; /* misc */ $lang['msc_page_title'] = 'Page Title';
The dialog_folder_name.txt:
Please enter the folder Name.\\ Note that a folder will **NOT** be created before a page\\ within the folder is **SAVED**.
lang.php:
/** * German language file for the "New Page Dialog" plugin * * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) * @author Tilman Blumenbach <tilman [AT] tblue [DOT] de> */ /* buttons */ $lang['btn_create_new_page'] = 'Neue Seite anlegen'; $lang['btn_create_page'] = 'Seite anlegen'; $lang['btn_new_folder'] = 'Neuer Ordner'; $lang['btn_ok'] = 'OK'; /* dialogs */ $lang['dlg_confirm_page_name'] = 'Sind Sie sicher, dass Sie\neine Seite mit dem folgenden\nTitel anlegen wollen?\n'; $lang['dlg_new_folder'] = 'Namen für neuen Ordner eingeben:'; /* misc */ $lang['msc_page_title'] = 'Seitentitel';
dialog_folder_name.txt:
Bitte geben Sie den Ordnernamen ein.\\ Beachten Sie, dass ein Ordner **NICHT** angelegt wird,\\ bevor eine Seite in dem Ordner **GESPEICHERT** ist.
lang.php:
/** * dutch language file for the "New Page Dialog" plugin * * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) * @author Harro Schuringa */ /* buttons */ $lang['btn_create_new_page'] = 'Maak nieuwe pagina aan'; $lang['btn_create_page'] = 'Maak pagina aan'; $lang['btn_new_folder'] = 'Nieuwe map aanmaken'; $lang['btn_ok'] = 'OK'; /* dialogs */ $lang['dlg_confirm_page_name'] = 'Weet u zeker dat u een pagina\naan wilt maken met de naam:\n'; $lang['dlg_new_folder'] = 'Geef de naam van de nieuwe map op:'; /* misc */ $lang['msc_page_title'] = 'Pagina Titel';
dialog_folder_name.txt:
Geef de naam van de map.\\ NB!: Denk eraan dat een map **NIET** aangemaakt wordt voordat de pagina\\ binnenin die map is **OPGESLAGEN**.\\
lang.php:
<?php /** * Korean language file for the "New Page Dialog" plugin * * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) * @author Heesu Yoon <cppigX[atSign]gmail[fullStop]com> (where X=3*5*7*19) */ /* buttons */ $lang['btn_create_new_page'] = '새 페이지 만들기'; $lang['btn_create_page'] = '페이지 만들기'; $lang['btn_new_folder'] = '새 폴더'; $lang['btn_ok'] = '확인'; /* dialogs */ $lang['dlg_confirm_page_name'] = '다음 페이지를\n만드시겠습니까?\n'; $lang['dlg_new_folder'] = '새 폴더 이름:'; /* misc */ $lang['msc_page_title'] = '페이지 제목'; ?>
dialog_folder_name.txt:
폴더 이름을 입력하십시요.\\ 참고 - 새 폴더는 폴더 내의 파일이 **저장**될 때까지\\ 생성되지 **않습니다.**
lang.php
/** * norsk språkfil for plugin "New Page Dialog" * * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) * @author Torkill Bruland */ /* buttons */ $lang['btn_create_new_page'] = 'Opprett Ny Side'; $lang['btn_create_page'] = 'Lag side'; $lang['btn_new_folder'] = 'Ny mappe'; $lang['btn_ok'] = 'OK'; /* dialogs */ $lang['dlg_confirm_page_name'] = 'Er du sikker på at du ønsker å \n opprette en side med navnet:\n'; $lang['dlg_new_folder'] = 'Før inn nytt mappenavn:'; /* misc */ $lang['msc_page_title'] = 'Sidetittel';
Fila dialog_folder_name.txt:
Før inn navnet på mappa.\\ Merk at mappe **IKKE** opprettes før det\\ **LAGRES** en side i vedkommende mappe.
lang.php
/** * italian language file for the "New Page Dialog" plugin * * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) * @author Andrea Papotti <genome[snail shell]cheerful[youknowwhat]com> */ /* buttons */ $lang['btn_create_new_page'] = 'Crea Nuova Pagina'; $lang['btn_create_page'] = 'Crea Pagina'; $lang['btn_new_folder'] = 'Nuova Cartella'; $lang['btn_ok'] = 'OK'; /* dialogs */ $lang['dlg_confirm_page_name'] = 'Sei sicuro di voler \ncreare una pagina chiamata:\n'; $lang['dlg_new_folder'] = 'Inserisci nome nuova cartella:'; /* misc */ $lang['msc_page_title'] = 'Titolo Pagina';
Fila dialog_folder_name.txt:
Prego inserire il mome della cartella.\\ Nota: La cartella viene creata solamente quando contiene\\ ALMENO UNA pagina.
lang.php
<?php /** * Spanish language file for the "New Page Dialog" plugin * * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) * @author Digna González <digna.gonzalezotero[at]gmail[dot]com */ /* buttons */ $lang['btn_create_new_page'] = 'Crear nueva página'; $lang['btn_create_page'] = 'Crear Página'; $lang['btn_new_folder'] = 'Nueva Carpeta'; $lang['btn_ok'] = 'Aceptar'; /* dialogs */ $lang['dlg_confirm_page_name'] = '¿Está seguro de que desea \n crear una página llamada:\n?'; $lang['dlg_new_folder'] = 'Introduzca el nombre de la carpeta:'; /* misc */ $lang['msc_page_title'] = 'Título de la página:'; //Setup VIM: ex: et ts=4 enc=utf-8 :
Archivo dialog_folder_name.txt
Por favor, introduzca el nombre de la carpeta.\\ Atención: **NO** se creará una carpeta hasta que se **GUARDE**\\ una página dentro de esa carpeta
lang.php
<?php /** * russian language file for the "New Page Dialog" plugin * * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) * @author Ilya Paramonov */ /* buttons */ $lang['btn_create_new_page'] = 'Создать новую страницу'; $lang['btn_create_page'] = 'Создать страницу'; $lang['btn_new_folder'] = 'Создать пространство имён'; $lang['btn_ok'] = 'OK'; /* dialogs */ $lang['dlg_confirm_page_name'] = 'Вы действительно хотите\nсоздать страницу с именем:\n'; $lang['dlg_new_folder'] = 'Введите имя нового пространства имён:'; /* misc */ $lang['msc_page_title'] = 'Имя страницы'; //Setup VIM: ex: et ts=4 enc=utf-8 :
dialog_folder_name.txt
Введите название пространства имён.\\ Заметьте, что пространство имён **НЕ** будет создано,\\ пока страница внутри него не будет **СОХРАНЕНА**.
lang.php
/** * Česká verze pluginu "New Page Dialog" * * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) * @author 2046 */ /* buttons */ $lang['btn_create_new_page'] = 'Vytvoř novou stránku'; $lang['btn_create_page'] = 'Vytvoř stránku'; $lang['btn_new_folder'] = 'Nový adresář'; $lang['btn_ok'] = 'OK'; /* dialogs */ $lang['dlg_confirm_page_name'] = 'Jseš si jistý, \nže chceš vytvořit stránku s názvem:\n'; $lang['dlg_new_folder'] = 'Zvol název adresáře:'; /* misc */ $lang['msc_page_title'] = 'Název stránky';
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