summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--_test/bootstrap.php7
-rw-r--r--_test/conf/acl.auth.php6
-rw-r--r--_test/core/DokuWikiTest.php20
-rw-r--r--_test/core/TestRequest.php78
-rw-r--r--_test/tests/conf/title.test.php19
-rw-r--r--_test/tests/inc/auth_aclcheck.test.php27
-rw-r--r--_test/tests/inc/common_cleanText.test.php6
-rw-r--r--_test/tests/inc/events_nested.test.php36
-rw-r--r--_test/tests/inc/httpclient_http.test.php15
-rw-r--r--_test/tests/inc/input.test.php12
-rw-r--r--_test/tests/inc/pageutils_findnearest.test.php40
-rw-r--r--_test/tests/inc/template_sidebar.test.php40
-rw-r--r--_test/tests/lib/exe/js_js_compress.test.php6
-rw-r--r--_test/tests/test/basic.test.php83
-rw-r--r--feed.php4
-rw-r--r--inc/DifferenceEngine.php10
-rw-r--r--inc/HTTPClient.php466
-rw-r--r--inc/Input.class.php5
-rw-r--r--inc/JpegMeta.php2
-rw-r--r--inc/Mailer.class.php4
-rw-r--r--inc/PassHash.class.php2
-rw-r--r--inc/auth.php29
-rw-r--r--inc/config_cascade.php2
-rw-r--r--inc/html.php60
-rw-r--r--inc/lang/bg/lang.php8
-rw-r--r--inc/lang/bg/mailtext.txt2
-rw-r--r--inc/lang/bg/mailwrap.html13
-rw-r--r--inc/lang/de-informal/lang.php21
-rw-r--r--inc/lang/de-informal/mailwrap.html13
-rw-r--r--inc/lang/de-informal/resetpwd.txt4
-rw-r--r--inc/lang/de/lang.php1
-rw-r--r--inc/lang/de/mailwrap.html13
-rw-r--r--inc/lang/ru/lang.php4
-rw-r--r--inc/lang/ru/resetpwd.txt3
-rw-r--r--inc/media.php4
-rw-r--r--inc/pageutils.php24
-rw-r--r--inc/parser/xhtml.php22
-rw-r--r--inc/template.php28
-rw-r--r--install.php2
-rw-r--r--lib/exe/css.php124
-rw-r--r--lib/images/interwiki/amazon.de.gifbin110 -> 132 bytes
-rw-r--r--lib/images/interwiki/amazon.gifbin110 -> 132 bytes
-rw-r--r--lib/images/interwiki/amazon.uk.gifbin110 -> 132 bytes
-rw-r--r--lib/images/interwiki/callto.gifbin178 -> 177 bytes
-rw-r--r--lib/images/interwiki/paypal.gifbin171 -> 138 bytes
-rw-r--r--lib/images/interwiki/skype.gifbin0 -> 157 bytes
-rw-r--r--lib/images/interwiki/skype.pngbin675 -> 0 bytes
-rw-r--r--lib/plugins/acl/admin.php12
-rw-r--r--lib/plugins/acl/lang/bg/lang.php6
-rw-r--r--lib/plugins/acl/lang/de-informal/lang.php4
-rw-r--r--lib/plugins/config/admin.php1
-rw-r--r--lib/plugins/config/lang/bg/lang.php367
-rw-r--r--lib/plugins/config/lang/de-informal/intro.txt2
-rw-r--r--lib/plugins/config/lang/de-informal/lang.php11
-rw-r--r--lib/plugins/config/lang/de/intro.txt2
-rw-r--r--lib/plugins/config/lang/de/lang.php11
-rw-r--r--lib/plugins/config/lang/no/lang.php4
-rw-r--r--lib/plugins/config/lang/ru/lang.php100
-rw-r--r--lib/plugins/config/settings/config.class.php4
-rw-r--r--lib/plugins/revert/admin.php2
-rw-r--r--lib/plugins/usermanager/admin.php2
-rw-r--r--lib/plugins/usermanager/lang/de-informal/lang.php12
-rw-r--r--lib/plugins/usermanager/lang/de/lang.php6
-rw-r--r--lib/scripts/page.js84
-rw-r--r--lib/tpl/default/_mediamanager.css6
-rw-r--r--lib/tpl/default/design.css56
-rw-r--r--lib/tpl/default/main.php4
-rw-r--r--lib/tpl/default/print.css4
-rw-r--r--lib/tpl/default/rtl.css18
-rw-r--r--lib/tpl/dokuwiki/css/_admin.css12
-rw-r--r--lib/tpl/dokuwiki/css/_edit.css40
-rw-r--r--lib/tpl/dokuwiki/css/_forms.css9
-rw-r--r--lib/tpl/dokuwiki/css/_imgdetail.css8
-rw-r--r--lib/tpl/dokuwiki/css/_links.css14
-rw-r--r--lib/tpl/dokuwiki/css/_media_popup.css64
-rw-r--r--lib/tpl/dokuwiki/css/_modal.css11
-rw-r--r--lib/tpl/dokuwiki/css/_recent.css44
-rw-r--r--lib/tpl/dokuwiki/css/_search.css28
-rw-r--r--lib/tpl/dokuwiki/css/_toc.css40
-rw-r--r--lib/tpl/dokuwiki/css/basic.css47
-rw-r--r--lib/tpl/dokuwiki/css/content.css16
-rw-r--r--lib/tpl/dokuwiki/css/design.css168
-rw-r--r--lib/tpl/dokuwiki/css/mobile.css96
-rw-r--r--lib/tpl/dokuwiki/css/pagetools.css121
-rw-r--r--lib/tpl/dokuwiki/css/print.css3
-rw-r--r--lib/tpl/dokuwiki/css/rtl.css593
-rw-r--r--lib/tpl/dokuwiki/css/structure.css27
-rw-r--r--lib/tpl/dokuwiki/detail.php10
-rw-r--r--lib/tpl/dokuwiki/images/apple-touch-icon.pngbin17728 -> 6399 bytes
-rw-r--r--lib/tpl/dokuwiki/images/bullet.pngbin199 -> 112 bytes
-rw-r--r--lib/tpl/dokuwiki/images/button-dw.pngbin404 -> 398 bytes
-rw-r--r--lib/tpl/dokuwiki/images/button-rss.pngbin191 -> 180 bytes
-rw-r--r--lib/tpl/dokuwiki/images/closed-rtl.pngbin170 -> 118 bytes
-rw-r--r--lib/tpl/dokuwiki/images/closed.pngbin165 -> 119 bytes
-rw-r--r--lib/tpl/dokuwiki/images/email.pngbin630 -> 659 bytes
-rw-r--r--lib/tpl/dokuwiki/images/external-link.pngbin947 -> 816 bytes
-rw-r--r--lib/tpl/dokuwiki/images/logo.pngbin12212 -> 3820 bytes
-rw-r--r--lib/tpl/dokuwiki/images/open.pngbin174 -> 118 bytes
-rw-r--r--lib/tpl/dokuwiki/images/page-gradient.pngbin0 -> 280 bytes
-rw-r--r--lib/tpl/dokuwiki/images/pagetools-sprite.pngbin8178 -> 5931 bytes
-rw-r--r--lib/tpl/dokuwiki/images/resizecol.pngbin225 -> 158 bytes
-rw-r--r--lib/tpl/dokuwiki/images/search.pngbin400 -> 316 bytes
-rw-r--r--lib/tpl/dokuwiki/images/sitetools.pngbin3186 -> 0 bytes
-rw-r--r--lib/tpl/dokuwiki/images/toc-arrows.pngbin322 -> 225 bytes
-rw-r--r--lib/tpl/dokuwiki/images/toc-bullet.pngbin211 -> 121 bytes
-rw-r--r--lib/tpl/dokuwiki/images/unc.pngbin553 -> 553 bytes
-rw-r--r--lib/tpl/dokuwiki/images/usertools.pngbin0 -> 1541 bytes
-rw-r--r--lib/tpl/dokuwiki/main.php24
-rw-r--r--lib/tpl/dokuwiki/mediamanager.php7
-rw-r--r--lib/tpl/dokuwiki/script.js75
-rw-r--r--lib/tpl/dokuwiki/style.ini5
-rw-r--r--lib/tpl/dokuwiki/tpl_header.php3
-rw-r--r--lib/tpl/index.php2
113 files changed, 2017 insertions, 1433 deletions
diff --git a/_test/bootstrap.php b/_test/bootstrap.php
index 6c3d6aaa8..58ad6a0d7 100644
--- a/_test/bootstrap.php
+++ b/_test/bootstrap.php
@@ -82,7 +82,12 @@ if (getenv('PRESERVE_TMP') != 'true') {
// populate default dirs
TestUtils::rcopy(TMP_DIR, DOKU_INC.'/conf');
TestUtils::rcopy(TMP_DIR, dirname(__FILE__).'/conf');
-TestUtils::rcopy(TMP_DIR, dirname(__FILE__).'/data');
+mkdir(DOKU_TMP_DATA);
+foreach(array(
+ 'attic', 'cache', 'index', 'locks', 'media',
+ 'media_attic', 'media_meta', 'meta', 'pages', 'tmp') as $dir){
+ mkdir(DOKU_TMP_DATA.'/'.$dir);
+}
// disable all non-default plugins by default
$dh = dir(DOKU_INC.'lib/plugins/');
diff --git a/_test/conf/acl.auth.php b/_test/conf/acl.auth.php
index 14344d778..8a1b01f23 100644
--- a/_test/conf/acl.auth.php
+++ b/_test/conf/acl.auth.php
@@ -19,3 +19,9 @@
# delete 16
* @ALL 8
+
+# for testing wildcards:
+users:* @ALL 1
+users:%USER%:* %USER% 16
+groups:* @ALL 1
+groups:%GROUP%:* %GROUP% 16
diff --git a/_test/core/DokuWikiTest.php b/_test/core/DokuWikiTest.php
index e47c06329..e51f1eeb1 100644
--- a/_test/core/DokuWikiTest.php
+++ b/_test/core/DokuWikiTest.php
@@ -19,6 +19,25 @@ abstract class DokuWikiTest extends PHPUnit_Framework_TestCase {
protected $pluginsDisabled = array();
/**
+ * Setup the data directory
+ *
+ * This is ran before each test class
+ */
+ public static function setUpBeforeClass() {
+ // just to be safe not to delete something undefined later
+ if(!defined('TMP_DIR')) die('no temporary directory');
+ if(!defined('DOKU_TMP_DATA')) die('no temporary data directory');
+
+ // remove any leftovers from the last run
+ if(is_dir(DOKU_TMP_DATA)){
+ TestUtils::rdelete(DOKU_TMP_DATA);
+ }
+
+ // populate default dirs
+ TestUtils::rcopy(TMP_DIR, dirname(__FILE__).'/../data/');
+ }
+
+ /**
* Reset the DokuWiki environment before each test run. Makes sure loaded config,
* language and plugins are correct.
*
@@ -26,6 +45,7 @@ abstract class DokuWikiTest extends PHPUnit_Framework_TestCase {
* @return void
*/
public function setUp() {
+
// reload config
global $conf, $config_cascade;
$conf = array();
diff --git a/_test/core/TestRequest.php b/_test/core/TestRequest.php
index 9047f7e88..172821576 100644
--- a/_test/core/TestRequest.php
+++ b/_test/core/TestRequest.php
@@ -36,9 +36,10 @@ class TestRequest {
/**
* Executes the request
*
+ * @param string $url end URL to simulate, needs to start with /doku.php currently
* @return TestResponse the resulting output of the request
*/
- public function execute() {
+ public function execute($uri='/doku.php') {
// save old environment
$server = $_SERVER;
$session = $_SESSION;
@@ -46,6 +47,14 @@ class TestRequest {
$post = $_POST;
$request = $_REQUEST;
+ // prepare the right URI
+ $this->setUri($uri);
+
+ // import all defined globals into the function scope
+ foreach(array_keys($GLOBALS) as $glb){
+ global $$glb;
+ }
+
// fake environment
global $default_server_vars;
$_SERVER = array_merge($default_server_vars, $this->server);
@@ -58,9 +67,6 @@ class TestRequest {
global $output_buffer;
$output_buffer = '';
- // make globals available as were in a function context here FIXME: any others needed?
- global $INPUT;
-
// now execute dokuwiki and grep the output
header_remove();
ob_start('ob_start_callback');
@@ -82,4 +88,68 @@ class TestRequest {
return $response;
}
+
+ /**
+ * Set the virtual URI the request works against
+ *
+ * This parses the given URI and sets any contained GET variables
+ * but will not overwrite any previously set ones (eg. set via setGet()).
+ *
+ * It initializes the $_SERVER['REQUEST_URI'] and $_SERVER['QUERY_STRING']
+ * with all set GET variables.
+ *
+ * @param string $url end URL to simulate, needs to start with /doku.php currently
+ * @todo make this work with other end points
+ */
+ protected function setUri($uri){
+ if(substr($uri,0,9) != '/doku.php'){
+ throw new Exception("only '/doku.php' is supported currently");
+ }
+
+ $params = array();
+ list($uri, $query) = explode('?',$uri,2);
+ if($query) parse_str($query, $params);
+
+ $this->get = array_merge($params, $this->get);
+ if(count($this->get)){
+ $query = '?'.http_build_query($this->get, '', '&');
+ $query = str_replace(
+ array('%3A', '%5B', '%5D'),
+ array(':', '[', ']'),
+ $query
+ );
+ $uri = $uri.$query;
+ }
+
+ $this->setServer('QUERY_STRING', $query);
+ $this->setServer('REQUEST_URI', $uri);
+ }
+
+ /**
+ * Simulate a POST request with the given variables
+ *
+ * @param array $post all the POST parameters to use
+ * @param string $url end URL to simulate, needs to start with /doku.php currently
+ * @param return TestResponse
+ */
+ public function post($post=array(), $uri='/doku.php') {
+ $this->post = array_merge($this->post, $post);
+ $this->setServer('REQUEST_METHOD', 'POST');
+ return $this->execute($uri);
+ }
+
+ /**
+ * Simulate a GET request with the given variables
+ *
+ * @param array $GET all the POST parameters to use
+ * @param string $url end URL to simulate, needs to start with /doku.php currently
+ * @param return TestResponse
+ */
+ public function get($get=array(), $uri='/doku.php') {
+ $this->get = array_merge($this->get, $get);
+ $this->setServer('REQUEST_METHOD', 'GET');
+ return $this->execute($uri);
+ }
+
+
}
diff --git a/_test/tests/conf/title.test.php b/_test/tests/conf/title.test.php
new file mode 100644
index 000000000..7cae040e7
--- /dev/null
+++ b/_test/tests/conf/title.test.php
@@ -0,0 +1,19 @@
+<?php
+
+class conf_title_test extends DokuWikiTest {
+
+ function testTitle() {
+ global $conf;
+
+ $request = new TestRequest();
+ $response = $request->get();
+ $content = $response->queryHTML('title');
+ $this->assertTrue(strpos($content,$conf['title']) > 0);
+
+ $conf['title'] = 'Foo';
+ $request = new TestRequest();
+ $response = $request->get();
+ $content = $response->queryHTML('title');
+ $this->assertTrue(strpos($content,'Foo') > 0);
+ }
+}
diff --git a/_test/tests/inc/auth_aclcheck.test.php b/_test/tests/inc/auth_aclcheck.test.php
index ea48ec6a5..991f82da7 100644
--- a/_test/tests/inc/auth_aclcheck.test.php
+++ b/_test/tests/inc/auth_aclcheck.test.php
@@ -235,6 +235,33 @@ class auth_acl_test extends DokuWikiTest {
$this->assertEquals(auth_aclcheck('namespace:*', 'jill',array('foo','roots')), AUTH_ADMIN);
}
+ function test_wildcards(){
+ global $conf;
+ global $AUTH_ACL;
+ global $USERINFO;
+ $conf['useacl'] = 1;
+
+ $_SERVER['REMOTE_USER'] = 'john';
+ $USERINFO['grps'] = array('test','töst','foo bar');
+ $AUTH_ACL = auth_loadACL(); // default test file
+
+ // default setting
+ $this->assertEquals(AUTH_UPLOAD, auth_aclcheck('page', $_SERVER['REMOTE_USER'], $USERINFO['grps']));
+
+ // user namespace
+ $this->assertEquals(AUTH_DELETE, auth_aclcheck('users:john:foo', $_SERVER['REMOTE_USER'], $USERINFO['grps']));
+ $this->assertEquals(AUTH_READ, auth_aclcheck('users:john:foo', 'schmock', array()));
+
+ // group namespace
+ $this->assertEquals(AUTH_DELETE, auth_aclcheck('groups:test:foo', $_SERVER['REMOTE_USER'], $USERINFO['grps']));
+ $this->assertEquals(AUTH_READ, auth_aclcheck('groups:test:foo', 'schmock', array()));
+ $this->assertEquals(AUTH_DELETE, auth_aclcheck('groups:toest:foo', $_SERVER['REMOTE_USER'], $USERINFO['grps']));
+ $this->assertEquals(AUTH_READ, auth_aclcheck('groups:toest:foo', 'schmock', array()));
+ $this->assertEquals(AUTH_DELETE, auth_aclcheck('groups:foo_bar:foo', $_SERVER['REMOTE_USER'], $USERINFO['grps']));
+ $this->assertEquals(AUTH_READ, auth_aclcheck('groups:foo_bar:foo', 'schmock', array()));
+
+ }
+
}
//Setup VIM: ex: et ts=4 :
diff --git a/_test/tests/inc/common_cleanText.test.php b/_test/tests/inc/common_cleanText.test.php
index 00e70d4c7..9d4494332 100644
--- a/_test/tests/inc/common_cleanText.test.php
+++ b/_test/tests/inc/common_cleanText.test.php
@@ -3,11 +3,7 @@
class common_cleanText_test extends DokuWikiTest {
function test_unix(){
- $unix = 'one
- two
-
- three';
-
+ $unix = "one\n two\n\n three";
$this->assertEquals($unix,cleanText($unix));
}
diff --git a/_test/tests/inc/events_nested.test.php b/_test/tests/inc/events_nested.test.php
new file mode 100644
index 000000000..fe5e395bb
--- /dev/null
+++ b/_test/tests/inc/events_nested.test.php
@@ -0,0 +1,36 @@
+<?php
+
+/**
+ * This tests if event handlers can trigger the same event again.
+ * This is used by plugins that modify cache handling and use metadata
+ * for checking cache validity which triggers another cache use event.
+ */
+class events_nested_test extends DokuWikiTest {
+ function test_nested_events() {
+ global $EVENT_HANDLER;
+ $firstcount = 0;
+ $secondcount = 0;
+
+ $EVENT_HANDLER->register_hook('NESTED_EVENT', 'BEFORE', null,
+ function() use (&$firstcount) {
+ $firstcount++;
+ if ($firstcount == 1) {
+ $param = array();
+ trigger_event('NESTED_EVENT', $param);
+ }
+ }
+ );
+
+ $EVENT_HANDLER->register_hook('NESTED_EVENT', 'BEFORE', null,
+ function() use (&$secondcount) {
+ $secondcount++;
+ }
+ );
+
+ $param = array();
+ trigger_event('NESTED_EVENT', $param);
+
+ $this->assertEquals(2, $firstcount);
+ $this->assertEquals(2, $secondcount);
+ }
+}
diff --git a/_test/tests/inc/httpclient_http.test.php b/_test/tests/inc/httpclient_http.test.php
index 9cae3736a..9959a1f06 100644
--- a/_test/tests/inc/httpclient_http.test.php
+++ b/_test/tests/inc/httpclient_http.test.php
@@ -124,6 +124,11 @@ class httpclient_http_test extends DokuWikiTest {
$http->max_bodysize = 250;
$data = $http->get($this->server.'/stream/30');
$this->assertTrue($data === false, 'HTTP response');
+ $http->max_bodysize_abort = false;
+ $data = $http->get($this->server.'/stream/30');
+ $this->assertFalse($data === false, 'HTTP response');
+ /* should read no more than max_bodysize+1 */
+ $this->assertLessThanOrEqual(251,strlen($data));
}
/**
@@ -176,5 +181,15 @@ class httpclient_http_test extends DokuWikiTest {
$this->assertArrayHasKey('foo',$http->resp_headers);
$this->assertEquals('bar',$http->resp_headers['foo']);
}
+
+ /**
+ * @group internet
+ */
+ function test_chunked(){
+ $http = new HTTPClient();
+ $data = $http->get('http://whoopdedo.org/cgi-bin/chunked/2550');
+ $this->assertFalse($data === false, 'HTTP response');
+ $this->assertEquals(2550,strlen($data));
+ }
}
//Setup VIM: ex: et ts=4 :
diff --git a/_test/tests/inc/input.test.php b/_test/tests/inc/input.test.php
index 627af3a2b..761b7ddbc 100644
--- a/_test/tests/inc/input.test.php
+++ b/_test/tests/inc/input.test.php
@@ -95,6 +95,11 @@ class input_test extends DokuWikiTest {
$this->assertSame(1, $INPUT->get->int('get', false));
$this->assertSame(0, $INPUT->int('array'));
+
+ $this->assertSame(0, $INPUT->int('zero', -1));
+ $this->assertSame(-1, $INPUT->int('empty', -1));
+ $this->assertSame(-1, $INPUT->int('zero', -1, true));
+ $this->assertSame(-1, $INPUT->int('empty', -1, true));
}
public function test_arr() {
@@ -155,6 +160,11 @@ class input_test extends DokuWikiTest {
$this->assertSame(false, $INPUT->post->bool('get'));
$this->assertSame(true, $INPUT->post->bool('post'));
+
+ $this->assertSame(false, $INPUT->bool('zero', -1));
+ $this->assertSame(-1, $INPUT->bool('empty', -1));
+ $this->assertSame(-1, $INPUT->bool('zero', -1, true));
+ $this->assertSame(-1, $INPUT->bool('empty', -1, true));
}
public function test_remove() {
@@ -203,4 +213,4 @@ class input_test extends DokuWikiTest {
$this->assertEquals('bla',$test);
}
-} \ No newline at end of file
+}
diff --git a/_test/tests/inc/pageutils_findnearest.test.php b/_test/tests/inc/pageutils_findnearest.test.php
new file mode 100644
index 000000000..e129b5e58
--- /dev/null
+++ b/_test/tests/inc/pageutils_findnearest.test.php
@@ -0,0 +1,40 @@
+<?php
+
+class pageutils_findnearest_test extends DokuWikiTest {
+ function testNoSidebar() {
+ global $ID;
+
+ $ID = 'foo:bar:baz:test';
+ $sidebar = page_findnearest('sidebar');
+ $this->assertEquals(false, $sidebar);
+ }
+
+ function testExistingSidebars() {
+ global $ID;
+
+ saveWikiText('sidebar', 'topsidebar-test', '');
+
+ $ID = 'foo:bar:baz:test';
+ $sidebar = page_findnearest('sidebar');
+ $this->assertEquals('sidebar', $sidebar);
+
+ $ID = 'foo';
+ $sidebar = page_findnearest('sidebar');
+ $this->assertEquals('sidebar', $sidebar);
+
+ saveWikiText('foo:bar:sidebar', 'bottomsidebar-test', '');
+
+ $ID = 'foo:bar:baz:test';
+ $sidebar = page_findnearest('sidebar');
+ $this->assertEquals('foo:bar:sidebar', $sidebar);
+
+ $ID = 'foo:bar:test';
+ $sidebar = page_findnearest('sidebar');
+ $this->assertEquals('foo:bar:sidebar', $sidebar);
+
+ $ID = 'foo';
+ $sidebar = page_findnearest('sidebar');
+ $this->assertEquals('sidebar', $sidebar);
+ }
+
+}
diff --git a/_test/tests/inc/template_sidebar.test.php b/_test/tests/inc/template_sidebar.test.php
new file mode 100644
index 000000000..56153894a
--- /dev/null
+++ b/_test/tests/inc/template_sidebar.test.php
@@ -0,0 +1,40 @@
+<?php
+
+class template_sidebar_test extends DokuWikiTest {
+ function testNoSidebar() {
+ global $ID;
+
+ $ID = 'foo:bar:baz:test';
+ $sidebar = tpl_sidebar(false);
+ $this->assertEquals('',$sidebar);
+ }
+
+ function testExistingSidebars() {
+ global $ID;
+
+ saveWikiText('sidebar', 'topsidebar-test', '');
+
+ $ID = 'foo:bar:baz:test';
+ $sidebar = tpl_sidebar(false);
+ $this->assertTrue(strpos($sidebar, 'topsidebar-test') > 0);
+
+ $ID = 'foo';
+ $sidebar = tpl_sidebar(false);
+ $this->assertTrue(strpos($sidebar, 'topsidebar-test') > 0);
+
+ saveWikiText('foo:bar:sidebar', 'bottomsidebar-test', '');
+
+ $ID = 'foo:bar:baz:test';
+ $sidebar = tpl_sidebar(false);
+ $this->assertTrue(strpos($sidebar, 'bottomsidebar-test') > 0);
+
+ $ID = 'foo:bar:test';
+ $sidebar = tpl_sidebar(false);
+ $this->assertTrue(strpos($sidebar, 'bottomsidebar-test') > 0);
+
+ $ID = 'foo';
+ $sidebar = tpl_sidebar(false);
+ $this->assertTrue(strpos($sidebar, 'topsidebar-test') > 0);
+ }
+
+}
diff --git a/_test/tests/lib/exe/js_js_compress.test.php b/_test/tests/lib/exe/js_js_compress.test.php
index aa8d82933..49f93cc54 100644
--- a/_test/tests/lib/exe/js_js_compress.test.php
+++ b/_test/tests/lib/exe/js_js_compress.test.php
@@ -111,12 +111,10 @@ class js_js_compress_test extends DokuWikiTest {
}
function test_multilinestring(){
- $text = 'var foo = "this is a \\
-multiline string";';
+ $text = 'var foo = "this is a \\'."\n".'multiline string";';
$this->assertEquals('var foo="this is a multiline string";',js_compress($text));
- $text = "var foo = 'this is a \\
-multiline string';";
+ $text = "var foo = 'this is a \\\nmultiline string';";
$this->assertEquals("var foo='this is a multiline string';",js_compress($text));
}
diff --git a/_test/tests/test/basic.test.php b/_test/tests/test/basic.test.php
index b4926d2ba..a0ea48a3a 100644
--- a/_test/tests/test/basic.test.php
+++ b/_test/tests/test/basic.test.php
@@ -19,4 +19,87 @@ class InttestsBasicTest extends DokuWikiTest {
'DokuWiki was not a word in the output'
);
}
+
+ function testPost() {
+ $request = new TestRequest();
+
+ $input = array(
+ 'string' => 'A string',
+ 'array' => array(1, 2, 3),
+ 'id' => 'wiki:dokuwiki'
+ );
+
+ $response = $request->post($input);
+
+ // server var check
+ $this->assertEquals('POST',$request->getServer('REQUEST_METHOD'));
+ $this->assertEquals('',$request->getServer('QUERY_STRING'));
+ $this->assertEquals('/doku.php',$request->getServer('REQUEST_URI'));
+
+ // variable setup check
+ $this->assertEquals('A string', $request->getPost('string'));
+ $this->assertEquals(array(1, 2, 3), $request->getPost('array'));
+ $this->assertEquals('wiki:dokuwiki', $request->getPost('id'));
+
+ // output check
+ $this->assertTrue(strpos($response->getContent(), 'Andreas Gohr') >= 0);
+ }
+
+ function testPostGet() {
+ $request = new TestRequest();
+
+ $input = array(
+ 'string' => 'A string',
+ 'array' => array(1, 2, 3),
+ );
+
+ $response = $request->post($input,'/doku.php?id=wiki:dokuwiki');
+
+ // server var check
+ $this->assertEquals('POST',$request->getServer('REQUEST_METHOD'));
+ $this->assertEquals('?id=wiki:dokuwiki',$request->getServer('QUERY_STRING'));
+ $this->assertEquals('/doku.php?id=wiki:dokuwiki',$request->getServer('REQUEST_URI'));
+
+ // variable setup check
+ $this->assertEquals('A string', $request->getPost('string'));
+ $this->assertEquals(array(1, 2, 3), $request->getPost('array'));
+ $this->assertEquals('wiki:dokuwiki', $request->getGet('id'));
+
+ // output check
+ $this->assertTrue(strpos($response->getContent(), 'Andreas Gohr') >= 0);
+ }
+
+ function testGet() {
+ $request = new TestRequest();
+
+ $input = array(
+ 'string' => 'A string',
+ 'array' => array(1, 2, 3),
+ 'test' => 'bar'
+ );
+
+ $response = $request->get($input,'/doku.php?id=wiki:dokuwiki&test=foo');
+
+ // server var check
+ $this->assertEquals('GET',$request->getServer('REQUEST_METHOD'));
+ $this->assertEquals(
+ '?id=wiki:dokuwiki&test=bar&string=A+string&array[0]=1&array[1]=2&array[2]=3',
+ $request->getServer('QUERY_STRING')
+ );
+ $this->assertEquals(
+ '/doku.php?id=wiki:dokuwiki&test=bar&string=A+string&array[0]=1&array[1]=2&array[2]=3',
+ $request->getServer('REQUEST_URI')
+ );
+
+ // variable setup check
+ $this->assertEquals('A string', $request->getGet('string'));
+ $this->assertEquals(array(1, 2, 3), $request->getGet('array'));
+ $this->assertEquals('wiki:dokuwiki', $request->getGet('id'));
+ $this->assertEquals('bar', $request->getGet('test'));
+
+ // output check
+ $this->assertTrue(strpos($response->getContent(), 'Andreas Gohr') >= 0);
+ }
+
+
}
diff --git a/feed.php b/feed.php
index 906f8e7bb..6ad371f1e 100644
--- a/feed.php
+++ b/feed.php
@@ -350,6 +350,10 @@ function rss_buildItems(&$rss, &$data, $opt) {
// no TOC in feeds
$content = preg_replace('/(<!-- TOC START -->).*(<!-- TOC END -->)/s', '', $content);
+ // add alignment for images
+ $content = preg_replace('/(<img .*?class="medialeft")/s', '\\1 align="left"', $content);
+ $content = preg_replace('/(<img .*?class="mediaright")/s', '\\1 align="right"', $content);
+
// make URLs work when canonical is not set, regexp instead of rerendering!
if(!$conf['canonical']) {
$base = preg_quote(DOKU_REL, '/');
diff --git a/inc/DifferenceEngine.php b/inc/DifferenceEngine.php
index 0a7ce8e7c..1b68cf6d3 100644
--- a/inc/DifferenceEngine.php
+++ b/inc/DifferenceEngine.php
@@ -1039,8 +1039,8 @@ class TableDiffFormatter extends DiffFormatter {
// Preserve whitespaces by converting some to non-breaking spaces.
// Do not convert all of them to allow word-wrap.
$val = parent::format($diff);
- $val = str_replace(' ','&nbsp; ', $val);
- $val = preg_replace('/ (?=<)|(?<=[ >]) /', '&nbsp;', $val);
+ $val = str_replace(' ','&#160; ', $val);
+ $val = preg_replace('/ (?=<)|(?<=[ >]) /', '&#160;', $val);
return $val;
}
@@ -1078,7 +1078,7 @@ class TableDiffFormatter extends DiffFormatter {
}
function emptyLine() {
- return '<td colspan="2">&nbsp;</td>';
+ return '<td colspan="2">&#160;</td>';
}
function contextLine($line) {
@@ -1132,8 +1132,8 @@ class InlineDiffFormatter extends DiffFormatter {
// Preserve whitespaces by converting some to non-breaking spaces.
// Do not convert all of them to allow word-wrap.
$val = parent::format($diff);
- $val = str_replace(' ','&nbsp; ', $val);
- $val = preg_replace('/ (?=<)|(?<=[ >]) /', '&nbsp;', $val);
+ $val = str_replace(' ','&#160; ', $val);
+ $val = preg_replace('/ (?=<)|(?<=[ >]) /', '&#160;', $val);
return $val;
}
diff --git a/inc/HTTPClient.php b/inc/HTTPClient.php
index 26bee52a7..a25846c31 100644
--- a/inc/HTTPClient.php
+++ b/inc/HTTPClient.php
@@ -61,6 +61,8 @@ class DokuHTTPClient extends HTTPClient {
}
+class HTTPClientException extends Exception { }
+
/**
* This class implements a basic HTTP client
*
@@ -227,7 +229,7 @@ class HTTPClient {
$path = $uri['path'];
if(empty($path)) $path = '/';
if(!empty($uri['query'])) $path .= '?'.$uri['query'];
- if(isset($uri['port']) && !empty($uri['port'])) $port = $uri['port'];
+ if(!empty($uri['port'])) $port = $uri['port'];
if(isset($uri['user'])) $this->user = $uri['user'];
if(isset($uri['pass'])) $this->pass = $uri['pass'];
@@ -249,7 +251,7 @@ class HTTPClient {
// prepare headers
$headers = $this->headers;
$headers['Host'] = $uri['host'];
- if($uri['port']) $headers['Host'].= ':'.$uri['port'];
+ if(!empty($uri['port'])) $headers['Host'].= ':'.$uri['port'];
$headers['User-Agent'] = $this->agent;
$headers['Referer'] = $this->referer;
if ($this->keep_alive) {
@@ -279,16 +281,13 @@ class HTTPClient {
$headers['Proxy-Authorization'] = 'Basic '.base64_encode($this->proxy_user.':'.$this->proxy_pass);
}
- // stop time
- $start = time();
-
// already connected?
$connectionId = $this->_uniqueConnectionId($server,$port);
- $this->_debug('connection pool', $this->connections);
+ $this->_debug('connection pool', self::$connections);
$socket = null;
- if (isset($this->connections[$connectionId])) {
+ if (isset(self::$connections[$connectionId])) {
$this->_debug('reusing connection', $connectionId);
- $socket = $this->connections[$connectionId];
+ $socket = self::$connections[$connectionId];
}
if (is_null($socket) || feof($socket)) {
$this->_debug('opening connection', $connectionId);
@@ -302,222 +301,161 @@ class HTTPClient {
// keep alive?
if ($this->keep_alive) {
- $this->connections[$connectionId] = $socket;
+ self::$connections[$connectionId] = $socket;
} else {
- unset($this->connections[$connectionId]);
- }
- }
-
- //set blocking
- stream_set_blocking($socket,1);
-
- // build request
- $request = "$method $request_url HTTP/".$this->http.HTTP_NL;
- $request .= $this->_buildHeaders($headers);
- $request .= $this->_getCookies();
- $request .= HTTP_NL;
- $request .= $data;
-
- $this->_debug('request',$request);
-
- // select parameters
- $sel_r = null;
- $sel_w = array($socket);
- $sel_e = null;
-
- // send request
- $towrite = strlen($request);
- $written = 0;
- while($written < $towrite){
- // check timeout
- if(time()-$start > $this->timeout){
- $this->status = -100;
- $this->error = sprintf('Timeout while sending request (%.3fs)',$this->_time() - $this->start);
- unset($this->connections[$connectionId]);
- return false;
- }
-
- // wait for stream ready or timeout (1sec)
- if(@stream_select($sel_r,$sel_w,$sel_e,1) === false){
- usleep(1000);
- continue;
- }
-
- // write to stream
- $ret = fwrite($socket, substr($request,$written,4096));
- if($ret === false){
- $this->status = -100;
- $this->error = 'Failed writing to socket';
- unset($this->connections[$connectionId]);
- return false;
+ unset(self::$connections[$connectionId]);
}
- $written += $ret;
}
- // continue non-blocking
- stream_set_blocking($socket,0);
-
- // read headers from socket
- $r_headers = '';
- do{
- if(time()-$start > $this->timeout){
- $this->status = -100;
- $this->error = sprintf('Timeout while reading headers (%.3fs)',$this->_time() - $this->start);
- unset($this->connections[$connectionId]);
- return false;
- }
- if(feof($socket)){
- $this->error = 'Premature End of File (socket)';
- unset($this->connections[$connectionId]);
- return false;
- }
- usleep(1000);
- $r_headers .= fgets($socket,1024);
- }while(!preg_match('/\r?\n\r?\n$/',$r_headers));
-
- $this->_debug('response headers',$r_headers);
-
- // check if expected body size exceeds allowance
- if($this->max_bodysize && preg_match('/\r?\nContent-Length:\s*(\d+)\r?\n/i',$r_headers,$match)){
- if($match[1] > $this->max_bodysize){
- $this->error = 'Reported content length exceeds allowed response size';
- if ($this->max_bodysize_abort)
- unset($this->connections[$connectionId]);
- return false;
+ try {
+ //set non-blocking
+ stream_set_blocking($socket, false);
+
+ // build request
+ $request = "$method $request_url HTTP/".$this->http.HTTP_NL;
+ $request .= $this->_buildHeaders($headers);
+ $request .= $this->_getCookies();
+ $request .= HTTP_NL;
+ $request .= $data;
+
+ $this->_debug('request',$request);
+ $this->_sendData($socket, $request, 'request');
+
+ // read headers from socket
+ $r_headers = '';
+ do{
+ $r_line = $this->_readLine($socket, 'headers');
+ $r_headers .= $r_line;
+ }while($r_line != "\r\n" && $r_line != "\n");
+
+ $this->_debug('response headers',$r_headers);
+
+ // check if expected body size exceeds allowance
+ if($this->max_bodysize && preg_match('/\r?\nContent-Length:\s*(\d+)\r?\n/i',$r_headers,$match)){
+ if($match[1] > $this->max_bodysize){
+ if ($this->max_bodysize_abort)
+ throw new HTTPClientException('Reported content length exceeds allowed response size');
+ else
+ $this->error = 'Reported content length exceeds allowed response size';
+ }
}
- }
- // get Status
- if (!preg_match('/^HTTP\/(\d\.\d)\s*(\d+).*?\n/', $r_headers, $m)) {
- $this->error = 'Server returned bad answer';
- unset($this->connections[$connectionId]);
- return false;
- }
- $this->status = $m[2];
-
- // handle headers and cookies
- $this->resp_headers = $this->_parseHeaders($r_headers);
- if(isset($this->resp_headers['set-cookie'])){
- foreach ((array) $this->resp_headers['set-cookie'] as $cookie){
- list($cookie) = explode(';',$cookie,2);
- list($key,$val) = explode('=',$cookie,2);
- $key = trim($key);
- if($val == 'deleted'){
- if(isset($this->cookies[$key])){
- unset($this->cookies[$key]);
+ // get Status
+ if (!preg_match('/^HTTP\/(\d\.\d)\s*(\d+).*?\n/', $r_headers, $m))
+ throw new HTTPClientException('Server returned bad answer');
+
+ $this->status = $m[2];
+
+ // handle headers and cookies
+ $this->resp_headers = $this->_parseHeaders($r_headers);
+ if(isset($this->resp_headers['set-cookie'])){
+ foreach ((array) $this->resp_headers['set-cookie'] as $cookie){
+ list($cookie) = explode(';',$cookie,2);
+ list($key,$val) = explode('=',$cookie,2);
+ $key = trim($key);
+ if($val == 'deleted'){
+ if(isset($this->cookies[$key])){
+ unset($this->cookies[$key]);
+ }
+ }elseif($key){
+ $this->cookies[$key] = $val;
}
- }elseif($key){
- $this->cookies[$key] = $val;
}
}
- }
-
- $this->_debug('Object headers',$this->resp_headers);
- // check server status code to follow redirect
- if($this->status == 301 || $this->status == 302 ){
- // close the connection because we don't handle content retrieval here
- // that's the easiest way to clean up the connection
- fclose($socket);
- unset($this->connections[$connectionId]);
+ $this->_debug('Object headers',$this->resp_headers);
- if (empty($this->resp_headers['location'])){
- $this->error = 'Redirect but no Location Header found';
- return false;
- }elseif($this->redirect_count == $this->max_redirect){
- $this->error = 'Maximum number of redirects exceeded';
- return false;
- }else{
- $this->redirect_count++;
- $this->referer = $url;
- // handle non-RFC-compliant relative redirects
- if (!preg_match('/^http/i', $this->resp_headers['location'])){
- if($this->resp_headers['location'][0] != '/'){
- $this->resp_headers['location'] = $uri['scheme'].'://'.$uri['host'].':'.$uri['port'].
- dirname($uri['path']).'/'.$this->resp_headers['location'];
- }else{
- $this->resp_headers['location'] = $uri['scheme'].'://'.$uri['host'].':'.$uri['port'].
- $this->resp_headers['location'];
+ // check server status code to follow redirect
+ if($this->status == 301 || $this->status == 302 ){
+ if (empty($this->resp_headers['location'])){
+ throw new HTTPClientException('Redirect but no Location Header found');
+ }elseif($this->redirect_count == $this->max_redirect){
+ throw new HTTPClientException('Maximum number of redirects exceeded');
+ }else{
+ // close the connection because we don't handle content retrieval here
+ // that's the easiest way to clean up the connection
+ fclose($socket);
+ unset(self::$connections[$connectionId]);
+
+ $this->redirect_count++;
+ $this->referer = $url;
+ // handle non-RFC-compliant relative redirects
+ if (!preg_match('/^http/i', $this->resp_headers['location'])){
+ if($this->resp_headers['location'][0] != '/'){
+ $this->resp_headers['location'] = $uri['scheme'].'://'.$uri['host'].':'.$uri['port'].
+ dirname($uri['path']).'/'.$this->resp_headers['location'];
+ }else{
+ $this->resp_headers['location'] = $uri['scheme'].'://'.$uri['host'].':'.$uri['port'].
+ $this->resp_headers['location'];
+ }
}
+ // perform redirected request, always via GET (required by RFC)
+ return $this->sendRequest($this->resp_headers['location'],array(),'GET');
}
- // perform redirected request, always via GET (required by RFC)
- return $this->sendRequest($this->resp_headers['location'],array(),'GET');
}
- }
- // check if headers are as expected
- if($this->header_regexp && !preg_match($this->header_regexp,$r_headers)){
- $this->error = 'The received headers did not match the given regexp';
- unset($this->connections[$connectionId]);
- return false;
- }
+ // check if headers are as expected
+ if($this->header_regexp && !preg_match($this->header_regexp,$r_headers))
+ throw new HTTPClientException('The received headers did not match the given regexp');
- //read body (with chunked encoding if needed)
- $r_body = '';
- if(preg_match('/transfer\-(en)?coding:\s*chunked\r\n/i',$r_headers)){
- do {
- unset($chunk_size);
+ //read body (with chunked encoding if needed)
+ $r_body = '';
+ if((isset($this->resp_headers['transfer-encoding']) && $this->resp_headers['transfer-encoding'] == 'chunked')
+ || (isset($this->resp_headers['transfer-coding']) && $this->resp_headers['transfer-coding'] == 'chunked')){
+ $abort = false;
do {
- if(feof($socket)){
- $this->error = 'Premature End of File (socket)';
- unset($this->connections[$connectionId]);
- return false;
+ $chunk_size = '';
+ while (preg_match('/^[a-zA-Z0-9]?$/',$byte=$this->_readData($socket,1,'chunk'))){
+ // read chunksize until \r
+ $chunk_size .= $byte;
+ if (strlen($chunk_size) > 128) // set an abritrary limit on the size of chunks
+ throw new HTTPClientException('Allowed response size exceeded');
}
- if(time()-$start > $this->timeout){
- $this->status = -100;
- $this->error = sprintf('Timeout while reading chunk (%.3fs)',$this->_time() - $this->start);
- unset($this->connections[$connectionId]);
- return false;
+ $this->_readLine($socket, 'chunk'); // readtrailing \n
+ $chunk_size = hexdec($chunk_size);
+
+ if($this->max_bodysize && $chunk_size+strlen($r_body) > $this->max_bodysize){
+ if ($this->max_bodysize_abort)
+ throw new HTTPClientException('Allowed response size exceeded');
+ $this->error = 'Allowed response size exceeded';
+ $chunk_size = $this->max_bodysize - strlen($r_body);
+ $abort = true;
}
- $byte = fread($socket,1);
- $chunk_size .= $byte;
- } while (preg_match('/[a-zA-Z0-9]/',$byte)); // read chunksize including \r
-
- $byte = fread($socket,1); // readtrailing \n
- $chunk_size = hexdec($chunk_size);
- if ($chunk_size) {
- $this_chunk = fread($socket,$chunk_size);
- $r_body .= $this_chunk;
- $byte = fread($socket,2); // read trailing \r\n
- }
- if($this->max_bodysize && strlen($r_body) > $this->max_bodysize){
- $this->error = 'Allowed response size exceeded';
- if ($this->max_bodysize_abort){
- unset($this->connections[$connectionId]);
- return false;
- } else {
- break;
+ if ($chunk_size > 0) {
+ $r_body .= $this->_readData($socket, $chunk_size, 'chunk');
+ $byte = $this->_readData($socket, 2, 'chunk'); // read trailing \r\n
}
- }
- } while ($chunk_size);
- }else{
- // read entire socket
- while (!feof($socket)) {
- if(time()-$start > $this->timeout){
- $this->status = -100;
- $this->error = sprintf('Timeout while reading response (%.3fs)',$this->_time() - $this->start);
- unset($this->connections[$connectionId]);
- return false;
- }
- $r_body .= fread($socket,4096);
- $r_size = strlen($r_body);
- if($this->max_bodysize && $r_size > $this->max_bodysize){
- $this->error = 'Allowed response size exceeded';
+ } while ($chunk_size && !$abort);
+ }elseif($this->max_bodysize){
+ // read just over the max_bodysize
+ $r_body = $this->_readData($socket, $this->max_bodysize+1, 'response', true);
+ if(strlen($r_body) > $this->max_bodysize){
if ($this->max_bodysize_abort) {
- unset($this->connections[$connectionId]);
- return false;
+ throw new HTTPClientException('Allowed response size exceeded');
} else {
- break;
+ $this->error = 'Allowed response size exceeded';
}
}
- if(isset($this->resp_headers['content-length']) &&
- !isset($this->resp_headers['transfer-encoding']) &&
- $this->resp_headers['content-length'] == $r_size){
- // we read the content-length, finish here
- break;
+ }elseif(isset($this->resp_headers['content-length']) &&
+ !isset($this->resp_headers['transfer-encoding'])){
+ // read up to the content-length
+ $r_body = $this->_readData($socket, $this->resp_headers['content-length'], 'response', true);
+ }else{
+ // read entire socket
+ $r_size = 0;
+ while (!feof($socket)) {
+ $r_body .= $this->_readData($socket, 4096, 'response', true);
}
}
+
+ } catch (HTTPClientException $err) {
+ $this->error = $err->getMessage();
+ if ($err->getCode())
+ $this->status = $err->getCode();
+ unset(self::$connections[$connectionId]);
+ fclose($socket);
+ return false;
}
if (!$this->keep_alive ||
@@ -525,7 +463,7 @@ class HTTPClient {
// close socket
$status = socket_get_status($socket);
fclose($socket);
- unset($this->connections[$connectionId]);
+ unset(self::$connections[$connectionId]);
}
// decode gzip if needed
@@ -547,6 +485,126 @@ class HTTPClient {
}
/**
+ * Safely write data to a socket
+ *
+ * @param handle $socket An open socket handle
+ * @param string $data The data to write
+ * @param string $message Description of what is being read
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+ function _sendData($socket, $data, $message) {
+ // select parameters
+ $sel_r = null;
+ $sel_w = array($socket);
+ $sel_e = null;
+
+ // send request
+ $towrite = strlen($data);
+ $written = 0;
+ while($written < $towrite){
+ // check timeout
+ $time_used = $this->_time() - $this->start;
+ if($time_used > $this->timeout)
+ throw new HTTPClientException(sprintf('Timeout while sending %s (%.3fs)',$message, $time_used), -100);
+ if(feof($socket))
+ throw new HTTPClientException("Socket disconnected while writing $message");
+
+ // wait for stream ready or timeout
+ self::selecttimeout($this->timeout - $time_used, $sec, $usec);
+ if(@stream_select($sel_r, $sel_w, $sel_e, $sec, $usec) !== false){
+ // write to stream
+ $nbytes = fwrite($socket, substr($data,$written,4096));
+ if($nbytes === false)
+ throw new HTTPClientException("Failed writing to socket while sending $message", -100);
+ $written += $nbytes;
+ }
+ }
+ }
+
+ /**
+ * Safely read data from a socket
+ *
+ * Reads up to a given number of bytes or throws an exception if the
+ * response times out or ends prematurely.
+ *
+ * @param handle $socket An open socket handle in non-blocking mode
+ * @param int $nbytes Number of bytes to read
+ * @param string $message Description of what is being read
+ * @param bool $ignore_eof End-of-file is not an error if this is set
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+ function _readData($socket, $nbytes, $message, $ignore_eof = false) {
+ // select parameters
+ $sel_r = array($socket);
+ $sel_w = null;
+ $sel_e = null;
+
+ $r_data = '';
+ // Does not return immediately so timeout and eof can be checked
+ if ($nbytes < 0) $nbytes = 0;
+ $to_read = $nbytes;
+ do {
+ $time_used = $this->_time() - $this->start;
+ if ($time_used > $this->timeout)
+ throw new HTTPClientException(
+ sprintf('Timeout while reading %s (%.3fs)', $message, $time_used),
+ -100);
+ if(feof($socket)) {
+ if(!$ignore_eof)
+ throw new HTTPClientException("Premature End of File (socket) while reading $message");
+ break;
+ }
+
+ if ($to_read > 0) {
+ // wait for stream ready or timeout
+ self::selecttimeout($this->timeout - $time_used, $sec, $usec);
+ if(@stream_select($sel_r, $sel_w, $sel_e, $sec, $usec) !== false){
+ $bytes = fread($socket, $to_read);
+ if($bytes === false)
+ throw new HTTPClientException("Failed reading from socket while reading $message", -100);
+ $r_data .= $bytes;
+ $to_read -= strlen($bytes);
+ }
+ }
+ } while ($to_read > 0 && strlen($r_data) < $nbytes);
+ return $r_data;
+ }
+
+ /**
+ * Safely read a \n-terminated line from a socket
+ *
+ * Always returns a complete line, including the terminating \n.
+ *
+ * @param handle $socket An open socket handle in non-blocking mode
+ * @param string $message Description of what is being read
+ * @author Tom N Harris <tnharris@whoopdedo.org>
+ */
+ function _readLine($socket, $message) {
+ // select parameters
+ $sel_r = array($socket);
+ $sel_w = null;
+ $sel_e = null;
+
+ $r_data = '';
+ do {
+ $time_used = $this->_time() - $this->start;
+ if ($time_used > $this->timeout)
+ throw new HTTPClientException(
+ sprintf('Timeout while reading %s (%.3fs)', $message, $time_used),
+ -100);
+ if(feof($socket))
+ throw new HTTPClientException("Premature End of File (socket) while reading $message");
+
+ // wait for stream ready or timeout
+ self::selecttimeout($this->timeout - $time_used, $sec, $usec);
+ if(@stream_select($sel_r, $sel_w, $sel_e, $sec, $usec) !== false){
+ $r_data = fgets($socket, 1024);
+ }
+ } while (!preg_match('/\n$/',$r_data));
+ return $r_data;
+ }
+
+ /**
* print debug info
*
* @author Andreas Gohr <andi@splitbrain.org>
@@ -566,12 +624,20 @@ class HTTPClient {
/**
* Return current timestamp in microsecond resolution
*/
- function _time(){
+ static function _time(){
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
/**
+ * Calculate seconds and microseconds
+ */
+ static function selecttimeout($time, &$sec, &$usec){
+ $sec = floor($time);
+ $usec = (int)(($time - $sec) * 1000000);
+ }
+
+ /**
* convert given header string to Header array
*
* All Keys are lowercased.
@@ -583,7 +649,7 @@ class HTTPClient {
$lines = explode("\n",$string);
array_shift($lines); //skip first line (status)
foreach($lines as $line){
- list($key, $val) = explode(':',$line,2);
+ @list($key, $val) = explode(':',$line,2);
$key = trim($key);
$val = trim($val);
$key = strtolower($key);
diff --git a/inc/Input.class.php b/inc/Input.class.php
index 1ea5e031f..f4174404a 100644
--- a/inc/Input.class.php
+++ b/inc/Input.class.php
@@ -118,6 +118,7 @@ class Input {
public function int($name, $default = 0, $nonempty = false) {
if(!isset($this->access[$name])) return $default;
if(is_array($this->access[$name])) return $default;
+ if($this->access[$name] === '') return $default;
if($nonempty && empty($this->access[$name])) return $default;
return (int) $this->access[$name];
@@ -151,6 +152,8 @@ class Input {
*/
public function bool($name, $default = false, $nonempty = false) {
if(!isset($this->access[$name])) return $default;
+ if(is_array($this->access[$name])) return $default;
+ if($this->access[$name] === '') return $default;
if($nonempty && empty($this->access[$name])) return $default;
return (bool) $this->access[$name];
@@ -223,4 +226,4 @@ class GetInput extends Input {
parent::set($name, $value);
$_REQUEST[$name] = $value;
}
-} \ No newline at end of file
+}
diff --git a/inc/JpegMeta.php b/inc/JpegMeta.php
index 5c043fb6b..ac29bca66 100644
--- a/inc/JpegMeta.php
+++ b/inc/JpegMeta.php
@@ -2972,7 +2972,7 @@ class JpegMeta {
elseif ($c == 62)
$ascii .= '&gt;';
elseif ($c == 32)
- $ascii .= '&nbsp;';
+ $ascii .= '&#160;';
elseif ($c > 32)
$ascii .= chr($c);
else
diff --git a/inc/Mailer.class.php b/inc/Mailer.class.php
index fccf1dad9..c85e61395 100644
--- a/inc/Mailer.class.php
+++ b/inc/Mailer.class.php
@@ -132,8 +132,8 @@ class Mailer {
public function setHeader($header, $value, $clean = true) {
$header = str_replace(' ', '-', ucwords(strtolower(str_replace('-', ' ', $header)))); // streamline casing
if($clean) {
- $header = preg_replace('/[^\w \-\.\+\@]+/', '', $header);
- $value = preg_replace('/[^\w \-\.\+\@<>]+/', '', $value);
+ $header = preg_replace('/[^a-zA-Z0-9_ \-\.\+\@]+/', '', $header);
+ $value = preg_replace('/[^a-zA-Z0-9_ \-\.\+\@<>]+/', '', $value);
}
// empty value deletes
diff --git a/inc/PassHash.class.php b/inc/PassHash.class.php
index f85766723..13be479cc 100644
--- a/inc/PassHash.class.php
+++ b/inc/PassHash.class.php
@@ -132,7 +132,7 @@ class PassHash {
public function hash_smd5($clear, $salt = null) {
$this->init_salt($salt, 8);
- if(defined('CRYPT_MD5') && CRYPT_MD5) {
+ if(defined('CRYPT_MD5') && CRYPT_MD5 && $salt !== '') {
return crypt($clear, '$1$'.$salt.'$');
} else {
// Fall back to PHP-only implementation
diff --git a/inc/auth.php b/inc/auth.php
index d0f21c825..cedfdee36 100644
--- a/inc/auth.php
+++ b/inc/auth.php
@@ -123,23 +123,33 @@ function auth_setup() {
*/
function auth_loadACL() {
global $config_cascade;
+ global $USERINFO;
if(!is_readable($config_cascade['acl']['default'])) return array();
$acl = file($config_cascade['acl']['default']);
//support user wildcard
- if(isset($_SERVER['REMOTE_USER'])) {
- $len = count($acl);
- for($i = 0; $i < $len; $i++) {
- if($acl[$i]{0} == '#') continue;
- list($id, $rest) = preg_split('/\s+/', $acl[$i], 2);
- $id = str_replace('%USER%', cleanID($_SERVER['REMOTE_USER']), $id);
- $rest = str_replace('%USER%', auth_nameencode($_SERVER['REMOTE_USER']), $rest);
- $acl[$i] = "$id\t$rest";
+ $out = array();
+ foreach($acl as $line) {
+ $line = trim($line);
+ if($line{0} == '#') continue;
+ list($id,$rest) = preg_split('/\s+/',$line,2);
+
+ if(strstr($line, '%GROUP%')){
+ foreach((array) $USERINFO['grps'] as $grp){
+ $nid = str_replace('%GROUP%',cleanID($grp),$id);
+ $nrest = str_replace('%GROUP%','@'.auth_nameencode($grp),$rest);
+ $out[] = "$nid\t$nrest";
+ }
+ } else {
+ $id = str_replace('%USER%',cleanID($_SERVER['REMOTE_USER']),$id);
+ $rest = str_replace('%USER%',auth_nameencode($_SERVER['REMOTE_USER']),$rest);
+ $out[] = "$id\t$rest";
}
}
- return $acl;
+
+ return $out;
}
/**
@@ -632,6 +642,7 @@ function auth_nameencode($name, $skip_group = false) {
// never encode wildcard FS#1955
if($name == '%USER%') return $name;
+ if($name == '%GROUP%') return $name;
if(!isset($cache[$name][$skip_group])) {
if($skip_group && $name{0} == '@') {
diff --git a/inc/config_cascade.php b/inc/config_cascade.php
index e4a3df353..e1ab0eead 100644
--- a/inc/config_cascade.php
+++ b/inc/config_cascade.php
@@ -50,6 +50,8 @@ $config_cascade = array_merge(
),
'userstyle' => array(
'screen' => DOKU_CONF.'userstyle.css',
+ // @deprecated 2012-04-09: rtl will cease to be a mode of its own,
+ // please use "[dir=rtl]" in any css file in all, screen or print mode instead
'rtl' => DOKU_CONF.'userrtl.css',
'print' => DOKU_CONF.'userprint.css',
'feed' => DOKU_CONF.'userfeed.css',
diff --git a/inc/html.php b/inc/html.php
index 08b051f40..505474e0d 100644
--- a/inc/html.php
+++ b/inc/html.php
@@ -230,12 +230,12 @@ function html_show($txt=null){
//PreviewHeader
echo '<br id="scroll__here" />';
echo p_locale_xhtml('preview');
- echo '<div class="preview">';
+ echo '<div class="preview"><div class="pad">';
$html = html_secedit(p_render('xhtml',p_get_instructions($txt),$info),$secedit);
if($INFO['prependTOC']) $html = tpl_toc(true).$html;
echo $html;
echo '<div class="clearer"></div>';
- echo '</div>';
+ echo '</div></div>';
}else{
if ($REV) print p_locale_xhtml('showrev');
@@ -327,11 +327,11 @@ function html_search(){
flush();
//show progressbar
- print '<div class="centeralign" id="dw__loading">'.NL;
- print '<script type="text/javascript" charset="utf-8"><!--//--><![CDATA[//><!--'.NL;
+ print '<div id="dw__loading">'.NL;
+ print '<script type="text/javascript"><!--//--><![CDATA[//><!--'.NL;
print 'showLoadBar();'.NL;
print '//--><!]]></script>'.NL;
- print '<br /></div>'.NL;
+ print '</div>'.NL;
flush();
//do quick pagesearch
@@ -367,26 +367,30 @@ function html_search(){
//do fulltext search
$data = ft_pageSearch($QUERY,$regex);
if(count($data)){
+ print '<dl class="search_results">';
$num = 1;
foreach($data as $id => $cnt){
- print '<div class="search_result">';
+ print '<dt>';
print html_wikilink(':'.$id,useHeading('navigation')?null:$id,$regex);
if($cnt !== 0){
- print ': <span class="search_cnt">'.$cnt.' '.$lang['hits'].'</span><br />';
+ print ': '.$cnt.' '.$lang['hits'].'';
+ }
+ print '</dt>';
+ if($cnt !== 0){
if($num < FT_SNIPPET_NUMBER){ // create snippets for the first number of matches only
- print '<div class="search_snippet">'.ft_snippet($id,$regex).'</div>';
+ print '<dd>'.ft_snippet($id,$regex).'</dd>';
}
$num++;
}
- print '</div>';
flush();
}
+ print '</dl>';
}else{
print '<div class="nothing">'.$lang['nothingfound'].'</div>';
}
//hide progressbar
- print '<script type="text/javascript" charset="utf-8"><!--//--><![CDATA[//><!--'.NL;
+ print '<script type="text/javascript"><!--//--><![CDATA[//><!--'.NL;
print 'hideLoadBar("dw__loading");'.NL;
print '//--><!]]></script>'.NL;
flush();
@@ -453,7 +457,7 @@ function html_revisions($first=0, $media_id = false){
if (!$media_id) print p_locale_xhtml('revisions');
- $params = array('id' => 'page__revisions');
+ $params = array('id' => 'page__revisions', 'class' => 'changes');
if ($media_id) $params['action'] = media_managerURL(array('image' => $media_id), '&');
$form = new Doku_Form($params);
@@ -491,7 +495,7 @@ function html_revisions($first=0, $media_id = false){
if (!$media_id) {
$form->addElement(form_makeOpenTag('span', array('class' => 'sum')));
- $form->addElement(' &ndash; ');
+ $form->addElement(' – ');
$form->addElement(htmlspecialchars($INFO['sum']));
$form->addElement(form_makeCloseTag('span'));
}
@@ -570,7 +574,7 @@ function html_revisions($first=0, $media_id = false){
if ($info['sum']) {
$form->addElement(form_makeOpenTag('span', array('class' => 'sum')));
- if (!$media_id) $form->addElement(' &ndash; ');
+ if (!$media_id) $form->addElement(' – ');
$form->addElement(htmlspecialchars($info['sum']));
$form->addElement(form_makeCloseTag('span'));
}
@@ -668,12 +672,13 @@ function html_recent($first=0, $show_changes='both'){
if (getNS($ID) != '')
print '<div class="level1"><p>' . sprintf($lang['recent_global'], getNS($ID), wl('', 'do=recent')) . '</p></div>';
- $form = new Doku_Form(array('id' => 'dw__recent', 'method' => 'GET'));
+ $form = new Doku_Form(array('id' => 'dw__recent', 'method' => 'GET', 'class' => 'changes'));
$form->addHidden('sectok', null);
$form->addHidden('do', 'recent');
$form->addHidden('id', $ID);
if ($conf['mediarevisions']) {
+ $form->addElement('<div class="changeType">');
$form->addElement(form_makeListboxField(
'show_changes',
array(
@@ -686,6 +691,7 @@ function html_recent($first=0, $show_changes='both'){
array('class'=>'quickselect')));
$form->addElement(form_makeButton('submit', 'recent', $lang['btn_apply']));
+ $form->addElement('</div>');
}
$form->addElement(form_makeOpenTag('ul'));
@@ -760,7 +766,7 @@ function html_recent($first=0, $show_changes='both'){
$form->addElement(html_wikilink(':'.$recent['id'],useHeading('navigation')?null:$recent['id']));
}
$form->addElement(form_makeOpenTag('span', array('class' => 'sum')));
- $form->addElement(' &ndash; '.htmlspecialchars($recent['sum']));
+ $form->addElement(' – '.htmlspecialchars($recent['sum']));
$form->addElement(form_makeCloseTag('span'));
$form->addElement(form_makeOpenTag('span', array('class' => 'user')));
@@ -1389,7 +1395,7 @@ function html_edit(){
}
$form->addHidden('target', $data['target']);
- $form->addElement(form_makeOpenTag('div', array('id'=>'wiki__editbar')));
+ $form->addElement(form_makeOpenTag('div', array('id'=>'wiki__editbar', 'class'=>'editBar')));
$form->addElement(form_makeOpenTag('div', array('id'=>'size__ctl')));
$form->addElement(form_makeCloseTag('div'));
if ($wr) {
@@ -1417,17 +1423,16 @@ function html_edit(){
if ($wr) {
// sets changed to true when previewed
- echo '<script type="text/javascript" charset="utf-8"><!--//--><![CDATA[//><!--'. NL;
+ echo '<script type="text/javascript"><!--//--><![CDATA[//><!--'. NL;
echo 'textChanged = ' . ($mod ? 'true' : 'false');
echo '//--><!]]></script>' . NL;
} ?>
- <div style="width:99%;">
+ <div class="editBox">
<div class="toolbar">
- <div id="draft__status"><?php if(!empty($INFO['draft'])) echo $lang['draftdate'].' '.dformat();?></div>
- <div id="tool__bar"><?php if ($wr && $data['media_manager']){?><a href="<?php echo DOKU_BASE?>lib/exe/mediamanager.php?ns=<?php echo $INFO['namespace']?>"
- target="_blank"><?php echo $lang['mediaselect'] ?></a><?php }?></div>
-
+ <div id="draft__status"><?php if(!empty($INFO['draft'])) echo $lang['draftdate'].' '.dformat();?></div>
+ <div id="tool__bar"><?php if ($wr && $data['media_manager']){?><a href="<?php echo DOKU_BASE?>lib/exe/mediamanager.php?ns=<?php echo $INFO['namespace']?>"
+ target="_blank"><?php echo $lang['mediaselect'] ?></a><?php }?></div>
</div>
<?php
@@ -1721,11 +1726,11 @@ function html_TOC($toc){
if(!count($toc)) return '';
global $lang;
$out = '<!-- TOC START -->'.DOKU_LF;
- $out .= '<div class="toc">'.DOKU_LF;
- $out .= '<div class="tocheader toctoggle" id="toc__header">';
+ $out .= '<div id="dw__toc">'.DOKU_LF;
+ $out .= '<h3 class="toggle">';
$out .= $lang['toc'];
- $out .= '</div>'.DOKU_LF;
- $out .= '<div id="toc__inside">'.DOKU_LF;
+ $out .= '</h3>'.DOKU_LF;
+ $out .= '<div>'.DOKU_LF;
$out .= html_buildlist($toc,'toc','html_list_toc','html_li_default',true);
$out .= '</div>'.DOKU_LF.'</div>'.DOKU_LF;
$out .= '<!-- TOC END -->'.DOKU_LF;
@@ -1742,8 +1747,7 @@ function html_list_toc($item){
$link = $item['link'];
}
- return '<span class="li"><a href="'.$link.'" class="toc">'.
- hsc($item['title']).'</a></span>';
+ return '<a href="'.$link.'">'.hsc($item['title']).'</a>';
}
/**
diff --git a/inc/lang/bg/lang.php b/inc/lang/bg/lang.php
index 7a246024d..562dc78b3 100644
--- a/inc/lang/bg/lang.php
+++ b/inc/lang/bg/lang.php
@@ -9,8 +9,8 @@
*/
$lang['encoding'] = 'utf-8';
$lang['direction'] = 'ltr';
-$lang['doublequoteopening'] = '“'; //&ldquo;
-$lang['doublequoteclosing'] = '”'; //&rdquo;
+$lang['doublequoteopening'] = '"'; //&ldquo;
+$lang['doublequoteclosing'] = '"'; //&rdquo;
$lang['singlequoteopening'] = '‘'; //&lsquo;
$lang['singlequoteclosing'] = '’'; //&rsquo;
$lang['apostrophe'] = '’'; //&rsquo;
@@ -98,6 +98,7 @@ $lang['searchmedia_in'] = 'Търсене в %s';
$lang['txt_upload'] = 'Изберете файл за качване';
$lang['txt_filename'] = 'Качи като (незадължително)';
$lang['txt_overwrt'] = 'Презапиши съществуващите файлове';
+$lang['maxuploadsize'] = 'Макс. размер за отделните файлове е %s.';
$lang['lockedby'] = 'В момента е заключена от';
$lang['lockexpire'] = 'Ще бъде отключена на';
@@ -161,7 +162,7 @@ $lang['deletefail'] = '"%s" не може да бъде изтрит
$lang['mediainuse'] = 'Файлът "%s" не бе изтрит - все още се ползва.';
$lang['namespaces'] = 'Именни пространства';
$lang['mediafiles'] = 'Налични файлове в';
-$lang['accessdenied'] = 'Нямате разрешение да преглеждате страницата.';
+$lang['accessdenied'] = 'Нямате необходимите права за преглеждане на страницата.';
$lang['mediausage'] = 'Ползвайте следния синтаксис, за да упоменете файла:';
$lang['mediaview'] = 'Преглед на оригиналния файл';
$lang['mediaroot'] = 'root';
@@ -290,7 +291,6 @@ $lang['i_superuser'] = 'Супер потребител';
$lang['i_problems'] = 'Открити са проблеми, които възпрепятстват инсталирането. Ще можете да продължите след като отстраните долуизброените проблеми.';
$lang['i_modified'] = 'Поради мерки за сигурност инсталаторът работи само с нови и непроменени инсталационни файлове.
Трябва да разархивирате отново файловете от сваления архив или да се посъветвате с <a href="http://dokuwiki.org/install">Инструкциите за инсталиране на Dokuwiki</a>.';
-
$lang['i_funcna'] = 'PHP функцията <code>%s</code> не е достъпна. Може би е забранена от доставчика на хостинг.';
$lang['i_phpver'] = 'Инсталираната версия <code>%s</code> на PHP е по-стара от необходимата <code>%s</code>. Актуализирайте PHP инсталацията.';
$lang['i_permfail'] = '<code>%s</code> не е достъпна за писане от DokuWiki. Трябва да промените правата за достъп до директорията!';
diff --git a/inc/lang/bg/mailtext.txt b/inc/lang/bg/mailtext.txt
index ad0024a8d..a5f0cbd92 100644
--- a/inc/lang/bg/mailtext.txt
+++ b/inc/lang/bg/mailtext.txt
@@ -1,4 +1,4 @@
-Страница във DokuWiki е добавена или променена. Ето детайлите:
+Страница в DokuWiki е добавена или променена. Ето детайлите:
Дата : @DATE@
Браузър : @BROWSER@
diff --git a/inc/lang/bg/mailwrap.html b/inc/lang/bg/mailwrap.html
new file mode 100644
index 000000000..26b0a1e6a
--- /dev/null
+++ b/inc/lang/bg/mailwrap.html
@@ -0,0 +1,13 @@
+<html>
+<head>
+ <title>@TITLE@</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+</head>
+<body>
+
+@HTMLBODY@
+
+<br /><hr />
+<small>Писмото е генерирано от DokuWiki на адрес @DOKUWIKIURL@.</small>
+</body>
+</html>
diff --git a/inc/lang/de-informal/lang.php b/inc/lang/de-informal/lang.php
index 61e5ef3d8..37469522f 100644
--- a/inc/lang/de-informal/lang.php
+++ b/inc/lang/de-informal/lang.php
@@ -16,7 +16,7 @@
* @author Alexander Fischer <tbanus@os-forge.net>
* @author Juergen Schwarzer <jschwarzer@freenet.de>
* @author Marcel Metz <marcel_metz@gmx.de>
- * @author Matthias Schulte <mailinglist@lupo49.de>
+ * @author Matthias Schulte <dokuwiki@lupo49.de>
* @author Christian Wichmann <nospam@zone0.de>
* @author Pierre Corell <info@joomla-praxis.de>
*/
@@ -104,6 +104,7 @@ $lang['searchmedia_in'] = 'Suche in %s';
$lang['txt_upload'] = 'Datei zum Hochladen auswählen';
$lang['txt_filename'] = 'Hochladen als (optional)';
$lang['txt_overwrt'] = 'Bestehende Datei überschreiben';
+$lang['maxuploadsize'] = 'Max. %s pro Datei-Upload.';
$lang['lockedby'] = 'Momentan gesperrt von';
$lang['lockexpire'] = 'Sperre läuft ab am';
$lang['js']['willexpire'] = 'Die Sperre zur Bearbeitung dieser Seite läuft in einer Minute ab.\nUm Bearbeitungskonflikte zu vermeiden, solltest du sie durch einen Klick auf den Vorschau-Knopf verlängern.';
@@ -196,6 +197,11 @@ $lang['external_edit'] = 'Externe Bearbeitung';
$lang['summary'] = 'Zusammenfassung';
$lang['noflash'] = 'Das <a href="http://www.adobe.com/products/flashplayer/">Adobe Flash Plugin</a> wird benötigt, um diesen Inhalt anzuzeigen.';
$lang['download'] = 'Download-Teil';
+$lang['tools'] = 'Werkzeuge';
+$lang['user_tools'] = 'Benutzer-Werkzeuge';
+$lang['site_tools'] = 'Webseiten-Werkzeuge';
+$lang['page_tools'] = 'Seiten-Werkzeuge';
+$lang['skip_to_content'] = 'zum Inhalt springen';
$lang['mail_newpage'] = 'Neue Seite:';
$lang['mail_changed'] = 'Seite geändert:';
$lang['mail_subscribe_list'] = 'Seite hat sich im Namespace geändert:';
@@ -248,13 +254,13 @@ $lang['img_keywords'] = 'Schlagwörter';
$lang['img_width'] = 'Breite';
$lang['img_height'] = 'Höhe';
$lang['img_manager'] = 'Im Medien-Manager anzeigen';
-$lang['subscr_subscribe_success'] = 'Die Seite %s wurde zur Abonnementenliste von %s hinzugefügt';
-$lang['subscr_subscribe_error'] = 'Fehler beim Hinzufügen von %s zur Abonnementenliste von %s';
+$lang['subscr_subscribe_success'] = 'Die Seite %s wurde zur Abonnementliste von %s hinzugefügt';
+$lang['subscr_subscribe_error'] = 'Fehler beim Hinzufügen von %s zur Abonnementliste von %s';
$lang['subscr_subscribe_noaddress'] = 'In deinem Account ist keine E-Mail-Adresse hinterlegt. Dadurch kann die Seite nicht abonniert werden';
-$lang['subscr_unsubscribe_success'] = 'Die Seite %s wurde von der Abonnementenliste von %s entfernt';
-$lang['subscr_unsubscribe_error'] = 'Fehler beim Entfernen von %s von der Abonnementenliste von %s';
-$lang['subscr_already_subscribed'] = '%s ist bereits auf der Abonnementenliste von %s';
-$lang['subscr_not_subscribed'] = '%s ist nicht auf der Abonnementenliste von %s';
+$lang['subscr_unsubscribe_success'] = 'Die Seite %s wurde von der Abonnementliste von %s entfernt';
+$lang['subscr_unsubscribe_error'] = 'Fehler beim Entfernen von %s von der Abonnementliste von %s';
+$lang['subscr_already_subscribed'] = '%s ist bereits auf der Abonnementliste von %s';
+$lang['subscr_not_subscribed'] = '%s ist nicht auf der Abonnementliste von %s';
$lang['subscr_m_not_subscribed'] = 'Du hast kein Abonnement von dieser Seite oder dem Namensraum.';
$lang['subscr_m_new_header'] = 'Abonnementen hinzufügen';
$lang['subscr_m_current_header'] = 'Aktive Abonnements';
@@ -266,6 +272,7 @@ $lang['subscr_style_digest'] = 'E-Mail mit zusammengefasster Übersicht der Se
$lang['subscr_style_list'] = 'Auflistung aller geänderten Seiten seit der letzten E-Mail (alle %.2f Tage)';
$lang['authmodfailed'] = 'Benutzerüberprüfung nicht möglich. Bitte wende dich an den Admin.';
$lang['authtempfail'] = 'Benutzerüberprüfung momentan nicht möglich. Falls das Problem andauert, wende dich an den Admin.';
+$lang['authpwdexpire'] = 'Dein Passwort läuft in %d Tag(en) ab, du solltest es es bald ändern.';
$lang['i_chooselang'] = 'Wähle deine Sprache';
$lang['i_installer'] = 'DokuWiki-Installation';
$lang['i_wikiname'] = 'Wiki-Name';
diff --git a/inc/lang/de-informal/mailwrap.html b/inc/lang/de-informal/mailwrap.html
new file mode 100644
index 000000000..420fdf83e
--- /dev/null
+++ b/inc/lang/de-informal/mailwrap.html
@@ -0,0 +1,13 @@
+<html>
+<head>
+ <title>@TITLE@</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+</head>
+<body>
+
+@HTMLBODY@
+
+<br /><hr />
+<small>Diese Mail kommt vom DokuWiki auf @DOKUWIKIURL@.</small>
+</body>
+</html>
diff --git a/inc/lang/de-informal/resetpwd.txt b/inc/lang/de-informal/resetpwd.txt
new file mode 100644
index 000000000..8423bd801
--- /dev/null
+++ b/inc/lang/de-informal/resetpwd.txt
@@ -0,0 +1,4 @@
+====== Neues Passwort setzen ======
+
+Bitte gib ein neues Passwort für deinen Wiki-Zugang ein.
+
diff --git a/inc/lang/de/lang.php b/inc/lang/de/lang.php
index cfbe04396..4ea75157b 100644
--- a/inc/lang/de/lang.php
+++ b/inc/lang/de/lang.php
@@ -106,6 +106,7 @@ $lang['searchmedia_in'] = 'Suche in %s';
$lang['txt_upload'] = 'Datei zum Hochladen auswählen';
$lang['txt_filename'] = 'Hochladen als (optional)';
$lang['txt_overwrt'] = 'Bestehende Datei überschreiben';
+$lang['maxuploadsize'] = 'Max. %s pro Datei-Upload.';
$lang['lockedby'] = 'Momentan gesperrt von';
$lang['lockexpire'] = 'Sperre läuft ab am';
$lang['js']['willexpire'] = 'Die Sperre zur Bearbeitung dieser Seite läuft in einer Minute ab.\nUm Bearbeitungskonflikte zu vermeiden, sollten Sie sie durch einen Klick auf den Vorschau-Knopf verlängern.';
diff --git a/inc/lang/de/mailwrap.html b/inc/lang/de/mailwrap.html
new file mode 100644
index 000000000..420fdf83e
--- /dev/null
+++ b/inc/lang/de/mailwrap.html
@@ -0,0 +1,13 @@
+<html>
+<head>
+ <title>@TITLE@</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+</head>
+<body>
+
+@HTMLBODY@
+
+<br /><hr />
+<small>Diese Mail kommt vom DokuWiki auf @DOKUWIKIURL@.</small>
+</body>
+</html>
diff --git a/inc/lang/ru/lang.php b/inc/lang/ru/lang.php
index 94af441b7..4c3d26b1d 100644
--- a/inc/lang/ru/lang.php
+++ b/inc/lang/ru/lang.php
@@ -55,6 +55,7 @@ $lang['btn_backtomedia'] = 'Вернуться к выбору медиа
$lang['btn_subscribe'] = 'Подписаться (все правки)';
$lang['btn_profile'] = 'Профиль';
$lang['btn_reset'] = 'Сброс';
+$lang['btn_resendpwd'] = 'Установить новый пароль';
$lang['btn_draft'] = 'Править черновик';
$lang['btn_recover'] = 'Восстановить черновик';
$lang['btn_draftdel'] = 'Удалить черновик';
@@ -91,6 +92,7 @@ $lang['profnoempty'] = 'Логин и адрес электронно
$lang['profchanged'] = 'Профиль пользователя успешно обновлён.';
$lang['pwdforget'] = 'Забыли пароль? Получите новый';
$lang['resendna'] = 'Данная вики не поддерживает повторную отправку пароля.';
+$lang['resendpwd'] = 'Установить новый пароль для';
$lang['resendpwdmissing'] = 'Вы должны заполнить все поля формы.';
$lang['resendpwdnouser'] = 'Пользователь с таким логином не обнаружен в нашей базе данных.';
$lang['resendpwdbadauth'] = 'Извините, неверный код авторизации. Убедитесь, что вы полностью скопировали ссылку. ';
@@ -103,6 +105,7 @@ $lang['searchmedia_in'] = 'Поиск в %s';
$lang['txt_upload'] = 'Выберите файл для загрузки';
$lang['txt_filename'] = 'Введите имя файла в вики (необязательно)';
$lang['txt_overwrt'] = 'Перезаписать существующий файл';
+$lang['maxuploadsize'] = 'Максимальный размер загружаемого файла %s';
$lang['lockedby'] = 'В данный момент заблокирован';
$lang['lockexpire'] = 'Блокировка истекает в';
$lang['js']['willexpire'] = 'Ваша блокировка этой страницы на редактирование истекает в течении минуты.\nЧтобы предотвратить конфликты используйте кнопку "Просмотр" для сброса таймера блокировки.';
@@ -270,6 +273,7 @@ $lang['subscr_style_digest'] = 'сводка изменений по кажд
$lang['subscr_style_list'] = 'перечислять изменившиеся страницы с прошлого уведомления';
$lang['authmodfailed'] = 'Неправильная конфигурация аутентификации пользователя. Пожалуйста, сообщите об этом своему администратору вики.';
$lang['authtempfail'] = 'Аутентификация пользователей временно недоступна. Если проблема продолжается какое-то время, пожалуйста, сообщите об этом своему администратору вики.';
+$lang['authpwdexpire'] = 'Действие вашего пароля истекает через %d дней. Вы должны изменить его как можно скорее';
$lang['i_chooselang'] = 'Выберите свой язык/Choose your language';
$lang['i_installer'] = 'Установка «ДокуВики»';
$lang['i_wikiname'] = 'Название вики';
diff --git a/inc/lang/ru/resetpwd.txt b/inc/lang/ru/resetpwd.txt
new file mode 100644
index 000000000..81a46a7d3
--- /dev/null
+++ b/inc/lang/ru/resetpwd.txt
@@ -0,0 +1,3 @@
+====== Установка нового пароля ======
+
+Пожалуйста введите новый пароль для вашей учетной записи для этой вики.
diff --git a/inc/media.php b/inc/media.php
index 6c92225ff..4bca2e71a 100644
--- a/inc/media.php
+++ b/inc/media.php
@@ -1452,7 +1452,7 @@ function media_printfile_thumbs($item,$auth,$jump=false,$display_namespace=false
$size .= (int) $item['meta']->getField('File.Height');
echo '<dd class="size">'.$size.'</dd>'.NL;
} else {
- echo '<dd class="size">&nbsp;</dd>'.NL;
+ echo '<dd class="size">&#160;</dd>'.NL;
}
$date = dformat($item['mtime']);
echo '<dd class="date">'.$date.'</dd>'.NL;
@@ -1737,7 +1737,7 @@ function media_nstree_li($item){
if($item['open']){
$class .= ' open';
$img = DOKU_BASE.'lib/images/minus.gif';
- $alt = '&minus;';
+ $alt = '−';
}else{
$class .= ' closed';
$img = DOKU_BASE.'lib/images/plus.gif';
diff --git a/inc/pageutils.php b/inc/pageutils.php
index 95f791364..5e741c491 100644
--- a/inc/pageutils.php
+++ b/inc/pageutils.php
@@ -623,3 +623,27 @@ function utf8_decodeFN($file){
return urldecode($file);
}
+/**
+ * Find a page in the current namespace (determined from $ID) or any
+ * higher namespace
+ *
+ * Used for sidebars, but can be used other stuff as well
+ *
+ * @todo add event hook
+ * @param string $page the pagename you're looking for
+ * @return string|false the full page id of the found page, false if any
+ */
+function page_findnearest($page){
+ global $ID;
+
+ $ns = $ID;
+ do {
+ $ns = getNS($ns);
+ $pageid = ltrim("$ns:$page",':');
+ if(page_exists($pageid)){
+ return $pageid;
+ }
+ } while($ns);
+
+ return false;
+}
diff --git a/inc/parser/xhtml.php b/inc/parser/xhtml.php
index 4345b494f..2f09dbd4f 100644
--- a/inc/parser/xhtml.php
+++ b/inc/parser/xhtml.php
@@ -109,7 +109,7 @@ class Doku_Renderer_xhtml extends Doku_Renderer {
// open the footnote and set the anchor and backlink
$this->doc .= '<div class="fn">';
- $this->doc .= '<sup><a href="#fnt__'.$id.'" id="fn__'.$id.'" name="fn__'.$id.'" class="fn_bot">';
+ $this->doc .= '<sup><a href="#fnt__'.$id.'" id="fn__'.$id.'" class="fn_bot">';
$this->doc .= $id.')</a></sup> '.DOKU_LF;
// get any other footnotes that use the same markup
@@ -118,7 +118,7 @@ class Doku_Renderer_xhtml extends Doku_Renderer {
if (count($alt)) {
foreach ($alt as $ref) {
// set anchor and backlink for the other footnotes
- $this->doc .= ', <sup><a href="#fnt__'.($ref+1).'" id="fn__'.($ref+1).'" name="fn__'.($ref+1).'" class="fn_bot">';
+ $this->doc .= ', <sup><a href="#fnt__'.($ref+1).'" id="fn__'.($ref+1).'" class="fn_bot">';
$this->doc .= ($ref+1).')</a></sup> '.DOKU_LF;
}
}
@@ -181,9 +181,9 @@ class Doku_Renderer_xhtml extends Doku_Renderer {
if ($level <= $conf['maxseclevel']) {
$this->doc .= ' class="' . $this->startSectionEdit($pos, 'section', $text) . '"';
}
- $this->doc .= '><a name="'.$hid.'" id="'.$hid.'">';
+ $this->doc .= ' id="'.$hid.'">';
$this->doc .= $this->_xmlEntities($text);
- $this->doc .= "</a></h$level>".DOKU_LF;
+ $this->doc .= "</h$level>".DOKU_LF;
}
function section_open($level) {
@@ -316,7 +316,7 @@ class Doku_Renderer_xhtml extends Doku_Renderer {
}
// output the footnote reference and link
- $this->doc .= '<sup><a href="#fn__'.$id.'" name="fnt__'.$id.'" id="fnt__'.$id.'" class="fn_top">'.$id.')</a></sup>';
+ $this->doc .= '<sup><a href="#fn__'.$id.'" id="fnt__'.$id.'" class="fn_top">'.$id.')</a></sup>';
}
function listu_open() {
@@ -471,8 +471,8 @@ class Doku_Renderer_xhtml extends Doku_Renderer {
$title = $this->_xmlEntities($this->acronyms[$acronym]);
- $this->doc .= '<acronym title="'.$title
- .'">'.$this->_xmlEntities($acronym).'</acronym>';
+ $this->doc .= '<abbr title="'.$title
+ .'">'.$this->_xmlEntities($acronym).'</abbr>';
} else {
$this->doc .= $this->_xmlEntities($acronym);
@@ -483,7 +483,7 @@ class Doku_Renderer_xhtml extends Doku_Renderer {
if ( array_key_exists($smiley, $this->smileys) ) {
$title = $this->_xmlEntities($this->smileys[$smiley]);
$this->doc .= '<img src="'.DOKU_BASE.'lib/images/smileys/'.$this->smileys[$smiley].
- '" class="middle" alt="'.
+ '" class="icon" alt="'.
$this->_xmlEntities($smiley).'" />';
} else {
$this->doc .= $this->_xmlEntities($smiley);
@@ -549,7 +549,7 @@ class Doku_Renderer_xhtml extends Doku_Renderer {
global $ID;
$name = $this->_getLinkTitle($name, $hash, $isImage);
$hash = $this->_headerToLink($hash);
- $title = $ID.' &crarr;';
+ $title = $ID.' ↵';
$this->doc .= '<a href="#'.$hash.'" title="'.$title.'" class="wikilink1">';
$this->doc .= $name;
$this->doc .= '</a>';
@@ -1075,10 +1075,6 @@ class Doku_Renderer_xhtml extends Doku_Renderer {
$ret .= '<img src="'.ml($src,array('w'=>$width,'h'=>$height,'cache'=>$cache)).'"';
$ret .= ' class="media'.$align.'"';
- // make left/right alignment for no-CSS view work (feeds)
- if($align == 'right') $ret .= ' align="right"';
- if($align == 'left') $ret .= ' align="left"';
-
if ($title) {
$ret .= ' title="' . $title . '"';
$ret .= ' alt="' . $title .'"';
diff --git a/inc/template.php b/inc/template.php
index d007f47ef..76d4d4bbe 100644
--- a/inc/template.php
+++ b/inc/template.php
@@ -354,12 +354,8 @@ function tpl_metaheaders($alt=true){
}
// load stylesheets
- $head['link'][] = array('rel'=>'stylesheet', 'media'=>'screen', 'type'=>'text/css',
+ $head['link'][] = array('rel'=>'stylesheet', 'type'=>'text/css',
'href'=>DOKU_BASE.'lib/exe/css.php?t='.$conf['template'].'&tseed='.$tseed);
- $head['link'][] = array('rel'=>'stylesheet', 'media'=>'all', 'type'=>'text/css',
- 'href'=>DOKU_BASE.'lib/exe/css.php?s=all&t='.$conf['template'].'&tseed='.$tseed);
- $head['link'][] = array('rel'=>'stylesheet', 'media'=>'print', 'type'=>'text/css',
- 'href'=>DOKU_BASE.'lib/exe/css.php?s=print&t='.$conf['template'].'&tseed='.$tseed);
// make $INFO and other vars available to JavaScripts
$json = new JSON();
@@ -596,7 +592,7 @@ function tpl_get_action($type) {
$accesskey = 'x';
break;
case 'top':
- $accesskey = 'x';
+ $accesskey = 't';
$params = array();
$id = '#dokuwiki__top';
break;
@@ -718,7 +714,7 @@ function tpl_searchform($ajax=true,$autocomplete=true){
*
* @author Andreas Gohr <andi@splitbrain.org>
*/
-function tpl_breadcrumbs($sep='&bull;'){
+function tpl_breadcrumbs($sep='•'){
global $lang;
global $conf;
@@ -761,7 +757,7 @@ function tpl_breadcrumbs($sep='&bull;'){
* @author <fredrik@averpil.com>
* @todo May behave strangely in RTL languages
*/
-function tpl_youarehere($sep=' &raquo; '){
+function tpl_youarehere($sep=' » '){
global $conf;
global $ID;
global $lang;
@@ -847,7 +843,7 @@ function tpl_pageinfo($ret=false){
if($INFO['exists']){
$out = '';
$out .= $fn;
- $out .= ' &middot; ';
+ $out .= ' · ';
$out .= $lang['lastmod'];
$out .= ': ';
$out .= $date;
@@ -858,7 +854,7 @@ function tpl_pageinfo($ret=false){
$out .= ' ('.$lang['external_edit'].')';
}
if($INFO['locked']){
- $out .= ' &middot; ';
+ $out .= ' · ';
$out .= $lang['lockedby'];
$out .= ': ';
$out .= editorinfo($INFO['locked']);
@@ -1398,6 +1394,18 @@ function tpl_include_page($pageid,$print=true){
if(!$print) return $html;
echo $html;
+ return $html;
+}
+
+/**
+ * Include the sidebar, will check current namespaces first
+ */
+function tpl_sidebar($print=true){
+ global $conf;
+
+ $sidebar = page_findnearest($conf['sidebar']);
+ if($sidebar) return tpl_include_page($sidebar, $print);
+ return '';
}
/**
diff --git a/install.php b/install.php
index a1d406209..3d9fddbb2 100644
--- a/install.php
+++ b/install.php
@@ -78,7 +78,7 @@ header('Content-Type: text/html; charset=utf-8');
select.text, input.text { width: 30em; margin: 0 0.5em; }
a {text-decoration: none}
</style>
- <script type="text/javascript" language="javascript">
+ <script type="text/javascript">
function acltoggle(){
var cb = document.getElementById('acl');
var fs = document.getElementById('acldep');
diff --git a/lib/exe/css.php b/lib/exe/css.php
index 5cc4ab830..8de3db11b 100644
--- a/lib/exe/css.php
+++ b/lib/exe/css.php
@@ -9,6 +9,7 @@
if(!defined('DOKU_INC')) define('DOKU_INC',dirname(__FILE__).'/../../');
if(!defined('NOSESSION')) define('NOSESSION',true); // we do not use a session or authentication here (better caching)
if(!defined('DOKU_DISABLE_GZIP_OUTPUT')) define('DOKU_DISABLE_GZIP_OUTPUT',1); // we gzip ourself here
+if(!defined('NL')) define('NL',"\n");
require_once(DOKU_INC.'inc/init.php');
// Main (don't run when UNIT test)
@@ -31,9 +32,12 @@ function css_out(){
global $config_cascade;
global $INPUT;
- $mediatype = 'screen';
- if (in_array($INPUT->str('s'), array('all', 'print', 'feed'))) {
- $mediatype = $INPUT->str('s');
+ if ($INPUT->str('s') == 'feed') {
+ $mediatypes = array('feed');
+ $type = 'feed';
+ } else {
+ $mediatypes = array('screen', 'all', 'print');
+ $type = '';
}
$tpl = trim(preg_replace('/[^\w-]+/','',$INPUT->str('t')));
@@ -46,7 +50,7 @@ function css_out(){
}
// The generated script depends on some dynamic options
- $cache = new cache('styles'.$_SERVER['HTTP_HOST'].$_SERVER['SERVER_PORT'].DOKU_BASE.$tplinc.$mediatype,'.css');
+ $cache = new cache('styles'.$_SERVER['HTTP_HOST'].$_SERVER['SERVER_PORT'].DOKU_BASE.$tplinc.$type,'.css');
// load template styles
$tplstyles = array();
@@ -57,57 +61,79 @@ function css_out(){
}
}
- // Array of needed files and their web locations, the latter ones
- // are needed to fix relative paths in the stylesheets
- $files = array();
- // load core styles
- $files[DOKU_INC.'lib/styles/'.$mediatype.'.css'] = DOKU_BASE.'lib/styles/';
- // load jQuery-UI theme
- $files[DOKU_INC.'lib/scripts/jquery/jquery-ui-theme/smoothness.css'] = DOKU_BASE.'lib/scripts/jquery/jquery-ui-theme/';
- // load plugin styles
- $files = array_merge($files, css_pluginstyles($mediatype));
- // load template styles
- if (isset($tplstyles[$mediatype])) {
- $files = array_merge($files, $tplstyles[$mediatype]);
- }
- // if old 'default' userstyle setting exists, make it 'screen' userstyle for backwards compatibility
- if (isset($config_cascade['userstyle']['default'])) {
- $config_cascade['userstyle']['screen'] = $config_cascade['userstyle']['default'];
- }
- // load user styles
- if(isset($config_cascade['userstyle'][$mediatype])){
- $files[$config_cascade['userstyle'][$mediatype]] = DOKU_BASE;
- }
- // load rtl styles
- // @todo: this currently adds the rtl styles only to the 'screen' media type
- // but 'print' and 'all' should also be supported
- if ($mediatype=='screen') {
- if($lang['direction'] == 'rtl'){
- if (isset($tplstyles['rtl'])) $files = array_merge($files, $tplstyles['rtl']);
+ // start output buffering
+ ob_start();
+
+ foreach($mediatypes as $mediatype) {
+ // Array of needed files and their web locations, the latter ones
+ // are needed to fix relative paths in the stylesheets
+ $files = array();
+ // load core styles
+ $files[DOKU_INC.'lib/styles/'.$mediatype.'.css'] = DOKU_BASE.'lib/styles/';
+ // load jQuery-UI theme
+ if ($mediatype == 'screen') {
+ $files[DOKU_INC.'lib/scripts/jquery/jquery-ui-theme/smoothness.css'] = DOKU_BASE.'lib/scripts/jquery/jquery-ui-theme/';
+ }
+ // load plugin styles
+ $files = array_merge($files, css_pluginstyles($mediatype));
+ // load template styles
+ if (isset($tplstyles[$mediatype])) {
+ $files = array_merge($files, $tplstyles[$mediatype]);
+ }
+ // if old 'default' userstyle setting exists, make it 'screen' userstyle for backwards compatibility
+ if (isset($config_cascade['userstyle']['default'])) {
+ $config_cascade['userstyle']['screen'] = $config_cascade['userstyle']['default'];
+ }
+ // load user styles
+ if(isset($config_cascade['userstyle'][$mediatype])){
+ $files[$config_cascade['userstyle'][$mediatype]] = DOKU_BASE;
+ }
+ // load rtl styles
+ // note: this adds the rtl styles only to the 'screen' media type
+ // @deprecated 2012-04-09: rtl will cease to be a mode of its own,
+ // please use "[dir=rtl]" in any css file in all, screen or print mode instead
+ if ($mediatype=='screen') {
+ if($lang['direction'] == 'rtl'){
+ if (isset($tplstyles['rtl'])) $files = array_merge($files, $tplstyles['rtl']);
+ }
}
- }
- $cache_files = array_merge(array_keys($files), getConfigFiles('main'));
- $cache_files[] = $tplinc.'style.ini';
- $cache_files[] = __FILE__;
+ $cache_files = array_merge(array_keys($files), getConfigFiles('main'));
+ $cache_files[] = $tplinc.'style.ini';
+ $cache_files[] = __FILE__;
- // check cache age & handle conditional request
- // This may exit if a cache can be used
- http_cached($cache->cache,
- $cache->useCache(array('files' => $cache_files)));
+ // check cache age & handle conditional request
+ // This may exit if a cache can be used
+ http_cached($cache->cache,
+ $cache->useCache(array('files' => $cache_files)));
- // start output buffering and build the stylesheet
- ob_start();
+ // build the stylesheet
- // print the default classes for interwiki links and file downloads
- css_interwiki();
- css_filetypes();
+ // print the default classes for interwiki links and file downloads
+ if ($mediatype == 'screen') {
+ css_interwiki();
+ css_filetypes();
+ }
- // load files
- foreach($files as $file => $location){
- print css_loadfile($file, $location);
+ // load files
+ $css_content = '';
+ foreach($files as $file => $location){
+ $css_content .= css_loadfile($file, $location);
+ }
+ switch ($mediatype) {
+ case 'screen':
+ print NL.'@media screen { /* START screen styles */'.NL.$css_content.NL.'} /* /@media END screen styles */'.NL;
+ break;
+ case 'print':
+ print NL.'@media print { /* START print styles */'.NL.$css_content.NL.'} /* /@media END print styles */'.NL;
+ break;
+ case 'all':
+ case 'feed':
+ default:
+ print NL.'/* START rest styles */ '.NL.$css_content.NL.'/* END rest styles */'.NL;
+ break;
+ }
}
-
// end output buffering and get contents
$css = ob_get_contents();
ob_end_clean();
@@ -275,6 +301,8 @@ function css_pluginstyles($mediatype='screen'){
if ($mediatype=='screen') {
$list[DOKU_PLUGIN."$p/style.css"] = DOKU_BASE."lib/plugins/$p/";
}
+ // @deprecated 2012-04-09: rtl will cease to be a mode of its own,
+ // please use "[dir=rtl]" in any css file in all, screen or print mode instead
if($lang['direction'] == 'rtl'){
$list[DOKU_PLUGIN."$p/rtl.css"] = DOKU_BASE."lib/plugins/$p/";
}
diff --git a/lib/images/interwiki/amazon.de.gif b/lib/images/interwiki/amazon.de.gif
index 6e36a051a..a0d2cd4cb 100644
--- a/lib/images/interwiki/amazon.de.gif
+++ b/lib/images/interwiki/amazon.de.gif
Binary files differ
diff --git a/lib/images/interwiki/amazon.gif b/lib/images/interwiki/amazon.gif
index 6e36a051a..a0d2cd4cb 100644
--- a/lib/images/interwiki/amazon.gif
+++ b/lib/images/interwiki/amazon.gif
Binary files differ
diff --git a/lib/images/interwiki/amazon.uk.gif b/lib/images/interwiki/amazon.uk.gif
index 6e36a051a..a0d2cd4cb 100644
--- a/lib/images/interwiki/amazon.uk.gif
+++ b/lib/images/interwiki/amazon.uk.gif
Binary files differ
diff --git a/lib/images/interwiki/callto.gif b/lib/images/interwiki/callto.gif
index f6d424554..60158c565 100644
--- a/lib/images/interwiki/callto.gif
+++ b/lib/images/interwiki/callto.gif
Binary files differ
diff --git a/lib/images/interwiki/paypal.gif b/lib/images/interwiki/paypal.gif
index 1d2834062..a2dc89431 100644
--- a/lib/images/interwiki/paypal.gif
+++ b/lib/images/interwiki/paypal.gif
Binary files differ
diff --git a/lib/images/interwiki/skype.gif b/lib/images/interwiki/skype.gif
new file mode 100644
index 000000000..2c900a8b2
--- /dev/null
+++ b/lib/images/interwiki/skype.gif
Binary files differ
diff --git a/lib/images/interwiki/skype.png b/lib/images/interwiki/skype.png
deleted file mode 100644
index c70216702..000000000
--- a/lib/images/interwiki/skype.png
+++ /dev/null
Binary files differ
diff --git a/lib/plugins/acl/admin.php b/lib/plugins/acl/admin.php
index c3461b78b..a0d2e430e 100644
--- a/lib/plugins/acl/admin.php
+++ b/lib/plugins/acl/admin.php
@@ -84,7 +84,7 @@ class admin_plugin_acl extends DokuWiki_Admin_Plugin {
$this->who = '@'.ltrim($auth->cleanGroup($who),'@');
}elseif($_REQUEST['acl_t'] == '__u__' && $who){
$this->who = ltrim($who,'@');
- if($this->who != '%USER%'){ #keep wildcard as is
+ if($this->who != '%USER%' && $this->who != '%GROUP%'){ #keep wildcard as is
$this->who = $auth->cleanUser($this->who);
}
}elseif($_REQUEST['acl_t'] &&
@@ -140,7 +140,7 @@ class admin_plugin_acl extends DokuWiki_Admin_Plugin {
if ($who!='@ALL') {
$who = '@'.ltrim($auth->cleanGroup($who),'@');
}
- } elseif ($who != '%USER%'){ #keep wildcard as is
+ } elseif ($who != '%USER%' && $who != '%GROUP%'){ #keep wildcard as is
$who = $auth->cleanUser($who);
}
$who = auth_nameencode($who,true);
@@ -507,7 +507,7 @@ class admin_plugin_acl extends DokuWiki_Admin_Plugin {
if($item['type']=='d'){
if($item['open']){
$img = DOKU_BASE.'lib/images/minus.gif';
- $alt = '&minus;';
+ $alt = '−';
}else{
$img = DOKU_BASE.'lib/images/plus.gif';
$alt = '+';
@@ -747,7 +747,7 @@ class admin_plugin_acl extends DokuWiki_Admin_Plugin {
//build code
$ret .= '<label for="pbox'.$label.'" title="'.$this->getLang('acl_perm'.$perm).'"'.$class.'>';
- $ret .= '<input '.buildAttributes($atts).' />&nbsp;';
+ $ret .= '<input '.buildAttributes($atts).' />&#160;';
$ret .= $this->getLang('acl_perm'.$perm);
$ret .= '</label>'.NL;
}
@@ -783,7 +783,7 @@ class admin_plugin_acl extends DokuWiki_Admin_Plugin {
echo ' <option value="__g__" class="aclgroup"'.$gsel.'>'.$this->getLang('acl_group').':</option>'.NL;
echo ' <option value="__u__" class="acluser"'.$usel.'>'.$this->getLang('acl_user').':</option>'.NL;
if (!empty($this->specials)) {
- echo ' <optgroup label="&nbsp;">'.NL;
+ echo ' <optgroup label="&#160;">'.NL;
foreach($this->specials as $ug){
if($ug == $this->who){
$sel = ' selected="selected"';
@@ -801,7 +801,7 @@ class admin_plugin_acl extends DokuWiki_Admin_Plugin {
echo ' </optgroup>'.NL;
}
if (!empty($this->usersgroups)) {
- echo ' <optgroup label="&nbsp;">'.NL;
+ echo ' <optgroup label="&#160;">'.NL;
foreach($this->usersgroups as $ug){
if($ug == $this->who){
$sel = ' selected="selected"';
diff --git a/lib/plugins/acl/lang/bg/lang.php b/lib/plugins/acl/lang/bg/lang.php
index e260be918..95201750e 100644
--- a/lib/plugins/acl/lang/bg/lang.php
+++ b/lib/plugins/acl/lang/bg/lang.php
@@ -20,9 +20,9 @@ $lang['p_group_id'] = 'Членовете на групата <b clas
$lang['p_group_ns'] = 'Членовете на групата <b class="aclgroup">%s</b> в момента имат следните права за именното пространство <b class="aclns">%s</b>: <i>%s</i>.';
$lang['p_choose_id'] = 'Моля, <b>въведете потребител или група</b> в полето отгоре, за да видите или промените правата за страницата <b class="aclpage">%s</b>.';
$lang['p_choose_ns'] = 'Моля, <b>въведете потребител или група</b> в полето отгоре, за да видите или промените правата за именното пространство <b class="aclns">%s</b>.';
-$lang['p_inherited'] = 'Бележка: Тези разрешения не са зададени директно, а са наследени от други групи или именни пространства.';
+$lang['p_inherited'] = 'Бележка: Тези права не са зададени директно, а са наследени от други групи или именни пространства.';
$lang['p_isadmin'] = 'Бележка: Избраната група или потребител има всички права, защото е определен за супер потребител.';
-$lang['p_include'] = 'Висши права включват по-нисшите такива. Правата за създаване, качване и изтриване са приложими само за именни пространства, но не за страници.';
+$lang['p_include'] = 'Висшите права включват по-нисши такива. Правата за създаване, качване и изтриване са приложими само за именни пространства, но не за страници.';
$lang['current'] = 'Текущи ACL права';
$lang['where'] = 'Страница/Именно пространство';
$lang['who'] = 'Потребител/Група';
@@ -34,4 +34,4 @@ $lang['acl_perm4'] = 'Създаване';
$lang['acl_perm8'] = 'Качване';
$lang['acl_perm16'] = 'Изтриване';
$lang['acl_new'] = 'Добавяне на право';
-$lang['acl_mod'] = 'Промяна на записа';
+$lang['acl_mod'] = 'Промяна на правата';
diff --git a/lib/plugins/acl/lang/de-informal/lang.php b/lib/plugins/acl/lang/de-informal/lang.php
index 3f4b08c2a..05f7df037 100644
--- a/lib/plugins/acl/lang/de-informal/lang.php
+++ b/lib/plugins/acl/lang/de-informal/lang.php
@@ -5,11 +5,11 @@
* @author Alexander Fischer <tbanus@os-forge.net>
* @author Juergen Schwarzer <jschwarzer@freenet.de>
* @author Marcel Metz <marcel_metz@gmx.de>
- * @author Matthias Schulte <post@lupo49.de>
+ * @author Matthias Schulte <dokuwiki@lupo49.de>
* @author Christian Wichmann <nospam@zone0.de>
* @author Pierre Corell <info@joomla-praxis.de>
*/
-$lang['admin_acl'] = 'Zugriffskontrollsystem Management';
+$lang['admin_acl'] = 'Zugangsverwaltung';
$lang['acl_group'] = 'Gruppe';
$lang['acl_user'] = 'Benutzer';
$lang['acl_perms'] = 'Rechte für';
diff --git a/lib/plugins/config/admin.php b/lib/plugins/config/admin.php
index 9a9bb5329..c5f7ee532 100644
--- a/lib/plugins/config/admin.php
+++ b/lib/plugins/config/admin.php
@@ -118,6 +118,7 @@ class admin_plugin_config extends DokuWiki_Admin_Plugin {
// config setting group
if ($in_fieldset) {
ptln(' </table>');
+ ptln(' </div>');
ptln(' </fieldset>');
} else {
$in_fieldset = true;
diff --git a/lib/plugins/config/lang/bg/lang.php b/lib/plugins/config/lang/bg/lang.php
index 0bc25a8e5..43c961bfc 100644
--- a/lib/plugins/config/lang/bg/lang.php
+++ b/lib/plugins/config/lang/bg/lang.php
@@ -10,41 +10,44 @@
// for admin plugins, the menu prompt to be displayed in the admin menu
// if set here, the plugin doesn't need to override the getMenuText() method
-$lang['menu'] = 'Настройки';
+$lang['menu'] = 'Настройки';
-$lang['error'] = 'Обновяването на настройките не е възможно, поради невалидна стойност, моля, прегледайте промените си и пробвайте отново.
+$lang['error'] = 'Обновяването на настройките не е възможно, поради невалидна стойност, моля, прегледайте промените си и пробвайте отново.
<br />Неверните стойности ще бъдат обградени с червена рамка.';
-$lang['updated'] = 'Обновяването на настройките е успешно.';
-$lang['nochoice'] = '(няма друг възможен избор)';
-$lang['locked'] = 'Обновяването на файла с настройките не е възможно, ако това не е нарочно, проверете,<br />
+$lang['updated'] = 'Обновяването на настройките е успешно.';
+$lang['nochoice'] = '(няма друг възможен избор)';
+$lang['locked'] = 'Обновяването на файла с настройките не е възможно, ако това не е нарочно, проверете,<br />
дали името на локалния файл с настройки и правата са верни.';
-$lang['danger'] = 'Внимание: промяна на опцията може да направи Wiki-то и менюто за настройване недостъпни.';
-$lang['warning'] = 'Предупреждение: промяна на опцията може предизвика нежелани последици.';
-$lang['security'] = 'Предупреждение: промяна на опцията може да представлява риск за сигурността.';
+
+$lang['danger'] = 'Внимание: промяна на опцията може да направи Wiki-то и менюто за настройване недостъпни.';
+$lang['warning'] = 'Предупреждение: промяна на опцията може предизвика нежелани последици.';
+$lang['security'] = 'Предупреждение: промяна на опцията може да представлява риск за сигурността.';
/* --- Config Setting Headers --- */
$lang['_configuration_manager'] = 'Диспечер на настройките'; //same as heading in intro.txt
-$lang['_header_dokuwiki'] = 'Настройки на DokuWiki';
-$lang['_header_plugin'] = 'Настройки на приставки';
-$lang['_header_template'] = 'Настройки на шаблони';
+$lang['_header_dokuwiki'] = 'Настройки на DokuWiki';
+$lang['_header_plugin'] = 'Настройки на приставки';
+$lang['_header_template'] = 'Настройки на шаблона';
+$lang['_header_undefined'] = 'Неопределени настройки';
/* --- Config Setting Groups --- */
-$lang['_header_undefined'] = 'Неопределени настройки';
-$lang['_basic'] = 'Основни настройки';
-$lang['_display'] = 'Настройки за изобразяване';
-$lang['_authentication'] = 'Настройки за удостоверяване';
-$lang['_anti_spam'] = 'Настройки за борба със SPAM-ма';
-$lang['_editing'] = 'Настройки за редактиране';
-$lang['_links'] = 'Настройки на препратките';
-$lang['_media'] = 'Настройки на медията';
-$lang['_advanced'] = 'Допълнителни настройки';
-$lang['_network'] = 'Мрежови настройки';
+$lang['_basic'] = 'Основни настройки';
+$lang['_display'] = 'Настройки за изобразяване';
+$lang['_authentication'] = 'Настройки за удостоверяване';
+$lang['_anti_spam'] = 'Настройки за борба със SPAM-ма';
+$lang['_editing'] = 'Настройки за редактиране';
+$lang['_links'] = 'Настройки на препратките';
+$lang['_media'] = 'Настройки на медията';
+$lang['_notifications'] = 'Настройки за известяване';
+$lang['_syndication'] = 'Настройки на RSS емисиите';
+$lang['_advanced'] = 'Допълнителни настройки';
+$lang['_network'] = 'Мрежови настройки';
// The settings group name for plugins and templates can be set with
// plugin_settings_name and template_settings_name respectively. If one
// of these lang properties is not set, the group name will be generated
// from the plugin or template name and the localized suffix.
-$lang['_plugin_sufix'] = ' - настройки на приставката';
-$lang['_template_sufix'] = ' - настройки на шаблона';
+$lang['_plugin_sufix'] = ' (приставка)';
+$lang['_template_sufix'] = ' (шаблон)';
/* --- Undefined Setting Messages --- */
$lang['_msg_setting_undefined'] = 'Няма метаданни за настройките.';
@@ -53,167 +56,183 @@ $lang['_msg_setting_no_default'] = 'Няма стандартна стойнос
/* -------------------- Config Options --------------------------- */
-$lang['fmode'] = 'Режим (права) за създаване на файлове';
-$lang['dmode'] = 'Режим (права) за създаване на директории';
-$lang['lang'] = 'Език';
-$lang['basedir'] = 'Главна директория (напр. <code>/dokuwiki/</code>). Оставете празно, за да бъде засечена автоматично.';
-$lang['baseurl'] = 'URL адрес (напр. <code>http://www.yourserver.com</code>). Оставете празно, за да бъде засечен автоматично.';
-$lang['savedir'] = 'Директория за записване на данните';
-$lang['cookiedir'] = 'Път за бисквитките. Оставите ли полето празно ще се ползва горния URL адрес.';
-$lang['start'] = 'Име на началната страница';
-$lang['title'] = 'Име на Wiki-то';
-$lang['template'] = 'Шаблон';
-$lang['tagline'] = 'Подзаглавие - изобразява се под името на Wiki страницата (ако се поддържа от шаблона)';
-$lang['sidebar'] = 'Име на страницата за страничната лента (ако се поддържа от шаблона). Ако оставите полето празно лентата ще бъде изключена';
-$lang['license'] = 'Под какъв лиценз да бъде публикувано съдържанието?';
-$lang['fullpath'] = 'Показване на пълния път до страниците в долния колонтитул.';
-$lang['recent'] = 'Скорошни промени';
-$lang['breadcrumbs'] = 'Брой на следите';
-$lang['youarehere'] = 'Йерархични следи';
-$lang['typography'] = 'Замяна на последователност от символи с типографски еквивалент';
-$lang['htmlok'] = 'Разрешаване вграждането на HTML код';
-$lang['phpok'] = 'Разрешаване вграждането на PHP код';
-$lang['dformat'] = 'Формат на датата (виж. <a href="http://www.php.net/strftime">strftime</a> функцията на PHP)';
-$lang['signature'] = 'Подпис';
-$lang['toptoclevel'] = 'Главно ниво (заглавие) за съдържанието';
-$lang['tocminheads'] = 'Минимален брой заглавия, определящ дали да бъде създадено съдържание';
-$lang['maxtoclevel'] = 'Максимален брой нива (заглавия) за включване в съдържанието';
-$lang['maxseclevel'] = 'Максимален брой нива предоставяни за самостоятелно редактиране';
-$lang['camelcase'] = 'Ползване на CamelCase за линкове';
-$lang['deaccent'] = 'Почистване имената на страниците (на файловете)';
-$lang['useheading'] = 'Ползване на първото заглавие за име на страница';
-$lang['refcheck'] = 'Проверка за препратка към медия, преди да бъде изтрита';
-$lang['refshow'] = 'Брой на показваните медийни препратки';
-$lang['allowdebug'] = 'Включване на режи debug - <b>изключете, ако не е нужен!</b>';
-$lang['mediarevisions'] = 'Да се пазят ли стари версии на качените файлове (Mediarevisions)?';
-
-$lang['usewordblock'] = 'Блокиране на SPAM въз основа на на списък от думи';
-$lang['indexdelay'] = 'Забавяне преди индексиране (сек)';
-$lang['relnofollow'] = 'Ползване на rel="nofollow" за външни препратки';
-$lang['mailguard'] = 'Промяна на адресите на ел. поща (във форма непозволяваща пращането на SPAM)';
-$lang['iexssprotect'] = 'Проверяване на качените файлове за вероятен зловреден JavaScript и HTML код';
-$lang['showuseras'] = 'Какво да се показва за потребителя, който последно е променил страницата';
-
-/* Authentication Options */
-$lang['useacl'] = 'Ползване на списъци за достъп';
-$lang['autopasswd'] = 'Автоматично генериране на пароли, на нови потребители и пращане по пощата';
-$lang['authtype'] = 'Метод за удостоверяване';
-$lang['passcrypt'] = 'Метод за криптиране на паролите';
-$lang['defaultgroup'] = 'Стандартна група';
-$lang['superuser'] = 'Супер потребител - група, потребител или списък със стойности разделени чрез запетая (user1,@group1,user2) с пълен достъп до всички страници и функции без значение от настройките на списъците за достъп (ACL)';
-$lang['manager'] = 'Управител - група, потребител или списък със стойности разделени чрез запетая (user1,@group1,user2) с достъп до определени управленски функции ';
-$lang['profileconfirm'] = 'Потвърждаване на промени в профила с парола';
-$lang['disableactions'] = 'Изключване функции на DokuWiki';
-$lang['disableactions_check'] = 'Проверка';
+/* Basic Settings */
+$lang['title'] = 'Заглавие за Wiki-то, тоест името';
+$lang['start'] = 'Име на началната страница';
+$lang['lang'] = 'Език на интерфейса';
+$lang['template'] = 'Шаблон (определя вида на страниците)';
+$lang['tagline'] = 'Подзаглавие - изобразява се под името на Wiki-то (ако се поддържа от шаблона)';
+$lang['sidebar'] = 'Име на страницата за страничната лента (ако се поддържа от шаблона). Оставите ли полето празно лентата ще бъде изключена';
+$lang['license'] = 'Под какъв лиценз да бъде публикувано съдържанието?';
+$lang['savedir'] = 'Директория за записване на данните';
+$lang['basedir'] = 'Главна директория (напр. <code>/dokuwiki/</code>). Оставете празно, за да бъде засечена автоматично.';
+$lang['baseurl'] = 'URL адрес (напр. <code>http://www.yourserver.com</code>). Оставете празно, за да бъде засечен автоматично.';
+$lang['cookiedir'] = 'Път за бисквитките. Оставите ли полето празно ще се ползва горния URL адрес.';
+$lang['dmode'] = 'Режим (права) за създаване на директории';
+$lang['fmode'] = 'Режим (права) за създаване на файлове';
+$lang['allowdebug'] = 'Включване на режи debug - <b>изключете, ако не е нужен!</b>';
+
+/* Display Settings */
+$lang['recent'] = 'Скорошни промени - брой еленти на страница';
+$lang['recent_days'] = 'Колко от скорошните промени да се пазят (дни)';
+$lang['breadcrumbs'] = 'Брой на следите. За изключване на функцията задайте 0.';
+$lang['youarehere'] = 'Йерархични следи (в този случай можете да изключите горната опция)';
+$lang['fullpath'] = 'Показване на пълния път до страниците в долния колонтитул.';
+$lang['typography'] = 'Замяна на последователност от символи с типографски еквивалент';
+$lang['dformat'] = 'Формат на датата (виж. <a href="http://www.php.net/strftime">strftime</a> функцията на PHP)';
+$lang['signature'] = 'Подпис - какво да внася бутона "Вмъкване на подпис" от редактора';
+$lang['showuseras'] = 'Какво да се показва за потребителя, който последно е променил дадена страницата';
+$lang['toptoclevel'] = 'Главно ниво (заглавие) за съдържанието';
+$lang['tocminheads'] = 'Минимален брой заглавия, определящ дали да бъде създадено съдържание';
+$lang['maxtoclevel'] = 'Максимален брой нива (заглавия) за включване в съдържанието';
+$lang['maxseclevel'] = 'Максимален брой нива предоставяни за самостоятелно редактиране';
+$lang['camelcase'] = 'Ползване на CamelCase за линкове';
+$lang['deaccent'] = 'Почистване имената на страниците (на файловете)';
+$lang['useheading'] = 'Ползване на първото заглавие за име на страница';
+$lang['sneaky_index'] = 'Стандартно DokuWiki ще показва всички именни пространства в индекса. Опцията скрива тези, за които потребителят няма права за четене. Това може да доведе и до скриване на иначе достъпни подименни пространства. С определени настройки на списъците за контрол на достъпа (ACL) може да направи индекса неизползваем. ';
+$lang['hidepages'] = 'Скриване на страниците съвпадащи с този регулярен израз(regular expressions)';
+
+/* Authentication Settings */
+$lang['useacl'] = 'Ползване на списъци за достъп';
+$lang['autopasswd'] = 'Автоматично генериране на пароли, на нови потребители и пращане по пощата';
+$lang['authtype'] = 'Метод за удостоверяване';
+$lang['passcrypt'] = 'Метод за криптиране на паролите';
+$lang['defaultgroup']= 'Стандартна група';
+$lang['superuser'] = 'Супер потребител - група, потребител или списък със стойности разделени чрез запетая (user1,@group1,user2) с пълен достъп до всички страници и функции без значение от настройките на списъците за достъп (ACL)';
+$lang['manager'] = 'Управител - група, потребител или списък със стойности разделени чрез запетая (user1,@group1,user2) с достъп до определени управленски функции ';
+$lang['profileconfirm'] = 'Потвърждаване на промени в профила с парола';
+$lang['rememberme'] = 'Ползване на постоянни бисквитки за вписване (за функцията "Запомни ме")';
+$lang['disableactions'] = 'Изключване функции на DokuWiki';
+$lang['disableactions_check'] = 'Проверка';
$lang['disableactions_subscription'] = 'Абониране/Отписване';
$lang['disableactions_wikicode'] = 'Преглед на кода/Експортиране на оригинална версия';
-$lang['disableactions_other'] = 'Други действия (разделени със запетая)';
-$lang['sneaky_index'] = 'Стандартно DokuWiki ще показва всички именни пространства в индекса. Опцията скрива тези, за които потребителят няма права за четене. Това може да доведе и до скриване на иначе достъпни подименни пространства. С определени настройки на списъците за контрол на достъпа (ACL) може да направи индекса неизползваем. ';
+$lang['disableactions_other'] = 'Други действия (разделени със запетая)';
$lang['auth_security_timeout'] = 'Автоматично проверяване на удостоверяването всеки (сек)';
-$lang['securecookie'] = 'Да се изпращат ли бисквитките зададени чрез HTTPS, само чрез HTTPS от браузъра? Изключете опцията, когато SSL се ползва само за вписване, а четенето е без SSL.';
-$lang['remote'] = 'Включване на системата за отдалечен API достъп. Това ще позволи на приложения да се свързват с DokuWiki чрез XML-RPC или друг механизъм.';
-$lang['remoteuser'] = 'Ограничаване на отдалечения API достъп - активиране само за следните групи и потребители (отделени със запетая). Ако оставите полето празно всеки ще има достъп достъп.';
+$lang['securecookie'] = 'Да се изпращат ли бисквитките зададени чрез HTTPS, само чрез HTTPS от браузъра? Изключете опцията, когато SSL се ползва само за вписване, а четенето е без SSL.';
+$lang['remote'] = 'Включване на системата за отдалечен API достъп. Това ще позволи на приложения да се свързват с DokuWiki чрез XML-RPC или друг механизъм.';
+$lang['remoteuser'] = 'Ограничаване на отдалечения API достъп - активиране само за следните групи и потребители (отделени със запетая). Ако оставите полето празно всеки ще има достъп достъп.';
+
+/* Anti-Spam Settings */
+$lang['usewordblock'] = 'Блокиране на SPAM въз основа на на списък от думи';
+$lang['relnofollow'] = 'Ползване на rel="nofollow" за външни препратки';
+$lang['indexdelay'] = 'Забавяне преди индексиране (сек)';
+$lang['mailguard'] = 'Промяна на адресите на ел. поща (във форма непозволяваща пращането на SPAM)';
+$lang['iexssprotect'] = 'Проверяване на качените файлове за вероятен зловреден JavaScript и HTML код';
+
+/* Editing Settings */
+$lang['usedraft'] = 'Автоматично запазване на чернова по време на редактиране';
+$lang['htmlok'] = 'Разрешаване вграждането на HTML код';
+$lang['phpok'] = 'Разрешаване вграждането на PHP код';
+$lang['locktime'] = 'Макс. период за съхраняване на заключените файлове (сек)';
+$lang['cachetime'] = 'Макс. период за съхраняване на кеша (сек)';
+
+/* Link settings */
+$lang['target____wiki'] = 'Прозорец за вътрешни препратки';
+$lang['target____interwiki'] = 'Прозорец за препратки към други Wiki сайтове';
+$lang['target____extern'] = 'Прозорец за външни препратки';
+$lang['target____media'] = 'Прозорец за медийни препратки';
+$lang['target____windows'] = 'Прозорец за препратки към Windows';
+
+/* Media Settings */
+$lang['mediarevisions'] = 'Да се пазят ли стари версии на качените файлове (Mediarevisions)?';
+$lang['refcheck'] = 'Проверка за препратка към медия, преди да бъде изтрита';
+$lang['refshow'] = 'Брой на показваните медийни препратки';
+$lang['gdlib'] = 'Версия на GD Lib';
+$lang['im_convert'] = 'Път до инструмента за трансформация на ImageMagick';
+$lang['jpg_quality'] = 'Качество на JPG компресията (0-100)';
+$lang['fetchsize'] = 'Максимален размер (байтове), който fetch.php може да сваля';
+
+/* Notification Settings */
+$lang['subscribers'] = 'Включване на поддръжката за абониране към страници';
+$lang['subscribe_time'] = 'Време след което абонаментните списъци и обобщения се изпращат (сек); Трябва да е по-малко от времето определено в recent_days.';
+$lang['notify'] = 'Пращане на съобщения за промени по страниците на следната eл. поща';
+$lang['registernotify'] = 'Пращане на информация за нови потребители на следната ел. поща';
+$lang['mailfrom'] = 'Ел. поща, която да се ползва за автоматично изпращане на ел. писма';
+$lang['mailprefix'] = 'Представка за темите (поле subject) на автоматично изпращаните ел. писма';
+$lang['htmlmail'] = 'Изпращане на по-добре изглеждащи, но по-големи по-размер HTML ел. писма. Изключете ако желаете писмата да се изпращат като чист текст.';
+
+/* Syndication Settings */
+$lang['sitemap'] = 'Генериране на Google sitemap (дни)';
+$lang['rss_type'] = 'Тип на XML емисията';
+$lang['rss_linkto'] = 'XML емисията препраща към';
+$lang['rss_content'] = 'Какво да показват елементите на XML емисията?';
+$lang['rss_update'] = 'Интервал на актуализиране на XML емисията (сек)';
+$lang['rss_show_summary'] = 'Показване на обобщение в заглавието на XML емисията';
+$lang['rss_media'] = 'Кой тип промени да се включват в XML мисията?';
/* Advanced Options */
-$lang['updatecheck'] = 'Проверяване за за нови версии и предупреждения за сигурността? Необходимо е Dokiwiki да може да се свързва със update.dokuwiki.org за тази функционалност.';
-$lang['userewrite'] = 'Ползване на nice URL адреси';
-$lang['useslash'] = 'Ползване на наклонена черта за разделител на именните пространства в URL';
-$lang['usedraft'] = 'Автоматично запазване на чернова по време на редактиране';
-$lang['sepchar'] = 'Разделител между думите в имената на страници';
-$lang['canonical'] = 'Ползване на напълно уеднаквени URL адреси (абсолютни адреси - http://server/path)';
-$lang['fnencode'] = 'Метод за кодиране на не-ASCII именуваните файлове.';
-$lang['autoplural'] = 'Проверяване за множествено число в препратките';
-$lang['compression'] = 'Метод за компресия на attic файлове';
-$lang['cachetime'] = 'Макс. период за съхраняване на кеша (сек)';
-$lang['locktime'] = 'Макс. период за съхраняване на заключените файлове (сек)';
-$lang['fetchsize'] = 'Максимален размер (байтове), който fetch.php може да сваля';
-$lang['notify'] = 'Пращане на съобщения за промени по страниците на следната eл. поща';
-$lang['registernotify'] = 'Пращане на информация за нови потребители на следната ел. поща';
-$lang['mailfrom'] = 'Ел. поща, която да се ползва за автоматично изпращане на ел. писма';
-$lang['mailprefix'] = 'Представка за темите (поле subject) на автоматично изпращаните ел. писма';
-$lang['gzip_output'] = 'Кодиране на съдържанието с gzip за xhtml';
-$lang['gdlib'] = 'Версия на GD Lib';
-$lang['im_convert'] = 'Път до инструмента за трансформация на ImageMagick';
-$lang['jpg_quality'] = 'Качество на JPG компресията (0-100)';
-$lang['subscribers'] = 'Включване на поддръжката за абониране към страници';
-$lang['subscribe_time'] = 'Време след което абонаментните списъци и обобщения се изпращат (сек); Трябва да е по-малко от времето определено в recent_days.';
-$lang['compress'] = 'Компактен CSS и javascript изглед';
-$lang['cssdatauri'] = 'Максимален размер, в байтове, до който изображенията посочени в .CSS файл ще бъдат вграждани в стила (stylesheet), за да се намали броя на HTTP заявките. Техниката не работи за версиите на IE преди 8! Препоръчителни стойности: <code>400</code> до <code>600</code> байта. Въведете <code>0</code> за изключване.';
-$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['renderer_xhtml'] = 'Представяне на основните изходни данни (xhtml) от Wiki-то с';
-$lang['renderer__core'] = '%s (ядрото на DokuWiki)';
-$lang['renderer__plugin'] = '%s (приставка)';
-$lang['rememberme'] = 'Ползване на постоянни бисквитки за вписване (за функцията "Запомни ме")';
-
-$lang['rss_type'] = 'Тип на XML емисията';
-$lang['rss_linkto'] = 'XML емисията препраща към';
-$lang['rss_content'] = 'Какво да показват елементите на XML емисията?';
-$lang['rss_update'] = 'Интервал на актуализиране на XML емисията (сек)';
-$lang['recent_days'] = 'Колко от скорошните промени да се пазят (дни)';
-$lang['rss_show_summary'] = 'Показване на обобщение в заглавието на XML емисията';
-$lang['rss_media'] = 'Кой тип промени да се включват в XML мисията?';
-
-/* Target options */
-$lang['target____wiki'] = 'Прозорец за вътрешни препратки';
-$lang['target____interwiki'] = 'Прозорец за препратки към други Wiki сайтове';
-$lang['target____extern'] = 'Прозорец за външни препратки';
-$lang['target____media'] = 'Прозорец за медийни препратки';
-$lang['target____windows'] = 'Прозорец за препратки към Windows';
+$lang['updatecheck'] = 'Проверяване за за нови версии и предупреждения за сигурността? Необходимо е Dokiwiki да може да се свързва със update.dokuwiki.org за тази функционалност.';
+$lang['userewrite'] = 'Ползване на nice URL адреси';
+$lang['useslash'] = 'Ползване на наклонена черта за разделител на именните пространства в URL';
+$lang['sepchar'] = 'Разделител между думите в имената на страници';
+$lang['canonical'] = 'Ползване на напълно уеднаквени URL адреси (абсолютни адреси - http://server/path)';
+$lang['fnencode'] = 'Метод за кодиране на не-ASCII именуваните файлове.';
+$lang['autoplural'] = 'Проверяване за множествено число в препратките';
+$lang['compression'] = 'Метод за компресия на attic файлове';
+$lang['gzip_output'] = 'Кодиране на съдържанието с gzip за xhtml';
+$lang['compress'] = 'Компактен CSS и javascript изглед';
+$lang['cssdatauri'] = 'Максимален размер, в байтове, до който изображенията посочени в .CSS файл ще бъдат вграждани в стила (stylesheet), за да се намали броя на HTTP заявките. Техниката не работи за версиите на IE преди 8! Препоръчителни стойности: <code>400</code> до <code>600</code> байта. Въведете <code>0</code> за изключване.';
+$lang['send404'] = 'Пращане на "HTTP 404/Page Not Found" за несъществуващи страници';
+$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'] = 'Представяне на основните изходни данни (xhtml) от Wiki-то с';
+$lang['renderer__core'] = '%s (ядрото на DokuWiki)';
+$lang['renderer__plugin'] = '%s (приставка)';
+
+/* Network Options */
+$lang['dnslookups'] = 'DokuWiki ще търси имената на хостовете, на отдалечени IP адреси, от които потребители редактират страници. НЕ е желателно да ползвате опцията ако имате бавен или неработещ DNS сървър.';
/* Proxy Options */
-$lang['proxy____host'] = 'Име на прокси сървър';
-$lang['proxy____port'] = 'Порт за проксито';
-$lang['proxy____user'] = 'Потребител за проксито';
-$lang['proxy____pass'] = 'Парола за проксито';
-$lang['proxy____ssl'] = 'Ползване на SSL при свързване с проксито';
-$lang['proxy____except'] = 'Регулярен израз определящ за кои URL адреси да не се ползва прокси сървър.';
+$lang['proxy____host'] = 'Име на прокси сървър';
+$lang['proxy____port'] = 'Порт за проксито';
+$lang['proxy____user'] = 'Потребител за проксито';
+$lang['proxy____pass'] = 'Парола за проксито';
+$lang['proxy____ssl'] = 'Ползване на SSL при свързване с проксито';
+$lang['proxy____except'] = 'Регулярен израз определящ за кои URL адреси да не се ползва прокси сървър.';
/* Safemode Hack */
-$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['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_'] = 'Нищо не е избрано';
+/* License Options */
+$lang['license_o_'] = 'Нищо не е избрано';
/* typography options */
-$lang['typography_o_0'] = 'без';
-$lang['typography_o_1'] = 'с изключение на единични кавички';
-$lang['typography_o_2'] = 'включително единични кавички (не винаги работи)';
+$lang['typography_o_0'] = 'без';
+$lang['typography_o_1'] = 'с изключение на единични кавички';
+$lang['typography_o_2'] = 'включително единични кавички (не винаги работи)';
/* userewrite options */
-$lang['userewrite_o_0'] = 'без';
-$lang['userewrite_o_1'] = 'файлът .htaccess';
-$lang['userewrite_o_2'] = 'вътрешно от DokuWiki ';
+$lang['userewrite_o_0'] = 'без';
+$lang['userewrite_o_1'] = 'файлът .htaccess';
+$lang['userewrite_o_2'] = 'вътрешно от DokuWiki ';
/* deaccent options */
-$lang['deaccent_o_0'] = 'изключено';
-$lang['deaccent_o_1'] = 'премахване на акценти';
-$lang['deaccent_o_2'] = 'транслитерация';
+$lang['deaccent_o_0'] = 'изключено';
+$lang['deaccent_o_1'] = 'премахване на акценти';
+$lang['deaccent_o_2'] = 'транслитерация';
/* gdlib options */
-$lang['gdlib_o_0'] = 'GD Lib не е достъпна';
-$lang['gdlib_o_1'] = 'Версия 1.x';
-$lang['gdlib_o_2'] = 'Автоматично разпознаване';
+$lang['gdlib_o_0'] = 'GD Lib не е достъпна';
+$lang['gdlib_o_1'] = 'Версия 1.x';
+$lang['gdlib_o_2'] = 'Автоматично разпознаване';
/* rss_type options */
-$lang['rss_type_o_rss'] = 'RSS версия 0.91';
-$lang['rss_type_o_rss1'] = 'RSS версия 1.0';
-$lang['rss_type_o_rss2'] = 'RSS версия 2.0';
-$lang['rss_type_o_atom'] = 'Atom версия 0.3';
-$lang['rss_type_o_atom1'] = 'Atom версия 1.0';
+$lang['rss_type_o_rss'] = 'RSS версия 0.91';
+$lang['rss_type_o_rss1'] = 'RSS версия 1.0';
+$lang['rss_type_o_rss2'] = 'RSS версия 2.0';
+$lang['rss_type_o_atom'] = 'Atom версия 0.3';
+$lang['rss_type_o_atom1'] = 'Atom версия 1.0';
/* rss_content options */
$lang['rss_content_o_abstract'] = 'Извлечение';
-$lang['rss_content_o_diff'] = 'Обединени разлики';
+$lang['rss_content_o_diff'] = 'Обединени разлики';
$lang['rss_content_o_htmldiff'] = 'Таблица с разликите в HTML формат';
-$lang['rss_content_o_html'] = 'Цялото съдържание на HTML страницата';
+$lang['rss_content_o_html'] = 'Цялото съдържание на HTML страницата';
/* rss_linkto options */
$lang['rss_linkto_o_diff'] = 'изглед на разликите';
@@ -222,26 +241,26 @@ $lang['rss_linkto_o_rev'] = 'списък на версиите';
$lang['rss_linkto_o_current'] = 'текущата страница';
/* compression options */
-$lang['compression_o_0'] = 'без';
-$lang['compression_o_gz'] = 'gzip';
-$lang['compression_o_bz2'] = 'bz2';
+$lang['compression_o_0'] = 'без';
+$lang['compression_o_gz'] = 'gzip';
+$lang['compression_o_bz2'] = 'bz2';
/* xsendfile header */
-$lang['xsendfile_o_0'] = 'не използвайте';
-$lang['xsendfile_o_1'] = 'Специфичен lighttpd header (преди версия 1.5)';
-$lang['xsendfile_o_2'] = 'Стандартен X-Sendfile header';
-$lang['xsendfile_o_3'] = 'Специфичен Nginx X-Accel-Redirect header за пренасочване';
+$lang['xsendfile_o_0'] = 'без';
+$lang['xsendfile_o_1'] = 'Специфичен lighttpd header (преди версия 1.5)';
+$lang['xsendfile_o_2'] = 'Стандартен X-Sendfile header';
+$lang['xsendfile_o_3'] = 'Специфичен Nginx X-Accel-Redirect header за пренасочване';
/* Display user info */
-$lang['showuseras_o_loginname'] = 'Име за вписване';
-$lang['showuseras_o_username'] = 'Пълно потребителско име';
-$lang['showuseras_o_email'] = 'Ел, поща (променени според настройките на mailguard)';
+$lang['showuseras_o_loginname'] = 'Име за вписване';
+$lang['showuseras_o_username'] = 'Пълно потребителско име';
+$lang['showuseras_o_email'] = 'Ел, поща (променени според настройките на mailguard)';
$lang['showuseras_o_email_link'] = 'Ел. поща под формата на връзка тип mailto:';
/* useheading options */
-$lang['useheading_o_0'] = 'Никога';
+$lang['useheading_o_0'] = 'Никога';
$lang['useheading_o_navigation'] = 'Само за навигация';
-$lang['useheading_o_content'] = 'Само за съдържанието на Wiki-то';
-$lang['useheading_o_1'] = 'Винаги';
+$lang['useheading_o_content'] = 'Само за съдържанието на Wiki-то';
+$lang['useheading_o_1'] = 'Винаги';
-$lang['readdircache'] = 'Максимален период за съхраняване кеша на readdir (сек)';
+$lang['readdircache'] = 'Максимален период за съхраняване кеша на readdir (сек)';
diff --git a/lib/plugins/config/lang/de-informal/intro.txt b/lib/plugins/config/lang/de-informal/intro.txt
index 7ac1b47d9..df9845ebc 100644
--- a/lib/plugins/config/lang/de-informal/intro.txt
+++ b/lib/plugins/config/lang/de-informal/intro.txt
@@ -1,4 +1,4 @@
-===== Einstellungs-Manager =====
+===== Konfigurations-Manager =====
Benutze diese Seite zur Kontrolle der Einstellungen deiner DokuWiki-Installation. Für Hilfe zu individuellen Einstellungen gehe zu [[doku>config]]. Für mehr Details über diese Erweiterungen siehe [[doku>plugin:config]].
diff --git a/lib/plugins/config/lang/de-informal/lang.php b/lib/plugins/config/lang/de-informal/lang.php
index 52c705b4f..d86c2d809 100644
--- a/lib/plugins/config/lang/de-informal/lang.php
+++ b/lib/plugins/config/lang/de-informal/lang.php
@@ -5,7 +5,7 @@
* @author Alexander Fischer <tbanus@os-forge.net>
* @author Juergen Schwarzer <jschwarzer@freenet.de>
* @author Marcel Metz <marcel_metz@gmx.de>
- * @author Matthias Schulte <post@lupo49.de>
+ * @author Matthias Schulte <dokuwiki@lupo49.de>
* @author Christian Wichmann <nospam@zone0.de>
* @author Pierre Corell <info@joomla-praxis.de>
*/
@@ -29,6 +29,8 @@ $lang['_anti_spam'] = 'Anti-Spam-Einstellungen';
$lang['_editing'] = 'Bearbeitungseinstellungen';
$lang['_links'] = 'Link-Einstellungen';
$lang['_media'] = 'Media-Einstellungen';
+$lang['_notifications'] = 'Benachrichtigungs-Konfiguration';
+$lang['_syndication'] = 'Syndication-Konfiguration (RSS)';
$lang['_advanced'] = 'erweiterte Einstellungen';
$lang['_network'] = 'Netzwerk-Einstellungen';
$lang['_plugin_sufix'] = 'Plugin-Einstellungen';
@@ -46,6 +48,8 @@ $lang['cookiedir'] = 'Cookie Pfad. Leer lassen, um die Standard-Url
$lang['start'] = 'Name der Startseite';
$lang['title'] = 'Wiki Titel';
$lang['template'] = 'Vorlage';
+$lang['tagline'] = 'Tag-Linie (nur, wenn vom Template unterstützt)';
+$lang['sidebar'] = 'Name der Sidebar-Seite (nur, wenn vom Template unterstützt)), ein leeres Feld deaktiviert die Sidebar';
$lang['license'] = 'Unter welcher Lizenz sollte Ihr Inhalt veröffentlicht werden?';
$lang['fullpath'] = 'Zeige vollen Pfad der Datei in Fußzeile an';
$lang['recent'] = 'letzte Änderungen';
@@ -89,6 +93,8 @@ $lang['disableactions_other'] = 'Weitere Aktionen (durch Komma getrennt)';
$lang['sneaky_index'] = 'Standardmäßig zeigt DokuWiki alle Namensräume in der Indexansicht an. Bei Aktivierung dieser Einstellung werden alle Namensräume versteckt, in welchen der Benutzer keine Leserechte hat. Dies könnte dazu führen, dass lesbare Unternamensräume versteckt werden. Dies kann die Indexansicht bei bestimmten Zugangskontrolleinstellungen unbenutzbar machen.';
$lang['auth_security_timeout'] = 'Zeitüberschreitung bei der Authentifizierung (Sekunden)';
$lang['securecookie'] = 'Sollen Cookies, die via HTTPS gesetzt wurden nur per HTTPS versendet werden? Deaktiviere diese Option, wenn nur der Login deines Wikis mit SSL gesichert ist, aber das Betrachten des Wikis ungesichert geschieht.';
+$lang['remote'] = 'Aktiviert den externen API-Zugang. Diese Option erlaubt es externen Anwendungen von außen auf die XML-RPC-Schnittstelle oder anderweitigen Schnittstellen zuzugreifen.';
+$lang['remoteuser'] = 'Zugriff auf die externen Schnittstellen durch kommaseparierte Angabe von Benutzern oder Gruppen einschränken. Ein leeres Feld erlaubt Zugriff für jeden.';
$lang['updatecheck'] = 'Automatisch auf Updates und Sicherheitswarnungen prüfen? DokuWiki muss sich dafür mit update.dokuwiki.org verbinden.';
$lang['userewrite'] = 'Benutze schöne URLs';
$lang['useslash'] = 'Benutze Schrägstrich als Namensraumtrenner in URLs';
@@ -105,6 +111,7 @@ $lang['notify'] = 'Sende Änderungsbenachrichtigungen an diese E-
$lang['registernotify'] = 'Sende Information bei neu registrierten Benutzern an diese E-Mail-Adresse.';
$lang['mailfrom'] = 'Absenderadresse für automatisch erzeugte E-Mails';
$lang['mailprefix'] = 'Präfix für E-Mail-Betreff beim automatischen Versand von Benachrichtigungen';
+$lang['htmlmail'] = 'Versendet optisch angenehmere, aber größere E-Mails im HTML-Format (multipart). Deaktivieren, um Text-Mails zu versenden.';
$lang['gzip_output'] = 'Seiten mit gzip komprimiert ausliefern';
$lang['gdlib'] = 'GD Lib Version';
$lang['im_convert'] = 'Pfad zu ImageMagicks-Konvertierwerkzeug';
@@ -128,11 +135,13 @@ $lang['rss_content'] = 'Was soll in XML-Feedinhalten angezeigt werden?
$lang['rss_update'] = 'Aktualisierungsintervall für XML-Feeds (Sekunden)';
$lang['recent_days'] = 'Wie viele Änderungen sollen vorgehalten werden? (Tage)';
$lang['rss_show_summary'] = 'Bearbeitungs-Zusammenfassung im XML-Feed anzeigen';
+$lang['rss_media'] = 'Welche Änderungen sollen im XML-Feed angezeigt werden?';
$lang['target____wiki'] = 'Zielfenstername für interne Links';
$lang['target____interwiki'] = 'Zielfenstername für InterWiki-Links';
$lang['target____extern'] = 'Zielfenstername für externe Links';
$lang['target____media'] = 'Zielfenstername für Medienlinks';
$lang['target____windows'] = 'Zielfenstername für Windows-Freigaben-Links';
+$lang['dnslookups'] = 'DokuWiki löst die IP-Adressen von Benutzern zu deren Hostnamen auf. Wenn du einen langsamen, unbrauchbaren DNS-Server verwendest oder die Funktion nicht benötigst, dann sollte diese Option deaktivert sein.';
$lang['proxy____host'] = 'Proxyadresse';
$lang['proxy____port'] = 'Proxyport';
$lang['proxy____user'] = 'Benutzername für den Proxy';
diff --git a/lib/plugins/config/lang/de/intro.txt b/lib/plugins/config/lang/de/intro.txt
index efb807738..b79b5f871 100644
--- a/lib/plugins/config/lang/de/intro.txt
+++ b/lib/plugins/config/lang/de/intro.txt
@@ -1,4 +1,4 @@
-====== Konfiguration ======
+====== Konfigurations-Manager ======
Dieses Plugin hilft Ihnen bei der Konfiguration von DokuWiki. Hilfe zu den einzelnen Einstellungen finden Sie unter [[doku>config]]. Mehr Information zu diesem Plugin ist unter [[doku>plugin:config]] erhältlich.
diff --git a/lib/plugins/config/lang/de/lang.php b/lib/plugins/config/lang/de/lang.php
index 1cc4e0a8a..bcbc061a3 100644
--- a/lib/plugins/config/lang/de/lang.php
+++ b/lib/plugins/config/lang/de/lang.php
@@ -11,12 +11,12 @@
* @author Arne Pelka <mail@arnepelka.de>
* @author Dirk Einecke <dirk@dirkeinecke.de>
* @author Blitzi94@gmx.de
- * @author Robert Bogenschneider <robog@GMX.de>
* @author Robert Bogenschneider <robog@gmx.de>
* @author Niels Lange <niels@boldencursief.nl>
* @author Christian Wichmann <nospam@zone0.de>
* @author Paul Lachewsky <kaeptn.haddock@gmail.com>
* @author Pierre Corell <info@joomla-praxis.de>
+ * @author Matthias Schulte <dokuwiki@lupo49.de>
*/
$lang['menu'] = 'Konfiguration';
$lang['error'] = 'Die Einstellungen wurden wegen einer fehlerhaften Eingabe nicht gespeichert.
@@ -40,6 +40,8 @@ $lang['_anti_spam'] = 'Anti-Spam-Konfiguration';
$lang['_editing'] = 'Bearbeitungs-Konfiguration';
$lang['_links'] = 'Link-Konfiguration';
$lang['_media'] = 'Medien-Konfiguration';
+$lang['_notifications'] = 'Benachrichtigungs-Konfiguration';
+$lang['_syndication'] = 'Syndication-Konfiguration (RSS)';
$lang['_advanced'] = 'Erweiterte Konfiguration';
$lang['_network'] = 'Netzwerk-Konfiguration';
$lang['_plugin_sufix'] = 'Plugin-Konfiguration';
@@ -57,6 +59,8 @@ $lang['cookiedir'] = 'Cookiepfad. Frei lassen, um den gleichen Pfad
$lang['start'] = 'Startseitenname';
$lang['title'] = 'Titel des Wikis';
$lang['template'] = 'Designvorlage (Template)';
+$lang['tagline'] = 'Tag-Linie (nur, wenn vom Template unterstützt)';
+$lang['sidebar'] = 'Name der Sidebar-Seite (nur, wenn vom Template unterstützt)), ein leeres Feld deaktiviert die Sidebar';
$lang['license'] = 'Unter welcher Lizenz sollen Ihre Inhalte veröffentlicht werden?';
$lang['fullpath'] = 'Den kompletten Dateipfad im Footer anzeigen';
$lang['recent'] = 'Anzahl der Einträge in der Änderungsliste';
@@ -100,6 +104,8 @@ $lang['disableactions_other'] = 'Andere Aktionen (durch Komma getrennt)';
$lang['sneaky_index'] = 'Standardmäßig zeigt DokuWiki alle Namensräume in der Übersicht. Wenn diese Option aktiviert wird, werden alle Namensräume, für die der Benutzer keine Lese-Rechte hat, nicht angezeigt. Dies kann unter Umständen dazu führen, das lesbare Unter-Namensräume nicht angezeigt werden und macht die Übersicht evtl. unbrauchbar in Kombination mit bestimmten ACL Einstellungen.';
$lang['auth_security_timeout'] = 'Authentifikations-Timeout (Sekunden)';
$lang['securecookie'] = 'Sollen Cookies, die via HTTPS gesetzt wurden nur per HTTPS versendet werden? Deaktivieren Sie diese Option, wenn nur der Login Ihres Wikis mit SSL gesichert ist, aber das Betrachten des Wikis ungesichert geschieht.';
+$lang['remote'] = 'Aktiviert den externen API-Zugang. Diese Option erlaubt es externen Anwendungen von außen auf die XML-RPC-Schnittstelle oder anderweitigen Schnittstellen zuzugreifen.';
+$lang['remoteuser'] = 'Zugriff auf die externen Schnittstellen durch kommaseparierte Angabe von Benutzern oder Gruppen einschränken. Ein leeres Feld erlaubt Zugriff für jeden.';
$lang['updatecheck'] = 'Automatisch auf Updates und Sicherheitswarnungen prüfen? DokuWiki muss sich dafür mit update.dokuwiki.org verbinden.';
$lang['userewrite'] = 'URL rewriting';
$lang['useslash'] = 'Schrägstrich (/) als Namensraumtrenner in URLs verwenden';
@@ -116,6 +122,7 @@ $lang['notify'] = 'Änderungsmitteilungen an diese E-Mail-Adresse
$lang['registernotify'] = 'Information über neu registrierte Nutzer an diese E-Mail-Adresse senden';
$lang['mailfrom'] = 'Absender-E-Mail-Adresse für automatische Mails';
$lang['mailprefix'] = 'Präfix für E-Mail-Betreff beim automatischen Versand von Benachrichtigungen';
+$lang['htmlmail'] = 'Versendet optisch angenehmere, aber größere E-Mails im HTML-Format (multipart). Deaktivieren, um Text-Mails zu versenden.';
$lang['gzip_output'] = 'Seiten mit gzip komprimiert ausliefern';
$lang['gdlib'] = 'GD Lib Version';
$lang['im_convert'] = 'Pfad zu ImageMagicks-Konvertierwerkzeug';
@@ -139,11 +146,13 @@ $lang['rss_content'] = 'Welche Inhalte sollen im XML-Feed dargestellt
$lang['rss_update'] = 'XML-Feed Aktualisierungsintervall (Sekunden)';
$lang['recent_days'] = 'Wieviele letzte Änderungen sollen einsehbar bleiben? (Tage)';
$lang['rss_show_summary'] = 'Bearbeitungs-Zusammenfassung im XML-Feed anzeigen';
+$lang['rss_media'] = 'Welche Änderungen sollen im XML-Feed angezeigt werden?';
$lang['target____wiki'] = 'Zielfenster für interne Links (target Attribut)';
$lang['target____interwiki'] = 'Zielfenster für InterWiki-Links (target Attribut)';
$lang['target____extern'] = 'Zielfenster für Externe Links (target Attribut)';
$lang['target____media'] = 'Zielfenster für (Bild-)Dateien (target Attribut)';
$lang['target____windows'] = 'Zielfenster für Windows Freigaben (target Attribut)';
+$lang['dnslookups'] = 'DokuWiki löst die IP-Adressen von Benutzern zu deren Hostnamen auf. Wenn du einen langsamen, unbrauchbaren DNS-Server verwendest oder die Funktion nicht benötigst, dann sollte diese Option deaktivert sein.';
$lang['proxy____host'] = 'Proxy-Server';
$lang['proxy____port'] = 'Proxy-Port';
$lang['proxy____user'] = 'Proxy Nutzername';
diff --git a/lib/plugins/config/lang/no/lang.php b/lib/plugins/config/lang/no/lang.php
index ec97fe966..b01637dd1 100644
--- a/lib/plugins/config/lang/no/lang.php
+++ b/lib/plugins/config/lang/no/lang.php
@@ -43,8 +43,8 @@ $lang['_links'] = 'Innstillinger for lenker';
$lang['_media'] = 'Innstillinger for mediafiler';
$lang['_advanced'] = 'Avanserte innstillinger';
$lang['_network'] = 'Nettverksinnstillinger';
-$lang['_plugin_sufix'] = '&ndash; innstillinger for tillegg';
-$lang['_template_sufix'] = '&ndash; innstillinger for mal';
+$lang['_plugin_sufix'] = '– innstillinger for tillegg';
+$lang['_template_sufix'] = '– innstillinger for mal';
$lang['_msg_setting_undefined'] = 'Ingen innstillingsmetadata';
$lang['_msg_setting_no_class'] = 'Ingen innstillingsklasse';
$lang['_msg_setting_no_default'] = 'Ingen standard verdi';
diff --git a/lib/plugins/config/lang/ru/lang.php b/lib/plugins/config/lang/ru/lang.php
index 098cff534..84dce4a67 100644
--- a/lib/plugins/config/lang/ru/lang.php
+++ b/lib/plugins/config/lang/ru/lang.php
@@ -38,6 +38,7 @@ $lang['_anti_spam'] = 'Параметры блокировки спа
$lang['_editing'] = 'Параметры правки';
$lang['_links'] = 'Параметры ссылок';
$lang['_media'] = 'Параметры медиафайлов';
+$lang['_notifications'] = 'Параметры уведомлений';
$lang['_advanced'] = 'Тонкая настройка';
$lang['_network'] = 'Параметры сети';
$lang['_plugin_sufix'] = 'Параметры плагина';
@@ -45,28 +46,29 @@ $lang['_template_sufix'] = 'Параметры шаблона';
$lang['_msg_setting_undefined'] = 'Не найдены метаданные настроек.';
$lang['_msg_setting_no_class'] = 'Не найден класс настроек.';
$lang['_msg_setting_no_default'] = 'Не задано значение по умолчанию.';
-$lang['fmode'] = 'Права для создаваемых файлов';
-$lang['dmode'] = 'Права для создаваемых директорий';
-$lang['lang'] = 'Язык';
-$lang['basedir'] = 'Корневая директория (например, <code>/dokuwiki/</code>). Оставьте пустым для автоопределения.';
-$lang['baseurl'] = 'Корневой адрес (URL) (например, <code>http://www.yourserver.ru</code>). Оставьте пустым для автоопределения.';
-$lang['savedir'] = 'Директория для данных';
-$lang['cookiedir'] = 'Cookie директория. Оставьте пустым для автоопределения.';
-$lang['start'] = 'Имя стартовой страницы';
$lang['title'] = 'Название вики';
+$lang['start'] = 'Имя стартовой страницы';
+$lang['lang'] = 'Язык';
$lang['template'] = 'Шаблон';
$lang['tagline'] = 'Слоган (если поддерживается шаблоном)';
$lang['sidebar'] = 'Боковая панель, пустое поле отключает боковую панель.';
$lang['license'] = 'На условиях какой лицензии будет предоставляться содержимое вики?';
-$lang['fullpath'] = 'Полный путь к документу';
+$lang['savedir'] = 'Директория для данных';
+$lang['basedir'] = 'Корневая директория (например, <code>/dokuwiki/</code>). Оставьте пустым для автоопределения.';
+$lang['baseurl'] = 'Корневой адрес (URL) (например, <code>http://www.yourserver.ru</code>). Оставьте пустым для автоопределения.';
+$lang['cookiedir'] = 'Cookie директория. Оставьте пустым для автоопределения.';
+$lang['dmode'] = 'Права для создаваемых директорий';
+$lang['fmode'] = 'Права для создаваемых файлов';
+$lang['allowdebug'] = 'Включить отладку (отключите!)';
$lang['recent'] = 'Недавние изменения (кол-во)';
+$lang['recent_days'] = 'На сколько дней назад сохранять недавние изменения';
$lang['breadcrumbs'] = 'Вы посетили (кол-во)';
$lang['youarehere'] = 'Показывать «Вы находитесь здесь»';
+$lang['fullpath'] = 'Полный путь к документу';
$lang['typography'] = 'Типографские символы';
-$lang['htmlok'] = 'Разрешить HTML';
-$lang['phpok'] = 'Разрешить PHP';
$lang['dformat'] = 'Формат даты и времени';
$lang['signature'] = 'Шаблон подписи';
+$lang['showuseras'] = 'Что отображать при показе пользователя, редактировавшего страницу последним';
$lang['toptoclevel'] = 'Мин. уровень в содержании';
$lang['tocminheads'] = 'Мин. количество заголовков, при котором будет составлено содержание';
$lang['maxtoclevel'] = 'Макс. уровень в содержании';
@@ -74,16 +76,8 @@ $lang['maxseclevel'] = 'Макс. уровень для правки';
$lang['camelcase'] = 'Использовать ВикиРегистр для ссылок';
$lang['deaccent'] = 'Транслитерация в именах страниц';
$lang['useheading'] = 'Первый заголовок вместо имени';
-$lang['refcheck'] = 'Проверять ссылки на медиафайлы';
-$lang['refshow'] = 'Показывать ссылок на медиафайлы';
-$lang['allowdebug'] = 'Включить отладку (отключите!)';
-$lang['mediarevisions'] = 'Включение версий медиафайлов';
-$lang['usewordblock'] = 'Блокировать спам по ключевым словам';
-$lang['indexdelay'] = 'Задержка перед индексированием';
-$lang['relnofollow'] = 'rel="nofollow" для внешних ссылок';
-$lang['mailguard'] = 'Кодировать адреса электронной почты';
-$lang['iexssprotect'] = 'Проверять закачанные файлы на наличие потенциально опасного кода JavaScript или HTML';
-$lang['showuseras'] = 'Что отображать при показе пользователя, редактировавшего страницу последним';
+$lang['sneaky_index'] = 'По умолчанию, «ДокуВики» показывает в индексе страниц все пространства имён. Включение этой опции скроет пространства имён, для которых пользователь не имеет прав чтения. Это может привести к скрытию доступных вложенных пространств имён и потере функциональности индекса страниц при некоторых конфигурациях прав доступа.';
+$lang['hidepages'] = 'Скрыть страницы (рег. выражение)';
$lang['useacl'] = 'Использовать списки прав доступа';
$lang['autopasswd'] = 'Автогенерация паролей';
$lang['authtype'] = 'Механизм аутентификации';
@@ -92,58 +86,66 @@ $lang['defaultgroup'] = 'Группа по умолчанию';
$lang['superuser'] = 'Суперпользователь — группа или пользователь с полным доступом ко всем страницам и функциям администрирования, независимо от установок ACL. Перечень разделяйте запятыми: user1,@group1,user2';
$lang['manager'] = 'Менеджер — группа или пользователь с доступом к определённым функциям управления. Перечень разделяйте запятыми: user1,@group1,user2';
$lang['profileconfirm'] = 'Пароль для изменения профиля';
+$lang['rememberme'] = 'Разрешить перманентные куки (cookies) для входа («запомнить меня»)';
$lang['disableactions'] = 'Заблокировать операции «ДокуВики»';
$lang['disableactions_check'] = 'Проверка';
$lang['disableactions_subscription'] = 'Подписка/Отмена подписки';
$lang['disableactions_wikicode'] = 'Показ/экспорт исходного текста';
$lang['disableactions_other'] = 'Другие операции (через запятую)';
-$lang['sneaky_index'] = 'По умолчанию, «ДокуВики» показывает в индексе страниц все пространства имён. Включение этой опции скроет пространства имён, для которых пользователь не имеет прав чтения. Это может привести к скрытию доступных вложенных пространств имён и потере функциональности индекса страниц при некоторых конфигурациях прав доступа.';
$lang['auth_security_timeout'] = 'Интервал для безопасности авторизации (сек.)';
$lang['securecookie'] = 'Должны ли куки (cookies), выставленные через HTTPS, отправляться браузером только через HTTPS. Отключите эту опцию в случае, когда только логин вашей вики передаётся через SSL, а обычный просмотр осуществляется в небезопасном режиме.';
+$lang['remote'] = 'Включить систему API для подключений. Это позволит другим приложениям получить доступ к вики через XML-RPC или другие механизмы.';
+$lang['usewordblock'] = 'Блокировать спам по ключевым словам';
+$lang['relnofollow'] = 'rel="nofollow" для внешних ссылок';
+$lang['indexdelay'] = 'Задержка перед индексированием';
+$lang['mailguard'] = 'Кодировать адреса электронной почты';
+$lang['iexssprotect'] = 'Проверять закачанные файлы на наличие потенциально опасного кода JavaScript или HTML';
+$lang['usedraft'] = 'Автоматически сохранять черновик во время правки';
+$lang['htmlok'] = 'Разрешить HTML';
+$lang['phpok'] = 'Разрешить PHP';
+$lang['locktime'] = 'Время блокировки страницы (сек.)';
+$lang['cachetime'] = 'Время жизни кэш-файла (сек.)';
+$lang['target____wiki'] = 'target для внутренних ссылок';
+$lang['target____interwiki'] = 'target для ссылок между вики';
+$lang['target____extern'] = 'target для внешних ссылок';
+$lang['target____media'] = 'target для ссылок на медиафайлы';
+$lang['target____windows'] = 'target для ссылок на сетевые каталоги';
+$lang['mediarevisions'] = 'Включение версий медиафайлов';
+$lang['refcheck'] = 'Проверять ссылки на медиафайлы';
+$lang['refshow'] = 'Показывать ссылок на медиафайлы';
+$lang['gdlib'] = 'Версия LibGD';
+$lang['im_convert'] = 'Путь к ImageMagick';
+$lang['jpg_quality'] = 'Качество сжатия JPG (0–100). Значение по умолчанию — 70.';
+$lang['fetchsize'] = 'Максимальный размер файла (в байтах), который fetch.php может скачивать с внешнего источника';
+$lang['subscribers'] = 'Разрешить подписку на изменения';
+$lang['subscribe_time'] = 'Интервал рассылки подписок и сводок (сек.). Должен быть меньше, чем значение, указанное в recent_days.';
+$lang['notify'] = 'Электронный адрес для извещений';
+$lang['registernotify'] = 'Посылать информацию о новых зарегистрированных пользователях на этот электронный адрес';
+$lang['mailfrom'] = 'Электронный адрес вики (От:)';
+$lang['mailprefix'] = 'Префикс используемый для автоматического письма станет темой сообщений';
+$lang['sitemap'] = 'Число дней, через которое нужно создавать (обновлять) карту сайта для поисковиков (Гугл, Яндекс и др.)';
+$lang['rss_type'] = 'Тип RSS';
+$lang['rss_linkto'] = 'Ссылки в RSS';
+$lang['rss_content'] = 'Что отображать в строках XML-ленты?';
+$lang['rss_update'] = 'Интервал обновления XML-ленты (сек.)';
+$lang['rss_show_summary'] = 'Показывать краткую выдержку в заголовках XML-ленты';
$lang['updatecheck'] = 'Проверять наличие обновлений и предупреждений о безопасности? Для этого «ДокуВики» потребуется связываться с сайтом <a href="http://www.splitbrain.org/">splitbrain.org</a>.';
$lang['userewrite'] = 'Удобочитаемые адреса (URL)';
$lang['useslash'] = 'Использовать слэш';
-$lang['usedraft'] = 'Автоматически сохранять черновик во время правки';
$lang['sepchar'] = 'Разделитель слов в имени страницы';
$lang['canonical'] = 'Полные канонические адреса (URL)';
$lang['fnencode'] = 'Метод кодирования имён файлов, записанных не ASCII-символами.';
$lang['autoplural'] = 'Автоматическое мн. число';
$lang['compression'] = 'Метод сжатия для архивных файлов';
-$lang['cachetime'] = 'Время жизни кэш-файла (сек.)';
-$lang['locktime'] = 'Время блокировки страницы (сек.)';
-$lang['fetchsize'] = 'Максимальный размер файла (в байтах), который fetch.php может скачивать с внешнего источника';
-$lang['notify'] = 'Электронный адрес для извещений';
-$lang['registernotify'] = 'Посылать информацию о новых зарегистрированных пользователях на этот электронный адрес';
-$lang['mailfrom'] = 'Электронный адрес вики (От:)';
-$lang['mailprefix'] = 'Префикс используемый для автоматического письма станет темой сообщений';
$lang['gzip_output'] = 'Использовать gzip-сжатие для xhtml';
-$lang['gdlib'] = 'Версия LibGD';
-$lang['im_convert'] = 'Путь к ImageMagick';
-$lang['jpg_quality'] = 'Качество сжатия JPG (0–100). Значение по умолчанию — 70.';
-$lang['subscribers'] = 'Разрешить подписку на изменения';
-$lang['subscribe_time'] = 'Интервал рассылки подписок и сводок (сек.). Должен быть меньше, чем значение, указанное в recent_days.';
$lang['compress'] = 'Сжимать файлы CSS и javascript';
$lang['cssdatauri'] = 'Размер в байтах до которого изображения, указанные в CSS-файлах, должны быть встроены прямо в таблицу стилей, для уменьшения избычтоных HTTP-запросов. Этот метод не будет работать в IE версии 7 и ниже! Установка от <code>400</code> до <code>600</code> байт является хорошим показателем. Установите <code>0</code>, чтобы отключить.';
-$lang['hidepages'] = 'Скрыть страницы (рег. выражение)';
$lang['send404'] = 'Посылать «HTTP404/Page Not Found»';
-$lang['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'] = 'Используете заголовок X-Sendfile для загрузки файлов на веб-сервер? Ваш веб-сервер должен поддерживать это.';
$lang['renderer_xhtml'] = 'Обработчик основного (xhtml) вывода вики';
$lang['renderer__core'] = '%s (ядро dokuwiki)';
$lang['renderer__plugin'] = '%s (плагин)';
-$lang['rememberme'] = 'Разрешить перманентные куки (cookies) для входа («запомнить меня»)';
-$lang['rss_type'] = 'Тип RSS';
-$lang['rss_linkto'] = 'Ссылки в RSS';
-$lang['rss_content'] = 'Что отображать в строках XML-ленты?';
-$lang['rss_update'] = 'Интервал обновления XML-ленты (сек.)';
-$lang['recent_days'] = 'На сколько дней назад сохранять недавние изменения';
-$lang['rss_show_summary'] = 'Показывать краткую выдержку в заголовках XML-ленты';
-$lang['target____wiki'] = 'target для внутренних ссылок';
-$lang['target____interwiki'] = 'target для ссылок между вики';
-$lang['target____extern'] = 'target для внешних ссылок';
-$lang['target____media'] = 'target для ссылок на медиафайлы';
-$lang['target____windows'] = 'target для ссылок на сетевые каталоги';
$lang['proxy____host'] = 'proxy-адрес';
$lang['proxy____port'] = 'proxy-порт';
$lang['proxy____user'] = 'proxy-имя пользователя';
diff --git a/lib/plugins/config/settings/config.class.php b/lib/plugins/config/settings/config.class.php
index 1cdab607f..a1430016e 100644
--- a/lib/plugins/config/settings/config.class.php
+++ b/lib/plugins/config/settings/config.class.php
@@ -452,8 +452,8 @@ if (!class_exists('setting')) {
function _out_key($pretty=false,$url=false) {
if($pretty){
- $out = str_replace(CM_KEYMARKER,"&raquo;",$this->_key);
- if ($url && !strstr($out,'&raquo;')) {//provide no urls for plugins, etc.
+ $out = str_replace(CM_KEYMARKER,"»",$this->_key);
+ if ($url && !strstr($out,'»')) {//provide no urls for plugins, etc.
if ($out == 'start') //one exception
return '<a href="http://www.dokuwiki.org/config:startpage">'.$out.'</a>';
else
diff --git a/lib/plugins/revert/admin.php b/lib/plugins/revert/admin.php
index 2aaf1395f..ff5fa69ba 100644
--- a/lib/plugins/revert/admin.php
+++ b/lib/plugins/revert/admin.php
@@ -159,7 +159,7 @@ class admin_plugin_revert extends DokuWiki_Admin_Plugin {
echo '</a> ';
echo html_wikilink(':'.$recent['id'],(useHeading('navigation'))?NULL:$recent['id']);
- echo ' &ndash; '.htmlspecialchars($recent['sum']);
+ echo ' – '.htmlspecialchars($recent['sum']);
echo ' <span class="user">';
echo $recent['user'].' '.$recent['ip'];
diff --git a/lib/plugins/usermanager/admin.php b/lib/plugins/usermanager/admin.php
index 8b646b426..2bb0a863d 100644
--- a/lib/plugins/usermanager/admin.php
+++ b/lib/plugins/usermanager/admin.php
@@ -153,7 +153,7 @@ class admin_plugin_usermanager extends DokuWiki_Admin_Plugin {
ptln(" <table class=\"inline\">");
ptln(" <thead>");
ptln(" <tr>");
- ptln(" <th>&nbsp;</th><th>".$this->lang["user_id"]."</th><th>".$this->lang["user_name"]."</th><th>".$this->lang["user_mail"]."</th><th>".$this->lang["user_groups"]."</th>");
+ ptln(" <th>&#160;</th><th>".$this->lang["user_id"]."</th><th>".$this->lang["user_name"]."</th><th>".$this->lang["user_mail"]."</th><th>".$this->lang["user_groups"]."</th>");
ptln(" </tr>");
ptln(" <tr>");
diff --git a/lib/plugins/usermanager/lang/de-informal/lang.php b/lib/plugins/usermanager/lang/de-informal/lang.php
index dbdce1fbf..e53781c77 100644
--- a/lib/plugins/usermanager/lang/de-informal/lang.php
+++ b/lib/plugins/usermanager/lang/de-informal/lang.php
@@ -5,11 +5,11 @@
* @author Alexander Fischer <tbanus@os-forge.net>
* @author Juergen Schwarzer <jschwarzer@freenet.de>
* @author Marcel Metz <marcel_metz@gmx.de>
- * @author Matthias Schulte <post@lupo49.de>
+ * @author Matthias Schulte <dokuwiki@lupo49.de>
* @author Christian Wichmann <nospam@zone0.de>
* @author Pierre Corell <info@joomla-praxis.de>
*/
-$lang['menu'] = 'Benutzerverwalter';
+$lang['menu'] = 'Benutzerverwaltung';
$lang['noauth'] = '(Benutzeranmeldung ist nicht verfügbar)';
$lang['nosupport'] = '(Benutzerverwaltung wird nicht unterstützt)';
$lang['badauth'] = 'Ungültige Authentifizierung';
@@ -22,7 +22,7 @@ $lang['field'] = 'Feld';
$lang['value'] = 'Wert';
$lang['add'] = 'Zufügen';
$lang['delete'] = 'Löschen';
-$lang['delete_selected'] = 'Lösche ausgewähltes';
+$lang['delete_selected'] = 'Lösche Ausgewähltes';
$lang['edit'] = 'Bearbeiten';
$lang['edit_prompt'] = 'Bearbeite diesen Benutzer';
$lang['modify'] = 'Änderungen speichern';
@@ -43,10 +43,10 @@ $lang['next'] = 'nächste';
$lang['last'] = 'letzte';
$lang['edit_usermissing'] = 'Der gewählte Benutzer wurde nicht gefunden. Der angegebene Benutzername könnte gelöscht oder an anderer Stelle geändert worden sein.';
$lang['user_notify'] = 'Benutzer benachrichtigen';
-$lang['note_notify'] = 'Benachrichtigungsemails werden nur versandt, wenn der Benutzer ein neues Kennwort erhält.';
+$lang['note_notify'] = 'Benachrichtigungsmails werden nur versandt, wenn der Benutzer ein neues Kennwort erhält.';
$lang['note_group'] = 'Neue Benutzer werden zur Standardgruppe (%s) hinzugefügt, wenn keine Gruppe angegeben wird.';
$lang['note_pass'] = 'Das Passwort wird automatisch erzeugt, wenn das Feld freigelassen wird und der Benutzer Benachrichtigungen aktiviert hat.';
$lang['add_ok'] = 'Benutzer erfolgreich hinzugefügt';
$lang['add_fail'] = 'Hinzufügen des Benutzers fehlgeschlagen';
-$lang['notify_ok'] = 'Benachrichtigungs-Mail wurde versendet';
-$lang['notify_fail'] = 'Benachrichtigungse-Mail konnte nicht gesendet werden';
+$lang['notify_ok'] = 'Benachrichtigungsmail wurde versendet';
+$lang['notify_fail'] = 'Benachrichtigungsemail konnte nicht gesendet werden';
diff --git a/lib/plugins/usermanager/lang/de/lang.php b/lib/plugins/usermanager/lang/de/lang.php
index 507fe1f7c..0dd90cc68 100644
--- a/lib/plugins/usermanager/lang/de/lang.php
+++ b/lib/plugins/usermanager/lang/de/lang.php
@@ -12,11 +12,11 @@
* @author Dirk Einecke <dirk@dirkeinecke.de>
* @author Blitzi94@gmx.de
* @author Robert Bogenschneider <robog@GMX.de>
- * @author Robert Bogenschneider <robog@gmx.de>
* @author Niels Lange <niels@boldencursief.nl>
* @author Christian Wichmann <nospam@zone0.de>
* @author Paul Lachewsky <kaeptn.haddock@gmail.com>
* @author Pierre Corell <info@joomla-praxis.de>
+ * @author Matthias Schulte <dokuwiki@lupo49.de>
*/
$lang['menu'] = 'Benutzerverwaltung';
$lang['noauth'] = '(Authentifizierungssystem nicht verfügbar)';
@@ -57,5 +57,5 @@ $lang['note_group'] = 'Neue Nutzer werden der Standard-Gruppe (%s) hi
$lang['note_pass'] = 'Das Passwort wird automatisch generiert, wenn das entsprechende Feld leergelassen wird und die Benachrichtigung des Nutzers aktiviert ist.';
$lang['add_ok'] = 'Nutzer erfolgreich angelegt';
$lang['add_fail'] = 'Nutzer konnte nicht angelegt werden';
-$lang['notify_ok'] = 'Benachrichtigungs-Mail wurde versandt';
-$lang['notify_fail'] = 'Benachrichtigungs-Mail konnte nicht versandt werden';
+$lang['notify_ok'] = 'Benachrichtigungsmail wurde versandt';
+$lang['notify_fail'] = 'Benachrichtigungsmail konnte nicht versandt werden';
diff --git a/lib/scripts/page.js b/lib/scripts/page.js
index 5da4a9cc0..74aca9c06 100644
--- a/lib/scripts/page.js
+++ b/lib/scripts/page.js
@@ -10,7 +10,7 @@ dw_page = {
init: function(){
dw_page.sectionHighlight();
jQuery('a.fn_top').mouseover(dw_page.footnoteDisplay);
- dw_page.initTocToggle();
+ dw_page.makeToggle('#dw__toc h3','#dw__toc > div');
},
/**
@@ -93,48 +93,76 @@ dw_page = {
},
/**
- * Adds the toggle switch to the TOC
+ * Makes an element foldable by clicking its handle
+ *
+ * This is used for the TOC toggling, but can be used for other elements
+ * as well. A state indicator is inserted into the handle and can be styled
+ * by CSS.
+ *
+ * @param selector handle What should be clicked to toggle
+ * @param selector content This element will be toggled
*/
- initTocToggle: function() {
- var $header, $clicky, $toc, $tocul, setClicky;
- $header = jQuery('#toc__header');
- if(!$header.length) {
- return;
- }
- $toc = jQuery('#toc__inside');
- $tocul = $toc.children('ul.toc');
+ makeToggle: function(handle, content, state){
+ var $handle, $content, $clicky, $child, setClicky;
+ $handle = jQuery(handle);
+ if(!$handle.length) return;
+ $content = jQuery(content);
+ if(!$content.length) return;
+
+ // we animate the children
+ $child = $content.children();
+ // class/display toggling
setClicky = function(hiding){
if(hiding){
$clicky.html('<span>+</span>');
- $clicky[0].className = 'toc_open';
+ $handle.addClass('closed');
+ $handle.removeClass('open');
}else{
- $clicky.html('<span>&minus;</span>');
- $clicky[0].className = 'toc_close';
+ $clicky.html('<span>−</span>');
+ $handle.addClass('open');
+ $handle.removeClass('closed');
}
};
- $clicky = jQuery(document.createElement('span'))
- .attr('id','toc__toggle');
- $header.css('cursor','pointer')
- .click(function () {
- var hidden;
+ $handle[0].setState = function(state){
+ var hidden;
+ if(!state) state = 1;
+
+ // Assert that content instantly takes the whole space
+ $content.css('min-height', $content.height()).show();
- // Assert that $toc instantly takes the whole TOC space
- $toc.css('height', $toc.height()).show();
+ // stop any running animation
+ $child.stop(true, true);
- hidden = $tocul.stop(true, true).is(':hidden');
+ // was a state given or do we toggle?
+ if(state === -1) {
+ hidden = false;
+ } else if(state === 1) {
+ hidden = true;
+ } else {
+ hidden = $child.is(':hidden');
+ }
+
+ // update the state
+ setClicky(!hidden);
+
+ // Start animation and assure that $toc is hidden/visible
+ $child.dw_toggle(hidden, function () {
+ $content.toggle(hidden);
+ });
+ };
- setClicky(!hidden);
+ // the state indicator
+ $clicky = jQuery(document.createElement('strong'));
- // Start animation and assure that $toc is hidden/visible
- $tocul.dw_toggle(hidden, function () {
- $toc.toggle(hidden);
- });
- })
+ // click function
+ $handle.css('cursor','pointer')
+ .click($handle[0].setState)
.prepend($clicky);
- setClicky();
+ // initial state
+ $handle[0].setState(state);
}
};
diff --git a/lib/tpl/default/_mediamanager.css b/lib/tpl/default/_mediamanager.css
index 68fa2e97f..8c605f69a 100644
--- a/lib/tpl/default/_mediamanager.css
+++ b/lib/tpl/default/_mediamanager.css
@@ -343,18 +343,18 @@
/*____________ Revisions form ____________*/
-#mediamanager__page #page__revisions ul {
+#mediamanager__page form.changes ul {
margin-left: 10px;
list-style-type: none;
}
-#mediamanager__page #page__revisions ul li div.li div {
+#mediamanager__page form.changes ul li div.li div {
font-size: 90%;
color: __text_neu__;
padding-left: 18px;
}
-#mediamanager__page #page__revisions ul li div.li input {
+#mediamanager__page form.changes ul li div.li input {
position: relative;
top: 1px;
}
diff --git a/lib/tpl/default/design.css b/lib/tpl/default/design.css
index a94f814aa..3405ec258 100644
--- a/lib/tpl/default/design.css
+++ b/lib/tpl/default/design.css
@@ -265,11 +265,6 @@ div.dokuwiki a:active {
text-decoration: underline;
}
-div.dokuwiki h1 a,
-div.dokuwiki h2 a,
-div.dokuwiki h3 a,
-div.dokuwiki h4 a,
-div.dokuwiki h5 a,
div.dokuwiki a.nolink {
color: __text__ !important;
text-decoration: none !important;
@@ -383,11 +378,11 @@ div.dokuwiki img.mediacenter {
}
/* smileys */
-div.dokuwiki img.middle {
+div.dokuwiki img.icon {
vertical-align: middle;
}
-div.dokuwiki acronym {
+div.dokuwiki abbr {
cursor: help;
border-bottom: 1px dotted __text__;
}
@@ -552,7 +547,7 @@ div.dokuwiki table.inline td {
/* ---------- table of contents ------------------- */
-div.dokuwiki div.toc {
+div.dokuwiki #dw__toc {
margin: 1.2em 0 0 2em;
float: right;
width: 200px;
@@ -560,46 +555,45 @@ div.dokuwiki div.toc {
clear: both;
}
-div.dokuwiki div.tocheader {
+div.dokuwiki #dw__toc h3 {
border: 1px solid __border__;
background-color: __background_alt__;
text-align: left;
font-weight: bold;
padding: 3px;
- margin-bottom: 2px;
+ margin: 0 0 2px 0;
+ font-size: 1em;
}
-div.dokuwiki span.toc_open,
-div.dokuwiki span.toc_close {
+div.dokuwiki .toggle strong {
border: 0.4em solid __background_alt__;
float: right;
display: block;
margin: 0.4em 3px 0 0;
}
-div.dokuwiki span.toc_open span,
-div.dokuwiki span.toc_close span {
+div.dokuwiki .toggle span {
display: none;
}
-div.dokuwiki span.toc_open {
+div.dokuwiki .toggle.closed strong {
margin-top: 0.4em;
border-top: 0.4em solid __text__;
}
-div.dokuwiki span.toc_close {
+div.dokuwiki .toggle.open strong {
margin-top: 0;
border-bottom: 0.4em solid __text__;
}
-div.dokuwiki #toc__inside {
+div.dokuwiki #dw__toc > div {
border: 1px solid __border__;
background-color: __background__;
text-align: left;
padding: 0.5em 0 0.7em 0;
}
-div.dokuwiki ul.toc {
+div.dokuwiki #dw__toc ul {
list-style-type: none;
list-style-image: none;
line-height: 1.2em;
@@ -607,23 +601,23 @@ div.dokuwiki ul.toc {
margin: 0;
}
-div.dokuwiki ul.toc li {
+div.dokuwiki #dw__toc ul li {
background: transparent url(images/tocdot2.gif) 0 0.6em no-repeat;
padding-left: 0.4em;
}
-div.dokuwiki ul.toc li.clear {
+div.dokuwiki #dw__toc ul li.clear {
background-image: none;
padding-left: 0.4em;
}
-div.dokuwiki a.toc:link,
-div.dokuwiki a.toc:visited {
+div.dokuwiki #dw__toc a:link,
+div.dokuwiki #dw__toc a:visited {
color: __extern__;
}
-div.dokuwiki a.toc:hover,
-div.dokuwiki a.toc:active {
+div.dokuwiki #dw__toc a:hover,
+div.dokuwiki #dw__toc a:active {
color: __text__;
}
@@ -712,12 +706,20 @@ div.insitu-footnote {
}
/* --------------- search result formating --------------- */
-div.dokuwiki .search_result {
- margin-bottom: 6px;
+#dw__loading {
+ text-align: center;
+ margin-bottom: 1em;
+}
+
+div.dokuwiki .search_results {
padding: 0 10px 0 30px;
}
-div.dokuwiki .search_snippet {
+div.dokuwiki .search_results dt {
+ margin-bottom: 3px;
+}
+div.dokuwiki .search_results dd {
+ margin-bottom: 6px;
color: __text_other__;
font-size: 12px;
margin-left: 20px;
diff --git a/lib/tpl/default/main.php b/lib/tpl/default/main.php
index 3e85c58f2..9a14f29a2 100644
--- a/lib/tpl/default/main.php
+++ b/lib/tpl/default/main.php
@@ -61,7 +61,7 @@ if (!defined('DOKU_INC')) die();
<div class="bar-right" id="bar__topright">
<?php tpl_button('recent')?>
- <?php tpl_searchform()?>&nbsp;
+ <?php tpl_searchform()?>&#160;
</div>
<div class="clearer"></div>
@@ -121,7 +121,7 @@ if (!defined('DOKU_INC')) die();
<?php tpl_button('profile')?>
<?php tpl_button('login')?>
<?php tpl_button('index')?>
- <?php tpl_button('top')?>&nbsp;
+ <?php tpl_button('top')?>&#160;
</div>
<div class="clearer"></div>
</div>
diff --git a/lib/tpl/default/print.css b/lib/tpl/default/print.css
index 45b60aad2..f83e8c97c 100644
--- a/lib/tpl/default/print.css
+++ b/lib/tpl/default/print.css
@@ -200,7 +200,7 @@ a.fn_bot {
font-weight: bold;
}
-acronym {
+abbr {
border: 0;
}
@@ -224,5 +224,5 @@ table.inline td {
border: 1px solid #000000;
}
-.toc, .footerinc, .header, .bar, .user { display: none; }
+#dw__toc, .footerinc, .header, .bar, .user { display: none; }
diff --git a/lib/tpl/default/rtl.css b/lib/tpl/default/rtl.css
index 82c85839b..8b2837874 100644
--- a/lib/tpl/default/rtl.css
+++ b/lib/tpl/default/rtl.css
@@ -89,30 +89,36 @@ div.dokuwiki div.level4 { margin-left: 0px; margin-right: 63px; }
div.dokuwiki div.level5 { margin-left: 0px; margin-right: 83px; }
/* TOC control */
-div.dokuwiki div.toc {
+div.dokuwiki #dw__toc {
float: left;
+ margin: 1.2em 2em 0 0;
}
-div.dokuwiki div.tocheader {
+div.dokuwiki #dw__toc h3 {
text-align: right;
}
-div.dokuwiki #toc__inside {
+div.dokuwiki .toggle strong {
+ float: left;
+ margin: 0.4em 0 0 3px;
+}
+
+div.dokuwiki #dw__toc > div {
text-align: right;
}
-div.dokuwiki ul.toc {
+div.dokuwiki #dw__toc ul {
padding: 0;
padding-right: 1em;
}
-div.dokuwiki ul.toc li {
+div.dokuwiki #dw__toc ul li {
background-position: right 0.6em;
padding-right: 0.4em;
direction: rtl;
}
-div.dokuwiki ul.toc li.clear {
+div.dokuwiki #dw__toc ul li.clear {
padding-right: 0.4em;
}
diff --git a/lib/tpl/dokuwiki/css/_admin.css b/lib/tpl/dokuwiki/css/_admin.css
index e4664367c..c8f3694b5 100644
--- a/lib/tpl/dokuwiki/css/_admin.css
+++ b/lib/tpl/dokuwiki/css/_admin.css
@@ -9,6 +9,9 @@
list-style-type: none;
font-size: 1.125em;
}
+[dir=rtl] .dokuwiki ul.admin_tasks {
+ float: right;
+}
.dokuwiki ul.admin_tasks li {
padding-left: 35px;
@@ -18,6 +21,11 @@
background: transparent none no-repeat scroll 0 0;
color: inherit;
}
+[dir=rtl] .dokuwiki ul.admin_tasks li {
+ padding-left: 0;
+ padding-right: 35px;
+ background-position: right 0;
+}
.dokuwiki ul.admin_tasks li.admin_acl {
background-image: url(../../images/admin/acl.png);
@@ -45,3 +53,7 @@
color: __text_neu__;
background-color: inherit;
}
+[dir=rtl] .dokuwiki #admin__version {
+ clear: right;
+ float: left;
+}
diff --git a/lib/tpl/dokuwiki/css/_edit.css b/lib/tpl/dokuwiki/css/_edit.css
index 5a3952c90..374ddeb96 100644
--- a/lib/tpl/dokuwiki/css/_edit.css
+++ b/lib/tpl/dokuwiki/css/_edit.css
@@ -6,18 +6,24 @@
/* edit view
********************************************************************/
+.dokuwiki div.editBox {
+}
+
/*____________ toolbar ____________*/
.dokuwiki div.toolbar {
margin-bottom: .5em;
overflow: hidden;
}
-.dokuwiki div.toolbar #draft__status {
+#draft__status {
float: right;
color: __text_alt__;
background-color: inherit;
}
-.dokuwiki div.toolbar #tool__bar {
+[dir=rtl] #draft__status {
+ float: left;
+}
+#tool__bar {
float: left;
}
@@ -55,42 +61,49 @@ div.picker button.toolbutton {
/*____________ below the textarea ____________*/
-.dokuwiki #wiki__editbar {
+.dokuwiki div.editBar {
overflow: hidden;
margin-bottom: .5em;
}
/* size and wrap controls */
-.dokuwiki #wiki__editbar #size__ctl {
+#size__ctl {
float: right;
}
-.dokuwiki #wiki__editbar #size__ctl img {
+[dir=rtl] #size__ctl {
+ float: left;
+}
+#size__ctl img {
cursor: pointer;
}
/* edit buttons */
-.dokuwiki #wiki__editbar .editButtons {
+.dokuwiki .editBar .editButtons {
display: inline;
margin-right: 1em;
}
-.dokuwiki #wiki__editbar .editButtons input {
+[dir=rtl] .dokuwiki .editBar .editButtons {
+ margin-right: 0;
+ margin-left: 1em;
+}
+.dokuwiki .editBar .editButtons input {
}
/* summary input and minor changes checkbox */
-.dokuwiki #wiki__editbar .summary {
+.dokuwiki .editBar .summary {
display: inline;
}
-.dokuwiki #wiki__editbar .summary label {
+.dokuwiki .editBar .summary label {
vertical-align: middle;
white-space: nowrap;
}
-.dokuwiki #wiki__editbar .summary label span {
+.dokuwiki .editBar .summary label span {
vertical-align: middle;
}
-.dokuwiki #wiki__editbar .summary input {
+.dokuwiki .editBar .summary input {
}
/* change background colour if summary is missing */
-.dokuwiki #wiki__editbar .summary input.missing {
+.dokuwiki .editBar .summary input.missing {
color: __text__;
background-color: #ffcccc;
}
@@ -112,6 +125,9 @@ div.picker button.toolbutton {
float: right;
margin-top: -1.4em;
}
+[dir=rtl] .dokuwiki .secedit {
+ float: left;
+}
.dokuwiki .secedit input.button {
font-size: 75%;
}
diff --git a/lib/tpl/dokuwiki/css/_forms.css b/lib/tpl/dokuwiki/css/_forms.css
index 0c82f5f8c..fb07e989a 100644
--- a/lib/tpl/dokuwiki/css/_forms.css
+++ b/lib/tpl/dokuwiki/css/_forms.css
@@ -23,12 +23,18 @@
text-align: right;
font-weight: bold;
}
+[dir=rtl] .dokuwiki label.block {
+ text-align: left;
+}
.dokuwiki label.simple {
display: block;
text-align: left;
font-weight: normal;
}
+[dir=rtl] .dokuwiki label.simple {
+ text-align: right;
+}
.dokuwiki label.block input.edit {
width: 50%;
@@ -75,6 +81,9 @@
text-align: left;
margin: 0.5em 0;
}
+[dir=rtl] #subscribe__form fieldset {
+ text-align: right;
+}
#subscribe__form label {
display: block;
diff --git a/lib/tpl/dokuwiki/css/_imgdetail.css b/lib/tpl/dokuwiki/css/_imgdetail.css
index a3e0f55f5..a07400028 100644
--- a/lib/tpl/dokuwiki/css/_imgdetail.css
+++ b/lib/tpl/dokuwiki/css/_imgdetail.css
@@ -12,9 +12,17 @@
float: left;
margin: 0 1.5em .5em 0;
}
+[dir=rtl] #dokuwiki__detail div.content img {
+ float: right;
+ margin-right: 0;
+ margin-left: 1.5em;
+}
#dokuwiki__detail div.img_detail {
float: left;
}
+[dir=rtl] #dokuwiki__detail div.content div.img_detail {
+ float: right
+}
#dokuwiki__detail div.img_detail h2 {
}
diff --git a/lib/tpl/dokuwiki/css/_links.css b/lib/tpl/dokuwiki/css/_links.css
index 58b611635..22502f6a9 100644
--- a/lib/tpl/dokuwiki/css/_links.css
+++ b/lib/tpl/dokuwiki/css/_links.css
@@ -39,12 +39,11 @@
.dokuwiki a.interwiki {
background-repeat: no-repeat;
background-position: 0 center;
- padding: 0 0 0 20px;
+ padding: 0 0 0 18px;
}
/* external link */
.dokuwiki a.urlextern {
background-image: url(images/external-link.png);
- padding: 0 0 0 17px;
}
/* windows share */
.dokuwiki a.windows {
@@ -61,5 +60,14 @@
}
/* interwiki link */
.dokuwiki a.interwiki {
- padding: 0 0 0 17px;
+}
+
+/* RTL corrections; if link icons don't work as expected, remove the following lines */
+[dir=rtl] .dokuwiki a.urlextern,
+[dir=rtl] .dokuwiki a.windows,
+[dir=rtl] .dokuwiki a.mail,
+[dir=rtl] .dokuwiki a.interwiki,
+[dir=rtl] .dokuwiki a.mediafile {
+ background-position: right center;
+ padding: 0 18px 0 0;
}
diff --git a/lib/tpl/dokuwiki/css/_media_popup.css b/lib/tpl/dokuwiki/css/_media_popup.css
index 0469c8e60..c776e6b8a 100644
--- a/lib/tpl/dokuwiki/css/_media_popup.css
+++ b/lib/tpl/dokuwiki/css/_media_popup.css
@@ -22,6 +22,12 @@ html.popup {
left: 0;
border-right: 1px solid __border__;
}
+[dir=rtl] #mediamgr__aside {
+ left: auto;
+ right: 0;
+ border-right-width: 0;
+ border-left: 1px solid __border__;
+}
#mediamgr__aside .pad {
padding: .5em;
}
@@ -33,6 +39,10 @@ html.popup {
position: absolute;
right: 0;
}
+[dir=rtl] #mediamgr__content {
+ right: auto;
+ left: 0;
+}
#mediamgr__content .pad {
padding: .5em;
}
@@ -57,6 +67,10 @@ html.popup {
#media__opts input {
margin-right: .3em;
}
+[dir=rtl] #media__opts input {
+ margin-right: 0;
+ margin-left: .3em;
+}
#media__opts label {
}
@@ -65,22 +79,38 @@ html.popup {
#media__tree ul {
padding-left: .2em;
}
+[dir=rtl] #media__tree ul {
+ padding-left: 0;
+ padding-right: .2em;
+}
#media__tree ul li {
clear: left;
list-style-type: none;
list-style-image: none;
margin-left: 0;
}
+[dir=rtl] #media__tree ul li {
+ clear: right;
+ margin-right: 0;
+}
#media__tree ul li img {
float: left;
padding: .5em .3em 0 0;
}
+[dir=rtl] #media__tree ul li img {
+ float: right;
+ padding: .5em 0 0 .3em;
+}
#media__tree ul li div.li {
display: inline;
}
#media__tree ul li li {
margin-left: 1.5em;
}
+[dir=rtl] #media__tree ul li li {
+ margin-left: 0;
+ margin-right: 1.5em;
+}
/* right side
********************************************************************/
@@ -125,6 +155,10 @@ html.popup {
margin-right: 1.5em;
font-weight: bold;
}
+[dir=rtl] #media__content a.mediafile {
+ margin-right: 0;
+ margin-left: 1.5em;
+}
#media__content span.info {
}
#media__content img.btn {
@@ -144,6 +178,10 @@ html.popup {
float: left;
margin: 0 .5em 0 18px;
}
+[dir=rtl] #media__content div.detail div.thumb {
+ float: right;
+ margin: 0 18px 0 .5em;
+}
#media__content div.detail div.thumb a {
display: block;
cursor: pointer;
@@ -155,17 +193,17 @@ html.popup {
/*____________ media search ____________*/
-form#dw__mediasearch {
+#dw__mediasearch {
}
-form#dw__mediasearch p {
+#dw__mediasearch p {
}
-form#dw__mediasearch label {
+#dw__mediasearch label {
}
-form#dw__mediasearch label span {
+#dw__mediasearch label span {
}
-form#dw__mediasearch input.edit {
+#dw__mediasearch input.edit {
}
-form#dw__mediasearch input.button {
+#dw__mediasearch input.button {
}
@@ -180,6 +218,9 @@ form#dw__mediasearch input.button {
margin-bottom: .5em;
overflow: hidden;
}
+[dir=rtl] #media__content form.meta div.metafield {
+ clear: right;
+}
#media__content form.meta label {
display: block;
@@ -188,11 +229,18 @@ form#dw__mediasearch input.button {
font-weight: bold;
clear: left;
}
+[dir=rtl] #media__content form.meta label {
+ float: right;
+ clear: right;
+}
#media__content form.meta .edit {
float: left;
width: 70%;
margin: 0;
}
+[dir=rtl] #media__content form.meta .edit {
+ float: right;
+}
#media__content form.meta textarea.edit {
/* needed because of IE8 hack in _edit.css for textarea.edit: */
max-width: 70%;
@@ -203,3 +251,7 @@ form#dw__mediasearch input.button {
clear: left;
margin: .2em 0 0 25%;
}
+[dir=rtl] #media__content form.meta div.buttons {
+ clear: right;
+ margin: .2em 25% 0 0;
+}
diff --git a/lib/tpl/dokuwiki/css/_modal.css b/lib/tpl/dokuwiki/css/_modal.css
index 125f702a8..a3d3be194 100644
--- a/lib/tpl/dokuwiki/css/_modal.css
+++ b/lib/tpl/dokuwiki/css/_modal.css
@@ -13,6 +13,10 @@
#link__wiz {
}
+[dir=rtl] #link__wiz_close {
+ float: left;
+}
+
#link__wiz_result {
background-color: __background__;
width: 293px;
@@ -23,6 +27,9 @@
text-align: left;
line-height: 1;
}
+[dir=rtl] #link__wiz_result {
+ text-align: right;
+}
#link__wiz_result div {
padding: 3px 3px 3px 0;
@@ -34,6 +41,10 @@
min-height: 16px;
background: transparent 3px center no-repeat;
}
+[dir=rtl] #link__wiz_result div a {
+ padding: 3px 22px 3px 3px;
+ background-position: 257px 3px;
+}
#link__wiz_result div.type_u a {
background-image: url(../../images/up.png);
diff --git a/lib/tpl/dokuwiki/css/_recent.css b/lib/tpl/dokuwiki/css/_recent.css
index 68f0e5826..d73bb9463 100644
--- a/lib/tpl/dokuwiki/css/_recent.css
+++ b/lib/tpl/dokuwiki/css/_recent.css
@@ -5,54 +5,44 @@
/*____________ list of revisions / recent changes ____________*/
-/* select type of revisions (media/pages), should have a class on it's own, but hasn't */
-.dokuwiki #dw__recent label {
+/* select type of revisions (media/pages) */
+.dokuwiki .changeType {
margin-bottom: .5em;
- display: block;
}
-.dokuwiki #dw__recent ul li,
-.dokuwiki #page__revisions ul li {
+.dokuwiki form.changes ul li {
list-style: none;
margin-left: 0;
}
-.dokuwiki #dw__recent ul li span,
-.dokuwiki #dw__recent ul li a,
-.dokuwiki #page__revisions ul li span,
-.dokuwiki #page__revisions ul li a {
+[dir=rtl] .dokuwiki form.changes ul li {
+ margin-right: 0;
+}
+.dokuwiki form.changes ul li span,
+.dokuwiki form.changes ul li a {
vertical-align: middle;
}
-.dokuwiki #dw__recent ul li span.user a,
-.dokuwiki #page__revisions ul li span.user a {
+.dokuwiki form.changes ul li span.user a {
vertical-align: bottom;
}
-.dokuwiki #dw__recent ul li.minor,
-.dokuwiki #page__revisions ul li.minor {
+.dokuwiki form.changes ul li.minor {
opacity: .7;
}
-.dokuwiki #dw__recent li span.date,
-.dokuwiki #page__revisions li span.date {
+.dokuwiki form.changes li span.date {
}
-.dokuwiki #dw__recent li a.diff_link,
-.dokuwiki #page__revisions li a.diff_link {
+.dokuwiki form.changes li a.diff_link {
vertical-align: baseline;
}
-.dokuwiki #dw__recent li a.revisions_link,
-.dokuwiki #page__revisions li a.revisions_link {
+.dokuwiki form.changes li a.revisions_link {
vertical-align: baseline;
}
-.dokuwiki #dw__recent li a.wikilink1,
-.dokuwiki #dw__recent li a.wikilink2,
-.dokuwiki #page__revisions li a.wikilink1,
-.dokuwiki #page__revisions li a.wikilink2 {
+.dokuwiki form.changes li a.wikilink1,
+.dokuwiki form.changes li a.wikilink2 {
}
-.dokuwiki #dw__recent li span.sum,
-.dokuwiki #page__revisions li span.sum {
+.dokuwiki form.changes li span.sum {
font-weight: bold;
}
-.dokuwiki #dw__recent li span.user,
-.dokuwiki #page__revisions li span.user {
+.dokuwiki form.changes li span.user {
}
diff --git a/lib/tpl/dokuwiki/css/_search.css b/lib/tpl/dokuwiki/css/_search.css
index c124c1e86..0090308c9 100644
--- a/lib/tpl/dokuwiki/css/_search.css
+++ b/lib/tpl/dokuwiki/css/_search.css
@@ -8,6 +8,8 @@
/* loading gif */
#dw__loading {
+ text-align: center;
+ margin-bottom: 1.4em;
}
/*____________ matching pagenames ____________*/
@@ -25,17 +27,26 @@
width: 12em;
margin: 0 1.5em;
}
+[dir=rtl] .dokuwiki div.search_quickresult ul li {
+ float: right;
+}
/*____________ search results ____________*/
-/* container for one search result */
-.dokuwiki div.search_result {
- margin-bottom: 1.4em;
+.dokuwiki dl.search_results {
+ margin-bottom: 1.2em;
+}
+
+/* search heading */
+.dokuwiki dl.search_results dt {
+ font-weight: normal;
+ margin-bottom: .2em;
}
/* search snippet */
-.dokuwiki div.search_result div.search_snippet {
+.dokuwiki dl.search_results dd {
color: __text_alt__;
background-color: inherit;
+ margin: 0 0 1.2em 0;
}
/* search hit in normal text */
@@ -44,11 +55,11 @@
background-color: __highlight__;
}
/* search hit in search results */
-.dokuwiki div.search_result strong.search_hit {
+.dokuwiki .search_results strong.search_hit {
font-weight: normal;
}
/* ellipsis separating snippets */
-.dokuwiki div.search_result .search_sep {
+.dokuwiki .search_results .search_sep {
color: __text__;
background-color: inherit;
}
@@ -78,6 +89,11 @@
text-align: left;
display: none;
}
+[dir=rtl] .dokuwiki form.search div.ajax_qsearch {
+ left: auto;
+ right: -13.5em;
+ text-align: right;
+}
.dokuwiki form.search div.ajax_qsearch strong {
display: block;
margin-bottom: .3em;
diff --git a/lib/tpl/dokuwiki/css/_toc.css b/lib/tpl/dokuwiki/css/_toc.css
index b78817523..0d1b976d1 100644
--- a/lib/tpl/dokuwiki/css/_toc.css
+++ b/lib/tpl/dokuwiki/css/_toc.css
@@ -7,56 +7,66 @@
********************************************************************/
/* toc container */
-.dokuwiki div.toc {
+#dw__toc {
float: right;
margin: 0 0 1.4em 1.4em;
width: 12em;
background-color: __background_alt__;
color: inherit;
}
+[dir=rtl] #dw__toc {
+ float: left;
+ margin: 0 1.4em 1.4em 0;
+}
/*____________ toc header ____________*/
-.dokuwiki div.tocheader {
+.dokuwiki h3.toggle {
padding: .2em .5em;
font-weight: bold;
}
-.dokuwiki .toc span.toc_open,
-.dokuwiki .toc span.toc_close {
+.dokuwiki .toggle strong {
float: right;
margin: 0 .2em;
}
+[dir=rtl] .dokuwiki .toggle strong {
+ float: left;
+}
/*____________ toc list ____________*/
-.dokuwiki #toc__inside {
+#dw__toc > div {
padding: .2em .5em;
}
-.dokuwiki #toc__inside ul {
+#dw__toc ul {
padding: 0;
margin: 0;
}
-.dokuwiki #toc__inside ul li {
+#dw__toc ul li {
list-style: none;
padding: 0;
margin: 0;
line-height: 1.1;
}
-.dokuwiki #toc__inside ul li div.li {
+#dw__toc ul li div.li {
padding: .15em 0;
}
-.dokuwiki #toc__inside ul ul {
+#dw__toc ul ul {
padding-left: 1em;
}
-.dokuwiki #toc__inside ul ul li {
+[dir=rtl] #dw__toc ul ul {
+ padding-left: 0;
+ padding-right: 1em;
+}
+#dw__toc ul ul li {
}
-.dokuwiki #toc__inside ul li a {
+#dw__toc ul li a {
}
/* in case of toc list jumping one level
(e.g. if heading level 3 follows directly after heading level 1) */
-.dokuwiki #toc__inside ul li.clear {
+#dw__toc ul li.clear {
}
@@ -66,6 +76,9 @@
.dokuwiki ul.idx {
padding-left: 0;
}
+[dir=rtl] .dokuwiki ul.idx {
+ padding-right: 0;
+}
.dokuwiki ul.idx li {
list-style-image: url(images/bullet.png);
}
@@ -75,3 +88,6 @@
.dokuwiki ul.idx li.closed {
list-style-image: url(images/closed.png);
}
+[dir=rtl] .dokuwiki ul.idx li.closed {
+ list-style-image: url(images/closed-rtl.png);
+}
diff --git a/lib/tpl/dokuwiki/css/basic.css b/lib/tpl/dokuwiki/css/basic.css
index 0c8b0c13f..21bc9b25e 100644
--- a/lib/tpl/dokuwiki/css/basic.css
+++ b/lib/tpl/dokuwiki/css/basic.css
@@ -15,15 +15,7 @@ html {
html,
body {
color: __text__;
- background-color: __background_site__;
- background-image: url(images/page-background.svg);
- /*background-image: -moz-linear-gradient( top, __background_neu__ 0%, __background_alt__ 1em, __background_site__ 4em); see FS#2447*/
- background-image: -webkit-linear-gradient(top, __background_neu__ 0%, __background_alt__ 1em, __background_site__ 4em);
- background-image: -o-linear-gradient( top, __background_neu__ 0%, __background_alt__ 1em, __background_site__ 4em);
- background-image: -ms-linear-gradient( top, __background_neu__ 0%, __background_alt__ 1em, __background_site__ 4em);
- background-image: linear-gradient( top, __background_neu__ 0%, __background_alt__ 1em, __background_site__ 4em);
- background-size: 1px 10em;
- background-repeat: repeat-x;
+ background: __background_site__ url(images/page-gradient.png) top left repeat-x;
margin: 0;
padding: 0;
}
@@ -53,7 +45,7 @@ legend {
h1 {
font-size: 2em;
- margin: -.222em 0 0.444em;
+ margin: 0 0 0.444em;
}
h2 {
font-size: 1.5em;
@@ -383,3 +375,38 @@ button[readonly] {
cursor: auto;
}
+/*____________ rtl corrections ____________*/
+
+[dir=rtl] caption,
+[dir=rtl] td,
+[dir=rtl] th {
+ text-align: right;
+}
+
+[dir=rtl] ul,
+[dir=rtl] ol {
+ padding: 0 1.5em 0 0;
+}
+[dir=rtl] li,
+[dir=rtl] dd {
+ margin: 0 1.5em 0 0;
+}
+[dir=rtl] blockquote {
+ border-width: 0 .25em 0 0;
+}
+
+[dir=rtl] h1,
+[dir=rtl] h2,
+[dir=rtl] h3,
+[dir=rtl] h4,
+[dir=rtl] h5,
+[dir=rtl] h6,
+[dir=rtl] caption,
+[dir=rtl] legend {
+ clear: right;
+}
+
+[dir=rtl] .a11y {
+ left: auto;
+ right: -9000px;
+}
diff --git a/lib/tpl/dokuwiki/css/content.css b/lib/tpl/dokuwiki/css/content.css
index 7cb7c6edf..ebeb4e17e 100644
--- a/lib/tpl/dokuwiki/css/content.css
+++ b/lib/tpl/dokuwiki/css/content.css
@@ -19,6 +19,17 @@
.dokuwiki.page div.level3 {margin-left: 2em;}
.dokuwiki.page div.level4 {margin-left: 3em;}
.dokuwiki.page div.level5 {margin-left: 4em;}
+
+[dir=rtl] .dokuwiki .page h1 {margin-left: 0; margin-right: 0;}
+[dir=rtl] .dokuwiki .page h2 {margin-left: 0; margin-right: .666em;}
+[dir=rtl] .dokuwiki .page h3 {margin-left: 0; margin-right: 1.776em;}
+[dir=rtl] .dokuwiki .page h4 {margin-left: 0; margin-right: 3em;}
+[dir=rtl] .dokuwiki .page h5 {margin-left: 0; margin-right: 4.5712em;}
+[dir=rtl] .dokuwiki .page div.level1 {margin-left: 0; margin-right: 0;}
+[dir=rtl] .dokuwiki .page div.level2 {margin-left: 0; margin-right: 1em;}
+[dir=rtl] .dokuwiki .page div.level3 {margin-left: 0; margin-right: 2em;}
+[dir=rtl] .dokuwiki .page div.level4 {margin-left: 0; margin-right: 3em;}
+[dir=rtl] .dokuwiki .page div.level5 {margin-left: 0; margin-right: 4em;}
*/
/* hx margin-left = (1 / font-size) * .levelx-margin */
@@ -133,6 +144,11 @@
margin-bottom: -1px;
float: left;
}
+[dir=rtl] .dokuwiki dl.code dt,
+[dir=rtl] .dokuwiki dl.file dt {
+ margin-left: 0;
+ margin-right: 1em;
+}
.dokuwiki dl.code dt a,
.dokuwiki dl.file dt a {
background-color: transparent;
diff --git a/lib/tpl/dokuwiki/css/design.css b/lib/tpl/dokuwiki/css/design.css
index c64ccc710..d1a00ce0a 100644
--- a/lib/tpl/dokuwiki/css/design.css
+++ b/lib/tpl/dokuwiki/css/design.css
@@ -23,6 +23,11 @@
float: left;
margin-right: .5em;
}
+[dir=rtl] #dokuwiki__header h1 img {
+ float: right;
+ margin-left: .5em;
+ margin-right: 0;
+}
#dokuwiki__header h1 span {
display: block;
padding-top: 10px;
@@ -78,6 +83,10 @@
list-style: none;
display: inline;
}
+[dir=rtl] #dokuwiki__header .tools li {
+ margin-right: 1em;
+ margin-left: 0;
+}
#dokuwiki__header .tools form.search div.ajax_qsearch li {
font-size: 1em;
margin-left: 0;
@@ -86,13 +95,11 @@
text-overflow: ellipsis;
}
-#dokuwiki__usertools a.action,
-#dokuwiki__sitetools a.action {
+#dokuwiki__usertools a.action {
padding-left: 20px;
- background: transparent url(images/sitetools.png) no-repeat 0 0;
+ background: transparent url(images/usertools.png) no-repeat 0 0;
}
-[dir=rtl] #dokuwiki__usertools a.action,
-[dir=rtl] #dokuwiki__sitetools a.action {
+[dir=rtl] #dokuwiki__usertools a.action {
padding-left: 0;
padding-right: 20px;
}
@@ -110,6 +117,11 @@
text-align: right;
width: 100%;
}
+[dir=rtl] #dokuwiki__usertools {
+ text-align: left;
+ left: 40px;
+ right: auto;
+}
#dokuwiki__usertools ul {
margin: 0 auto;
padding: 0;
@@ -119,34 +131,34 @@
}
#dokuwiki__usertools a.action.admin {
- background-position: left -96px;
+ background-position: left 0;
}
[dir=rtl] #dokuwiki__usertools a.action.admin {
- background-position: right -96px;
+ background-position: right 0;
}
#dokuwiki__usertools a.action.profile {
- background-position: left -128px;
+ background-position: left -32px;
}
[dir=rtl] #dokuwiki__usertools a.action.profile {
- background-position: right -128px;
+ background-position: right -32px;
}
#dokuwiki__usertools a.action.register {
- background-position: left -160px;
+ background-position: left -64px;
}
[dir=rtl] #dokuwiki__usertools a.action.register {
- background-position: right -160px;
+ background-position: right -64px;
}
#dokuwiki__usertools a.action.login {
- background-position: left -192px;
+ background-position: left -96px;
}
[dir=rtl] #dokuwiki__usertools a.action.login {
- background-position: right -192px;
+ background-position: right -96px;
}
#dokuwiki__usertools a.action.logout {
- background-position: left -224px;
+ background-position: left -128px;
}
[dir=rtl] #dokuwiki__usertools a.action.logout {
- background-position: right -224px;
+ background-position: right -128px;
}
@@ -155,6 +167,9 @@
#dokuwiki__sitetools {
text-align: right;
}
+[dir=rtl] #dokuwiki__sitetools {
+ text-align: left;
+}
#dokuwiki__sitetools form.search {
display: block;
@@ -165,6 +180,9 @@
width: 18em;
padding: .35em 22px .35em .1em;
}
+[dir=rtl] #dokuwiki__sitetools form.search input.edit {
+ padding: .35em .1em .35em 22px;
+}
#dokuwiki__sitetools form.search input.button {
background: transparent url(images/search.png) no-repeat 0 0;
border-width: 0;
@@ -175,6 +193,11 @@
box-shadow: none;
padding: 0;
}
+[dir=rtl] #dokuwiki__sitetools form.search input.button {
+ background-position: 5px 0;
+ margin-left: 0;
+ margin-right: -20px;
+}
#dokuwiki__sitetools ul {
margin-top: 0.5em;
@@ -182,25 +205,6 @@
#dokuwiki__sitetools li {
}
-#dokuwiki__sitetools a.action.recent {
- background-position: left 0;
-}
-[dir=rtl] #dokuwiki__sitetools a.action.recent {
- background-position: right 0;
-}
-#dokuwiki__sitetools a.action.media {
- background-position: left -32px;
-}
-[dir=rtl] #dokuwiki__sitetools a.action.media {
- background-position: right -32px;
-}
-#dokuwiki__sitetools a.action.index {
- background-position: left -64px;
-}
-[dir=rtl] #dokuwiki__sitetools a.action.index {
- background-position: right -64px;
-}
-
/*____________ breadcrumbs ____________*/
.dokuwiki div.breadcrumbs {
@@ -284,6 +288,10 @@
#dokuwiki__aside ol {
padding-left: 0;
}
+[dir=rtl] #dokuwiki__aside ul,
+[dir=rtl] #dokuwiki__aside ol {
+ padding-right: 0;
+}
#dokuwiki__aside li ul,
#dokuwiki__aside li ol {
margin-bottom: 0;
@@ -309,6 +317,10 @@
overflow: hidden;
padding: 1em 1em 0;
}
+[dir=rtl] .dokuwiki .pageId {
+ right: auto;
+ left: -1em;
+}
.dokuwiki .pageId span {
font-size: 0.875em;
border: solid __background_alt__;
@@ -328,7 +340,7 @@
border: 1px solid #eee;
box-shadow: 0 0 .5em #999;
border-radius: 2px;
- padding: 2em;
+ padding: 1.556em 2em 2em;
margin-bottom: .5em;
overflow: hidden;
word-wrap: break-word;
@@ -338,6 +350,9 @@
font-size: 0.875em;
text-align: right;
}
+[dir=rtl] .dokuwiki .docInfo {
+ text-align: left;
+}
/*____________ misc ____________*/
@@ -375,16 +390,35 @@
border-bottom-left-radius: 4px;
border-left-width: 1px;
}
+[dir=rtl] .dokuwiki div.toolbar button.toolbutton:first-child {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+ border-top-right-radius: 4px;
+ border-bottom-right-radius: 4px;
+ border-left-width: 0;
+ border-right-width: 1px;
+}
.dokuwiki div.toolbar button.toolbutton:last-child {
border-top-right-radius: 4px;
border-bottom-right-radius: 4px;
}
+[dir=rtl] .dokuwiki div.toolbar button.toolbutton:last-child {
+ border-top-left-radius: 4px;
+ border-bottom-left-radius: 4px;
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+ border-left-width: 1px;
+}
.dokuwiki div.section_highlight {
margin: -3em -2em -.01em -2em;
padding: 3em 1em .01em 1em;
border-width: 0 1em;
}
+[dir=rtl] .dokuwiki div.section_highlight {
+ margin-right: -2em;
+ border-right-width: 1em;
+}
.dokuwiki textarea.edit {
font-family: Consolas, "Andale Mono WT", "Andale Mono", "Bitstream Vera Sans Mono", "Liberation Mono", Monaco, "Courier New", monospace;
@@ -392,58 +426,77 @@
.dokuwiki div.preview {
margin: 0 -2em;
- padding: 2em;
+ padding: 0 2em;
+}
+.dokuwiki.hasSidebar div.preview {
+ border-right: __sidebar_width__ solid __background_alt__;
+}
+[dir=rtl] .dokuwiki.hasSidebar div.preview {
+ border-right-width: 0;
+ border-left: __sidebar_width__ solid __background_alt__;
+}
+.dokuwiki div.preview div.pad {
+ padding: 1.556em 0 2em;
}
/*____________ changes to _toc ____________*/
-.dokuwiki div.toc {
- margin: -2em -2em .5em 1.4em;
+#dw__toc {
+ margin: -1.556em -2em .5em 1.4em;
width: __sidebar_width__;
border-left: 1px solid __border__;
background: __background__;
color: inherit;
}
+[dir=rtl] #dw__toc {
+ margin: -1.556em 1.4em .5em -2em;
+ border-left-width: 0;
+ border-right: 1px solid __border__;
+}
-.dokuwiki div.tocheader {
+.dokuwiki h3.toggle {
padding: .5em 1em;
margin-bottom: 0;
font-size: .875em;
letter-spacing: .1em;
}
+#dokuwiki__aside h3.toggle {
+ display: none;
+}
-.dokuwiki .toc span.toc_open,
-.dokuwiki .toc span.toc_close {
+.dokuwiki .toggle strong {
background: transparent url(images/toc-arrows.png) 0 0;
width: 8px;
height: 5px;
margin: .4em 0 0;
}
-.dokuwiki .toc span.toc_open {
+.dokuwiki .toggle.closed strong {
background-position: 0 -5px;
}
-.dokuwiki .toc span.toc_open span,
-.dokuwiki .toc span.toc_close span {
+.dokuwiki .toggle strong span {
display: none;
}
-.dokuwiki #toc__inside {
+#dw__toc > div {
font-size: 0.875em;
padding: .5em 1em 1em;
}
-.dokuwiki #toc__inside ul {
+#dw__toc ul {
padding: 0 0 0 1.2em;
}
-.dokuwiki #toc__inside ul li {
+[dir=rtl] #dw__toc ul {
+ padding: 0 1.5em 0 0;
+}
+#dw__toc ul li {
list-style-image: url(images/toc-bullet.png);
}
-.dokuwiki #toc__inside ul li.clear {
+#dw__toc ul li.clear {
list-style: none;
}
-.dokuwiki #toc__inside ul li div.li {
+#dw__toc ul li div.li {
padding: .2em 0;
}
@@ -470,9 +523,18 @@
text-align: right;
clear: left;
}
+[dir=rtl] #dokuwiki__detail div.img_detail dl dt {
+ float: right;
+ text-align: left;
+ clear: right;
+}
#dokuwiki__detail div.img_detail dl dd {
margin-left: 9.5em;
}
+[dir=rtl] #dokuwiki__detail div.img_detail dl dd {
+ margin-left: 0;
+ margin-right: 9.5em;
+}
/*____________ JS popup ____________*/
@@ -496,6 +558,10 @@
.JSpopup ol {
padding-left: 0;
}
+[dir=rtl] .JSpopup ul,
+[dir=rtl] .JSpopup ol {
+ padding-right: 0;
+}
/* footer
@@ -518,6 +584,10 @@
font-size: 100%;
}
+[dir=rtl] #dokuwiki__footer .license img {
+ margin: 0 0 0 .5em;
+}
+
#dokuwiki__footer div.buttons a img {
opacity: 0.5;
}
diff --git a/lib/tpl/dokuwiki/css/mobile.css b/lib/tpl/dokuwiki/css/mobile.css
index e1052f437..5a72ed095 100644
--- a/lib/tpl/dokuwiki/css/mobile.css
+++ b/lib/tpl/dokuwiki/css/mobile.css
@@ -5,40 +5,62 @@
* @author Anika Henke <anika@selfthinker.org>
*/
-/* up to 768px screen widths
+/* up to 979px screen widths
********************************************************************/
-@media only screen and (max-width: 768px), only screen and (max-device-width: 960px) {
+@media only screen and (max-width: 979px) {
/* structure */
#dokuwiki__aside {
width: 100%;
float: none;
}
-#dokuwiki__aside > .pad {
+
+#dokuwiki__aside > .pad,
+[dir=rtl] #dokuwiki__aside > .pad {
margin: 0 0 .5em;
+ /* style like .page */
+ background: __background__;
+ color: inherit;
+ border: 1px solid #eee;
+ box-shadow: 0 0 .5em #999;
+ border-radius: 2px;
+ padding: 1em;
+ margin-bottom: .5em;
}
-.hasSidebar #dokuwiki__content {
+.showSidebar #dokuwiki__content {
float: none;
margin-left: 0;
width: 100%;
}
-.hasSidebar #dokuwiki__content > .pad {
+.showSidebar #dokuwiki__content > .pad {
margin-left: 0;
}
+[dir=rtl] .showSidebar #dokuwiki__content,
+[dir=rtl] .showSidebar #dokuwiki__content > .pad {
+ margin-right: 0;
+}
+
/* toc */
-.dokuwiki div.toc {
+#dw__toc {
float: none;
margin: 0 0 1em 0;
width: auto;
border-left-width: 0;
border-bottom: 1px solid __border__;
}
-.dokuwiki div.tocheader {
- padding: 0 0 .5em;
+[dir=rtl] #dw__toc {
+ float: none;
+ margin: 0 0 1em 0;
+ border-right-width: 0;
+}
+
+.dokuwiki h3.toggle {
+ padding: 0 .5em .5em 0;
}
-.dokuwiki #toc__inside {
+#dw__toc > div,
+#dokuwiki__aside div.content {
padding: .2em 0 .5em;
}
@@ -46,12 +68,6 @@
.dokuwiki div.page {
padding: 1em;
}
-.dokuwiki .pageId span {
- border-width: 0;
- background-color: __background_site__;
- color: __text_alt__;
- box-shadow: 0 0 0;
-}
/* _edit */
.dokuwiki div.section_highlight {
@@ -65,10 +81,12 @@
}
/* _recent */
-.dokuwiki #dw__recent ul,
-.dokuwiki #page__revisions ul {
+.dokuwiki form.changes ul {
padding-left: 0;
}
+[dir=rtl] .dokuwiki form.changes ul {
+ padding-right: 0;
+}
} /* /@media */
@@ -76,7 +94,7 @@
/* up to 480px screen widths
********************************************************************/
-@media only screen and (max-width: 480px), only screen and (max-device-width: 960px) {
+@media only screen and (max-width: 480px) {
/*____________ structure ____________*/
@@ -90,6 +108,18 @@
padding: .5em 0;
}
+#dokuwiki__aside h3.toggle {
+ font-size: 1em;
+}
+#dokuwiki__aside h3.toggle.closed {
+ margin-bottom: 0;
+ padding-bottom: 0;
+}
+#dokuwiki__aside h3.toggle.open {
+ border-bottom: 1px solid __border__;
+}
+
+
/*____________ header ____________*/
#dokuwiki__header ul.a11y.skip {
@@ -103,10 +133,19 @@
padding-left: 0;
margin: 0;
}
+[dir=rtl] #dokuwiki__header ul.a11y.skip {
+ left: auto !important;
+ right: 0 !important;
+ float: left;
+ padding-right: 0;
+}
#dokuwiki__header ul.a11y.skip li {
margin-left: .35em;
display: inline;
}
+[dir=rtl] #dokuwiki__header ul.a11y.skip li {
+ margin: 0 .35em 0 0;
+}
#dokuwiki__header .headings,
#dokuwiki__header .tools {
@@ -115,9 +154,18 @@
width: auto;
margin-bottom: .5em;
}
+[dir=rtl] #dokuwiki__header .headings,
+[dir=rtl] #dokuwiki__header .tools {
+ float: none;
+ text-align: right;
+ width: auto;
+}
#dokuwiki__sitetools {
text-align: left;
}
+[dir=rtl] #dokuwiki__sitetools {
+ text-align: right;
+}
#dokuwiki__usertools,
#dokuwiki__sitetools ul,
#dokuwiki__sitetools h3,
@@ -133,6 +181,11 @@
margin: 0 .2em .2em 0;
width: 49%;
}
+[dir=rtl] #dokuwiki__sitetools form.search {
+ float: right;
+ margin: 0 0 .2em .2em;
+}
+
#dokuwiki__sitetools form.search input.edit {
width: 100% !important;
}
@@ -148,6 +201,9 @@
float: right;
width: 49%;
}
+[dir=rtl] #dokuwiki__header .mobileTools {
+ float: left;
+}
#dokuwiki__header .mobileTools select {
padding: .3em .1em;
width: 100% !important;
@@ -156,6 +212,7 @@
/*____________ content ____________*/
+#dokuwiki__aside > .pad,
.dokuwiki div.page {
padding: .5em;
}
@@ -178,6 +235,9 @@
.dokuwiki label.block {
text-align: left;
}
+[dir=rtl] .dokuwiki label.block {
+ text-align: right;
+}
.dokuwiki label.block span {
display: block;
}
diff --git a/lib/tpl/dokuwiki/css/pagetools.css b/lib/tpl/dokuwiki/css/pagetools.css
index bfa22cb2e..a40d525b3 100644
--- a/lib/tpl/dokuwiki/css/pagetools.css
+++ b/lib/tpl/dokuwiki/css/pagetools.css
@@ -22,6 +22,10 @@
/* move the tools just outside of the site */
right: 40px;
}
+[dir=rtl] #dokuwiki__usertools {
+ right: auto;
+ left: 40px;
+}
#dokuwiki__pagetools {
@@ -31,6 +35,10 @@
top: 2em;
width: 40px;
}
+[dir=rtl] #dokuwiki__pagetools {
+ right: auto;
+ left: -40px;
+}
#dokuwiki__pagetools div.tools {
position: fixed;
@@ -46,6 +54,11 @@
/* add transparent border to prevent jumping when proper border is added on hover */
border: 1px solid transparent;
}
+[dir=rtl] #dokuwiki__pagetools ul {
+ right: auto;
+ left: 0;
+ text-align: left;
+}
#dokuwiki__pagetools ul li {
padding: 0;
@@ -66,6 +79,10 @@
border: 1px solid transparent;
white-space: nowrap;
}
+[dir=rtl] #dokuwiki__pagetools ul li a {
+ padding: 5px 5px 5px 40px;
+ background-position: left 0;
+}
/* hide labels accessibly when neither on hover nor on focus */
#dokuwiki__pagetools ul li a span {
@@ -82,6 +99,10 @@
border-radius: 2px;
box-shadow: 2px 2px 2px __text_alt__;
}
+[dir=rtl] #dokuwiki__pagetools:hover ul,
+[dir=rtl] #dokuwiki__pagetools ul li a:focus {
+ box-shadow: -2px 2px 2px __text_alt__;
+}
#dokuwiki__pagetools:hover ul li a span,
#dokuwiki__pagetools ul li a:focus span {
@@ -108,6 +129,14 @@
#dokuwiki__pagetools ul li a.edit:focus {
background-position: right -45px;
}
+[dir=rtl] #dokuwiki__pagetools ul li a.edit {
+ background-position: left 0;
+}
+[dir=rtl] #dokuwiki__pagetools ul li a.edit:hover,
+[dir=rtl] #dokuwiki__pagetools ul li a.edit:active,
+[dir=rtl] #dokuwiki__pagetools ul li a.edit:focus {
+ background-position: left -45px;
+}
#dokuwiki__pagetools ul li a.create {
background-position: right -90px;
@@ -117,6 +146,14 @@
#dokuwiki__pagetools ul li a.create:focus {
background-position: right -135px;
}
+[dir=rtl] #dokuwiki__pagetools ul li a.create {
+ background-position: left -90px;
+}
+[dir=rtl] #dokuwiki__pagetools ul li a.create:hover,
+[dir=rtl] #dokuwiki__pagetools ul li a.create:active,
+[dir=rtl] #dokuwiki__pagetools ul li a.create:focus {
+ background-position: left -135px;
+}
#dokuwiki__pagetools ul li a.show {
background-position: right -270px;
@@ -126,6 +163,14 @@
#dokuwiki__pagetools ul li a.show:focus {
background-position: right -315px;
}
+[dir=rtl] #dokuwiki__pagetools ul li a.show {
+ background-position: left -270px;
+}
+[dir=rtl] #dokuwiki__pagetools ul li a.show:hover,
+[dir=rtl] #dokuwiki__pagetools ul li a.show:active,
+[dir=rtl] #dokuwiki__pagetools ul li a.show:focus {
+ background-position: left -315px;
+}
#dokuwiki__pagetools ul li a.source {
background-position: right -360px;
@@ -135,6 +180,14 @@
#dokuwiki__pagetools ul li a.source:focus {
background-position: right -405px;
}
+[dir=rtl] #dokuwiki__pagetools ul li a.source {
+ background-position: left -360px;
+}
+[dir=rtl] #dokuwiki__pagetools ul li a.source:hover,
+[dir=rtl] #dokuwiki__pagetools ul li a.source:active,
+[dir=rtl] #dokuwiki__pagetools ul li a.source:focus {
+ background-position: left -405px;
+}
#dokuwiki__pagetools ul li a.draft {
background-position: right -180px;
@@ -144,6 +197,14 @@
#dokuwiki__pagetools ul li a.draft:focus {
background-position: right -225px;
}
+[dir=rtl] #dokuwiki__pagetools ul li a.draft {
+ background-position: left -180px;
+}
+[dir=rtl] #dokuwiki__pagetools ul li a.draft:hover,
+[dir=rtl] #dokuwiki__pagetools ul li a.draft:active,
+[dir=rtl] #dokuwiki__pagetools ul li a.draft:focus {
+ background-position: left -225px;
+}
#dokuwiki__pagetools ul li a.revs {
background-position: right -540px;
@@ -154,6 +215,15 @@
.mode_revisions #dokuwiki__pagetools ul li a.revs {
background-position: right -585px;
}
+[dir=rtl] #dokuwiki__pagetools ul li a.revs {
+ background-position: left -540px;
+}
+[dir=rtl] #dokuwiki__pagetools ul li a.revs:hover,
+[dir=rtl] #dokuwiki__pagetools ul li a.revs:active,
+[dir=rtl] #dokuwiki__pagetools ul li a.revs:focus,
+.mode_revisions [dir=rtl] #dokuwiki__pagetools ul li a.revs {
+ background-position: left -585px;
+}
#dokuwiki__pagetools ul li a.backlink {
background-position: right -630px;
@@ -164,6 +234,15 @@
.mode_backlink #dokuwiki__pagetools ul li a.backlink {
background-position: right -675px;
}
+[dir=rtl] #dokuwiki__pagetools ul li a.backlink {
+ background-position: left -630px;
+}
+[dir=rtl] #dokuwiki__pagetools ul li a.backlink:hover,
+[dir=rtl] #dokuwiki__pagetools ul li a.backlink:active,
+[dir=rtl] #dokuwiki__pagetools ul li a.backlink:focus,
+.mode_backlink [dir=rtl] #dokuwiki__pagetools ul li a.backlink {
+ background-position: left -675px;
+}
#dokuwiki__pagetools ul li a.top {
background-position: right -810px;
@@ -173,6 +252,14 @@
#dokuwiki__pagetools ul li a.top:focus {
background-position: right -855px;
}
+[dir=rtl] #dokuwiki__pagetools ul li a.top {
+ background-position: left -810px;
+}
+[dir=rtl] #dokuwiki__pagetools ul li a.top:hover,
+[dir=rtl] #dokuwiki__pagetools ul li a.top:active,
+[dir=rtl] #dokuwiki__pagetools ul li a.top:focus {
+ background-position: left -855px;
+}
#dokuwiki__pagetools ul li a.revert {
background-position: right -450px;
@@ -183,6 +270,15 @@
.mode_revert #dokuwiki__pagetools ul li a.revert {
background-position: right -495px;
}
+[dir=rtl] #dokuwiki__pagetools ul li a.revert {
+ background-position: left -450px;
+}
+[dir=rtl] #dokuwiki__pagetools ul li a.revert:hover,
+[dir=rtl] #dokuwiki__pagetools ul li a.revert:active,
+[dir=rtl] #dokuwiki__pagetools ul li a.revert:focus,
+.mode_revert [dir=rtl] #dokuwiki__pagetools ul li a.revert {
+ background-position: left -495px;
+}
#dokuwiki__pagetools ul li a.subscribe {
background-position: right -720px;
@@ -193,6 +289,15 @@
.mode_subscribe #dokuwiki__pagetools ul li a.subscribe {
background-position: right -765px;
}
+[dir=rtl] #dokuwiki__pagetools ul li a.subscribe {
+ background-position: left -720px;
+}
+[dir=rtl] #dokuwiki__pagetools ul li a.subscribe:hover,
+[dir=rtl] #dokuwiki__pagetools ul li a.subscribe:active,
+[dir=rtl] #dokuwiki__pagetools ul li a.subscribe:focus,
+.mode_subscribe [dir=rtl] #dokuwiki__pagetools ul li a.subscribe {
+ background-position: left -765px;
+}
#dokuwiki__pagetools ul li a.mediaManager {
background-position: right -900px;
@@ -202,6 +307,14 @@
#dokuwiki__pagetools ul li a.mediaManager:focus {
background-position: right -945px;
}
+[dir=rtl] #dokuwiki__pagetools ul li a.mediaManager {
+ background-position: left -900px;
+}
+[dir=rtl] #dokuwiki__pagetools ul li a.mediaManager:hover,
+[dir=rtl] #dokuwiki__pagetools ul li a.mediaManager:active,
+[dir=rtl] #dokuwiki__pagetools ul li a.mediaManager:focus {
+ background-position: left -945px;
+}
#dokuwiki__pagetools ul li a.back {
background-position: right -990px;
@@ -211,3 +324,11 @@
#dokuwiki__pagetools ul li a.back:focus {
background-position: right -1035px;
}
+[dir=rtl] #dokuwiki__pagetools ul li a.back {
+ background-position: left -990px;
+}
+[dir=rtl] #dokuwiki__pagetools ul li a.back:hover,
+[dir=rtl] #dokuwiki__pagetools ul li a.back:active,
+[dir=rtl] #dokuwiki__pagetools ul li a.back:focus {
+ background-position: left -1035px;
+}
diff --git a/lib/tpl/dokuwiki/css/print.css b/lib/tpl/dokuwiki/css/print.css
index 58b8a5f0d..191d50c28 100644
--- a/lib/tpl/dokuwiki/css/print.css
+++ b/lib/tpl/dokuwiki/css/print.css
@@ -21,7 +21,8 @@ div.error,
#dokuwiki__header .tools,
#dokuwiki__aside,
.dokuwiki .breadcrumbs,
-.dokuwiki .toc,
+#dw__toc,
+h3.toggle,
.dokuwiki .secedit,
#dokuwiki__pagetools,
#dokuwiki__footer {
diff --git a/lib/tpl/dokuwiki/css/rtl.css b/lib/tpl/dokuwiki/css/rtl.css
deleted file mode 100644
index e0f81bb21..000000000
--- a/lib/tpl/dokuwiki/css/rtl.css
+++ /dev/null
@@ -1,593 +0,0 @@
-/**
- * This file provides layout and design corrections for right-to-left
- * languages.
- *
- * @author Anika Henke <anika@selfthinker.org>
- */
-
-/*____________ basic ____________*/
-
-[dir=rtl] caption,
-[dir=rtl] td,
-[dir=rtl] th {
- text-align: right;
-}
-
-[dir=rtl] ul,
-[dir=rtl] ol {
- padding: 0 1.5em 0 0;
-}
-[dir=rtl] li,
-[dir=rtl] dd {
- margin: 0 1.5em 0 0;
-}
-[dir=rtl] blockquote {
- border-width: 0 .25em 0 0;
-}
-
-[dir=rtl] h1,
-[dir=rtl] h2,
-[dir=rtl] h3,
-[dir=rtl] h4,
-[dir=rtl] h5,
-[dir=rtl] h6,
-[dir=rtl] caption,
-[dir=rtl] legend {
- clear: right;
-}
-
-[dir=rtl] .a11y {
- left: auto;
- right: -9000px;
-}
-
-
-/*____________ _imgdetail ____________*/
-
-[dir=rtl] #dokuwiki__detail div.content img {
- float: right;
- margin-right: 0;
- margin-left: 1.5em;
-}
-[dir=rtl] #dokuwiki__detail div.content div.img_detail {
- float: right
-}
-
-
-/*____________ _mediamanager ____________*/
-
-[dir=rtl] #mediamgr__aside {
- left: auto;
- right: 0;
- border-right-width: 0;
- border-left: 1px solid __border__;
-}
-[dir=rtl] #mediamgr__content {
- right: auto;
- left: 0;
-}
-
-[dir=rtl] #media__opts input {
- margin-right: 0;
- margin-left: .3em;
-}
-
-[dir=rtl] #media__tree ul {
- padding-left: 0;
- padding-right: .2em;
-}
-[dir=rtl] #media__tree ul li {
- clear: right;
- margin-right: 0;
-}
-[dir=rtl] #media__tree ul li img {
- float: right;
- padding: .5em 0 0 .3em;
-}
-[dir=rtl] #media__tree ul li li {
- margin-left: 0;
- margin-right: 1.5em;
-}
-
-[dir=rtl] #media__content a.mediafile {
- margin-right: 0;
- margin-left: 1.5em;
-}
-[dir=rtl] #media__content div.detail div.thumb {
- float: right;
- margin: 0 18px 0 .5em;
-}
-[dir=rtl] #media__content form.meta div.metafield {
- clear: right;
-}
-[dir=rtl] #media__content form.meta label {
- float: right;
- clear: right;
-}
-[dir=rtl] #media__content form.meta .edit {
- float: right;
-}
-[dir=rtl] #media__content form.meta div.buttons {
- clear: right;
- margin: .2em 25% 0 0;
-}
-
-
-/*____________ _links ____________*/
-
-/* if link icons don't work as expected, remove the following lines */
-[dir=rtl] .dokuwiki a.urlextern,
-[dir=rtl] .dokuwiki a.windows,
-[dir=rtl] .dokuwiki a.mail,
-[dir=rtl] .dokuwiki a.interwiki,
-[dir=rtl] .dokuwiki a.mediafile {
- background-position: right center;
- padding: 0 17px 0 0;
-}
-
-
-/*____________ _toc ____________*/
-
-[dir=rtl] .dokuwiki div.toc {
- float: left;
- margin: 0 1.4em 1.4em 0;
-}
-[dir=rtl] .dokuwiki .toc span.toc_open,
-[dir=rtl] .dokuwiki .toc span.toc_close {
- float: left;
-}
-[dir=rtl] .dokuwiki #toc__inside ul ul {
- padding-left: 0;
- padding-right: 1em;
-}
-
-[dir=rtl] .dokuwiki ul.idx {
- padding-right: 0;
-}
-[dir=rtl] .dokuwiki ul.idx li.closed {
- list-style-image: url(images/closed-rtl.png);
-}
-
-
-/*____________ _footnotes ____________*/
-
-
-/*____________ _search ____________*/
-
-[dir=rtl] .dokuwiki div.search_quickresult ul li {
- float: right;
-}
-[dir=rtl] .dokuwiki form.search div.ajax_qsearch {
- left: auto;
- right: -13.5em;
- text-align: right;
-}
-
-
-/*____________ _recent ____________*/
-
-[dir=rtl] .dokuwiki #dw__recent ul li,
-[dir=rtl] .dokuwiki #page__revisions ul li {
- margin-right: 0;
-}
-
-
-/*____________ _diff ____________*/
-
-
-/*____________ _edit ____________*/
-
-[dir=rtl] .dokuwiki div.toolbar #draft__status {
- float: left;
-}
-[dir=rtl] .dokuwiki #wiki__editbar #size__ctl {
- float: left;
-}
-[dir=rtl] .dokuwiki #wiki__editbar #size__ctl img {
- cursor: pointer;
-}
-[dir=rtl] .dokuwiki #wiki__editbar .editButtons {
- margin-right: 0;
- margin-left: 1em;
-}
-
-[dir=rtl] .dokuwiki .secedit {
- float: left;
-}
-
-
-/*____________ _modal ____________*/
-
-[dir=rtl] #link__wiz_close {
- float: left;
-}
-[dir=rtl] #link__wiz_result {
- text-align: right;
-}
-[dir=rtl] #link__wiz_result div.type_u,
-[dir=rtl] #link__wiz_result div.type_f,
-[dir=rtl] #link__wiz_result div.type_d {
- padding: 3px 22px 3px 3px;
- background-position: 257px 3px;
-}
-
-
-/*____________ _forms ____________*/
-
-[dir=rtl] .dokuwiki label.block {
- text-align: left;
-}
-[dir=rtl] .dokuwiki label.simple {
- text-align: right;
-}
-
-[dir=rtl] form#subscribe__form fieldset {
- text-align: right;
-}
-
-
-/*____________ _admin ____________*/
-
-[dir=rtl] .dokuwiki ul.admin_tasks {
- float: right;
-}
-[dir=rtl] .dokuwiki ul.admin_tasks li {
- padding-left: 0;
- padding-right: 35px;
- background-position: right 0;
-}
-
-[dir=rtl] .dokuwiki #admin__version {
- clear: right;
- float: left;
-}
-
-
-/*____________ includes ____________*/
-
-
-/*____________ structure ____________*/
-
-[dir=rtl] #dokuwiki__header .headings {
- float: right;
- text-align: right;
-}
-[dir=rtl] #dokuwiki__header .tools {
- float: left;
- text-align: left;
-}
-
-[dir=rtl] #dokuwiki__aside {
- float: right;
-}
-[dir=rtl] #dokuwiki__aside > .pad {
- margin: 0 0 0 1.5em;
-}
-
-[dir=rtl] .hasSidebar #dokuwiki__content {
- float: left;
- margin-left: 0;
- margin-right: -__sidebar_width__;
-}
-[dir=rtl] .hasSidebar #dokuwiki__content > .pad {
- margin-left: 0;
- margin-right: __sidebar_width__;
-}
-
-/*____________ design ____________*/
-
-[dir=rtl] #dokuwiki__header h1 img {
- float: right;
- margin-left: .5em;
- margin-right: 0;
-}
-
-[dir=rtl] #dokuwiki__sitetools form.search input.edit {
- padding: .35em .1em .35em 22px;
-}
-[dir=rtl] #dokuwiki__sitetools form.search input.button {
- background-position: 5px 0;
- margin-left: 0;
- margin-right: -20px;
-}
-
-[dir=rtl] #dokuwiki__usertools {
- text-align: left;
- left: 40px;
- right: auto;
-}
-
-[dir=rtl] #dokuwiki__sitetools {
- text-align: left;
-}
-
-[dir=rtl] #dokuwiki__aside ul, #dokuwiki__aside ol {
- padding-right: 0;
-}
-
-[dir=rtl] .dokuwiki .pageId {
- right: auto;
- left: -1em;
-}
-
-[dir=rtl] .dokuwiki .docInfo {
- text-align: left;
-}
-
-[dir=rtl] .dokuwiki div.toolbar button.toolbutton:first-child {
- border-top-left-radius: 0;
- border-bottom-left-radius: 0;
- border-top-right-radius: 4px;
- border-bottom-right-radius: 4px;
- border-left-width: 0;
- border-right-width: 1px;
-}
-[dir=rtl] .dokuwiki div.toolbar button.toolbutton:last-child {
- border-top-left-radius: 4px;
- border-bottom-left-radius: 4px;
- border-top-right-radius: 0;
- border-bottom-right-radius: 0;
- border-left-width: 1px;
-}
-
-[dir=rtl] .dokuwiki div.section_highlight {
- margin-right: -2em;
- border-right-width: 1em;
-}
-
-[dir=rtl] #dokuwiki__footer .license img {
- margin: 0 0 0 .5em;
-}
-
-[dir=rtl] .dokuwiki div.toc {
- margin: -2em 1.4em .5em -2em;
- border-left-width: 0;
- border-right: 1px solid __border__;
-}
-[dir=rtl] .dokuwiki #toc__inside ul {
- padding: 0 1.5em 0 0;
-}
-
-[dir=rtl] #dokuwiki__detail div.img_detail dl dt {
- float: right;
- text-align: left;
- clear: right;
-}
-[dir=rtl] #dokuwiki__detail div.img_detail dl dd {
- margin-left: 0;
- margin-right: 9.5em;
-}
-
-
-/*____________ pagetools ____________*/
-
-[dir=rtl] #dokuwiki__usertools {
- right: auto;
- left: 40px;
-}
-
-[dir=rtl] #dokuwiki__pagetools {
- right: auto;
- left: -40px;
-}
-
-[dir=rtl] #dokuwiki__pagetools ul {
- right: auto;
- left: 0;
- text-align: left;
-}
-
-[dir=rtl] #dokuwiki__pagetools ul li a {
- padding: 5px 5px 5px 40px;
- background-position: left 0;
-}
-
-[dir=rtl] #dokuwiki__pagetools:hover ul,
-[dir=rtl] #dokuwiki__pagetools ul li a:focus {
- box-shadow: -2px 2px 2px __text_alt__;
-}
-
-/* all available icons in sprite */
-[dir=rtl] #dokuwiki__pagetools ul li a.edit {
- background-position: left 0;
-}
-[dir=rtl] #dokuwiki__pagetools ul li a.edit:hover,
-[dir=rtl] #dokuwiki__pagetools ul li a.edit:active,
-[dir=rtl] #dokuwiki__pagetools ul li a.edit:focus {
- background-position: left -45px;
-}
-
-[dir=rtl] #dokuwiki__pagetools ul li a.create {
- background-position: left -90px;
-}
-[dir=rtl] #dokuwiki__pagetools ul li a.create:hover,
-[dir=rtl] #dokuwiki__pagetools ul li a.create:active,
-[dir=rtl] #dokuwiki__pagetools ul li a.create:focus {
- background-position: left -135px;
-}
-
-[dir=rtl] #dokuwiki__pagetools ul li a.show {
- background-position: left -270px;
-}
-[dir=rtl] #dokuwiki__pagetools ul li a.show:hover,
-[dir=rtl] #dokuwiki__pagetools ul li a.show:active,
-[dir=rtl] #dokuwiki__pagetools ul li a.show:focus {
- background-position: left -315px;
-}
-
-[dir=rtl] #dokuwiki__pagetools ul li a.source {
- background-position: left -360px;
-}
-[dir=rtl] #dokuwiki__pagetools ul li a.source:hover,
-[dir=rtl] #dokuwiki__pagetools ul li a.source:active,
-[dir=rtl] #dokuwiki__pagetools ul li a.source:focus {
- background-position: left -405px;
-}
-
-[dir=rtl] #dokuwiki__pagetools ul li a.draft {
- background-position: left -180px;
-}
-[dir=rtl] #dokuwiki__pagetools ul li a.draft:hover,
-[dir=rtl] #dokuwiki__pagetools ul li a.draft:active,
-[dir=rtl] #dokuwiki__pagetools ul li a.draft:focus {
- background-position: left -225px;
-}
-
-[dir=rtl] #dokuwiki__pagetools ul li a.revs {
- background-position: left -540px;
-}
-[dir=rtl] #dokuwiki__pagetools ul li a.revs:hover,
-[dir=rtl] #dokuwiki__pagetools ul li a.revs:active,
-[dir=rtl] #dokuwiki__pagetools ul li a.revs:focus,
-.mode_revisions [dir=rtl] #dokuwiki__pagetools ul li a.revs {
- background-position: left -585px;
-}
-
-[dir=rtl] #dokuwiki__pagetools ul li a.backlink {
- background-position: left -630px;
-}
-[dir=rtl] #dokuwiki__pagetools ul li a.backlink:hover,
-[dir=rtl] #dokuwiki__pagetools ul li a.backlink:active,
-[dir=rtl] #dokuwiki__pagetools ul li a.backlink:focus,
-.mode_backlink [dir=rtl] #dokuwiki__pagetools ul li a.backlink {
- background-position: left -675px;
-}
-
-[dir=rtl] #dokuwiki__pagetools ul li a.top {
- background-position: left -810px;
-}
-[dir=rtl] #dokuwiki__pagetools ul li a.top:hover,
-[dir=rtl] #dokuwiki__pagetools ul li a.top:active,
-[dir=rtl] #dokuwiki__pagetools ul li a.top:focus {
- background-position: left -855px;
-}
-
-[dir=rtl] #dokuwiki__pagetools ul li a.revert {
- background-position: left -450px;
-}
-[dir=rtl] #dokuwiki__pagetools ul li a.revert:hover,
-[dir=rtl] #dokuwiki__pagetools ul li a.revert:active,
-[dir=rtl] #dokuwiki__pagetools ul li a.revert:focus,
-.mode_revert [dir=rtl] #dokuwiki__pagetools ul li a.revert {
- background-position: left -495px;
-}
-
-[dir=rtl] #dokuwiki__pagetools ul li a.subscribe {
- background-position: left -720px;
-}
-[dir=rtl] #dokuwiki__pagetools ul li a.subscribe:hover,
-[dir=rtl] #dokuwiki__pagetools ul li a.subscribe:active,
-[dir=rtl] #dokuwiki__pagetools ul li a.subscribe:focus,
-.mode_subscribe [dir=rtl] #dokuwiki__pagetools ul li a.subscribe {
- background-position: left -765px;
-}
-
-[dir=rtl] #dokuwiki__pagetools ul li a.mediaManager {
- background-position: left -900px;
-}
-[dir=rtl] #dokuwiki__pagetools ul li a.mediaManager:hover,
-[dir=rtl] #dokuwiki__pagetools ul li a.mediaManager:active,
-[dir=rtl] #dokuwiki__pagetools ul li a.mediaManager:focus {
- background-position: left -945px;
-}
-
-[dir=rtl] #dokuwiki__pagetools ul li a.back {
- background-position: left -990px;
-}
-[dir=rtl] #dokuwiki__pagetools ul li a.back:hover,
-[dir=rtl] #dokuwiki__pagetools ul li a.back:active,
-[dir=rtl] #dokuwiki__pagetools ul li a.back:focus {
- background-position: left -1035px;
-}
-
-
-/*____________ content ____________*/
-
-/* section indenting
-[dir=rtl] .dokuwiki .page h1 {margin-left: 0; margin-right: 0;}
-[dir=rtl] .dokuwiki .page h2 {margin-left: 0; margin-right: .666em;}
-[dir=rtl] .dokuwiki .page h3 {margin-left: 0; margin-right: 1.776em;}
-[dir=rtl] .dokuwiki .page h4 {margin-left: 0; margin-right: 3em;}
-[dir=rtl] .dokuwiki .page h5 {margin-left: 0; margin-right: 4.5712em;}
-[dir=rtl] .dokuwiki .page div.level1 {margin-left: 0; margin-right: 0;}
-[dir=rtl] .dokuwiki .page div.level2 {margin-left: 0; margin-right: 1em;}
-[dir=rtl] .dokuwiki .page div.level3 {margin-left: 0; margin-right: 2em;}
-[dir=rtl] .dokuwiki .page div.level4 {margin-left: 0; margin-right: 3em;}
-[dir=rtl] .dokuwiki .page div.level5 {margin-left: 0; margin-right: 4em;}
-*/
-
-[dir=rtl] .dokuwiki dl.code dt,
-[dir=rtl] .dokuwiki dl.file dt {
- margin-left: 0;
- margin-right: 1em;
-}
-
-[dir=rtl] .JSpopup ul,
-[dir=rtl] .JSpopup ol {
- padding-right: 0;
-}
-
-
-/*____________ mobile ____________*/
-
-@media only screen and (max-width: 768px), only screen and (max-device-width: 960px) {
-
-
-[dir=rtl] .hasSidebar #dokuwiki__content,
-[dir=rtl] .hasSidebar #dokuwiki__content > .pad {
- margin-right: 0;
-}
-
-[dir=rtl] .dokuwiki div.toc {
- float: none;
- margin: 0 0 1em 0;
- border-right-width: 0;
-}
-
-[dir=rtl] .dokuwiki #dw__recent ul,
-[dir=rtl] .dokuwiki #page__revisions ul {
- padding-right: 0;
-}
-
-
-} /* /@media */
-
-@media only screen and (max-width: 480px), only screen and (max-device-width: 480px) {
-
-
-[dir=rtl] #dokuwiki__header ul.a11y.skip {
- left: auto !important;
- right: 0 !important;
- float: left;
- padding-right: 0;
-}
-[dir=rtl] #dokuwiki__header ul.a11y.skip li {
- margin: 0 .35em 0 0;
-}
-
-[dir=rtl] #dokuwiki__header .headings,
-[dir=rtl] #dokuwiki__header .tools {
- float: none;
- text-align: right;
- width: auto;
-}
-[dir=rtl] #dokuwiki__sitetools {
- text-align: right;
-}
-
-[dir=rtl] #dokuwiki__sitetools form.search {
- float: right;
- margin: 0 0 .2em .2em;
-}
-
-[dir=rtl] #dokuwiki__header .mobileTools {
- float: left;
-}
-
-[dir=rtl] .dokuwiki label.block {
- text-align: right;
-}
-
-
-
-} /* /@media */
diff --git a/lib/tpl/dokuwiki/css/structure.css b/lib/tpl/dokuwiki/css/structure.css
index 9cca1aa3b..00642e90b 100644
--- a/lib/tpl/dokuwiki/css/structure.css
+++ b/lib/tpl/dokuwiki/css/structure.css
@@ -23,10 +23,18 @@ body {
#dokuwiki__header .headings {
float: left;
}
+ [dir=rtl] #dokuwiki__header .headings {
+ float: right;
+ text-align: right;
+ }
#dokuwiki__header .tools {
float: right;
text-align: right;
}
+ [dir=rtl] #dokuwiki__header .tools {
+ float: left;
+ text-align: left;
+ }
#dokuwiki__site .wrapper {
position: relative;
@@ -38,18 +46,33 @@ body {
position: relative;
display: block;
}
+ [dir=rtl] #dokuwiki__aside {
+ float: right;
+ }
#dokuwiki__aside > .pad {
margin: 0 1.5em 0 0;
}
+ [dir=rtl] #dokuwiki__aside > .pad {
+ margin: 0 0 0 1.5em;
+ }
- .hasSidebar #dokuwiki__content {
+ .showSidebar #dokuwiki__content {
float: right;
margin-left: -__sidebar_width__;
width: 100%;
}
- .hasSidebar #dokuwiki__content > .pad {
+ [dir=rtl] .showSidebar #dokuwiki__content {
+ float: left;
+ margin-left: 0;
+ margin-right: -__sidebar_width__;
+ }
+ .showSidebar #dokuwiki__content > .pad {
margin-left: __sidebar_width__;
}
+ [dir=rtl] .showSidebar #dokuwiki__content > .pad {
+ margin-left: 0;
+ margin-right: __sidebar_width__;
+ }
#dokuwiki__footer {
clear: both;
diff --git a/lib/tpl/dokuwiki/detail.php b/lib/tpl/dokuwiki/detail.php
index a3516a7ed..bb64b42cb 100644
--- a/lib/tpl/dokuwiki/detail.php
+++ b/lib/tpl/dokuwiki/detail.php
@@ -10,11 +10,8 @@
// must be run from within DokuWiki
if (!defined('DOKU_INC')) die();
-$showSidebar = $conf['sidebar'] && page_exists($conf['sidebar']) && ($ACT=='show');
-?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $conf['lang']?>"
- lang="<?php echo $conf['lang']?>" dir="<?php echo $lang['direction'] ?>">
+?><!DOCTYPE html>
+<html lang="<?php echo $conf['lang']?>" dir="<?php echo $lang['direction'] ?>" class="no-js">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /><![endif]-->
@@ -22,6 +19,7 @@ $showSidebar = $conf['sidebar'] && page_exists($conf['sidebar']) && ($ACT=='show
<?php echo hsc(tpl_img_getTag('IPTC.Headline',$IMG))?>
[<?php echo strip_tags($conf['title'])?>]
</title>
+ <script>(function(H){H.className=H.className.replace(/\bno-js\b/,'js')})(document.documentElement)</script>
<?php tpl_metaheaders()?>
<meta name="viewport" content="width=device-width,initial-scale=1" />
<?php echo tpl_favicon(array('favicon', 'mobile')) ?>
@@ -31,7 +29,7 @@ $showSidebar = $conf['sidebar'] && page_exists($conf['sidebar']) && ($ACT=='show
<body>
<!--[if lte IE 7 ]><div id="IE7"><![endif]--><!--[if IE 8 ]><div id="IE8"><![endif]-->
<div id="dokuwiki__site"><div id="dokuwiki__top"
- class="dokuwiki site mode_<?php echo $ACT ?> <?php echo ($showSidebar) ? 'hasSidebar' : ''; ?>">
+ class="dokuwiki site mode_<?php echo $ACT ?>">
<?php include('tpl_header.php') ?>
diff --git a/lib/tpl/dokuwiki/images/apple-touch-icon.png b/lib/tpl/dokuwiki/images/apple-touch-icon.png
index 45fa4e7b0..fb5f108c0 100644
--- a/lib/tpl/dokuwiki/images/apple-touch-icon.png
+++ b/lib/tpl/dokuwiki/images/apple-touch-icon.png
Binary files differ
diff --git a/lib/tpl/dokuwiki/images/bullet.png b/lib/tpl/dokuwiki/images/bullet.png
index 5da537443..5e557b334 100644
--- a/lib/tpl/dokuwiki/images/bullet.png
+++ b/lib/tpl/dokuwiki/images/bullet.png
Binary files differ
diff --git a/lib/tpl/dokuwiki/images/button-dw.png b/lib/tpl/dokuwiki/images/button-dw.png
index 97272d968..8d6aea898 100644
--- a/lib/tpl/dokuwiki/images/button-dw.png
+++ b/lib/tpl/dokuwiki/images/button-dw.png
Binary files differ
diff --git a/lib/tpl/dokuwiki/images/button-rss.png b/lib/tpl/dokuwiki/images/button-rss.png
index f2438043f..b7cddadec 100644
--- a/lib/tpl/dokuwiki/images/button-rss.png
+++ b/lib/tpl/dokuwiki/images/button-rss.png
Binary files differ
diff --git a/lib/tpl/dokuwiki/images/closed-rtl.png b/lib/tpl/dokuwiki/images/closed-rtl.png
index 85ebd59e1..caa027e34 100644
--- a/lib/tpl/dokuwiki/images/closed-rtl.png
+++ b/lib/tpl/dokuwiki/images/closed-rtl.png
Binary files differ
diff --git a/lib/tpl/dokuwiki/images/closed.png b/lib/tpl/dokuwiki/images/closed.png
index 3691ebc17..e3bd0f9e9 100644
--- a/lib/tpl/dokuwiki/images/closed.png
+++ b/lib/tpl/dokuwiki/images/closed.png
Binary files differ
diff --git a/lib/tpl/dokuwiki/images/email.png b/lib/tpl/dokuwiki/images/email.png
index 4ba4aad2f..d1d4a5fd5 100644
--- a/lib/tpl/dokuwiki/images/email.png
+++ b/lib/tpl/dokuwiki/images/email.png
Binary files differ
diff --git a/lib/tpl/dokuwiki/images/external-link.png b/lib/tpl/dokuwiki/images/external-link.png
index 60fc8716b..a4d5de17c 100644
--- a/lib/tpl/dokuwiki/images/external-link.png
+++ b/lib/tpl/dokuwiki/images/external-link.png
Binary files differ
diff --git a/lib/tpl/dokuwiki/images/logo.png b/lib/tpl/dokuwiki/images/logo.png
index 8b794dd64..35640279c 100644
--- a/lib/tpl/dokuwiki/images/logo.png
+++ b/lib/tpl/dokuwiki/images/logo.png
Binary files differ
diff --git a/lib/tpl/dokuwiki/images/open.png b/lib/tpl/dokuwiki/images/open.png
index 40ff129be..5f2d408c5 100644
--- a/lib/tpl/dokuwiki/images/open.png
+++ b/lib/tpl/dokuwiki/images/open.png
Binary files differ
diff --git a/lib/tpl/dokuwiki/images/page-gradient.png b/lib/tpl/dokuwiki/images/page-gradient.png
new file mode 100644
index 000000000..8e16a2805
--- /dev/null
+++ b/lib/tpl/dokuwiki/images/page-gradient.png
Binary files differ
diff --git a/lib/tpl/dokuwiki/images/pagetools-sprite.png b/lib/tpl/dokuwiki/images/pagetools-sprite.png
index bbd7fd361..898f0f4a6 100644
--- a/lib/tpl/dokuwiki/images/pagetools-sprite.png
+++ b/lib/tpl/dokuwiki/images/pagetools-sprite.png
Binary files differ
diff --git a/lib/tpl/dokuwiki/images/resizecol.png b/lib/tpl/dokuwiki/images/resizecol.png
index f0111507c..b5aeec004 100644
--- a/lib/tpl/dokuwiki/images/resizecol.png
+++ b/lib/tpl/dokuwiki/images/resizecol.png
Binary files differ
diff --git a/lib/tpl/dokuwiki/images/search.png b/lib/tpl/dokuwiki/images/search.png
index 2adfc7357..1ab7866fb 100644
--- a/lib/tpl/dokuwiki/images/search.png
+++ b/lib/tpl/dokuwiki/images/search.png
Binary files differ
diff --git a/lib/tpl/dokuwiki/images/sitetools.png b/lib/tpl/dokuwiki/images/sitetools.png
deleted file mode 100644
index 62a17a0c3..000000000
--- a/lib/tpl/dokuwiki/images/sitetools.png
+++ /dev/null
Binary files differ
diff --git a/lib/tpl/dokuwiki/images/toc-arrows.png b/lib/tpl/dokuwiki/images/toc-arrows.png
index 9f441eb26..4a353e4f6 100644
--- a/lib/tpl/dokuwiki/images/toc-arrows.png
+++ b/lib/tpl/dokuwiki/images/toc-arrows.png
Binary files differ
diff --git a/lib/tpl/dokuwiki/images/toc-bullet.png b/lib/tpl/dokuwiki/images/toc-bullet.png
index a6f0169c3..fc771b97e 100644
--- a/lib/tpl/dokuwiki/images/toc-bullet.png
+++ b/lib/tpl/dokuwiki/images/toc-bullet.png
Binary files differ
diff --git a/lib/tpl/dokuwiki/images/unc.png b/lib/tpl/dokuwiki/images/unc.png
index 6dd3d365c..a552d6e6f 100644
--- a/lib/tpl/dokuwiki/images/unc.png
+++ b/lib/tpl/dokuwiki/images/unc.png
Binary files differ
diff --git a/lib/tpl/dokuwiki/images/usertools.png b/lib/tpl/dokuwiki/images/usertools.png
new file mode 100644
index 000000000..e99b6596e
--- /dev/null
+++ b/lib/tpl/dokuwiki/images/usertools.png
Binary files differ
diff --git a/lib/tpl/dokuwiki/main.php b/lib/tpl/dokuwiki/main.php
index 57c94f174..563d9c949 100644
--- a/lib/tpl/dokuwiki/main.php
+++ b/lib/tpl/dokuwiki/main.php
@@ -10,15 +10,15 @@
if (!defined('DOKU_INC')) die(); /* must be run from within DokuWiki */
-$showSidebar = $conf['sidebar'] && page_exists($conf['sidebar']) && ($ACT=='show');
-?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $conf['lang'] ?>"
- lang="<?php echo $conf['lang'] ?>" dir="<?php echo $lang['direction'] ?>">
+$hasSidebar = page_findnearest($conf['sidebar']);
+$showSidebar = $hasSidebar && ($ACT=='show');
+?><!DOCTYPE html>
+<html lang="<?php echo $conf['lang'] ?>" dir="<?php echo $lang['direction'] ?>" class="no-js">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /><![endif]-->
<title><?php tpl_pagetitle() ?> [<?php echo strip_tags($conf['title']) ?>]</title>
+ <script>(function(H){H.className=H.className.replace(/\bno-js\b/,'js')})(document.documentElement)</script>
<?php tpl_metaheaders() ?>
<meta name="viewport" content="width=device-width,initial-scale=1" />
<?php echo tpl_favicon(array('favicon', 'mobile')) ?>
@@ -28,7 +28,8 @@ $showSidebar = $conf['sidebar'] && page_exists($conf['sidebar']) && ($ACT=='show
<body>
<!--[if lte IE 7 ]><div id="IE7"><![endif]--><!--[if IE 8 ]><div id="IE8"><![endif]-->
<div id="dokuwiki__site"><div id="dokuwiki__top"
- class="dokuwiki site mode_<?php echo $ACT ?> <?php echo ($showSidebar) ? 'hasSidebar' : ''; ?>">
+ class="dokuwiki site mode_<?php echo $ACT ?> <?php echo ($showSidebar) ? 'showSidebar' : '';
+ ?> <?php echo ($hasSidebar) ? 'hasSidebar' : ''; ?>">
<?php include('tpl_header.php') ?>
@@ -37,10 +38,13 @@ $showSidebar = $conf['sidebar'] && page_exists($conf['sidebar']) && ($ACT=='show
<?php if($showSidebar): ?>
<!-- ********** ASIDE ********** -->
<div id="dokuwiki__aside"><div class="pad include group">
- <?php tpl_flush() ?>
- <?php tpl_includeFile('sidebarheader.html') ?>
- <?php tpl_include_page($conf['sidebar']) ?>
- <?php tpl_includeFile('sidebarfooter.html') ?>
+ <h3 class="toggle"><?php echo hsc(ucfirst($conf['sidebar'])) ?></h3>
+ <div class="content">
+ <?php tpl_flush() ?>
+ <?php tpl_includeFile('sidebarheader.html') ?>
+ <?php tpl_sidebar() ?>
+ <?php tpl_includeFile('sidebarfooter.html') ?>
+ </div>
</div></div><!-- /aside -->
<?php endif; ?>
diff --git a/lib/tpl/dokuwiki/mediamanager.php b/lib/tpl/dokuwiki/mediamanager.php
index 1f3b9661b..4919632c9 100644
--- a/lib/tpl/dokuwiki/mediamanager.php
+++ b/lib/tpl/dokuwiki/mediamanager.php
@@ -8,10 +8,8 @@
// must be run from within DokuWiki
if (!defined('DOKU_INC')) die();
-?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $conf['lang']?>"
- lang="<?php echo $conf['lang']?>" dir="<?php echo $lang['direction'] ?>" class="popup">
+?><!DOCTYPE html>
+<html lang="<?php echo $conf['lang']?>" dir="<?php echo $lang['direction'] ?>" class="popup no-js">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /><![endif]-->
@@ -19,6 +17,7 @@ if (!defined('DOKU_INC')) die();
<?php echo hsc($lang['mediaselect'])?>
[<?php echo strip_tags($conf['title'])?>]
</title>
+ <script>(function(H){H.className=H.className.replace(/\bno-js\b/,'js')})(document.documentElement)</script>
<?php tpl_metaheaders()?>
<meta name="viewport" content="width=device-width,initial-scale=1" />
<?php echo tpl_favicon(array('favicon', 'mobile')) ?>
diff --git a/lib/tpl/dokuwiki/script.js b/lib/tpl/dokuwiki/script.js
new file mode 100644
index 000000000..d858bda89
--- /dev/null
+++ b/lib/tpl/dokuwiki/script.js
@@ -0,0 +1,75 @@
+/**
+ * We handle several device classes based on browser width.
+ * see http://twitter.github.com/bootstrap/scaffolding.html#responsive
+ *
+ * - desktop: 980+
+ * - mobile: < 980
+ * - tablet 481 - 979 (ostensibly for tablets in portrait mode)
+ * - phone <= 480
+ */
+var device_class = ''; // not yet known
+var device_classes = 'desktop mobile tablet phone';
+
+function tpl_dokuwiki_mobile(){
+
+ // determine our device pattern
+ // TODO: consider moving into dokuwiki core
+ var w = document.body.clientWidth;
+ if (w > 979) {
+ if (device_class == 'desktop') return;
+ device_class = 'desktop';
+ } else if (w > 480) {
+ if (device_class.match(/tablet/)) return;
+ device_class = 'mobile tablet';
+ } else {
+ if (device_class.match(/phone/)) return;
+ device_class = 'mobile phone';
+ }
+
+ jQuery('html').removeClass(device_classes).addClass(device_class);
+
+ // handle some layout changes based on change in device
+ var $handle = jQuery('#dokuwiki__aside h3.toggle');
+ var $toc = jQuery('#dw__toc h3');
+
+ if (device_class == 'desktop') {
+ // reset for desktop mode
+ if($handle.length) {
+ $handle[0].setState(1);
+ $handle.hide();
+ }
+ if($toc.length) {
+ $toc[0].setState(1);
+ }
+ }
+ if (device_class.match(/mobile/)){
+ // toc and sidebar hiding
+ if($handle.length) {
+ $handle.show();
+ $handle[0].setState(-1);
+ }
+ if($toc.length) {
+ $toc[0].setState(-1);
+ }
+ }
+}
+
+jQuery(function(){
+ var resizeTimer;
+ dw_page.makeToggle('#dokuwiki__aside h3.toggle','#dokuwiki__aside div.content');
+
+ tpl_dokuwiki_mobile();
+ jQuery(window).bind('resize',
+ function(){
+ if (resizeTimer) clearTimeout(resizeTimer);
+ resizeTimer = setTimeout(tpl_dokuwiki_mobile,200);
+ }
+ );
+
+ // increase sidebar length to match content (desktop mode only)
+ var $sidebar = jQuery('.desktop #dokuwiki__aside');
+ if($sidebar.length) {
+ var $content = jQuery('#dokuwiki__content div.page');
+ $content.css('min-height', $sidebar.height());
+ }
+});
diff --git a/lib/tpl/dokuwiki/style.ini b/lib/tpl/dokuwiki/style.ini
index b8e55bcc8..08d1a4273 100644
--- a/lib/tpl/dokuwiki/style.ini
+++ b/lib/tpl/dokuwiki/style.ini
@@ -29,10 +29,9 @@ css/design.css = screen
css/pagetools.css = screen
css/content.css = screen
css/includes.css = screen
-css/mobile.css = screen
-css/rtl.css = screen
-css/print.css = print
+css/mobile.css = all
+css/print.css = print
; This section is used to configure some placeholder values used in
diff --git a/lib/tpl/dokuwiki/tpl_header.php b/lib/tpl/dokuwiki/tpl_header.php
index 1d2517ee1..f2e720308 100644
--- a/lib/tpl/dokuwiki/tpl_header.php
+++ b/lib/tpl/dokuwiki/tpl_header.php
@@ -1,7 +1,6 @@
<!-- ********** HEADER ********** -->
<div id="dokuwiki__header"><div class="pad group">
- <?php html_msgarea() ?>
<?php tpl_includeFile('header.html') ?>
<div class="headings group">
@@ -77,5 +76,7 @@
</div>
<?php endif ?>
+ <?php html_msgarea() ?>
+
<hr class="a11y" />
</div></div><!-- /header -->
diff --git a/lib/tpl/index.php b/lib/tpl/index.php
index 0273e5678..4570f70f5 100644
--- a/lib/tpl/index.php
+++ b/lib/tpl/index.php
@@ -54,7 +54,7 @@ if ($ini) {
echo '<td>'.htmlspecialchars($val).'</td>';
echo '<td>';
if(preg_match('/^#[0-f]{3,6}$/i',$val)){
- echo '<div class="color" style="background-color:'.$val.';">&nbsp;</div>';
+ echo '<div class="color" style="background-color:'.$val.';">&#160;</div>';
}
echo '</td>';
echo '</tr>';