summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/exe/indexer.php14
-rw-r--r--lib/exe/js.php1
-rw-r--r--lib/exe/mediamanager.php22
-rw-r--r--lib/exe/xmlrpc.php118
-rw-r--r--lib/plugins/acl/lang/bg/lang.php1
-rw-r--r--lib/plugins/acl/lang/fr/lang.php1
-rw-r--r--lib/plugins/config/lang/bg/intro.txt6
-rw-r--r--lib/plugins/config/lang/bg/lang.php66
-rw-r--r--lib/plugins/config/lang/el/lang.php1
-rw-r--r--lib/plugins/config/lang/fr/lang.php2
-rw-r--r--lib/plugins/config/lang/pt/lang.php1
-rw-r--r--lib/plugins/plugin/classes/ap_download.class.php2
-rw-r--r--lib/plugins/plugin/classes/ap_manage.class.php2
-rw-r--r--lib/plugins/plugin/lang/bg/lang.php1
-rw-r--r--lib/plugins/plugin/lang/fr/lang.php1
-rw-r--r--lib/plugins/popularity/lang/bg/intro.txt10
-rw-r--r--lib/plugins/popularity/lang/bg/lang.php10
-rw-r--r--lib/plugins/popularity/lang/bg/submitted.txt3
-rw-r--r--lib/plugins/popularity/lang/el/lang.php5
-rw-r--r--lib/plugins/popularity/lang/el/submitted.txt3
-rw-r--r--lib/plugins/popularity/lang/fr/lang.php1
-rw-r--r--lib/plugins/popularity/lang/pt/lang.php4
-rw-r--r--lib/plugins/popularity/lang/pt/submitted.txt3
-rw-r--r--lib/plugins/revert/lang/bg/lang.php1
-rw-r--r--lib/plugins/revert/lang/fr/lang.php1
-rw-r--r--lib/plugins/usermanager/admin.php13
-rw-r--r--lib/plugins/usermanager/lang/bg/lang.php17
-rw-r--r--lib/plugins/usermanager/lang/fr/lang.php1
-rw-r--r--lib/scripts/edit.js111
-rw-r--r--lib/scripts/locktimer.js99
-rw-r--r--lib/scripts/script.js28
-rw-r--r--lib/tpl/default/design.css26
32 files changed, 285 insertions, 290 deletions
diff --git a/lib/exe/indexer.php b/lib/exe/indexer.php
index eec8c968c..0042e92d2 100644
--- a/lib/exe/indexer.php
+++ b/lib/exe/indexer.php
@@ -149,14 +149,20 @@ function runIndexer(){
}
// try to aquire a lock
+ $run = 0;
$lock = $conf['lockdir'].'/_indexer.lock';
while(!@mkdir($lock,$conf['dmode'])){
usleep(50);
- if(time()-@filemtime($lock) > 60*5){
+ if(is_dir($lock) && time()-@filemtime($lock) > 60*5){
// looks like a stale lock - remove it
- @rmdir($lock);
- print "runIndexer(): stale lock removed".NL;
- }else{
+ if (!@rmdir($lock)) {
+ print "runIndexer(): removing the stale lock failed".NL;
+ return false;
+ } else {
+ print "runIndexer(): stale lock removed".NL;
+ }
+ }elseif($run++ == 1000){
+ // we waited 5 seconds for that lock
print "runIndexer(): indexer locked".NL;
return false;
}
diff --git a/lib/exe/js.php b/lib/exe/js.php
index 117021308..645ab3cc4 100644
--- a/lib/exe/js.php
+++ b/lib/exe/js.php
@@ -48,6 +48,7 @@ function js_out(){
DOKU_INC.'lib/scripts/textselection.js',
DOKU_INC.'lib/scripts/toolbar.js',
DOKU_INC.'lib/scripts/edit.js',
+ DOKU_INC.'lib/scripts/locktimer.js',
DOKU_INC.'lib/scripts/linkwiz.js',
DOKU_INC.'lib/scripts/media.js',
DOKU_INC.'lib/scripts/subscriptions.js',
diff --git a/lib/exe/mediamanager.php b/lib/exe/mediamanager.php
index c79a25c08..6f2add2be 100644
--- a/lib/exe/mediamanager.php
+++ b/lib/exe/mediamanager.php
@@ -82,18 +82,24 @@
// handle deletion
if($DEL) {
- $INUSE = media_inuse($DEL);
- if(!$INUSE) {
- if(media_delete($DEL,$AUTH)) {
- msg(sprintf($lang['deletesucc'],noNS($DEL)),1);
- } else {
- msg(sprintf($lang['deletefail'],noNS($DEL)),-1);
+ $res = 0;
+ if(checkSecurityToken()) {
+ $res = media_delete($DEL,$AUTH);
+ }
+ if ($res & DOKU_MEDIA_DELETED) {
+ $msg = sprintf($lang['deletesucc'], noNS($DEL));
+ if ($res & DOKU_MEDIA_EMPTY_NS) {
+ // current namespace was removed. redirecting to root ns passing msg along
+ send_redirect(DOKU_URL.'lib/exe/mediamanager.php?msg1='.
+ rawurlencode($msg));
}
- } else {
+ msg($msg,1);
+ } elseif ($res & DOKU_MEDIA_INUSE) {
if(!$conf['refshow']) {
- unset($INUSE);
msg(sprintf($lang['mediainuse'],noNS($DEL)),0);
}
+ } else {
+ msg(sprintf($lang['deletefail'],noNS($DEL)),-1);
}
}
diff --git a/lib/exe/xmlrpc.php b/lib/exe/xmlrpc.php
index d40e338b2..9749a2e16 100644
--- a/lib/exe/xmlrpc.php
+++ b/lib/exe/xmlrpc.php
@@ -605,64 +605,26 @@ class dokuwiki_xmlrpc_server extends IXR_IntrospectionServer {
*/
function putAttachment($id, $file, $params) {
$id = cleanID($id);
- global $conf;
- global $lang;
-
$auth = auth_quickaclcheck(getNS($id).':*');
- if($auth >= AUTH_UPLOAD) {
- if(!isset($id)) {
- return new IXR_ERROR(1, 'Filename not given.');
- }
- $ftmp = $conf['tmpdir'] . '/' . md5($id.clientIP());
-
- // save temporary file
- @unlink($ftmp);
- $buff = base64_decode($file);
- io_saveFile($ftmp, $buff);
+ if(!isset($id)) {
+ return new IXR_ERROR(1, 'Filename not given.');
+ }
- // get filename
- list($iext, $imime,$dl) = mimetype($id);
- $id = cleanID($id);
- $fn = mediaFN($id);
-
- // get filetype regexp
- $types = array_keys(getMimeTypes());
- $types = array_map(create_function('$q','return preg_quote($q,"/");'),$types);
- $regex = join('|',$types);
-
- // because a temp file was created already
- if(preg_match('/\.('.$regex.')$/i',$fn)) {
- //check for overwrite
- $overwrite = @file_exists($fn);
- if($overwrite && (!$params['ow'] || $auth < AUTH_DELETE)) {
- return new IXR_ERROR(1, $lang['uploadexist'].'1');
- }
- // check for valid content
- $ok = media_contentcheck($ftmp, $imime);
- if($ok == -1) {
- return new IXR_ERROR(1, sprintf($lang['uploadexist'].'2', ".$iext"));
- } elseif($ok == -2) {
- return new IXR_ERROR(1, $lang['uploadspam']);
- } elseif($ok == -3) {
- return new IXR_ERROR(1, $lang['uploadxss']);
- }
+ global $conf;
- // prepare event data
- $data[0] = $ftmp;
- $data[1] = $fn;
- $data[2] = $id;
- $data[3] = $imime;
- $data[4] = $overwrite;
+ $ftmp = $conf['tmpdir'] . '/' . md5($id.clientIP());
- // trigger event
- return trigger_event('MEDIA_UPLOAD_FINISH', $data, array($this, '_media_upload_action'), true);
+ // save temporary file
+ @unlink($ftmp);
+ $buff = base64_decode($file);
+ io_saveFile($ftmp, $buff);
- } else {
- return new IXR_ERROR(1, $lang['uploadwrong']);
- }
+ $res = media_save(array('name' => $ftmp), $id, $params['ow'], $auth, 'rename');
+ if (is_array($res)) {
+ return new IXR_ERROR(-$res[1], $res[0]);
} else {
- return new IXR_ERROR(1, "You don't have permissions to upload files.");
+ return $res;
}
}
@@ -674,55 +636,15 @@ class dokuwiki_xmlrpc_server extends IXR_IntrospectionServer {
function deleteAttachment($id){
$id = cleanID($id);
$auth = auth_quickaclcheck(getNS($id).':*');
- if($auth < AUTH_DELETE) return new IXR_ERROR(1, "You don't have permissions to delete files.");
- global $conf;
- global $lang;
-
- // check for references if needed
- $mediareferences = array();
- if($conf['refcheck']){
- $mediareferences = ft_mediause($id,$conf['refshow']);
- }
-
- if(!count($mediareferences)){
- $file = mediaFN($id);
- if(@unlink($file)){
- addMediaLogEntry(time(), $id, DOKU_CHANGE_TYPE_DELETE);
- io_sweepNS($id,'mediadir');
- return 0;
- }
- //something went wrong
- return new IXR_ERROR(1, 'Could not delete file');
- } else {
+ $res = media_delete($id, $auth);
+ if ($res & DOKU_MEDIA_DELETED) {
+ return 0;
+ } elseif ($res & DOKU_MEDIA_NOT_AUTH) {
+ return new IXR_ERROR(1, "You don't have permissions to delete files.");
+ } elseif ($res & DOKU_MEDIA_INUSE) {
return new IXR_ERROR(1, 'File is still referenced');
- }
- }
-
- /**
- * Moves the temporary file to its final destination.
- *
- * Michael Klier <chi@chimeric.de>
- */
- function _media_upload_action($data) {
- global $conf;
-
- if(is_array($data) && count($data)===5) {
- io_createNamespace($data[2], 'media');
- if(rename($data[0], $data[1])) {
- chmod($data[1], $conf['fmode']);
- media_notify($data[2], $data[1], $data[3]);
- // add a log entry to the media changelog
- if ($data[4]) {
- addMediaLogEntry(time(), $data[2], DOKU_CHANGE_TYPE_EDIT);
- } else {
- addMediaLogEntry(time(), $data[2], DOKU_CHANGE_TYPE_CREATE);
- }
- return $data[2];
- } else {
- return new IXR_ERROR(1, 'Upload failed.');
- }
} else {
- return new IXR_ERROR(1, 'Upload failed.');
+ return new IXR_ERROR(1, 'Could not delete file');
}
}
diff --git a/lib/plugins/acl/lang/bg/lang.php b/lib/plugins/acl/lang/bg/lang.php
index 9facd4259..4efadfbba 100644
--- a/lib/plugins/acl/lang/bg/lang.php
+++ b/lib/plugins/acl/lang/bg/lang.php
@@ -5,6 +5,7 @@
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
* @author Nikolay Vladimirov <nikolay@vladimiroff.com>
* @author Viktor Usunov <usun0v@mail.bg>
+ * @author Kiril Velikov neohidra@gmail.com
*/
$lang['admin_acl'] = 'Управление на списъците за достъп';
$lang['acl_group'] = 'Група';
diff --git a/lib/plugins/acl/lang/fr/lang.php b/lib/plugins/acl/lang/fr/lang.php
index 63e529aab..36323a51f 100644
--- a/lib/plugins/acl/lang/fr/lang.php
+++ b/lib/plugins/acl/lang/fr/lang.php
@@ -20,6 +20,7 @@
* @author Philippe Bajoit <philippe.bajoit@gmail.com>
* @author Florian Gaub <floriang@floriang.net>
* @author Samuel Dorsaz samuel.dorsaz@novelion.net
+ * @author Johan Guilbaud <guilbaud.johan@gmail.com>
*/
$lang['admin_acl'] = 'Gestion de la liste des contrôles d\'accès (ACL)';
$lang['acl_group'] = 'Groupe';
diff --git a/lib/plugins/config/lang/bg/intro.txt b/lib/plugins/config/lang/bg/intro.txt
index 8723a77a4..fc455981e 100644
--- a/lib/plugins/config/lang/bg/intro.txt
+++ b/lib/plugins/config/lang/bg/intro.txt
@@ -1,7 +1,7 @@
====== Управление на настройките ======
-Използвайте тази страница за да управлявате настройките на вашета Dokuwiki инсталация. За отделните настройки вижте [[doku>config]]. За повече подробности за тази приставка вижте [[doku>plugin:config]].
+От страница можете да управлявате настройките на вашето Dokuwiki. За отделните настройки вижте [[doku>config]]. За повече информация относно тази приставка вижте [[doku>plugin:config]].
-Настройките показани със светло червен фон за защитени и не могат да се променят с тази приставка. Настройките показани със син фон са стандартните стойности и настройките с бял фон са били настроени локално за тази конкретна инсталация. Както сините, така и белите настройки могат да се променят.
+Настройките изобразени със светло червен фон за защитени и не могат да бъдат променяни с тази приставка. Настройките показани със син фон са стандартни стойности, а настройките с бял фон са били настроени локално за тази конкретна инсталация. Можете да променяте както сините, така и белите настройки.
-Не забравяйте да натиснете бутона **ЗАПИС** преди да напуснете страницата, иначе промените ви ще бъдат загубени.
+Не забравяйте да натиснете бутона **ЗАПИС** преди да напуснете страницата, в противен случай промените няма да бъдат приложени.
diff --git a/lib/plugins/config/lang/bg/lang.php b/lib/plugins/config/lang/bg/lang.php
index 855f0b2c2..8b32f182c 100644
--- a/lib/plugins/config/lang/bg/lang.php
+++ b/lib/plugins/config/lang/bg/lang.php
@@ -5,6 +5,7 @@
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
* @author Nikolay Vladimirov <nikolay@vladimiroff.com>
* @author Viktor Usunov <usun0v@mail.bg>
+ * @author Kiril Velikov neohidra@gmail.com
*/
$lang['menu'] = 'Настройки';
$lang['error'] = 'Невъзможно е обновяването на настройките, поради невалидна стойност, моля, прегледайте промените си и пробвайте отново.
@@ -66,7 +67,7 @@ $lang['allowdebug'] = 'Пускане на debug <b>изключет
$lang['usewordblock'] = 'Блокиране на спам базирано на списък от думи';
$lang['indexdelay'] = 'Забавяне преди индексиране(секунди)';
$lang['relnofollow'] = 'Използване на rel="nofollow" за външни връзки';
-$lang['mailguard'] = 'Промяна на адреса на електронната поща във форма непозволяваща пращането на спам';
+$lang['mailguard'] = 'Промяна на адресите на ел. поща (във форма непозволяваща пращането на SPAM)';
$lang['iexssprotect'] = 'Проверяване на качените файлове за възможно зловреден JavaScript и HTML код';
$lang['showuseras'] = 'Какво да се показва на дисплея за потребителя, който последно е променил тази страница';
$lang['useacl'] = 'Използване на списъци за достъп';
@@ -86,65 +87,66 @@ $lang['sneaky_index'] = 'По подразбиране DokuWiki ще п
$lang['auth_security_timeout'] = 'Изчакване при вписване преди Timeout (в секунди)';
$lang['securecookie'] = 'Да се изпращат ли бисквитки, посочени чрез HTTPS, само чрез HTTPS от браузъра? Забранете тази опция, когато SSL се използва само за вписване в системата, а четенето е възможно и без SSL.
';
-$lang['xmlrpc'] = 'Включи/изключи XML-RPC интерфейса';
+$lang['xmlrpc'] = 'Включване/Изключване на XML-RPC интерфейса.';
$lang['xmlrpcuser'] = 'Ограничаване на XML-RPC достъп до дадени тук и отделени със запетая групи или потребители. Оставете празни да даде достъп до всички.';
$lang['updatecheck'] = 'Проверка за нови версии и предупреждения за сигурност? Dokiwiki трябва да може да се свърже със splitbrain.org за тази функционалност.';
$lang['userewrite'] = 'Използване на валидни URL';
-$lang['useslash'] = 'Използване на наклонена черта за разделител на именнипространсвта в URL';
+$lang['useslash'] = 'Ползване на наклонена черта за разделител на именните пространства в URL';
$lang['usedraft'] = 'Автоматично запазване на чернова при редактиране';
$lang['sepchar'] = 'Разделител между думите в имената на страници';
$lang['canonical'] = 'Използване на уеднаквени URL';
+$lang['fnencode'] = 'Метод за кодиране на не-ASCII именуваните файлове.';
$lang['autoplural'] = 'Проверка за множествено число в препратките';
$lang['compression'] = 'Метод за компресия на attic файлове';
$lang['cachetime'] = 'Максимална възраст на кеша (сек)';
-$lang['locktime'] = 'Максимална възраст на заключващите файлове (сек)';
-$lang['fetchsize'] = 'Максимален размер (байтове), който fetch.php може да дърпа';
-$lang['notify'] = 'Пращане на съобщения за промени на тази e-поща';
-$lang['registernotify'] = 'Пращане информация на нови потребители на тази е-поща';
-$lang['mailfrom'] = 'Адрес на е-поща, който да се използва за пращане на автоматичната поща';
-$lang['gzip_output'] = 'Използване gzip Кодиране на съдържанието(Content-Encoding) за xhtml';
+$lang['locktime'] = 'Максимална възраст на заключените файлове (сек)';
+$lang['fetchsize'] = 'Максимален размер (байтове), който fetch.php може да сваля';
+$lang['notify'] = 'Пращане на съобщения за промени на тази eл. поща';
+$lang['registernotify'] = 'Пращане информация за нови потребители на тази ел. поща';
+$lang['mailfrom'] = 'Ел. поща, която да се ползва за автоматично изпращане на ел. писма';
+$lang['gzip_output'] = 'Кодиране на съдържанието с gzip за xhtml';
$lang['gdlib'] = 'Версия на GD Lib';
$lang['im_convert'] = 'Път до инструмента за трансформация на ImageMagick';
$lang['jpg_quality'] = 'Kачество на JPG компресията (0-100)';
-$lang['subscribers'] = 'Поддръжка за абониране към страница';
-$lang['compress'] = 'Компактен CSS и javascript изход';
-$lang['hidepages'] = 'Скриване на съвпадащи имена на страници(regular expressions)';
+$lang['subscribers'] = 'Включване на поддръжката за абониране към страници';
+$lang['compress'] = 'Компактен CSS и javascript изглед';
+$lang['hidepages'] = 'Скриване на съвпадащите страници (regular expressions)';
$lang['send404'] = 'Пращане на "HTTP 404/Page Not Found" за несъществуващи страници';
$lang['sitemap'] = 'Генериране на Google sitemap (дни)';
-$lang['broken_iua'] = 'Отметнете, ако ignore_user_abort функцията не работи, търсенето може да не се извършва правилно.Известно е, че комбинацията IIS+PHP/CGI е лоша. Вижте <a href="http://bugs.splitbrain.org/?do=details&amp;task_id=852">Грешка 852</a> за повече информация.';
-$lang['xsendfile'] = 'Използване на Х-Sendfile header, за позволяване на уеб сървъра да дава статични файлове? Вашият уеб сървър трябва да поддържа това.';
+$lang['broken_iua'] = 'Отметнете, ако ignore_user_abort функцията не работи. Може да попречи на търсенето в страниците. Знае се, че комбинацията IIS+PHP/CGI е лоша. Вижте <a href="http://bugs.splitbrain.org/?do=details&amp;task_id=852">Грешка 852</a> за повече информация.';
+$lang['xsendfile'] = 'Ползване на Х-Sendfile header, за да може уебсървъра да дава статични файлове? Вашият уебсървър трябва да го поддържа.';
$lang['renderer_xhtml'] = 'Показвай main (XHTML) код за wiki';
$lang['renderer__core'] = '%s (DokuWiki ядро)';
$lang['renderer__plugin'] = '%s (приставка)';
-$lang['rememberme'] = 'Остави постоянни бисквитки за вход (запомни ме)';
-$lang['rss_type'] = 'Вид на XML източника (feed)';
+$lang['rememberme'] = 'Ползване на постоянни бисквитки за вписване (запомни ме)';
+$lang['rss_type'] = 'Тип на XML feed';
$lang['rss_linkto'] = 'XML feed препраща към';
$lang['rss_content'] = 'Какво да се показва в XML feed елементите?';
$lang['rss_update'] = 'Интервал на обновяване XML източника (сек)';
$lang['recent_days'] = 'Колко последни промени да се пазят (дни)';
$lang['rss_show_summary'] = 'XML feed show summary in title';
$lang['target____wiki'] = 'Прозорец за вътрешни препратки';
-$lang['target____interwiki'] = 'Прозорец за вътрешни уики препратки';
+$lang['target____interwiki'] = 'Прозорец за вътреуики препратки';
$lang['target____extern'] = 'Прозорец за външни препратки';
-$lang['target____media'] = 'Прозорец за препратки към медия';
-$lang['target____windows'] = 'Прозорец за препратки към прозорци';
+$lang['target____media'] = 'Прозорец за медийни препратки';
+$lang['target____windows'] = 'Прозорец за Windows препратки';
$lang['proxy____host'] = 'Име на прокси сървър';
$lang['proxy____port'] = 'Порт на проксито';
$lang['proxy____user'] = 'Потребител за проксито';
$lang['proxy____pass'] = 'Парола за проксито';
-$lang['proxy____ssl'] = 'Използване на ssl за връзка към проксито';
-$lang['safemodehack'] = 'Позволи safemode хак';
-$lang['ftp____host'] = 'FTP сървър за safemode хака';
-$lang['ftp____port'] = 'FTP порт за safemode хака';
-$lang['ftp____user'] = 'FTP потребител за safemode хака';
-$lang['ftp____pass'] = 'FTP парола за safemode хака';
-$lang['ftp____root'] = 'FTP главна директория safemode хака';
+$lang['proxy____ssl'] = 'Ползване на SSL за връзката с проксито';
+$lang['safemodehack'] = 'Ползване на хака safemode';
+$lang['ftp____host'] = 'FTP сървър за хака safemode';
+$lang['ftp____port'] = 'FTP порт за хака safemode';
+$lang['ftp____user'] = 'FTP потребител за хака safemode';
+$lang['ftp____pass'] = 'FTP парола за хака safemode';
+$lang['ftp____root'] = 'FTP главна директория хака safemode';
$lang['license_o_'] = 'Нищо не е избрано';
$lang['typography_o_0'] = 'без';
$lang['typography_o_1'] = 'с изключение на единични кавички';
-$lang['typography_o_2'] = 'всякаква форма за кавичките (не винаги работи)';
+$lang['typography_o_2'] = 'включително единични кавички (не винаги работи)';
$lang['userewrite_o_0'] = 'без';
-$lang['userewrite_o_1'] = '.htaccess файл';
+$lang['userewrite_o_1'] = '.htaccess файлa';
$lang['userewrite_o_2'] = 'вътрешно от DokuWiki ';
$lang['deaccent_o_0'] = 'изключено';
$lang['deaccent_o_1'] = 'премахване на акценти';
@@ -163,7 +165,7 @@ $lang['rss_content_o_htmldiff'] = 'Diff таблица в HTML формат';
$lang['rss_content_o_html'] = 'Цялото съдържание на HTML страницата';
$lang['rss_linkto_o_diff'] = 'изглед на разликите';
$lang['rss_linkto_o_page'] = 'променената страница';
-$lang['rss_linkto_o_rev'] = 'списък на текущите версии';
+$lang['rss_linkto_o_rev'] = 'списък на версииte';
$lang['rss_linkto_o_current'] = 'текущата страница';
$lang['compression_o_0'] = 'без';
$lang['compression_o_gz'] = 'gzip';
@@ -174,9 +176,9 @@ $lang['xsendfile_o_2'] = 'Стандартен X-Sendfile header';
$lang['xsendfile_o_3'] = 'Специфичен Nginx X-Accel-Redirect header за пренасочване';
$lang['showuseras_o_loginname'] = 'Потребителско име';
$lang['showuseras_o_username'] = 'Пълно потребителско име';
-$lang['showuseras_o_email'] = 'Пълен адрес на електронната поща на потребителя';
-$lang['showuseras_o_email_link'] = 'Адрес на електронната поща на потребителя под формата на mailto: линк';
+$lang['showuseras_o_email'] = 'Адресите на ел, поща на потребителите (променени според настройките на mailguard)';
+$lang['showuseras_o_email_link'] = 'Адресите на ел. поща на потребителите под формата на mailto: връзка';
$lang['useheading_o_0'] = 'Никога';
$lang['useheading_o_navigation'] = 'Само за навигация';
-$lang['useheading_o_content'] = 'Само за Wiki съдържание';
+$lang['useheading_o_content'] = 'Само за съдържанието на Wiki-то';
$lang['useheading_o_1'] = 'Винаги';
diff --git a/lib/plugins/config/lang/el/lang.php b/lib/plugins/config/lang/el/lang.php
index df9029506..ebd676886 100644
--- a/lib/plugins/config/lang/el/lang.php
+++ b/lib/plugins/config/lang/el/lang.php
@@ -108,6 +108,7 @@ $lang['fetchsize'] = 'Μέγιστο μέγεθος (σε bytes) ε
$lang['notify'] = 'Αποστολή ενημέρωσης για αλλαγές σε αυτή την e-mail διεύθυνση';
$lang['registernotify'] = 'Αποστολή ενημερωτικών μηνυμάτων σε αυτή την e-mail διεύθυνση κατά την εγγραφή νέων χρηστών';
$lang['mailfrom'] = 'e-mail διεύθυνση αποστολέα για μηνύματα από την εφαρμογή';
+$lang['mailprefix'] = 'Πρόθεμα θέματος που να χρησιμοποιείται για τα αυτόματα μηνύματα ηλεκτρονικού ταχυδρομείου.';
$lang['gzip_output'] = 'Χρήση gzip Content-Encoding για την xhtml';
$lang['gdlib'] = 'Έκδοση βιβλιοθήκης GD';
$lang['im_convert'] = 'Διαδρομή προς το εργαλείο μετατροπής εικόνων του ImageMagick';
diff --git a/lib/plugins/config/lang/fr/lang.php b/lib/plugins/config/lang/fr/lang.php
index 7f3e39845..99e140af5 100644
--- a/lib/plugins/config/lang/fr/lang.php
+++ b/lib/plugins/config/lang/fr/lang.php
@@ -15,6 +15,7 @@
* @author Philippe Bajoit <philippe.bajoit@gmail.com>
* @author Florian Gaub <floriang@floriang.net>
* @author Samuel Dorsaz samuel.dorsaz@novelion.net
+ * @author Johan Guilbaud <guilbaud.johan@gmail.com>
*/
$lang['menu'] = 'Paramètres de configuration';
$lang['error'] = 'Paramètres non modifiés en raison d\'une valeur non valide, vérifiez vos réglages et réessayez. <br />Les valeurs erronées sont entourées d\'une bordure rouge.';
@@ -111,6 +112,7 @@ $lang['fetchsize'] = 'Taille maximale (en octets) du fichier que fet
$lang['notify'] = 'Notifier les modifications à cette adresse de courriel';
$lang['registernotify'] = 'Envoyer un courriel annonçant les nouveaux utilisateurs enregistrés à cette adresse';
$lang['mailfrom'] = 'Expéditeur des notifications par courriel du wiki';
+$lang['mailprefix'] = 'Préfixe à utiliser dans les objets des courriels automatiques';
$lang['gzip_output'] = 'Utiliser Content-Encoding gzip pour XHTML';
$lang['gdlib'] = 'Version de GD Lib';
$lang['im_convert'] = 'Chemin vers l\'outil de conversion d\'ImageMagick';
diff --git a/lib/plugins/config/lang/pt/lang.php b/lib/plugins/config/lang/pt/lang.php
index 336de5b36..c0ada0a26 100644
--- a/lib/plugins/config/lang/pt/lang.php
+++ b/lib/plugins/config/lang/pt/lang.php
@@ -103,6 +103,7 @@ $lang['fetchsize'] = 'Tamanho máximo (bytes) que o fetch.php pode t
$lang['notify'] = 'Enviar notificações de mudanças para este endereço de email';
$lang['registernotify'] = 'Enviar informações de utilizadores registados para este endereço de email';
$lang['mailfrom'] = 'Endereço de email a ser utilizado para mensagens automáticas';
+$lang['mailprefix'] = 'Prefixo de email a ser utilizado para mensagens automáticas';
$lang['gzip_output'] = 'Usar "Content-Encoding" do gzip para o código xhtml';
$lang['gdlib'] = 'Versão GD Lib';
$lang['im_convert'] = 'Caminho para a ferramenta "convert" do ImageMagick';
diff --git a/lib/plugins/plugin/classes/ap_download.class.php b/lib/plugins/plugin/classes/ap_download.class.php
index beba0ab07..784095aaf 100644
--- a/lib/plugins/plugin/classes/ap_download.class.php
+++ b/lib/plugins/plugin/classes/ap_download.class.php
@@ -1,7 +1,7 @@
<?php
class ap_download extends ap_manage {
- var $overwrite = false;
+ var $overwrite = true;
/**
* Initiate the plugin download
diff --git a/lib/plugins/plugin/classes/ap_manage.class.php b/lib/plugins/plugin/classes/ap_manage.class.php
index 2982a3ebb..fb148f263 100644
--- a/lib/plugins/plugin/classes/ap_manage.class.php
+++ b/lib/plugins/plugin/classes/ap_manage.class.php
@@ -176,7 +176,7 @@ class ap_manage {
function dir_delete($path) {
if (!is_string($path) || $path == "") return false;
- if (is_dir($path)) {
+ if (is_dir($path) && !is_link($path)) {
if (!$dh = @opendir($path)) return false;
while ($f = readdir($dh)) {
diff --git a/lib/plugins/plugin/lang/bg/lang.php b/lib/plugins/plugin/lang/bg/lang.php
index 99e7a2fe4..b4aaae5e4 100644
--- a/lib/plugins/plugin/lang/bg/lang.php
+++ b/lib/plugins/plugin/lang/bg/lang.php
@@ -5,6 +5,7 @@
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
* @author Nikolay Vladimirov <nikolay@vladimiroff.com>
* @author Viktor Usunov <usun0v@mail.bg>
+ * @author Kiril Velikov neohidra@gmail.com
*/
$lang['menu'] = 'Управление на приставките';
$lang['download'] = 'Сваляне и инсталиране на нова приставка';
diff --git a/lib/plugins/plugin/lang/fr/lang.php b/lib/plugins/plugin/lang/fr/lang.php
index 79080f5f3..5daf3b3ad 100644
--- a/lib/plugins/plugin/lang/fr/lang.php
+++ b/lib/plugins/plugin/lang/fr/lang.php
@@ -15,6 +15,7 @@
* @author Philippe Bajoit <philippe.bajoit@gmail.com>
* @author Florian Gaub <floriang@floriang.net>
* @author Samuel Dorsaz samuel.dorsaz@novelion.net
+ * @author Johan Guilbaud <guilbaud.johan@gmail.com>
*/
$lang['menu'] = 'Gestion des modules externes';
$lang['download'] = 'Télécharger et installer un nouveau module';
diff --git a/lib/plugins/popularity/lang/bg/intro.txt b/lib/plugins/popularity/lang/bg/intro.txt
index 06c338585..aa437f32c 100644
--- a/lib/plugins/popularity/lang/bg/intro.txt
+++ b/lib/plugins/popularity/lang/bg/intro.txt
@@ -1,9 +1,9 @@
-====== Обратна връзка за популярност ======
+====== Обратна връзка ======
-Този инструмент събира данни за потребителите на Вашето Wiki и ви позволява да ги изпратите анонимно на DokuWiki. Това ни помага да разберем как DokuWiki се използва от потребителите си и да разработваме бъдещи решения, съответно реалното използване.
+Инструментът събира данни за Вашето Wiki и ви позволява да ги изпратите на разработчиците DokuWiki. Данните ще им помогнат да разберат как DokuWiki се използва от потребителите и че статистиката е в подкрепа на поетата насока за развитие.
-Моля изпозвайте тази опция, за да информирате разработчиците на този продукт. Вашите данни ще бъдат идентифицирани с анонимен номер.
+Моля, ползвайте функцията, от време на време, когато уебстраницата ви се разраства, за да информирате разработчиците. Изпратените данни ще бъдат идентифицирани с анонимен номер.
-Събраните данни съдържат информация за вашата версия на DokuWiki, броя и размера на вашите страници и файлове, инсталирани плъгини и информация за вашата PHP инсталация.
+Събраните данни съдържат информация за версия на DokuWiki, броя и размера на вашите страници и файлове, инсталирани приставки и информация за вашата PHP инсталация.
-Изходните данни са показано по-долу във вида, в който ще бъдат изпратени. Моля ползвайте сьответния бутон, за да изпратите тази информация. \ No newline at end of file
+Данните, които ще бъдат изпратени са изобразени по-долу. Моля, натиснете бутона "Изпращане на данните", за да изпратите информацията. \ No newline at end of file
diff --git a/lib/plugins/popularity/lang/bg/lang.php b/lib/plugins/popularity/lang/bg/lang.php
index adf99a9f5..5c89c3509 100644
--- a/lib/plugins/popularity/lang/bg/lang.php
+++ b/lib/plugins/popularity/lang/bg/lang.php
@@ -3,6 +3,12 @@
* Bulgarian language file
*
* @author Viktor Usunov <usun0v@mail.bg>
+ * @author Kiril Velikov neohidra@gmail.com
*/
-$lang['name'] = 'Обратна връзка за популярност (може да отнеме известно време за зареждане)';
-$lang['submit'] = 'Прати данните';
+$lang['name'] = 'Обратна връзка (зареждането може да отнеме известно време)';
+$lang['submit'] = 'Изпращане на данните';
+$lang['autosubmit'] = 'Автоматично изпращане на данните веднъж в месеца';
+$lang['submissionFailed'] = 'Данните не могат да бъдат изпратени поради следната грешка"';
+$lang['submitDirectly'] = 'Можете да пратите данните ръчно като изпратите следния формуляр.';
+$lang['autosubmitError'] = 'Последното автоматично изпращане не бе осъществено, поради следната грешка:';
+$lang['lastSent'] = 'Данните бяха изпратени';
diff --git a/lib/plugins/popularity/lang/bg/submitted.txt b/lib/plugins/popularity/lang/bg/submitted.txt
new file mode 100644
index 000000000..1e95f6ffd
--- /dev/null
+++ b/lib/plugins/popularity/lang/bg/submitted.txt
@@ -0,0 +1,3 @@
+====== Обратна връзка ======
+
+Данните бяха изпратени успешно. \ No newline at end of file
diff --git a/lib/plugins/popularity/lang/el/lang.php b/lib/plugins/popularity/lang/el/lang.php
index 0d16bbf86..41704fa06 100644
--- a/lib/plugins/popularity/lang/el/lang.php
+++ b/lib/plugins/popularity/lang/el/lang.php
@@ -7,3 +7,8 @@
*/
$lang['name'] = 'Αναφορά Δημοτικότητας (ίσως αργήσει λίγο να εμφανιστεί)';
$lang['submit'] = 'Αποστολή Δεδομένων';
+$lang['autosubmit'] = 'Να αποστέλονται τα δεδομένα αυτόματα μια φορά το μήνα.';
+$lang['submissionFailed'] = 'Τα δεδομένα δεν ήταν δυνατό να αποσταλλούν λόγω του παρακάτω σφάλματος:';
+$lang['submitDirectly'] = 'Μπορείτε να αποστείλλετε τα δεδομένα χειροκίνητα με την υποβολή της παρακάτω φόρμας.';
+$lang['autosubmitError'] = 'Η τελευταία αυτόματη υποβολή των δεδομένων απέτυχε με το παρακάτω μήνυμα σφάλματος:';
+$lang['lastSent'] = 'Τα δεδομένα έχουν σταλεί.';
diff --git a/lib/plugins/popularity/lang/el/submitted.txt b/lib/plugins/popularity/lang/el/submitted.txt
new file mode 100644
index 000000000..8004f9997
--- /dev/null
+++ b/lib/plugins/popularity/lang/el/submitted.txt
@@ -0,0 +1,3 @@
+====== Αποτέλεσμα Υποβολής Δημοσιότητας ======
+
+Τα δεδομένα στάλθηκαν επιτυχώς. \ No newline at end of file
diff --git a/lib/plugins/popularity/lang/fr/lang.php b/lib/plugins/popularity/lang/fr/lang.php
index 1157d1fa6..9aaf3c7d2 100644
--- a/lib/plugins/popularity/lang/fr/lang.php
+++ b/lib/plugins/popularity/lang/fr/lang.php
@@ -12,6 +12,7 @@
* @author Philippe Bajoit <philippe.bajoit@gmail.com>
* @author Florian Gaub <floriang@floriang.net>
* @author Samuel Dorsaz samuel.dorsaz@novelion.net
+ * @author Johan Guilbaud <guilbaud.johan@gmail.com>
*/
$lang['name'] = 'Enquête de popularité (peut nécessiter un certain temps pour être chargée)';
$lang['submit'] = 'Envoyer les données';
diff --git a/lib/plugins/popularity/lang/pt/lang.php b/lib/plugins/popularity/lang/pt/lang.php
index da92ee729..35fac0fc0 100644
--- a/lib/plugins/popularity/lang/pt/lang.php
+++ b/lib/plugins/popularity/lang/pt/lang.php
@@ -8,3 +8,7 @@
*/
$lang['name'] = 'Retorno (feedback) de Popularidade (pode levar algum tempo a carregar)';
$lang['submit'] = 'Enviar Dados';
+$lang['autosubmit'] = 'Enviar dados automáticamente uma vez por mês';
+$lang['submissionFailed'] = 'Os dados não foram enviados devido ao seguinte erro:';
+$lang['submitDirectly'] = 'Pode enviar os dados manualmente, submetendo o seguinte formulário.';
+$lang['lastSent'] = 'Os dados foram enviados';
diff --git a/lib/plugins/popularity/lang/pt/submitted.txt b/lib/plugins/popularity/lang/pt/submitted.txt
new file mode 100644
index 000000000..d2bb2b7ae
--- /dev/null
+++ b/lib/plugins/popularity/lang/pt/submitted.txt
@@ -0,0 +1,3 @@
+====== Retorno de Popularidade ======
+
+Os dados foram enviados com sucesso. \ No newline at end of file
diff --git a/lib/plugins/revert/lang/bg/lang.php b/lib/plugins/revert/lang/bg/lang.php
index 6f0ff0672..05525c535 100644
--- a/lib/plugins/revert/lang/bg/lang.php
+++ b/lib/plugins/revert/lang/bg/lang.php
@@ -3,6 +3,7 @@
* bulgarian language file
* @author Nikolay Vladimirov <nikolay@vladimiroff.com>
* @author Viktor Usunov <usun0v@mail.bg>
+ * @author Kiril Velikov neohidra@gmail.com
*/
$lang['menu'] = 'Възстановяване';
$lang['filter'] = 'Търсене на спамната страници';
diff --git a/lib/plugins/revert/lang/fr/lang.php b/lib/plugins/revert/lang/fr/lang.php
index d80ece209..d6dc3ee3d 100644
--- a/lib/plugins/revert/lang/fr/lang.php
+++ b/lib/plugins/revert/lang/fr/lang.php
@@ -13,6 +13,7 @@
* @author Philippe Bajoit <philippe.bajoit@gmail.com>
* @author Florian Gaub <floriang@floriang.net>
* @author Samuel Dorsaz samuel.dorsaz@novelion.net
+ * @author Johan Guilbaud <guilbaud.johan@gmail.com>
*/
$lang['menu'] = 'Gestionnaire de réversions';
$lang['filter'] = 'Trouver les pages spammées ';
diff --git a/lib/plugins/usermanager/admin.php b/lib/plugins/usermanager/admin.php
index df13f65e3..e40ee9b7e 100644
--- a/lib/plugins/usermanager/admin.php
+++ b/lib/plugins/usermanager/admin.php
@@ -562,16 +562,19 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin {
* @return array(user, password, full name, email, array(groups))
*/
function _retrieveUser($clean=true) {
+ global $auth;
- $user[0] = ($clean) ? cleanID(preg_replace('/.*:/','',$_REQUEST['userid'])) : $_REQUEST['userid'];
+ $user[0] = ($clean) ? $auth->cleanUser($_REQUEST['userid']) : $_REQUEST['userid'];
$user[1] = $_REQUEST['userpass'];
$user[2] = $_REQUEST['username'];
$user[3] = $_REQUEST['usermail'];
- $user[4] = preg_split('/\s*,\s*/',$_REQUEST['usergroups'],-1,PREG_SPLIT_NO_EMPTY);
+ $user[4] = explode(',',$_REQUEST['usergroups']);
- if (empty($user[4]) || (is_array($user[4]) && (count($user[4]) == 1) && (trim($user[4][0]) == ''))) {
- $user[4] = null;
- }
+ $user[4] = array_map('trim',$user[4]);
+ if($clean) $user[4] = array_map(array($auth,'cleanGroup'),$user[4]);
+ $user[4] = array_filter($user[4]);
+ $user[4] = array_unique($user[4]);
+ if(!count($user[4])) $user[4] = null;
return $user;
}
diff --git a/lib/plugins/usermanager/lang/bg/lang.php b/lib/plugins/usermanager/lang/bg/lang.php
index 58c8453f2..b229ce29e 100644
--- a/lib/plugins/usermanager/lang/bg/lang.php
+++ b/lib/plugins/usermanager/lang/bg/lang.php
@@ -4,6 +4,7 @@
*
* @author Nikolay Vladimirov <nikolay@vladimiroff.com>
* @author Viktor Usunov <usun0v@mail.bg>
+ * @author Kiril Velikov neohidra@gmail.com
*/
$lang['menu'] = 'Управление на потребителите';
$lang['noauth'] = '(идентифицирането на потребителите е недостъпно)';
@@ -33,15 +34,15 @@ $lang['delete_fail'] = '%d не бяха изтрити';
$lang['update_ok'] = 'Обновяването на потребителя бе успешно';
$lang['update_fail'] = 'Обновяването на потребителя бе неуспешно';
$lang['update_exists'] = 'Смяната на потребителското име бе невъзможна, оказаното потребителско име (%s) вече съществува (всякакви други промени ще бъдат приложени).';
-$lang['start'] = 'начало';
-$lang['prev'] = 'предишно';
-$lang['next'] = 'следващо';
-$lang['last'] = 'последно';
+$lang['start'] = 'първи';
+$lang['prev'] = 'назад';
+$lang['next'] = 'напред';
+$lang['last'] = 'последен';
$lang['edit_usermissing'] = 'Избраният потребител не бе намерен, оказаното потребителско име може да е изтрито или променено другаде.';
-$lang['user_notify'] = 'Осведомяване на потребителя';
-$lang['note_notify'] = 'Осведомителната e-поща се праща само, ако на потребителя е дадена нова парола.';
-$lang['note_group'] = 'Новите потребители ще бъдат добавяни към групата (%s) ако не бъде посочена друга.';
-$lang['note_pass'] = 'Паролата ще бъде генерирана автоматично, ако полето е оставено празно и функцията за уведомяване на потребителя е включена.';
+$lang['user_notify'] = 'Уведомяване на потребителя';
+$lang['note_notify'] = 'Ел. писмо се изпраща само ако бъде променена паролата на потребителя.';
+$lang['note_group'] = 'Новите потребители биват добавяни към стандартната групата (%s) ако не е посочена друга.';
+$lang['note_pass'] = 'Паролата ще бъде генерирана автоматично, ако оставите полето празно и функцията за уведомяване на потребителя е включена.';
$lang['add_ok'] = 'Добавянето на потребителя бе успешно';
$lang['add_fail'] = 'Добавянето на потребителя бе неуспешно';
$lang['notify_ok'] = 'Осведомително е-писмо бе изпратено';
diff --git a/lib/plugins/usermanager/lang/fr/lang.php b/lib/plugins/usermanager/lang/fr/lang.php
index 92bc127ed..49baf9d51 100644
--- a/lib/plugins/usermanager/lang/fr/lang.php
+++ b/lib/plugins/usermanager/lang/fr/lang.php
@@ -14,6 +14,7 @@
* @author Philippe Bajoit <philippe.bajoit@gmail.com>
* @author Florian Gaub <floriang@floriang.net>
* @author Samuel Dorsaz samuel.dorsaz@novelion.net
+ * @author Johan Guilbaud <guilbaud.johan@gmail.com>
*/
$lang['menu'] = 'Gestion des utilisateurs';
$lang['noauth'] = '(authentification utilisateur non disponible)';
diff --git a/lib/scripts/edit.js b/lib/scripts/edit.js
index 01262bcef..45c1fb111 100644
--- a/lib/scripts/edit.js
+++ b/lib/scripts/edit.js
@@ -268,6 +268,7 @@ var textChanged = false;
*/
function deleteDraft() {
if (is_opera) return;
+ if (window.keepDraft) return;
// remove a possibly saved draft using ajax
var dwform = $('dw__editform');
@@ -318,8 +319,13 @@ addInitEvent(function (){
window.onunload = deleteDraft;
// reset change memory var on submit
- addEvent($('edbtn__save'), 'click', function(){ textChanged = false; });
- addEvent($('edbtn__preview'), 'click', function(){ textChanged = false; });
+ addEvent($('edbtn__save'), 'click', function(){
+ textChanged = false;
+ });
+ addEvent($('edbtn__preview'), 'click', function(){
+ textChanged = false;
+ window.keepDraft = true; // needed to keep draft on page unload
+ });
var summary = $('edit__summary');
addEvent(summary, 'change', summaryCheck);
@@ -341,104 +347,3 @@ function summaryCheck(){
}
}
-
-/**
- * Class managing the timer to display a warning on a expiring lock
- */
-function locktimer_class(){
- this.sack = null;
- this.timeout = 0;
- this.timerID = null;
- this.lasttime = null;
- this.msg = '';
- this.pageid = '';
-};
-var locktimer = new locktimer_class();
- locktimer.init = function(timeout,msg,draft){
- // init values
- locktimer.timeout = timeout*1000;
- locktimer.msg = msg;
- locktimer.draft = draft;
- locktimer.lasttime = new Date();
-
- if(!$('dw__editform')) return;
- locktimer.pageid = $('dw__editform').elements.id.value;
- if(!locktimer.pageid) return;
-
- // init ajax component
- locktimer.sack = new sack(DOKU_BASE + 'lib/exe/ajax.php');
- locktimer.sack.AjaxFailedAlert = '';
- locktimer.sack.encodeURIString = false;
- locktimer.sack.onCompletion = locktimer.refreshed;
-
- // register refresh event
- addEvent($('dw__editform'),'keypress',function(){locktimer.refresh();});
- // start timer
- locktimer.reset();
- };
-
- /**
- * (Re)start the warning timer
- */
- locktimer.reset = function(){
- locktimer.clear();
- locktimer.timerID = window.setTimeout("locktimer.warning()", locktimer.timeout);
- };
-
- /**
- * Display the warning about the expiring lock
- */
- locktimer.warning = function(){
- locktimer.clear();
- alert(locktimer.msg);
- };
-
- /**
- * Remove the current warning timer
- */
- locktimer.clear = function(){
- if(locktimer.timerID !== null){
- window.clearTimeout(locktimer.timerID);
- locktimer.timerID = null;
- }
- };
-
- /**
- * Refresh the lock via AJAX
- *
- * Called on keypresses in the edit area
- */
- locktimer.refresh = function(){
- var now = new Date();
- // refresh every minute only
- if(now.getTime() - locktimer.lasttime.getTime() > 30*1000){ //FIXME decide on time
- var params = 'call=lock&id='+encodeURIComponent(locktimer.pageid);
- var dwform = $('dw__editform');
- if(locktimer.draft && dwform.elements.wikitext){
- params += '&prefix='+encodeURIComponent(dwform.elements.prefix.value);
- params += '&wikitext='+encodeURIComponent(dwform.elements.wikitext.value);
- params += '&suffix='+encodeURIComponent(dwform.elements.suffix.value);
- if(dwform.elements.date){
- params += '&date='+encodeURIComponent(dwform.elements.date.value);
- }
- }
- locktimer.sack.runAJAX(params);
- locktimer.lasttime = now;
- }
- };
-
-
- /**
- * Callback. Resets the warning timer
- */
- locktimer.refreshed = function(){
- var data = this.response;
- var error = data.charAt(0);
- data = data.substring(1);
-
- $('draft__status').innerHTML=data;
- if(error != '1') return; // locking failed
- locktimer.reset();
- };
-// end of locktimer class functions
-
diff --git a/lib/scripts/locktimer.js b/lib/scripts/locktimer.js
new file mode 100644
index 000000000..51d533056
--- /dev/null
+++ b/lib/scripts/locktimer.js
@@ -0,0 +1,99 @@
+/**
+ * Class managing the timer to display a warning on a expiring lock
+ */
+var locktimer = {
+ sack: null,
+ timeout: 0,
+ timerID: null,
+ lasttime: null,
+ msg: '',
+ pageid: '',
+
+ init: function(timeout,msg,draft){
+ // init values
+ locktimer.timeout = timeout*1000;
+ locktimer.msg = msg;
+ locktimer.draft = draft;
+ locktimer.lasttime = new Date();
+
+ if(!$('dw__editform')) return;
+ locktimer.pageid = $('dw__editform').elements.id.value;
+ if(!locktimer.pageid) return;
+ if($('wiki__text').readOnly) return;
+
+ // init ajax component
+ locktimer.sack = new sack(DOKU_BASE + 'lib/exe/ajax.php');
+ locktimer.sack.AjaxFailedAlert = '';
+ locktimer.sack.encodeURIString = false;
+ locktimer.sack.onCompletion = locktimer.refreshed;
+
+ // register refresh event
+ addEvent($('dw__editform'),'keypress',function(){locktimer.refresh();});
+ // start timer
+ locktimer.reset();
+ },
+
+ /**
+ * (Re)start the warning timer
+ */
+ reset: function(){
+ locktimer.clear();
+ locktimer.timerID = window.setTimeout("locktimer.warning()", locktimer.timeout);
+ },
+
+ /**
+ * Display the warning about the expiring lock
+ */
+ warning: function(){
+ locktimer.clear();
+ alert(locktimer.msg);
+ },
+
+ /**
+ * Remove the current warning timer
+ */
+ clear: function(){
+ if(locktimer.timerID !== null){
+ window.clearTimeout(locktimer.timerID);
+ locktimer.timerID = null;
+ }
+ },
+
+ /**
+ * Refresh the lock via AJAX
+ *
+ * Called on keypresses in the edit area
+ */
+ refresh: function(){
+ var now = new Date();
+ // refresh every minute only
+ if(now.getTime() - locktimer.lasttime.getTime() > 30*1000){
+ var params = 'call=lock&id='+encodeURIComponent(locktimer.pageid);
+ var dwform = $('dw__editform');
+ if(locktimer.draft && dwform.elements.wikitext){
+ params += '&prefix='+encodeURIComponent(dwform.elements.prefix.value);
+ params += '&wikitext='+encodeURIComponent(dwform.elements.wikitext.value);
+ params += '&suffix='+encodeURIComponent(dwform.elements.suffix.value);
+ if(dwform.elements.date){
+ params += '&date='+encodeURIComponent(dwform.elements.date.value);
+ }
+ }
+ locktimer.sack.runAJAX(params);
+ locktimer.lasttime = now;
+ }
+ },
+
+ /**
+ * Callback. Resets the warning timer
+ */
+ refreshed: function(){
+ var data = this.response;
+ var error = data.charAt(0);
+ data = data.substring(1);
+
+ $('draft__status').innerHTML=data;
+ if(error != '1') return; // locking failed
+ locktimer.reset();
+ },
+};
+
diff --git a/lib/scripts/script.js b/lib/scripts/script.js
index c79c9b683..b9b324f96 100644
--- a/lib/scripts/script.js
+++ b/lib/scripts/script.js
@@ -460,19 +460,29 @@ addInitEvent(function(){
});
/**
- * Add the event handler to the actiondropdown
+ * Autosubmit quick select forms
+ *
+ * When a <select> tag has the class "quickselect", this script will
+ * automatically submit its parent form when the select value changes.
+ * It also hides the submit button of the form.
*
* @author Andreas Gohr <andi@splitbrain.org>
*/
addInitEvent(function(){
- var selector = $('action__selector');
- if(!selector) return;
-
- addEvent(selector,'change',function(e){
- this.form.submit();
- });
-
- $('action__selectorbtn').style.display = 'none';
+ var selects = getElementsByClass('quickselect',document,'select');
+ for(var i=0; i<selects.length; i++){
+ // auto submit on change
+ addEvent(selects[i],'change',function(e){
+ this.form.submit();
+ });
+ // hide submit buttons
+ var btns = selects[i].form.getElementsByTagName('input');
+ for(var j=0; j<btns.length; j++){
+ if(btns[j].type == 'submit'){
+ btns[j].style.display = 'none';
+ }
+ }
+ }
});
/**
diff --git a/lib/tpl/default/design.css b/lib/tpl/default/design.css
index 09a9ecf01..1fdf2bfac 100644
--- a/lib/tpl/default/design.css
+++ b/lib/tpl/default/design.css
@@ -85,8 +85,10 @@ div.dokuwiki fieldset {
}
div.dokuwiki textarea.edit {
- font-family: monospace;
- font-size: 14px;
+ font-family: monospace, serif;
+ /* second generic font fixes problem with font-size, see
+ http://meyerweb.com/eric/thoughts/2010/02/12/fixed-monospace-sizing/ */
+ font-size: 100%;
color: __text__;
background-color: __background__;
border: 1px solid __border__;
@@ -464,9 +466,14 @@ div.dokuwiki blockquote {
padding-left: 3px;
}
+div.dokuwiki pre,
+div.dokuwiki code {
+ font-family: monospace, serif;
+ /* second generic font fixes problem with font-size, see
+ http://meyerweb.com/eric/thoughts/2010/02/12/fixed-monospace-sizing/ */
+ font-size: 100%;
+}
div.dokuwiki pre {
- font-family: monospace;
- font-size: 120%;
padding: 0.5em;
border: 1px dashed __border__;
color: __text__;
@@ -519,11 +526,6 @@ div.dokuwiki dl.file dt {
}
-/* inline code words */
-div.dokuwiki code {
- font-size: 120%;
-}
-
/* inline tables */
div.dokuwiki table.inline {
background-color: __background__;
@@ -652,10 +654,12 @@ div.dokuwiki table.diff td {
font-family: monospace;
font-size: 100%;
}
-div.dokuwiki td.diff-addedline {
+div.dokuwiki td.diff-addedline,
+div.dokuwiki span.diff-addedline {
background-color: #ddffdd;
}
-div.dokuwiki td.diff-deletedline {
+div.dokuwiki td.diff-deletedline,
+div.dokuwiki span.diff-deletedline {
background-color: #ffffbb;
}
div.dokuwiki td.diff-context {