summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md7
-rw-r--r--attentionbar.php10
-rw-r--r--attentionbar.txt1
-rw-r--r--banned.php7
-rw-r--r--inc/api.php123
-rw-r--r--inc/config.php31
-rw-r--r--inc/display.php4
-rw-r--r--inc/functions.php37
-rw-r--r--inc/locale/pl_PL/LC_MESSAGES/javascript.js2
-rw-r--r--inc/locale/pl_PL/LC_MESSAGES/javascript.po32
-rw-r--r--inc/locale/pl_PL/LC_MESSAGES/tinyboard.mobin20950 -> 21295 bytes
-rw-r--r--inc/locale/pl_PL/LC_MESSAGES/tinyboard.po358
-rw-r--r--install.php14
-rw-r--r--install.sql12
-rw-r--r--js/attention-bar.js8
-rw-r--r--js/chrome-board-expanding-fix.js7
-rw-r--r--js/expand.js3
-rw-r--r--js/hide-threads.js17
-rw-r--r--js/inline-expanding-filename.js33
-rw-r--r--js/inline-expanding.js1
-rw-r--r--js/mobile-style.js8
l---------js/post-hider.js1
-rw-r--r--js/post-hover.js65
-rw-r--r--js/quick-reply.js3
-rw-r--r--js/smartphone-spoiler.js24
-rw-r--r--post.php4
-rw-r--r--search.php170
-rw-r--r--stylesheets/dark.css18
-rw-r--r--stylesheets/ferus.css19
-rw-r--r--stylesheets/futaba+vichan.css16
-rw-r--r--stylesheets/futaba.css9
-rw-r--r--stylesheets/img/arrow.pngbin0 -> 159 bytes
-rw-r--r--stylesheets/miku.css14
-rw-r--r--stylesheets/style.css54
-rw-r--r--stylesheets/testorange.css67
-rw-r--r--stylesheets/wasabi.css11
-rw-r--r--templates/attention_bar.html6
-rw-r--r--templates/boardlist.html1
-rw-r--r--templates/generic_page.html1
-rw-r--r--templates/header.html2
-rw-r--r--templates/index.html21
-rw-r--r--templates/post_form.html19
-rw-r--r--templates/post_thread.html2
-rw-r--r--templates/search_form.html19
-rw-r--r--templates/themes/ukko/info.php53
-rw-r--r--templates/themes/ukko/theme.php111
-rw-r--r--templates/themes/ukko/thumb.pngbin0 -> 15123 bytes
-rw-r--r--templates/themes/ukko/ukko.js115
-rw-r--r--templates/thread.html9
-rw-r--r--tools/benchmark.php52
-rwxr-xr-xtools/i18n_compile.php44
-rwxr-xr-xtools/i18n_extract.php47
-rw-r--r--tools/inc/cli.php100
-rw-r--r--tools/inc/lib/jsgettext/JSParser.php94
-rw-r--r--tools/inc/lib/jsgettext/PoeditParser.php83
-rw-r--r--tools/inc/lib/jsgettext/PoeditString.php29
-rw-r--r--tools/inc/lib/jsgettext/jsgettext.php63
-rw-r--r--tools/inc/lib/jsgettext/po2json.php42
-rwxr-xr-xtools/rebuild.php105
59 files changed, 2068 insertions, 140 deletions
diff --git a/README.md b/README.md
index 7bd6f461..e262b741 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,13 @@
Tinyboard - A lightweight PHP imageboard.
==========================================
+Tinyboard + vichan-devel
+------------
+Tinyboard branch taking lightweightness somewhat more liberally. Running live at
+https://pl.vichan.net/ (Polish) and http://vichan.net/ (International; may be outdated).
+
+It contains many changes from original Tinyboard, mainly in frontend area.
+
About
------------
Tinyboard is a light-weight, fast, highly configurable and user-friendly
diff --git a/attentionbar.php b/attentionbar.php
new file mode 100644
index 00000000..e928daae
--- /dev/null
+++ b/attentionbar.php
@@ -0,0 +1,10 @@
+<?php
+ require_once 'inc/functions.php';
+ checkBan();
+ if(@strlen($_POST["text"])>0) {
+ file_put_contents("attentionbar.txt",$_POST["text"]);
+ if(strlen($_SERVER['HTTP_REFERER'])>0) { header('Location: ' . $_SERVER['HTTP_REFERER']); }
+ else { header('Location: /'); }
+ } else print(file_get_contents("attentionbar.txt"));
+ return;
+?>
diff --git a/attentionbar.txt b/attentionbar.txt
new file mode 100644
index 00000000..50aa355b
--- /dev/null
+++ b/attentionbar.txt
@@ -0,0 +1 @@
+- * ( Pasek Atencji ) * -
diff --git a/banned.php b/banned.php
new file mode 100644
index 00000000..57e4a9bc
--- /dev/null
+++ b/banned.php
@@ -0,0 +1,7 @@
+<?php
+ require_once 'inc/functions.php';
+ checkBan();
+ print "<!doctype html><html><head><meta charset='utf-8'><title>"._("Banned?")."</title></head><body>";
+ print "<h1>"._("You are not banned.")."</h1>";
+ print "</body></html>";
+?>
diff --git a/inc/api.php b/inc/api.php
new file mode 100644
index 00000000..5592d8af
--- /dev/null
+++ b/inc/api.php
@@ -0,0 +1,123 @@
+<?php
+
+/*
+ * Copyright (c) 2010-2013 Tinyboard Development Group
+ */
+
+/**
+ * Class for generating json API compatible with 4chan API
+ */
+class Api {
+
+ /**
+ * Translation from local fields to fields in 4chan-style API
+ */
+ public static $postFields = array(
+ 'id' => 'no',
+ 'thread' => 'resto',
+ 'subject' => 'sub',
+ 'email' => 'email',
+ 'name' => 'name',
+ 'trip' => 'trip',
+ 'capcode' => 'capcode',
+ 'body' => 'com',
+ 'time' => 'time',
+ 'thumb' => 'thumb', // non-compatible field
+ 'thumbx' => 'tn_w',
+ 'thumby' => 'tn_h',
+ 'file' => 'file', // non-compatible field
+ 'filex' => 'w',
+ 'filey' => 'h',
+ 'filesize' => 'fsize',
+ //'filename' => 'filename',
+ 'omitted' => 'omitted_posts',
+ 'omitted_images' => 'omitted_images',
+ //'posts' => 'replies',
+ //'ip' => '',
+ 'sticky' => 'sticky',
+ 'locked' => 'locked',
+ //'bumplocked' => '',
+ //'embed' => '',
+ //'root' => '',
+ //'mod' => '',
+ //'hr' => '',
+ );
+
+ static $ints = array(
+ 'no' => 1,
+ 'resto' => 1,
+ 'time' => 1,
+ 'tn_w' => 1,
+ 'tn_h' => 1,
+ 'w' => 1,
+ 'h' => 1,
+ 'fsize' => 1,
+ 'omitted_posts' => 1,
+ 'omitted_images' => 1,
+ 'sticky' => 1,
+ 'locked' => 1,
+ );
+
+ private function translatePost($post) {
+ $apiPost = array();
+ foreach (self::$postFields as $local => $translated) {
+ if (!isset($post->$local))
+ continue;
+
+ $toInt = isset(self::$ints[$translated]);
+ $val = $post->$local;
+ if ($val !== null && $val !== '') {
+ $apiPost[$translated] = $toInt ? (int) $val : $val;
+ }
+ }
+
+ if (isset($post->filename)) {
+ $dotPos = strrpos($post->filename, '.');
+ $apiPost['filename'] = substr($post->filename, 0, $dotPos);
+ $apiPost['ext'] = substr($post->filename, $dotPos);
+ }
+
+ return $apiPost;
+ }
+
+ function translateThread(Thread $thread) {
+ $apiPosts = array();
+ $op = $this->translatePost($thread);
+ $op['resto'] = 0;
+ $apiPosts['posts'][] = $op;
+
+ foreach ($thread->posts as $p) {
+ $apiPosts['posts'][] = $this->translatePost($p);
+ }
+
+ return $apiPosts;
+ }
+
+ function translatePage(array $threads) {
+ $apiPage = array();
+ foreach ($threads as $thread) {
+ $apiPage['threads'][] = $this->translateThread($thread);
+ }
+ return $apiPage;
+ }
+
+ function translateCatalogPage(array $threads) {
+ $apiPage = array();
+ foreach ($threads as $thread) {
+ $ts = $this->translateThread($thread);
+ $apiPage['threads'][] = current($ts['posts']);
+ }
+ return $apiPage;
+ }
+
+ function translateCatalog($catalog) {
+ $apiCatalog = array();
+ foreach ($catalog as $page => $threads) {
+ $apiPage = $this->translateCatalogPage($threads);
+ $apiPage['page'] = $page;
+ $apiCatalog[] = $apiPage;
+ }
+
+ return $apiCatalog;
+ }
+}
diff --git a/inc/config.php b/inc/config.php
index ef2ba4ac..cddbf074 100644
--- a/inc/config.php
+++ b/inc/config.php
@@ -345,9 +345,10 @@
$config['auto_unicode'] = true;
// Whether to turn URLs into functional links.
$config['markup_urls'] = true;
+
// Optional URL prefix for links (eg. "http://anonym.to/?").
$config['link_prefix'] = '';
-
+ $config['url_ads'] = &$config['link_prefix']; // leave alias
// A wordfilter (sometimes referred to as just a "filter" or "censor") automatically scans users’ posts
// as they are submitted and changes or censors particular words or phrases.
@@ -446,7 +447,7 @@
$config['markup'][] = array("/'''([^<]+?)'''/", "<strong>\$1</strong>");
$config['markup'][] = array("/''([^<]+?)''/", "<em>\$1</em>");
$config['markup'][] = array("/\*\*([^<]+?)\*\*/", "<span class=\"spoiler\">\$1</span>");
- // $config['markup'][] = array("/^[ |\t]*==([^<]+?)==[ |\t]*$/m", "<span class=\"heading\">\$1</span>");
+ $config['markup'][] = array("/^[ |\t]*==([^<]+?)==[ |\t]*$/m", "<span class=\"heading\">\$1</span>");
// Highlight PHP code wrapped in <code> tags (PHP 5.3+)
// $config['markup'][] = array(
@@ -615,6 +616,10 @@
// Number of reports you can create at once.
$config['report_limit'] = 3;
+ // Attention Whoring Bar
+ // REMEMBER TO CHMOD attentionbar.txt PROPERLY
+ // Oh, and add jQuery in additional_javascript.
+ $config['attention_bar'] = false;
/*
* ====================
* Display settings
@@ -1231,6 +1236,28 @@
/*
* ====================
+ * Public post search
+ * ====================
+ */
+ $config['search'] = array();
+
+ // Enable the search form
+ $config['search']['enable'] = false;
+
+ // Maximal number of queries per IP address per minutes
+ $config['search']['queries_per_minutes'] = Array(15, 2);
+
+ // Global maximal number of queries per minutes
+ $config['search']['queries_per_minutes_all'] = Array(50, 2);
+
+ // Limit of search results
+ $config['search']['search_limit'] = 100;
+
+ // Boards for searching
+ //$config['search']['boards'] = array('a', 'b', 'c', 'd', 'e');
+
+/*
+ * ====================
* Events (PHP 5.3.0+)
* ====================
*/
diff --git a/inc/display.php b/inc/display.php
index 97b8c744..18eeb1f6 100644
--- a/inc/display.php
+++ b/inc/display.php
@@ -25,8 +25,8 @@ function doBoardListPart($list, $root) {
$body = '';
foreach ($list as $board) {
if (is_array($board))
- $body .= ' [' . doBoardListPart($board, $root) . '] ';
- // $body .= ' <span class="sub">[' . doBoardListPart($board, $root) . ']</span> ';
+ // $body .= ' [' . doBoardListPart($board, $root) . '] ';
+ $body .= ' <span class="sub">[' . doBoardListPart($board, $root) . ']</span> ';
else {
if (($key = array_search($board, $list)) && gettype($key) == 'string') {
$body .= ' <a href="' . $board . '">' . $key . '</a> /';
diff --git a/inc/functions.php b/inc/functions.php
index 74ab96e9..7ed131d5 100644
--- a/inc/functions.php
+++ b/inc/functions.php
@@ -13,6 +13,7 @@ require_once 'inc/display.php';
require_once 'inc/template.php';
require_once 'inc/database.php';
require_once 'inc/events.php';
+require_once 'inc/api.php';
require_once 'inc/lib/gettext/gettext.inc';
// the user is not currently logged in as a moderator
@@ -1043,6 +1044,9 @@ function index($page, $mod=false) {
if ($query->rowCount() < 1 && $page > 1)
return false;
+
+ $threads = array();
+
while ($th = $query->fetch(PDO::FETCH_ASSOC)) {
$thread = new Thread(
$th['id'], $th['subject'], $th['email'], $th['name'], $th['trip'], $th['capcode'], $th['body'], $th['time'], $th['thumb'],
@@ -1092,6 +1096,7 @@ function index($page, $mod=false) {
$thread->omitted_images = $omitted['image_count'] - $num_images;
}
+ $threads[] = $thread;
$body .= $thread->build(true);
}
@@ -1100,7 +1105,8 @@ function index($page, $mod=false) {
'body' => $body,
'post_url' => $config['post_url'],
'config' => $config,
- 'boardlist' => createBoardlist($mod)
+ 'boardlist' => createBoardlist($mod),
+ 'threads' => $threads
);
}
@@ -1293,6 +1299,9 @@ function buildIndex() {
if (!$config['try_smarter'])
$antibot = create_antibot($board['uri']);
+ $api = new Api();
+ $catalog = array();
+
for ($page = 1; $page <= $config['max_pages']; $page++) {
$filename = $board['dir'] . ($page == 1 ? $config['file_index'] : sprintf($config['file_page'], $page));
@@ -1313,13 +1322,31 @@ function buildIndex() {
$content['antibot'] = $antibot;
file_write($filename, Element('index.html', $content));
+
+ // json api
+ $threads = $content['threads'];
+ $json = json_encode($api->translatePage($threads));
+ $jsonFilename = $board['dir'] . ($page-1) . ".json"; // pages should start from 0
+ file_write($jsonFilename, $json);
+
+ $catalog[$page-1] = $threads;
+
+ $page++;
}
if ($page < $config['max_pages']) {
for (;$page<=$config['max_pages'];$page++) {
$filename = $board['dir'] . ($page==1 ? $config['file_index'] : sprintf($config['file_page'], $page));
file_unlink($filename);
+
+ $jsonFilename = $board['dir'] . ($page-1) . ".json";
+ file_unlink($jsonFilename);
}
}
+
+ // json api catalog
+ $json = json_encode($api->translateCatalog($catalog));
+ $jsonFilename = $board['dir'] . "catalog.json";
+ file_write($jsonFilename, $json);
}
function buildJavascript() {
@@ -1470,7 +1497,7 @@ function markup(&$body, $track_cites = false) {
$body = str_replace("\r", '', $body);
$body = utf8tohtml($body);
- if (preg_match_all('@&lt;tinyboard ([\w\s]+)&gt;(.+?)&lt;/tinyboard&gt;@um', $body, $modifiers, PREG_SET_ORDER | PREG_OFFSET_CAPTURE)) {
+ if (preg_match_all('@&lt;tinyboard ([\w\s]+)&gt;(.+?)&lt;/tinyboard&gt;@us', $body, $modifiers, PREG_SET_ORDER | PREG_OFFSET_CAPTURE)) {
$skip_chars = 0;
$body_tmp = $body;
$end_markup = false;
@@ -1764,6 +1791,12 @@ function buildThread($id, $return = false, $mod = false) {
return $body;
file_write($board['dir'] . $config['dir']['res'] . sprintf($config['file_page'], $id), $body);
+
+ // json api
+ $api = new Api();
+ $json = json_encode($api->translateThread($thread));
+ $jsonFilename = $board['dir'] . $config['dir']['res'] . $id . ".json";
+ file_write($jsonFilename, $json);
}
function rrmdir($dir) {
diff --git a/inc/locale/pl_PL/LC_MESSAGES/javascript.js b/inc/locale/pl_PL/LC_MESSAGES/javascript.js
index caf4a66c..9345b0b3 100644
--- a/inc/locale/pl_PL/LC_MESSAGES/javascript.js
+++ b/inc/locale/pl_PL/LC_MESSAGES/javascript.js
@@ -1 +1 @@
-l10n = {"Submit":"Wy\u015blij","Quick reply":"Szybka odpowied\u017a","Posting mode: Replying to <small>&gt;&gt;{0}<\/small>":"Tryb postowania: Odpowied\u017a na <small>&gt;&gt;{0}<\/small>","Return":"Powr\u00f3t","Click reply to view.":"Kliknij Odpowied\u017a aby zobaczy\u0107.","Click to expand":"Kliknij aby rozwin\u0105\u0107","Hide expanded replies":"Schowaj rozwini\u0119te odpowiedzi","Mon":"pon","Tue":"wto","Wed":"\u015bro","Thu":"czw","Fri":"pi\u0105","Sat":"sob","Sun":"nie","Show locked threads":"Poka\u017c zablokowane tematy","Hide locked threads":"Schowaj zablokowane tematy","Forced anonymity":"Wymuszona anonimowo\u015b\u0107","enabled":"w\u0142\u0105czona","disabled":"wy\u0142\u0105czona","Password":"Has\u0142o","Delete file only":"Usu\u0144 tylko plik","File":"Plik","Delete":"Usu\u0144","Reason":"Pow\u00f3d","Report":"Zg\u0142oszenie","hide":"ukryj","show":"poka\u017c","hidden":"ukryte","Show images":"Poka\u017c obrazki","Hide images":"Ukryj obrazki"}; \ No newline at end of file
+l10n = {"Submit":"Wy\u015blij","Quick reply":"Szybka odpowied\u017a","Posting mode: Replying to <small>&gt;&gt;{0}<\/small>":"Tryb postowania: Odpowied\u017a na <small>&gt;&gt;{0}<\/small>","Return":"Powr\u00f3t","Click reply to view.":"Kliknij Odpowied\u017a aby zobaczy\u0107.","Click to expand":"Kliknij aby rozwin\u0105\u0107","Hide expanded replies":"Schowaj rozwini\u0119te odpowiedzi","Mon":"pon","Tue":"wto","Wed":"\u015bro","Thu":"czw","Fri":"pi\u0105","Sat":"sob","Sun":"nie","Show locked threads":"Poka\u017c zablokowane tematy","Hide locked threads":"Schowaj zablokowane tematy","Forced anonymity":"Wymuszona anonimowo\u015b\u0107","enabled":"w\u0142\u0105czona","disabled":"wy\u0142\u0105czona","Password":"Has\u0142o","Delete file only":"Usu\u0144 tylko plik","File":"Plik","Delete":"Usu\u0144","Reason":"Pow\u00f3d","Report":"Zg\u0142oszenie","hide":"ukryj","show":"poka\u017c","hidden":"ukryte","Show images":"Poka\u017c obrazki","Hide images":"Ukryj obrazki","Style: ":"Styl: ","Hello!":"Witaj!","{0} users":"{0} u\u017cytkownik\u00f3w","(hide threads from this board)":"(schowaj w\u0105tki z tego boardu)","(show threads from this board)":"(poka\u017c w\u0105tki z tego boardu)","No more threads to display":"Nie ma wi\u0119cej w\u0105tk\u00f3w do wy\u015bwietlenia","Loading...":"\u0141adowanie..."}; \ No newline at end of file
diff --git a/inc/locale/pl_PL/LC_MESSAGES/javascript.po b/inc/locale/pl_PL/LC_MESSAGES/javascript.po
index ae1bb5c9..474f4fe8 100644
--- a/inc/locale/pl_PL/LC_MESSAGES/javascript.po
+++ b/inc/locale/pl_PL/LC_MESSAGES/javascript.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-08-01 01:58-0400\n"
+"POT-Creation-Date: 2013-08-05 05:28-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -140,3 +140,33 @@ msgstr "Pokaż obrazki"
#: ../../../../js/toggle-images.js:57 ../../../../js/toggle-images.js:70
msgid "Hide images"
msgstr "Ukryj obrazki"
+
+#: ../../../../js/style-select.js:40
+msgid "Style: "
+msgstr "Styl: "
+
+#: ../../../../templates/main.js:6
+msgid "Hello!"
+msgstr "Witaj!"
+
+#: ../../../../templates/main.js:18
+msgid "{0} users"
+msgstr "{0} użytkowników"
+
+#: ../../../../templates/themes/ukko/ukko.js:28
+#: ../../../../templates/themes/ukko/ukko.js:39
+msgid "(hide threads from this board)"
+msgstr "(schowaj wątki z tego boardu)"
+
+#: ../../../../templates/themes/ukko/ukko.js:32
+#: ../../../../templates/themes/ukko/ukko.js:44
+msgid "(show threads from this board)"
+msgstr "(pokaż wątki z tego boardu)"
+
+#: ../../../../templates/themes/ukko/ukko.js:57
+msgid "No more threads to display"
+msgstr "Nie ma więcej wątków do wyświetlenia"
+
+#: ../../../../templates/themes/ukko/ukko.js:79
+msgid "Loading..."
+msgstr "Ładowanie..."
diff --git a/inc/locale/pl_PL/LC_MESSAGES/tinyboard.mo b/inc/locale/pl_PL/LC_MESSAGES/tinyboard.mo
index d2807a37..7f72498a 100644
--- a/inc/locale/pl_PL/LC_MESSAGES/tinyboard.mo
+++ b/inc/locale/pl_PL/LC_MESSAGES/tinyboard.mo
Binary files differ
diff --git a/inc/locale/pl_PL/LC_MESSAGES/tinyboard.po b/inc/locale/pl_PL/LC_MESSAGES/tinyboard.po
index a5a58616..d527d0b4 100644
--- a/inc/locale/pl_PL/LC_MESSAGES/tinyboard.po
+++ b/inc/locale/pl_PL/LC_MESSAGES/tinyboard.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-08-01 01:58-0400\n"
+"POT-Creation-Date: 2013-08-05 05:23-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -25,6 +25,7 @@ msgstr ""
#: ../../../../inc/functions.php:1039 ../../../../inc/functions.php:1053
#: ../../../../inc/functions.php:1068 ../../../../inc/functions.php:1082
#: ../../../../inc/functions.php:1079 ../../../../inc/functions.php:1093
+#: ../../../../inc/functions.php:1122 ../../../../inc/functions.php:1136
msgid "Previous"
msgstr "Wstecz"
@@ -35,6 +36,7 @@ msgstr "Wstecz"
#: ../../../../inc/functions.php:1058 ../../../../inc/functions.php:1067
#: ../../../../inc/functions.php:1087 ../../../../inc/functions.php:1096
#: ../../../../inc/functions.php:1098 ../../../../inc/functions.php:1107
+#: ../../../../inc/functions.php:1141 ../../../../inc/functions.php:1150
msgid "Next"
msgstr "Dalej"
@@ -44,6 +46,7 @@ msgstr "Niewspierany format pliku: "
#: /var/www/html/Tinyboard/inc/mod.php:129
#: ../../../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:74
+#: ../../../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:79
msgid "Create new board"
msgstr "Stwórz nowy board"
@@ -55,11 +58,18 @@ msgstr "Stwórz nowy board"
#: ../../../../templates/cache/18/9c/c365d711719f494c684aab98a4ae.php:150
#: ../../../../templates/cache/4c/fb/a3bf13b0badfc09442bd42da1cce.php:207
#: ../../../../templates/cache/18/9c/c365d711719f494c684aab98a4ae.php:155
+#: ../../../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:312
+#: ../../../../templates/cache/e5/22/4711dd22e4c786b4de405db7a449.php:74
+#: ../../../../templates/cache/18/9c/c365d711719f494c684aab98a4ae.php:166
msgid "all boards"
msgstr "wszystkie boardy"
+#. How long before Tinyboard forgets about a mute?
+#. 2 weeks
+#. If you want to alter the algorithm a bit. Default value is 2.
+#. (n^x where x is the number of previous mutes)
#: /var/www/html/Tinyboard/inc/config.php:305 ../../../../inc/config.php:330
-#: ../../../../inc/config.php:334
+#: ../../../../inc/config.php:334 ../../../../inc/config.php:342
msgid "You have been muted for unoriginal content."
msgstr "Zostałeś wyciszony za nieoryginalną treść."
@@ -68,11 +78,14 @@ msgid "Anonymous"
msgstr "Anonimowy"
#. The names on the post buttons. (On most imageboards, these are both "Post")
+#. The names on the post buttons. (On most imageboards, these are both just "Post").
#: /var/www/html/Tinyboard/inc/config.php:481 ../../../../inc/config.php:552
+#: ../../../../inc/config.php:641
msgid "New Topic"
msgstr "Nowy wątek"
#: /var/www/html/Tinyboard/inc/config.php:482 ../../../../inc/config.php:553
+#: ../../../../inc/config.php:642
msgid "New Reply"
msgstr "Odpowiedz"
@@ -89,18 +102,21 @@ msgstr "Szybka odpowiedź"
#: /var/www/html/Tinyboard/inc/config.php:600 ../../../../inc/config.php:638
#: ../../../../inc/config.php:692 ../../../../inc/config.php:698
#: ../../../../inc/config.php:695 ../../../../inc/config.php:701
+#: ../../../../inc/config.php:803
msgid "Lurk some more before posting."
msgstr "Nie postuj pierwszego dnia."
#: /var/www/html/Tinyboard/inc/config.php:601 ../../../../inc/config.php:639
#: ../../../../inc/config.php:693 ../../../../inc/config.php:699
#: ../../../../inc/config.php:696 ../../../../inc/config.php:702
+#: ../../../../inc/config.php:804
msgid "You look like a bot."
msgstr "Wyglądasz jak bot."
#: /var/www/html/Tinyboard/inc/config.php:602 ../../../../inc/config.php:640
#: ../../../../inc/config.php:694 ../../../../inc/config.php:700
#: ../../../../inc/config.php:697 ../../../../inc/config.php:703
+#: ../../../../inc/config.php:805
msgid "Your browser sent an invalid or no HTTP referer."
msgstr ""
"Twoja przeglądarka przesłała niepoprawny, bądź nie przesłała informacji o "
@@ -109,6 +125,7 @@ msgstr ""
#: /var/www/html/Tinyboard/inc/config.php:603 ../../../../inc/config.php:641
#: ../../../../inc/config.php:695 ../../../../inc/config.php:701
#: ../../../../inc/config.php:698 ../../../../inc/config.php:704
+#: ../../../../inc/config.php:806
#, php-format
msgid "The %s field was too long."
msgstr "Pole %s jest za długie"
@@ -116,78 +133,91 @@ msgstr "Pole %s jest za długie"
#: /var/www/html/Tinyboard/inc/config.php:604 ../../../../inc/config.php:642
#: ../../../../inc/config.php:696 ../../../../inc/config.php:702
#: ../../../../inc/config.php:699 ../../../../inc/config.php:705
+#: ../../../../inc/config.php:807
msgid "The body was too long."
msgstr "Zawartość jest za długa."
#: /var/www/html/Tinyboard/inc/config.php:605 ../../../../inc/config.php:643
#: ../../../../inc/config.php:697 ../../../../inc/config.php:703
#: ../../../../inc/config.php:700 ../../../../inc/config.php:706
+#: ../../../../inc/config.php:808
msgid "The body was too short or empty."
msgstr "Zawartość jest za krótka, bądź pusta."
#: /var/www/html/Tinyboard/inc/config.php:606 ../../../../inc/config.php:644
#: ../../../../inc/config.php:698 ../../../../inc/config.php:704
#: ../../../../inc/config.php:701 ../../../../inc/config.php:707
+#: ../../../../inc/config.php:809
msgid "You must upload an image."
msgstr "Musisz wysłać obrazek."
#: /var/www/html/Tinyboard/inc/config.php:607 ../../../../inc/config.php:645
#: ../../../../inc/config.php:699 ../../../../inc/config.php:705
#: ../../../../inc/config.php:702 ../../../../inc/config.php:708
+#: ../../../../inc/config.php:810
msgid "The server failed to handle your upload."
msgstr "Nie udało się obsłużyć twojego pliku."
#: /var/www/html/Tinyboard/inc/config.php:608 ../../../../inc/config.php:646
#: ../../../../inc/config.php:700 ../../../../inc/config.php:706
#: ../../../../inc/config.php:703 ../../../../inc/config.php:709
+#: ../../../../inc/config.php:811
msgid "Unsupported image format."
msgstr "Niewspierany format obrazka."
#: /var/www/html/Tinyboard/inc/config.php:609 ../../../../inc/config.php:647
#: ../../../../inc/config.php:701 ../../../../inc/config.php:707
#: ../../../../inc/config.php:704 ../../../../inc/config.php:710
+#: ../../../../inc/config.php:812
msgid "Invalid board!"
msgstr "Niepoprawny board!"
#: /var/www/html/Tinyboard/inc/config.php:610 ../../../../inc/config.php:648
#: ../../../../inc/config.php:702 ../../../../inc/config.php:708
#: ../../../../inc/config.php:705 ../../../../inc/config.php:711
+#: ../../../../inc/config.php:813
msgid "Thread specified does not exist."
msgstr "Wybrany wątek nie istnieje."
#: /var/www/html/Tinyboard/inc/config.php:611 ../../../../inc/config.php:649
#: ../../../../inc/config.php:703 ../../../../inc/config.php:709
#: ../../../../inc/config.php:706 ../../../../inc/config.php:712
+#: ../../../../inc/config.php:814
msgid "Thread locked. You may not reply at this time."
msgstr "Wątek jest zablokowany. Nie możesz w nim teraz postować."
#: /var/www/html/Tinyboard/inc/config.php:612 ../../../../inc/config.php:650
#: ../../../../inc/config.php:706 ../../../../inc/config.php:712
#: ../../../../inc/config.php:709 ../../../../inc/config.php:715
+#: ../../../../inc/config.php:817
msgid "You didn't make a post."
msgstr "Nie zrobiłeś posta."
#: /var/www/html/Tinyboard/inc/config.php:613 ../../../../inc/config.php:651
#: ../../../../inc/config.php:707 ../../../../inc/config.php:713
#: ../../../../inc/config.php:710 ../../../../inc/config.php:716
+#: ../../../../inc/config.php:818
msgid "Flood detected; Post discarded."
msgstr "Wykryto flood; Post odrzucony."
#: /var/www/html/Tinyboard/inc/config.php:614 ../../../../inc/config.php:652
#: ../../../../inc/config.php:708 ../../../../inc/config.php:714
#: ../../../../inc/config.php:711 ../../../../inc/config.php:717
+#: ../../../../inc/config.php:819
msgid "Your request looks automated; Post discarded."
msgstr "Twoje żądanie wygląda na zautomatyzowane; Post odrzucony."
#: /var/www/html/Tinyboard/inc/config.php:615 ../../../../inc/config.php:653
#: ../../../../inc/config.php:709 ../../../../inc/config.php:715
#: ../../../../inc/config.php:712 ../../../../inc/config.php:718
+#: ../../../../inc/config.php:820
msgid "Unoriginal content!"
msgstr "Nieoryginalna treść!"
#: /var/www/html/Tinyboard/inc/config.php:616 ../../../../inc/config.php:654
#: ../../../../inc/config.php:710 ../../../../inc/config.php:716
#: ../../../../inc/config.php:713 ../../../../inc/config.php:719
+#: ../../../../inc/config.php:821
#, php-format
msgid "Unoriginal content! You have been muted for %d seconds."
msgstr "Nieoryginalna treść! Zostałeś wyciszony na %d sekund."
@@ -195,6 +225,7 @@ msgstr "Nieoryginalna treść! Zostałeś wyciszony na %d sekund."
#: /var/www/html/Tinyboard/inc/config.php:617 ../../../../inc/config.php:655
#: ../../../../inc/config.php:711 ../../../../inc/config.php:717
#: ../../../../inc/config.php:714 ../../../../inc/config.php:720
+#: ../../../../inc/config.php:822
#, php-format
msgid "You are muted! Expires in %d seconds."
msgstr "Jesteś wyciszony! Wygasa w ciągu %d sekund."
@@ -202,6 +233,7 @@ msgstr "Jesteś wyciszony! Wygasa w ciągu %d sekund."
#: /var/www/html/Tinyboard/inc/config.php:618 ../../../../inc/config.php:656
#: ../../../../inc/config.php:712 ../../../../inc/config.php:718
#: ../../../../inc/config.php:715 ../../../../inc/config.php:721
+#: ../../../../inc/config.php:823
#, php-format
msgid "Your IP address is listed in %s."
msgstr "Twój adres IP jest na liście %s."
@@ -209,60 +241,70 @@ msgstr "Twój adres IP jest na liście %s."
#: /var/www/html/Tinyboard/inc/config.php:619 ../../../../inc/config.php:657
#: ../../../../inc/config.php:713 ../../../../inc/config.php:719
#: ../../../../inc/config.php:716 ../../../../inc/config.php:722
+#: ../../../../inc/config.php:824
msgid "Too many links; flood detected."
msgstr "Zbyt dużo linków; wykryto flood."
#: /var/www/html/Tinyboard/inc/config.php:620 ../../../../inc/config.php:658
#: ../../../../inc/config.php:714 ../../../../inc/config.php:720
#: ../../../../inc/config.php:717 ../../../../inc/config.php:723
+#: ../../../../inc/config.php:825
msgid "Too many cites; post discarded."
msgstr "Zbyt dużo cytatów; post odrzucony."
#: /var/www/html/Tinyboard/inc/config.php:621 ../../../../inc/config.php:659
#: ../../../../inc/config.php:715 ../../../../inc/config.php:721
#: ../../../../inc/config.php:718 ../../../../inc/config.php:724
+#: ../../../../inc/config.php:826
msgid "Too many cross-board links; post discarded."
msgstr "Zbyt dużo linków między boardami; post odrzucony."
#: /var/www/html/Tinyboard/inc/config.php:622 ../../../../inc/config.php:660
#: ../../../../inc/config.php:716 ../../../../inc/config.php:722
#: ../../../../inc/config.php:719 ../../../../inc/config.php:725
+#: ../../../../inc/config.php:827
msgid "You didn't select anything to delete."
msgstr "Nie wybrano nic do usunięcia."
#: /var/www/html/Tinyboard/inc/config.php:623 ../../../../inc/config.php:661
#: ../../../../inc/config.php:717 ../../../../inc/config.php:723
#: ../../../../inc/config.php:720 ../../../../inc/config.php:726
+#: ../../../../inc/config.php:828
msgid "You didn't select anything to report."
msgstr "Nie wybrano nic do zgłoszenia."
#: /var/www/html/Tinyboard/inc/config.php:624 ../../../../inc/config.php:662
#: ../../../../inc/config.php:718 ../../../../inc/config.php:724
#: ../../../../inc/config.php:721 ../../../../inc/config.php:727
+#: ../../../../inc/config.php:829
msgid "You can't report that many posts at once."
msgstr "Nie możesz raportować tyle postów na raz."
#: /var/www/html/Tinyboard/inc/config.php:625 ../../../../inc/config.php:663
#: ../../../../inc/config.php:719 ../../../../inc/config.php:725
#: ../../../../inc/config.php:722 ../../../../inc/config.php:728
+#: ../../../../inc/config.php:830
msgid "Wrong password…"
msgstr "Niepoprawne hasło"
#: /var/www/html/Tinyboard/inc/config.php:626 ../../../../inc/config.php:664
#: ../../../../inc/config.php:720 ../../../../inc/config.php:726
#: ../../../../inc/config.php:723 ../../../../inc/config.php:729
+#: ../../../../inc/config.php:831
msgid "Invalid image."
msgstr "Niepoprawny obrazek."
#: /var/www/html/Tinyboard/inc/config.php:627 ../../../../inc/config.php:665
#: ../../../../inc/config.php:721 ../../../../inc/config.php:727
#: ../../../../inc/config.php:724 ../../../../inc/config.php:730
+#: ../../../../inc/config.php:832
msgid "Unknown file extension."
msgstr "Nieznane rozszerzenie pliku."
#: /var/www/html/Tinyboard/inc/config.php:628 ../../../../inc/config.php:666
#: ../../../../inc/config.php:722 ../../../../inc/config.php:728
#: ../../../../inc/config.php:725 ../../../../inc/config.php:731
+#: ../../../../inc/config.php:833
msgid "Maximum file size: %maxsz% bytes<br>Your file's size: %filesz% bytes"
msgstr ""
"Maksymalny rozmiar pliku: %maxsz% bajtów<br>Rozmiar twojego pliku: %filesz% "
@@ -271,18 +313,21 @@ msgstr ""
#: /var/www/html/Tinyboard/inc/config.php:629 ../../../../inc/config.php:667
#: ../../../../inc/config.php:723 ../../../../inc/config.php:729
#: ../../../../inc/config.php:726 ../../../../inc/config.php:732
+#: ../../../../inc/config.php:834
msgid "The file was too big."
msgstr "Plik jest za duży."
#: /var/www/html/Tinyboard/inc/config.php:630 ../../../../inc/config.php:668
#: ../../../../inc/config.php:724 ../../../../inc/config.php:730
#: ../../../../inc/config.php:727 ../../../../inc/config.php:733
+#: ../../../../inc/config.php:835
msgid "Invalid archive!"
msgstr "Niepoprawne archiwum!"
#: /var/www/html/Tinyboard/inc/config.php:631 ../../../../inc/config.php:669
#: ../../../../inc/config.php:725 ../../../../inc/config.php:731
#: ../../../../inc/config.php:728 ../../../../inc/config.php:734
+#: ../../../../inc/config.php:836
#, php-format
msgid "That file <a href=\"%s\">already exists</a>!"
msgstr "Ten plik <a href=\"%s\">już istnieje</a>!"
@@ -290,6 +335,7 @@ msgstr "Ten plik <a href=\"%s\">już istnieje</a>!"
#: /var/www/html/Tinyboard/inc/config.php:632 ../../../../inc/config.php:670
#: ../../../../inc/config.php:727 ../../../../inc/config.php:733
#: ../../../../inc/config.php:730 ../../../../inc/config.php:736
+#: ../../../../inc/config.php:838
#, php-format
msgid "You'll have to wait another %s before deleting that."
msgstr "Musisz poczekać kolejne %s przed usunięciem tego."
@@ -297,6 +343,7 @@ msgstr "Musisz poczekać kolejne %s przed usunięciem tego."
#: /var/www/html/Tinyboard/inc/config.php:633 ../../../../inc/config.php:671
#: ../../../../inc/config.php:728 ../../../../inc/config.php:734
#: ../../../../inc/config.php:731 ../../../../inc/config.php:737
+#: ../../../../inc/config.php:839
msgid "MIME type detection XSS exploit (IE) detected; post discarded."
msgstr ""
"Wykryto próbę wykorzystania luki wykrywania typu MIME (XSS w IE); post "
@@ -305,30 +352,35 @@ msgstr ""
#: /var/www/html/Tinyboard/inc/config.php:634 ../../../../inc/config.php:672
#: ../../../../inc/config.php:729 ../../../../inc/config.php:735
#: ../../../../inc/config.php:732 ../../../../inc/config.php:738
+#: ../../../../inc/config.php:840
msgid "Couldn't make sense of the URL of the video you tried to embed."
msgstr "Nie można było zrozumieć URL-a wideo, którego próbowano zapostować."
#: /var/www/html/Tinyboard/inc/config.php:635 ../../../../inc/config.php:673
#: ../../../../inc/config.php:730 ../../../../inc/config.php:736
#: ../../../../inc/config.php:733 ../../../../inc/config.php:739
+#: ../../../../inc/config.php:841
msgid "You seem to have mistyped the verification."
msgstr "Wygląda na to, że przepisano źle weryfikację."
#: /var/www/html/Tinyboard/inc/config.php:638 ../../../../inc/config.php:676
#: ../../../../inc/config.php:734 ../../../../inc/config.php:740
#: ../../../../inc/config.php:737 ../../../../inc/config.php:743
+#: ../../../../inc/config.php:845
msgid "Invalid username and/or password."
msgstr "Błędna nazwa użytkownika, bądź hasło"
#: /var/www/html/Tinyboard/inc/config.php:639 ../../../../inc/config.php:677
#: ../../../../inc/config.php:735 ../../../../inc/config.php:741
#: ../../../../inc/config.php:738 ../../../../inc/config.php:744
+#: ../../../../inc/config.php:846
msgid "You are not a mod…"
msgstr "Nie jesteś moderatorem"
#: /var/www/html/Tinyboard/inc/config.php:640 ../../../../inc/config.php:678
#: ../../../../inc/config.php:736 ../../../../inc/config.php:742
#: ../../../../inc/config.php:739 ../../../../inc/config.php:745
+#: ../../../../inc/config.php:847
msgid ""
"Invalid username and/or password. Your user may have been deleted or changed."
msgstr ""
@@ -338,18 +390,21 @@ msgstr ""
#: /var/www/html/Tinyboard/inc/config.php:641 ../../../../inc/config.php:679
#: ../../../../inc/config.php:737 ../../../../inc/config.php:743
#: ../../../../inc/config.php:740 ../../../../inc/config.php:746
+#: ../../../../inc/config.php:848
msgid "Invalid/malformed cookies."
msgstr "Niepoprawne/zmodyfikowane pliki cookie."
#: /var/www/html/Tinyboard/inc/config.php:642 ../../../../inc/config.php:680
#: ../../../../inc/config.php:738 ../../../../inc/config.php:744
#: ../../../../inc/config.php:741 ../../../../inc/config.php:747
+#: ../../../../inc/config.php:849
msgid "Your browser didn't submit an input when it should have."
msgstr "Twoja przeglądarka nie wysłała pola, kiedy powinna."
#: /var/www/html/Tinyboard/inc/config.php:643 ../../../../inc/config.php:681
#: ../../../../inc/config.php:739 ../../../../inc/config.php:745
#: ../../../../inc/config.php:742 ../../../../inc/config.php:748
+#: ../../../../inc/config.php:850
#, php-format
msgid "The %s field is required."
msgstr "Pole %s jest wymagane."
@@ -357,6 +412,7 @@ msgstr "Pole %s jest wymagane."
#: /var/www/html/Tinyboard/inc/config.php:644 ../../../../inc/config.php:682
#: ../../../../inc/config.php:740 ../../../../inc/config.php:746
#: ../../../../inc/config.php:743 ../../../../inc/config.php:749
+#: ../../../../inc/config.php:851
#, php-format
msgid "The %s field was invalid."
msgstr "Pole %s jest niepoprawne."
@@ -364,6 +420,7 @@ msgstr "Pole %s jest niepoprawne."
#: /var/www/html/Tinyboard/inc/config.php:645 ../../../../inc/config.php:683
#: ../../../../inc/config.php:741 ../../../../inc/config.php:747
#: ../../../../inc/config.php:744 ../../../../inc/config.php:750
+#: ../../../../inc/config.php:852
#, php-format
msgid "There is already a %s board."
msgstr "Już istnieje board %s"
@@ -371,24 +428,28 @@ msgstr "Już istnieje board %s"
#: /var/www/html/Tinyboard/inc/config.php:646 ../../../../inc/config.php:684
#: ../../../../inc/config.php:742 ../../../../inc/config.php:748
#: ../../../../inc/config.php:745 ../../../../inc/config.php:751
+#: ../../../../inc/config.php:853
msgid "You don't have permission to do that."
msgstr "Nie masz uprawnień do wykonania tej czynności."
#: /var/www/html/Tinyboard/inc/config.php:647 ../../../../inc/config.php:685
#: ../../../../inc/config.php:743 ../../../../inc/config.php:749
#: ../../../../inc/config.php:746 ../../../../inc/config.php:752
+#: ../../../../inc/config.php:854
msgid "That post doesn't exist…"
msgstr "Ten post nie istnieje..."
#: /var/www/html/Tinyboard/inc/config.php:648 ../../../../inc/config.php:686
#: ../../../../inc/config.php:744 ../../../../inc/config.php:750
#: ../../../../inc/config.php:747 ../../../../inc/config.php:753
+#: ../../../../inc/config.php:855
msgid "Page not found."
msgstr "Strona nie znaleziona."
#: /var/www/html/Tinyboard/inc/config.php:649 ../../../../inc/config.php:687
#: ../../../../inc/config.php:745 ../../../../inc/config.php:751
#: ../../../../inc/config.php:748 ../../../../inc/config.php:754
+#: ../../../../inc/config.php:856
#, php-format
msgid "That mod <a href=\"?/users/%d\">already exists</a>!"
msgstr "Ten moderator <a href=\"?/users/%d\">już istnieje</a>!"
@@ -396,6 +457,7 @@ msgstr "Ten moderator <a href=\"?/users/%d\">już istnieje</a>!"
#: /var/www/html/Tinyboard/inc/config.php:650 ../../../../inc/config.php:688
#: ../../../../inc/config.php:746 ../../../../inc/config.php:752
#: ../../../../inc/config.php:749 ../../../../inc/config.php:755
+#: ../../../../inc/config.php:857
msgid "That theme doesn't exist!"
msgstr "Ten dodatek nie istnieje!"
@@ -433,8 +495,10 @@ msgstr "[Przenieś]"
#. Default public ban message.
#. In public ban messages, %length% is replaced with "for x days" or "permanently" (with %LENGTH% being the uppercase equivalent).
+#. Default public ban message. In public ban messages, %length% is replaced with "for x days" or
+#. "permanently" (with %LENGTH% being the uppercase equivalent).
#: /var/www/html/Tinyboard/inc/config.php:801 ../../../../inc/config.php:911
-#: ../../../../inc/config.php:917
+#: ../../../../inc/config.php:917 ../../../../inc/config.php:1019
msgid "USER WAS BANNED FOR THIS POST"
msgstr "UŻYTKOWNIK ZOSTAŁ ZBANOWANY ZA TEGO POSTA"
@@ -444,20 +508,24 @@ msgid "Moved to %s."
msgstr "Przeniesiono do %s."
#: /var/www/html/Tinyboard/inc/display.php:80 ../../../../inc/display.php:75
+#: ../../../../inc/display.php:79
msgid "Error"
msgstr "Błąd"
#: /var/www/html/Tinyboard/inc/display.php:81 ../../../../inc/display.php:76
+#: ../../../../inc/display.php:80
msgid "An error has occured."
msgstr "Wystąpił błąd."
+#. line 6
#: /var/www/html/Tinyboard/inc/display.php:87 ../../../../inc/display.php:82
+#: ../../../../templates/cache/3c/80/0ebbee302f4fad8d0d7f13e62db5.php:41
msgid "Go back"
msgstr "Wróć"
#: /var/www/html/Tinyboard/inc/display.php:97 ../../../../inc/display.php:91
#: ../../../../inc/mod/pages.php:59 ../../../../inc/mod/pages.php:62
-#: ../../../../inc/display.php:92
+#: ../../../../inc/display.php:92 ../../../../inc/display.php:96
msgid "Login"
msgstr "Logowanie"
@@ -475,34 +543,40 @@ msgstr ""
#: /var/www/html/Tinyboard/templates/cache/dd/1a/77e08f0c1b4ecf707c5a3e5a70be.php:27
#: ../../../../templates/cache/a8/a6/1022091d3402e085395b12e6279a.php:27
#: ../../../../templates/cache/82/40/4c4a4b82f787181e6500ce83494d.php:27
-#: ../../../../inc/display.php:423
+#: ../../../../inc/display.php:423 ../../../../inc/display.php:429
+#: ../../../../templates/cache/82/40/4c4a4b82f787181e6500ce83494d.php:33
msgid "Delete"
msgstr "Usuń"
#: /var/www/html/Tinyboard/inc/display.php:272
#: /var/www/html/Tinyboard/inc/display.php:365 ../../../../inc/display.php:423
+#: ../../../../inc/display.php:429
msgid "Are you sure you want to delete this?"
msgstr "Czy jesteś pewien, że chcesz to usunąć?"
#: /var/www/html/Tinyboard/inc/display.php:276
#: /var/www/html/Tinyboard/inc/display.php:369 ../../../../inc/display.php:427
+#: ../../../../inc/display.php:433
msgid "Delete all posts by IP"
msgstr "Usuń wszystkie posty z tego adresu IP"
#: /var/www/html/Tinyboard/inc/display.php:276
#: /var/www/html/Tinyboard/inc/display.php:369 ../../../../inc/display.php:427
+#: ../../../../inc/display.php:433
msgid "Are you sure you want to delete all posts by this IP address?"
msgstr "Czy na pewno chcesz usunąć wszystkie posty z tego adresu IP?"
#: /var/www/html/Tinyboard/inc/display.php:280
#: /var/www/html/Tinyboard/inc/display.php:373 ../../../../inc/display.php:334
-#: ../../../../inc/display.php:435
+#: ../../../../inc/display.php:435 ../../../../inc/display.php:339
+#: ../../../../inc/display.php:441
msgid "Ban"
msgstr "Ban"
#: /var/www/html/Tinyboard/inc/display.php:284
#: /var/www/html/Tinyboard/inc/display.php:377 ../../../../inc/display.php:338
-#: ../../../../inc/display.php:439
+#: ../../../../inc/display.php:439 ../../../../inc/display.php:343
+#: ../../../../inc/display.php:445
msgid "Ban & Delete"
msgstr "Usuń i zbanuj"
@@ -516,41 +590,51 @@ msgstr "Usuń plik"
#: ../../../../inc/mod/pages.php:1080 ../../../../inc/mod/pages.php:1105
#: ../../../../inc/mod/pages.php:1239 ../../../../inc/mod/pages.php:1242
#: ../../../../inc/display.php:346 ../../../../inc/display.php:470
-#: ../../../../inc/mod/pages.php:1314
+#: ../../../../inc/mod/pages.php:1314 ../../../../inc/display.php:351
+#: ../../../../inc/display.php:476 ../../../../inc/mod/pages.php:1320
msgid "Edit post"
msgstr "Edytuj post"
#: /var/www/html/Tinyboard/inc/display.php:386 ../../../../inc/display.php:448
+#: ../../../../inc/display.php:454
msgid "Make thread not sticky"
msgstr "Odklej wątek"
#: /var/www/html/Tinyboard/inc/display.php:388 ../../../../inc/display.php:450
+#: ../../../../inc/display.php:456
msgid "Make thread sticky"
msgstr "Przyklej wątek"
#: /var/www/html/Tinyboard/inc/display.php:392 ../../../../inc/display.php:454
+#: ../../../../inc/display.php:460
msgid "Allow thread to be bumped"
msgstr "Zezwól wątkowi na bumpowanie"
#: /var/www/html/Tinyboard/inc/display.php:394 ../../../../inc/display.php:456
+#: ../../../../inc/display.php:462
msgid "Prevent thread from being bumped"
msgstr "Zabroń wątkowi na bumpowanie"
#: /var/www/html/Tinyboard/inc/display.php:399 ../../../../inc/display.php:461
+#: ../../../../inc/display.php:467
msgid "Unlock thread"
msgstr "Odblokuj wątek"
#: /var/www/html/Tinyboard/inc/display.php:401 ../../../../inc/display.php:463
+#: ../../../../inc/display.php:469
msgid "Lock thread"
msgstr "Zablokuj wątek"
#: /var/www/html/Tinyboard/inc/display.php:404 ../../../../inc/display.php:466
+#: ../../../../inc/display.php:472
msgid "Move thread to another board"
msgstr "Przenieś wątek na inny board"
#. line 11
#. line 7
#. line 11
+#. line 7
+#. line 14
#: /var/www/html/Tinyboard/templates/cache/1d/5e/91ec2bc929b77377b8b877d82db4.php:48
#: /var/www/html/Tinyboard/mod.php:667 /var/www/html/Tinyboard/mod.php:750
#: /var/www/html/Tinyboard/mod.php:833
@@ -559,24 +643,34 @@ msgstr "Przenieś wątek na inny board"
#: ../../../../templates/cache/c8/8b/242bf87b3b6a29a67cdd09a3afeb.php:31
#: ../../../../templates/cache/c8/8b/242bf87b3b6a29a67cdd09a3afeb.php:36
#: ../../../../templates/cache/86/31/3f70fa8521e56d617b21133af4d8.php:33
+#: ../../../../templates/cache/39/42/cbc36382096edfa72a8bc26e4514.php:30
+#: ../../../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:66
msgid "Name"
msgstr "Nazwa"
#. line 21
+#. line 15
+#. line 24
#: /var/www/html/Tinyboard/templates/cache/1d/5e/91ec2bc929b77377b8b877d82db4.php:62
#: ../../../../templates/cache/d1/2d/eda9403e966240c642b13ca43eb6.php:76
#: ../../../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:76
+#: ../../../../templates/cache/39/42/cbc36382096edfa72a8bc26e4514.php:44
+#: ../../../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:88
msgid "Email"
msgstr "E-mail"
#. line 34
#. line 23
#. line 34
+#. line 23
+#. line 37
#: /var/www/html/Tinyboard/templates/cache/1d/5e/91ec2bc929b77377b8b877d82db4.php:96
#: /var/www/html/Tinyboard/mod.php:753 /var/www/html/Tinyboard/mod.php:839
#: ../../../../templates/cache/d1/2d/eda9403e966240c642b13ca43eb6.php:95
#: ../../../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:116
#: ../../../../templates/cache/c8/8b/242bf87b3b6a29a67cdd09a3afeb.php:63
+#: ../../../../templates/cache/39/42/cbc36382096edfa72a8bc26e4514.php:58
+#: ../../../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:130
msgid "Subject"
msgstr "Temat"
@@ -588,13 +682,21 @@ msgstr "Temat"
#: ../../../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:100
#: ../../../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:133
#: ../../../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:172
+#: ../../../../templates/cache/d8/f2/7780eb1adcdbda7e332659e3fb4f.php:115
+#: ../../../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:113
+#: ../../../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:148
+#: ../../../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:189
msgid "Spoiler Image"
msgstr "Schowaj obrazek"
#. line 45
+#. line 32
+#. line 48
#: /var/www/html/Tinyboard/templates/cache/1d/5e/91ec2bc929b77377b8b877d82db4.php:119
#: ../../../../templates/cache/d1/2d/eda9403e966240c642b13ca43eb6.php:121
#: ../../../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:145
+#: ../../../../templates/cache/39/42/cbc36382096edfa72a8bc26e4514.php:76
+#: ../../../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:161
msgid "Comment"
msgstr "Komentarz"
@@ -651,10 +753,12 @@ msgstr "Komentarz"
#. line 61
#. line 73
#. line 61
+#. line 64
#: /var/www/html/Tinyboard/templates/cache/1d/5e/91ec2bc929b77377b8b877d82db4.php:133
#: ../../../../templates/cache/d1/2d/eda9403e966240c642b13ca43eb6.php:142
#: ../../../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:191
#: ../../../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:217
+#: ../../../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:209
msgid "Verification"
msgstr "Weryfikacja"
@@ -716,6 +820,8 @@ msgstr "Weryfikacja"
#. line 72
#. line 3
#. line 72
+#. line 3
+#. line 75
#: /var/www/html/Tinyboard/templates/cache/1d/5e/91ec2bc929b77377b8b877d82db4.php:149
#: /var/www/html/Tinyboard/templates/cache/dd/1a/77e08f0c1b4ecf707c5a3e5a70be.php:22
#: ../../../../templates/cache/d1/2d/eda9403e966240c642b13ca43eb6.php:165
@@ -723,24 +829,30 @@ msgstr "Weryfikacja"
#: ../../../../templates/cache/82/40/4c4a4b82f787181e6500ce83494d.php:22
#: ../../../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:250
#: ../../../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:214
+#: ../../../../templates/cache/82/40/4c4a4b82f787181e6500ce83494d.php:26
+#: ../../../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:233
msgid "File"
msgstr "Plik"
#. line 97
#. line 82
+#. line 85
#: /var/www/html/Tinyboard/templates/cache/1d/5e/91ec2bc929b77377b8b877d82db4.php:163
#: ../../../../templates/cache/d1/2d/eda9403e966240c642b13ca43eb6.php:183
#: ../../../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:268
#: ../../../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:232
+#: ../../../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:252
msgid "Embed"
msgstr "Osadź"
#. line 109
#. line 94
+#. line 97
#: /var/www/html/Tinyboard/templates/cache/1d/5e/91ec2bc929b77377b8b877d82db4.php:179
#: ../../../../templates/cache/d1/2d/eda9403e966240c642b13ca43eb6.php:206
#: ../../../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:291
#: ../../../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:255
+#: ../../../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:276
msgid "Flags"
msgstr "Flagi"
@@ -802,6 +914,8 @@ msgstr "Flagi"
#. line 99
#. line 98
#. line 99
+#. line 101
+#. line 102
#: /var/www/html/Tinyboard/templates/cache/1d/5e/91ec2bc929b77377b8b877d82db4.php:188
#: /var/www/html/Tinyboard/templates/cache/1d/5e/91ec2bc929b77377b8b877d82db4.php:191
#: ../../../../templates/cache/d1/2d/eda9403e966240c642b13ca43eb6.php:215
@@ -810,6 +924,8 @@ msgstr "Flagi"
#: ../../../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:303
#: ../../../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:264
#: ../../../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:267
+#: ../../../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:286
+#: ../../../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:290
msgid "Sticky"
msgstr "Przyklejony"
@@ -871,6 +987,8 @@ msgstr "Przyklejony"
#. line 103
#. line 102
#. line 103
+#. line 105
+#. line 106
#: /var/www/html/Tinyboard/templates/cache/1d/5e/91ec2bc929b77377b8b877d82db4.php:200
#: /var/www/html/Tinyboard/templates/cache/1d/5e/91ec2bc929b77377b8b877d82db4.php:203
#: ../../../../templates/cache/d1/2d/eda9403e966240c642b13ca43eb6.php:227
@@ -879,6 +997,8 @@ msgstr "Przyklejony"
#: ../../../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:315
#: ../../../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:276
#: ../../../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:279
+#: ../../../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:300
+#: ../../../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:304
msgid "Lock"
msgstr "Zablokowany"
@@ -940,6 +1060,8 @@ msgstr "Zablokowany"
#. line 107
#. line 106
#. line 107
+#. line 109
+#. line 110
#: /var/www/html/Tinyboard/templates/cache/1d/5e/91ec2bc929b77377b8b877d82db4.php:212
#: /var/www/html/Tinyboard/templates/cache/1d/5e/91ec2bc929b77377b8b877d82db4.php:215
#: ../../../../templates/cache/d1/2d/eda9403e966240c642b13ca43eb6.php:239
@@ -948,6 +1070,8 @@ msgstr "Zablokowany"
#: ../../../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:327
#: ../../../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:288
#: ../../../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:291
+#: ../../../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:314
+#: ../../../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:318
msgid "Raw HTML"
msgstr "Czysty HTML"
@@ -955,6 +1079,7 @@ msgstr "Czysty HTML"
#. line 14
#. line 129
#. line 114
+#. line 117
#: /var/www/html/Tinyboard/templates/cache/1d/5e/91ec2bc929b77377b8b877d82db4.php:230
#: /var/www/html/Tinyboard/templates/cache/dd/1a/77e08f0c1b4ecf707c5a3e5a70be.php:23
#: ../../../../templates/cache/d1/2d/eda9403e966240c642b13ca43eb6.php:257
@@ -963,21 +1088,26 @@ msgstr "Czysty HTML"
#: ../../../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:342
#: ../../../../templates/cache/04/54/656aa217f895c90eae78024fa060.php:41
#: ../../../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:306
+#: ../../../../templates/cache/82/40/4c4a4b82f787181e6500ce83494d.php:28
+#: ../../../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:334
msgid "Password"
msgstr "Hasło"
#. line 134
#. line 119
+#. line 122
#: /var/www/html/Tinyboard/templates/cache/1d/5e/91ec2bc929b77377b8b877d82db4.php:236
#: ../../../../templates/cache/d1/2d/eda9403e966240c642b13ca43eb6.php:266
#: ../../../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:351
#: ../../../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:315
+#: ../../../../templates/cache/0c/37/9331df01df7c2986d77a02d3beb0.php:344
msgid "(For file deletion.)"
msgstr "(do usuwania postów)"
#: /var/www/html/Tinyboard/templates/cache/96/13/d13c7abb8d82989e547dc9be1787.php:107
#: ../../../../templates/cache/cf/0c/61af144f478f5c035cb3a2799e48.php:105
#: ../../../../templates/cache/d8/f2/7780eb1adcdbda7e332659e3fb4f.php:107
+#: ../../../../templates/cache/d8/f2/7780eb1adcdbda7e332659e3fb4f.php:102
msgid "File:"
msgstr "Plik:"
@@ -999,6 +1129,7 @@ msgstr "Odśwież"
#: ../../../../templates/cache/d8/f2/7780eb1adcdbda7e332659e3fb4f.php:461
#: ../../../../templates/cache/d8/f2/7780eb1adcdbda7e332659e3fb4f.php:472
#: ../../../../templates/cache/d8/f2/7780eb1adcdbda7e332659e3fb4f.php:506
+#: ../../../../templates/cache/d8/f2/7780eb1adcdbda7e332659e3fb4f.php:503
msgid "Reply"
msgstr "Odpowiedź"
@@ -1007,6 +1138,7 @@ msgstr "Odpowiedź"
#: ../../../../templates/cache/d8/f2/7780eb1adcdbda7e332659e3fb4f.php:488
#: ../../../../templates/cache/d8/f2/7780eb1adcdbda7e332659e3fb4f.php:499
#: ../../../../templates/cache/d8/f2/7780eb1adcdbda7e332659e3fb4f.php:533
+#: ../../../../templates/cache/d8/f2/7780eb1adcdbda7e332659e3fb4f.php:531
msgid "1 post"
msgid_plural "%count% posts"
msgstr[0] "1 post"
@@ -1019,6 +1151,8 @@ msgstr[2] "%count% postów"
#: ../../../../templates/cache/d8/f2/7780eb1adcdbda7e332659e3fb4f.php:505
#: ../../../../templates/cache/e5/22/4711dd22e4c786b4de405db7a449.php:114
#: ../../../../templates/cache/d8/f2/7780eb1adcdbda7e332659e3fb4f.php:539
+#: ../../../../templates/cache/e5/22/4711dd22e4c786b4de405db7a449.php:117
+#: ../../../../templates/cache/d8/f2/7780eb1adcdbda7e332659e3fb4f.php:537
msgid "and"
msgstr "oraz"
@@ -1027,6 +1161,7 @@ msgstr "oraz"
#: ../../../../templates/cache/d8/f2/7780eb1adcdbda7e332659e3fb4f.php:505
#: ../../../../templates/cache/d8/f2/7780eb1adcdbda7e332659e3fb4f.php:516
#: ../../../../templates/cache/d8/f2/7780eb1adcdbda7e332659e3fb4f.php:550
+#: ../../../../templates/cache/d8/f2/7780eb1adcdbda7e332659e3fb4f.php:549
msgid "1 image reply"
msgid_plural "%count% image replies"
msgstr[0] "1 obrazek"
@@ -1038,6 +1173,7 @@ msgstr[2] "%count% obrazków"
#: ../../../../templates/cache/d8/f2/7780eb1adcdbda7e332659e3fb4f.php:510
#: ../../../../templates/cache/d8/f2/7780eb1adcdbda7e332659e3fb4f.php:521
#: ../../../../templates/cache/d8/f2/7780eb1adcdbda7e332659e3fb4f.php:555
+#: ../../../../templates/cache/d8/f2/7780eb1adcdbda7e332659e3fb4f.php:554
msgid "omitted. Click reply to view."
msgstr "pominięte. Kliknij Odpowiedź aby zobaczyć."
@@ -1053,6 +1189,9 @@ msgstr "pominięte. Kliknij Odpowiedź aby zobaczyć."
#: ../../../../templates/cache/aa/f6/f10fd83961bcd8c947af6ddf919d.php:115
#: ../../../../templates/cache/f5/e3/343716327c6183713f70a3fb57f1.php:132
#: ../../../../templates/cache/aa/f6/f10fd83961bcd8c947af6ddf919d.php:116
+#: ../../../../templates/cache/f5/e3/343716327c6183713f70a3fb57f1.php:135
+#: ../../../../templates/cache/aa/f6/f10fd83961bcd8c947af6ddf919d.php:119
+#: ../../../../templates/cache/62/8c/21348d46377c3e1b3f8c476ba376.php:65
msgid "Return to dashboard"
msgstr "Powróć na tablicę"
@@ -1064,6 +1203,7 @@ msgstr "Powróć na tablicę"
#: ../../../../templates/cache/aa/f6/f10fd83961bcd8c947af6ddf919d.php:106
#: ../../../../templates/cache/aa/f6/f10fd83961bcd8c947af6ddf919d.php:123
#: ../../../../templates/cache/aa/f6/f10fd83961bcd8c947af6ddf919d.php:124
+#: ../../../../templates/cache/aa/f6/f10fd83961bcd8c947af6ddf919d.php:128
msgid "Posting mode: Reply"
msgstr "Tryb postowania: Odpowiedź"
@@ -1078,6 +1218,8 @@ msgstr "Tryb postowania: Odpowiedź"
#: ../../../../templates/cache/aa/f6/f10fd83961bcd8c947af6ddf919d.php:127
#: ../../../../templates/cache/aa/f6/f10fd83961bcd8c947af6ddf919d.php:173
#: ../../../../templates/cache/aa/f6/f10fd83961bcd8c947af6ddf919d.php:174
+#: ../../../../templates/cache/aa/f6/f10fd83961bcd8c947af6ddf919d.php:132
+#: ../../../../templates/cache/aa/f6/f10fd83961bcd8c947af6ddf919d.php:180
msgid "Return"
msgstr "Powrót"
@@ -1085,6 +1227,7 @@ msgstr "Powrót"
#: /var/www/html/Tinyboard/templates/cache/dd/1a/77e08f0c1b4ecf707c5a3e5a70be.php:19
#: ../../../../templates/cache/a8/a6/1022091d3402e085395b12e6279a.php:19
#: ../../../../templates/cache/82/40/4c4a4b82f787181e6500ce83494d.php:19
+#: ../../../../templates/cache/82/40/4c4a4b82f787181e6500ce83494d.php:22
msgid "Delete Post"
msgstr "Usuń post"
@@ -1100,6 +1243,9 @@ msgstr "Usuń post"
#. line 8
#. line 32
#. line 8
+#. line 106
+#. line 8
+#. line 32
#: /var/www/html/Tinyboard/templates/cache/dd/1a/77e08f0c1b4ecf707c5a3e5a70be.php:32
#: /var/www/html/Tinyboard/mod.php:1801
#: ../../../../templates/cache/a8/a6/1022091d3402e085395b12e6279a.php:32
@@ -1107,6 +1253,9 @@ msgstr "Usuń post"
#: ../../../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:256
#: ../../../../templates/cache/18/9c/c365d711719f494c684aab98a4ae.php:90
#: ../../../../templates/cache/4c/fb/a3bf13b0badfc09442bd42da1cce.php:128
+#: ../../../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:274
+#: ../../../../templates/cache/82/40/4c4a4b82f787181e6500ce83494d.php:39
+#: ../../../../templates/cache/18/9c/c365d711719f494c684aab98a4ae.php:96
msgid "Reason"
msgstr "Powód"
@@ -1114,6 +1263,7 @@ msgstr "Powód"
#: /var/www/html/Tinyboard/templates/cache/dd/1a/77e08f0c1b4ecf707c5a3e5a70be.php:36
#: ../../../../templates/cache/a8/a6/1022091d3402e085395b12e6279a.php:36
#: ../../../../templates/cache/82/40/4c4a4b82f787181e6500ce83494d.php:36
+#: ../../../../templates/cache/82/40/4c4a4b82f787181e6500ce83494d.php:44
msgid "Report"
msgstr "Zgłoszenie"
@@ -1122,6 +1272,8 @@ msgstr "Zgłoszenie"
#: ../../../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:120
#: ../../../../templates/cache/c8/8b/242bf87b3b6a29a67cdd09a3afeb.php:125
#: ../../../../templates/cache/f3/ad/68dee281a64ebad9a5c774b53279.php:89
+#: ../../../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:128
+#: ../../../../templates/cache/f3/ad/68dee281a64ebad9a5c774b53279.php:85
msgid "no subject"
msgstr "brak tematu"
@@ -1137,7 +1289,8 @@ msgstr "Wiadomości prywatne"
#: ../../../../inc/mod/pages.php:376 ../../../../inc/mod/pages.php:393
#: ../../../../inc/mod/pages.php:406 ../../../../inc/mod/pages.php:540
#: ../../../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:166
-#: ../../../../inc/mod/pages.php:604
+#: ../../../../inc/mod/pages.php:604 ../../../../inc/mod/pages.php:609
+#: ../../../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:176
msgid "News"
msgstr "Aktualności"
@@ -1146,6 +1299,8 @@ msgstr "Aktualności"
#: ../../../../inc/mod/pages.php:1682 ../../../../inc/mod/pages.php:1816
#: ../../../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:207
#: ../../../../inc/mod/pages.php:1831 ../../../../inc/mod/pages.php:1904
+#: ../../../../inc/mod/pages.php:1910
+#: ../../../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:220
msgid "Report queue"
msgstr "Kolejka zgłoszeń"
@@ -1153,7 +1308,8 @@ msgstr "Kolejka zgłoszeń"
#: ../../../../inc/mod/pages.php:664 ../../../../inc/mod/pages.php:705
#: ../../../../inc/mod/pages.php:721 ../../../../inc/mod/pages.php:855
#: ../../../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:224
-#: ../../../../inc/mod/pages.php:918
+#: ../../../../inc/mod/pages.php:918 ../../../../inc/mod/pages.php:925
+#: ../../../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:238
msgid "Ban list"
msgstr "Lista banów"
@@ -1162,6 +1318,8 @@ msgstr "Lista banów"
#: ../../../../inc/mod/pages.php:1394 ../../../../inc/mod/pages.php:1528
#: ../../../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:232
#: ../../../../inc/mod/pages.php:1543 ../../../../inc/mod/pages.php:1615
+#: ../../../../inc/mod/pages.php:1621
+#: ../../../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:247
msgid "Manage users"
msgstr "Zarządzaj użytkownikami"
@@ -1177,6 +1335,9 @@ msgstr "Zmień swoje hasło"
#: ../../../../templates/cache/55/dd/8ffe738533bd12359200e5745905.php:65
#: ../../../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:255
#: ../../../../inc/mod/pages.php:644 ../../../../inc/mod/pages.php:671
+#: ../../../../inc/mod/pages.php:649 ../../../../inc/mod/pages.php:676
+#: ../../../../templates/cache/55/dd/8ffe738533bd12359200e5745905.php:72
+#: ../../../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:273
msgid "Moderation log"
msgstr "Log moderacji"
@@ -1197,6 +1358,8 @@ msgstr "Pokaż konfigurację"
#: ../../../../inc/mod/pages.php:1830 ../../../../inc/mod/pages.php:1964
#: ../../../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:247
#: ../../../../inc/mod/pages.php:1979 ../../../../inc/mod/pages.php:2052
+#: ../../../../inc/mod/pages.php:2109
+#: ../../../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:264
msgid "Manage themes"
msgstr "Zarządzaj dodatkami"
@@ -1206,6 +1369,7 @@ msgstr "Zarządzaj dodatkami"
#: /var/www/html/Tinyboard/mod.php:170
#: ../../../../templates/cache/55/dd/8ffe738533bd12359200e5745905.php:19
#: ../../../../templates/cache/c3/de/6ff26042c5b94cc80055e6f209d2.php:24
+#: ../../../../templates/cache/55/dd/8ffe738533bd12359200e5745905.php:22
msgid "Phrase:"
msgstr "Wyrażenie:"
@@ -1215,12 +1379,16 @@ msgstr "Wyrażenie:"
#. line 2
#. line 16
#. line 106
+#. line 16
+#. line 106
#: /var/www/html/Tinyboard/mod.php:172
#: ../../../../templates/cache/55/dd/8ffe738533bd12359200e5745905.php:72
#: ../../../../templates/cache/c3/de/6ff26042c5b94cc80055e6f209d2.php:19
#: ../../../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:286
#: ../../../../templates/cache/4c/fb/a3bf13b0badfc09442bd42da1cce.php:19
#: ../../../../search.php:165 ../../../../search.php:168
+#: ../../../../templates/cache/55/dd/8ffe738533bd12359200e5745905.php:80
+#: ../../../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:307
msgid "Search"
msgstr "Szukaj"
@@ -1243,6 +1411,7 @@ msgstr "Nie można znaleźć obecnej wersji! (Sprawdź .installed)"
#: /var/www/html/Tinyboard/mod.php:233
#: ../../../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:364
#: ../../../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:397
+#: ../../../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:425
msgid "Logout"
msgstr "Wyloguj"
@@ -1278,6 +1447,9 @@ msgstr "temu"
#. line 116
#. line 182
#. line 65
+#. line 116
+#. line 182
+#. line 65
#: /var/www/html/Tinyboard/mod.php:405 /var/www/html/Tinyboard/mod.php:1801
#: ../../../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:278
#: ../../../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:427
@@ -1285,6 +1457,9 @@ msgstr "temu"
#: ../../../../templates/cache/4c/fb/a3bf13b0badfc09442bd42da1cce.php:131
#: ../../../../templates/cache/4c/fb/a3bf13b0badfc09442bd42da1cce.php:355
#: ../../../../templates/cache/18/9c/c365d711719f494c684aab98a4ae.php:147
+#: ../../../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:298
+#: ../../../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:461
+#: ../../../../templates/cache/18/9c/c365d711719f494c684aab98a4ae.php:157
msgid "Board"
msgstr "Board"
@@ -1294,20 +1469,21 @@ msgstr "Board"
#: /var/www/html/Tinyboard/mod.php:406
#: ../../../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:430
#: ../../../../templates/cache/4c/fb/a3bf13b0badfc09442bd42da1cce.php:358
+#: ../../../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:465
msgid "Action"
msgstr "Akcja"
#: /var/www/html/Tinyboard/mod.php:528 ../../../../inc/mod/pages.php:1723
#: ../../../../inc/mod/pages.php:1789 ../../../../inc/mod/pages.php:1814
#: ../../../../inc/mod/pages.php:1948 ../../../../inc/mod/pages.php:1963
-#: ../../../../inc/mod/pages.php:2036
+#: ../../../../inc/mod/pages.php:2036 ../../../../inc/mod/pages.php:2093
msgid "Themes directory doesn't exist!"
msgstr "Katalog dodatków (themes) nie istnieje!"
#: /var/www/html/Tinyboard/mod.php:530 ../../../../inc/mod/pages.php:1725
#: ../../../../inc/mod/pages.php:1791 ../../../../inc/mod/pages.php:1816
#: ../../../../inc/mod/pages.php:1950 ../../../../inc/mod/pages.php:1965
-#: ../../../../inc/mod/pages.php:2038
+#: ../../../../inc/mod/pages.php:2038 ../../../../inc/mod/pages.php:2095
msgid "Cannot open themes directory; check permissions."
msgstr "Nie można otworzyć katalogu dodatków (themes); sprawdź uprawnienia."
@@ -1333,6 +1509,7 @@ msgstr "Miniatura"
#: /var/www/html/Tinyboard/mod.php:687
#: ../../../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:86
#: ../../../../templates/cache/86/31/3f70fa8521e56d617b21133af4d8.php:77
+#: ../../../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:93
msgid "Actions"
msgstr "Akcje"
@@ -1361,6 +1538,8 @@ msgstr "Instaluj"
#: ../../../../inc/mod/pages.php:1741 ../../../../inc/mod/pages.php:1745
#: ../../../../templates/cache/86/31/3f70fa8521e56d617b21133af4d8.php:98
#: ../../../../inc/mod/pages.php:1814 ../../../../inc/mod/pages.php:1818
+#: ../../../../inc/mod/pages.php:1820 ../../../../inc/mod/pages.php:1824
+#: ../../../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:282
msgid "Rebuild"
msgstr "Przebuduj"
@@ -1388,7 +1567,8 @@ msgstr "Postuj na tablicy ogłoszeń"
#: ../../../../inc/mod/pages.php:333 ../../../../inc/mod/pages.php:346
#: ../../../../inc/mod/pages.php:480
#: ../../../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:96
-#: ../../../../inc/mod/pages.php:543
+#: ../../../../inc/mod/pages.php:543 ../../../../inc/mod/pages.php:548
+#: ../../../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:103
msgid "Noticeboard"
msgstr "Tablica ogłoszeń"
@@ -1425,6 +1605,7 @@ msgstr "Typ"
#. line 2
#: /var/www/html/Tinyboard/mod.php:1221
#: ../../../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:19
+#: ../../../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:22
msgid "Boards"
msgstr "Boardy"
@@ -1446,6 +1627,7 @@ msgstr "Nie można się ponownie zalogować po zmianie hasła. (?)"
#: /var/www/html/Tinyboard/mod.php:1801
#: ../../../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:300
#: ../../../../templates/cache/4c/fb/a3bf13b0badfc09442bd42da1cce.php:134
+#: ../../../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:322
msgid "Set"
msgstr "Ustawione"
@@ -1455,6 +1637,7 @@ msgstr "Ustawione"
#: /var/www/html/Tinyboard/mod.php:1801
#: ../../../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:309
#: ../../../../templates/cache/4c/fb/a3bf13b0badfc09442bd42da1cce.php:140
+#: ../../../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:332
msgid "Expires"
msgstr "Wygasa"
@@ -1473,6 +1656,10 @@ msgstr "Wygasa"
#. line 62
#. line 150
#. line 180
+#. line 24
+#. line 62
+#. line 150
+#. line 180
#: /var/www/html/Tinyboard/mod.php:1801
#: ../../../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:74
#: ../../../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:169
@@ -1481,6 +1668,10 @@ msgstr "Wygasa"
#: ../../../../templates/cache/4c/fb/a3bf13b0badfc09442bd42da1cce.php:51
#: ../../../../templates/cache/4c/fb/a3bf13b0badfc09442bd42da1cce.php:146
#: ../../../../templates/cache/4c/fb/a3bf13b0badfc09442bd42da1cce.php:346
+#: ../../../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:78
+#: ../../../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:179
+#: ../../../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:380
+#: ../../../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:453
msgid "Staff"
msgstr "Ekipa"
@@ -1491,6 +1682,7 @@ msgstr "Cache jest wyłączone."
#: /var/www/html/Tinyboard/mod.php:1966 /var/www/html/Tinyboard/mod.php:2057
#: /var/www/html/Tinyboard/mod.php:2106 /var/www/html/Tinyboard/mod.php:2110
#: ../../../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:271
+#: ../../../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:291
msgid "Configuration"
msgstr "Konfiguracja"
@@ -1503,6 +1695,7 @@ msgstr "Nie można otworzyć boardu po utworzeniu."
#: /var/www/html/Tinyboard/mod.php:2678 ../../../../inc/mod/pages.php:759
#: ../../../../inc/mod/pages.php:800 ../../../../inc/mod/pages.php:823
#: ../../../../inc/mod/pages.php:957 ../../../../inc/mod/pages.php:1020
+#: ../../../../inc/mod/pages.php:1027
msgid "Target and source board are the same."
msgstr "Docelowy i źródłowy board są takie same."
@@ -1512,7 +1705,7 @@ msgstr "Nie ma boardu na który można to przenieść; istnieje tylko jeden."
#: ../../../../inc/config.php:689 ../../../../inc/config.php:747
#: ../../../../inc/config.php:753 ../../../../inc/config.php:750
-#: ../../../../inc/config.php:756
+#: ../../../../inc/config.php:756 ../../../../inc/config.php:858
msgid "Invalid security token! Please go back and try again."
msgstr "Niepoprawny token bezpieczeństwa! Proszę cofnąć i spróbować ponownie."
@@ -1528,7 +1721,7 @@ msgstr "Edytuj board"
#: ../../../../inc/mod/pages.php:270 ../../../../inc/mod/pages.php:287
#: ../../../../inc/mod/pages.php:300 ../../../../inc/mod/pages.php:434
-#: ../../../../inc/mod/pages.php:496
+#: ../../../../inc/mod/pages.php:496 ../../../../inc/mod/pages.php:501
msgid "New board"
msgstr "Nowy board"
@@ -1538,11 +1731,15 @@ msgstr "Nowy board"
#. line 20
#. line 102
#. line 20
+#. line 102
+#. line 20
#: ../../../../inc/mod/pages.php:586 ../../../../inc/mod/pages.php:612
#: ../../../../inc/mod/pages.php:628 ../../../../inc/mod/pages.php:762
#: ../../../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:247
#: ../../../../templates/cache/18/9c/c365d711719f494c684aab98a4ae.php:65
-#: ../../../../inc/mod/pages.php:825
+#: ../../../../inc/mod/pages.php:825 ../../../../inc/mod/pages.php:832
+#: ../../../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:264
+#: ../../../../templates/cache/18/9c/c365d711719f494c684aab98a4ae.php:68
msgid "IP"
msgstr "adres IP"
@@ -1553,13 +1750,15 @@ msgstr "adres IP"
#: ../../../../inc/mod/pages.php:772 ../../../../inc/mod/pages.php:1187
#: ../../../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:398
#: ../../../../inc/mod/pages.php:1190 ../../../../inc/mod/pages.php:835
-#: ../../../../inc/mod/pages.php:1255
+#: ../../../../inc/mod/pages.php:1255 ../../../../inc/mod/pages.php:842
+#: ../../../../inc/mod/pages.php:1262
+#: ../../../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:429
msgid "New ban"
msgstr "Nowy ban"
#: ../../../../inc/mod/pages.php:919 ../../../../inc/mod/pages.php:962
#: ../../../../inc/mod/pages.php:987 ../../../../inc/mod/pages.php:1121
-#: ../../../../inc/mod/pages.php:1184
+#: ../../../../inc/mod/pages.php:1184 ../../../../inc/mod/pages.php:1191
msgid "Impossible to move thread; there is only one board."
msgstr "Nie można przenieść wątku; istnieje tylko jeden board."
@@ -1567,7 +1766,7 @@ msgstr "Nie można przenieść wątku; istnieje tylko jeden board."
#: ../../../../inc/mod/pages.php:923 ../../../../inc/mod/pages.php:966
#: ../../../../inc/mod/pages.php:991 ../../../../inc/mod/pages.php:1125
#: ../../../../templates/cache/dd/1a/7d548894242b9d7bff167de40716.php:106
-#: ../../../../inc/mod/pages.php:1188
+#: ../../../../inc/mod/pages.php:1188 ../../../../inc/mod/pages.php:1195
msgid "Move thread"
msgstr "Przenieś wątek"
@@ -1577,6 +1776,7 @@ msgstr "Przenieś wątek"
#: ../../../../inc/mod/pages.php:1466 ../../../../inc/mod/pages.php:1515
#: ../../../../inc/mod/pages.php:1477 ../../../../inc/mod/pages.php:1530
#: ../../../../inc/mod/pages.php:1549 ../../../../inc/mod/pages.php:1602
+#: ../../../../inc/mod/pages.php:1555 ../../../../inc/mod/pages.php:1608
msgid "Edit user"
msgstr "Edytuj użytkownika"
@@ -1586,13 +1786,15 @@ msgstr "Edytuj użytkownika"
#: ../../../../inc/mod/pages.php:1456 ../../../../inc/mod/pages.php:1528
#: ../../../../inc/mod/pages.php:1590 ../../../../inc/mod/pages.php:1662
#: ../../../../inc/mod/pages.php:1605 ../../../../inc/mod/pages.php:1677
-#: ../../../../inc/mod/pages.php:1750
+#: ../../../../inc/mod/pages.php:1750 ../../../../inc/mod/pages.php:1683
+#: ../../../../inc/mod/pages.php:1756
msgid "New PM for"
msgstr "Nowe PW dla"
#: ../../../../inc/mod/pages.php:1337 ../../../../inc/mod/pages.php:1435
#: ../../../../inc/mod/pages.php:1460 ../../../../inc/mod/pages.php:1594
#: ../../../../inc/mod/pages.php:1609 ../../../../inc/mod/pages.php:1681
+#: ../../../../inc/mod/pages.php:1687
msgid "Private message"
msgstr "Prywatna wiadomość"
@@ -1601,24 +1803,29 @@ msgstr "Prywatna wiadomość"
#: ../../../../inc/mod/pages.php:1481 ../../../../inc/mod/pages.php:1615
#: ../../../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:171
#: ../../../../inc/mod/pages.php:1630 ../../../../inc/mod/pages.php:1702
+#: ../../../../inc/mod/pages.php:1708
+#: ../../../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:182
msgid "PM inbox"
msgstr "Odebrane PW"
#: ../../../../inc/mod/pages.php:1679 ../../../../inc/mod/pages.php:1779
#: ../../../../inc/mod/pages.php:1804 ../../../../inc/mod/pages.php:1938
#: ../../../../inc/mod/pages.php:1953 ../../../../inc/mod/pages.php:2026
+#: ../../../../inc/mod/pages.php:1978 ../../../../inc/mod/pages.php:2077
msgid "Config editor"
msgstr "Edytor konfiguracji"
#: ../../../../inc/mod/pages.php:1713 ../../../../inc/mod/pages.php:1945
#: ../../../../inc/mod/pages.php:1970 ../../../../inc/mod/pages.php:2104
#: ../../../../inc/mod/pages.php:2119 ../../../../inc/mod/pages.php:2192
+#: ../../../../inc/mod/pages.php:2249
msgid "Debug: Anti-spam"
msgstr "Debug: Antyspam"
#: ../../../../inc/mod/pages.php:1801 ../../../../inc/mod/pages.php:1867
#: ../../../../inc/mod/pages.php:1892 ../../../../inc/mod/pages.php:2026
#: ../../../../inc/mod/pages.php:2041 ../../../../inc/mod/pages.php:2114
+#: ../../../../inc/mod/pages.php:2171
#, php-format
msgid "Installed theme: %s"
msgstr "Zainstalowano dodatek: %s"
@@ -1626,6 +1833,7 @@ msgstr "Zainstalowano dodatek: %s"
#: ../../../../inc/mod/pages.php:1811 ../../../../inc/mod/pages.php:1878
#: ../../../../inc/mod/pages.php:1903 ../../../../inc/mod/pages.php:2037
#: ../../../../inc/mod/pages.php:2052 ../../../../inc/mod/pages.php:2125
+#: ../../../../inc/mod/pages.php:2182
#, php-format
msgid "Configuring theme: %s"
msgstr "Konfigurowanie dodatku: %s"
@@ -1633,6 +1841,7 @@ msgstr "Konfigurowanie dodatku: %s"
#: ../../../../inc/mod/pages.php:1839 ../../../../inc/mod/pages.php:1906
#: ../../../../inc/mod/pages.php:1931 ../../../../inc/mod/pages.php:2065
#: ../../../../inc/mod/pages.php:2080 ../../../../inc/mod/pages.php:2153
+#: ../../../../inc/mod/pages.php:2210
#, php-format
msgid "Rebuilt theme: %s"
msgstr "Przebudowano dodatek: %s"
@@ -1645,16 +1854,19 @@ msgstr ""
#: ../../../../inc/config.php:704 ../../../../inc/config.php:710
#: ../../../../inc/config.php:707 ../../../../inc/config.php:713
+#: ../../../../inc/config.php:815
msgid "Thread has reached its maximum reply limit."
msgstr "Ten temat osiągnął swój maksymalny limit odpowiedzi."
#: ../../../../inc/config.php:705 ../../../../inc/config.php:711
#: ../../../../inc/config.php:708 ../../../../inc/config.php:714
+#: ../../../../inc/config.php:816
msgid "Thread has reached its maximum image limit."
msgstr "Ten temat osiągnął swój maksymalny limit obrazków."
#: ../../../../inc/config.php:726 ../../../../inc/config.php:732
#: ../../../../inc/config.php:729 ../../../../inc/config.php:735
+#: ../../../../inc/config.php:837
#, php-format
msgid "That file <a href=\"%s\">already exists</a> in this thread!"
msgstr "Ten plik <a href=\"%s\">już istnieje</a> w tym temacie!"
@@ -1662,6 +1874,7 @@ msgstr "Ten plik <a href=\"%s\">już istnieje</a> w tym temacie!"
#. Moderator errors
#: ../../../../inc/config.php:733 ../../../../inc/config.php:739
#: ../../../../inc/config.php:736 ../../../../inc/config.php:742
+#: ../../../../inc/config.php:844
#, php-format
msgid ""
"You are only allowed to unban %s users at a time. You tried to unban %u "
@@ -1671,18 +1884,19 @@ msgstr ""
#: ../../../../inc/mod/pages.php:1969 ../../../../inc/mod/pages.php:1994
#: ../../../../inc/mod/pages.php:2128 ../../../../inc/mod/pages.php:2143
-#: ../../../../inc/mod/pages.php:2216
+#: ../../../../inc/mod/pages.php:2216 ../../../../inc/mod/pages.php:2273
msgid "Debug: Recent posts"
msgstr "Debug: Ostatnie posty"
#: ../../../../inc/mod/pages.php:1993 ../../../../inc/mod/pages.php:2018
#: ../../../../inc/mod/pages.php:2152 ../../../../inc/mod/pages.php:2167
-#: ../../../../inc/mod/pages.php:2240
+#: ../../../../inc/mod/pages.php:2240 ../../../../inc/mod/pages.php:2297
msgid "Debug: SQL"
msgstr "Debug: SQL"
#. line 28
#: ../../../../templates/cache/4b/3e/915cc5ac5fe144c331207c656528.php:104
+#: ../../../../templates/cache/4b/3e/915cc5ac5fe144c331207c656528.php:99
msgid "1 reply"
msgid_plural "%count% replies"
msgstr[0] "1 odpowiedź"
@@ -1695,19 +1909,23 @@ msgid "Search results"
msgstr "Wyniki wyszukiwania"
#: ../../../../templates/cache/55/dd/8ffe738533bd12359200e5745905.php:31
+#: ../../../../templates/cache/55/dd/8ffe738533bd12359200e5745905.php:35
msgid "Posts"
msgstr "Posty"
#: ../../../../templates/cache/55/dd/8ffe738533bd12359200e5745905.php:41
+#: ../../../../templates/cache/55/dd/8ffe738533bd12359200e5745905.php:46
msgid "IP address notes"
msgstr "Notatki adresu IP"
#: ../../../../templates/cache/55/dd/8ffe738533bd12359200e5745905.php:53
+#: ../../../../templates/cache/55/dd/8ffe738533bd12359200e5745905.php:59
msgid "Bans"
msgstr "Bany"
#. line 18
#: ../../../../templates/cache/55/dd/8ffe738533bd12359200e5745905.php:76
+#: ../../../../templates/cache/55/dd/8ffe738533bd12359200e5745905.php:85
msgid ""
"(Search is case-insensitive and based on keywords. To match exact phrases, "
"use \"quotes\". Use an asterisk (*) for wildcard.)"
@@ -1742,24 +1960,29 @@ msgstr ""
"Symbole wieloznaczne nie mogą być wykorzystane w filtrach."
#: ../../../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:57
+#: ../../../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:61
msgid "edit"
msgstr "edytuj"
#. line 26
#: ../../../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:84
+#: ../../../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:90
msgid "Messages"
msgstr "Wiadomości"
#: ../../../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:161
+#: ../../../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:170
msgid "View all noticeboard entries"
msgstr "Pokaż wszystkie wpisy na tablicy ogłoszeń"
#. line 70
#: ../../../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:192
+#: ../../../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:204
msgid "Administration"
msgstr "Administracja"
#: ../../../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:239
+#: ../../../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:255
msgid "Change password"
msgstr "Zmień hasło"
@@ -1767,6 +1990,7 @@ msgstr "Zmień hasło"
#. line 130
#: ../../../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:308
#: ../../../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:341
+#: ../../../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:364
msgid "Debug"
msgstr "Debug"
@@ -1774,6 +1998,7 @@ msgstr "Debug"
#. line 132
#: ../../../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:312
#: ../../../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:345
+#: ../../../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:369
msgid "Anti-spam"
msgstr "Antyspam"
@@ -1781,11 +2006,13 @@ msgstr "Antyspam"
#. line 133
#: ../../../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:315
#: ../../../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:348
+#: ../../../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:373
msgid "Recent posts"
msgstr "Ostatnie posty"
#: ../../../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:321
#: ../../../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:354
+#: ../../../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:380
msgid "SQL"
msgstr "SQL"
@@ -1793,6 +2020,7 @@ msgstr "SQL"
#. line 155
#: ../../../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:359
#: ../../../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:392
+#: ../../../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:419
msgid "User account"
msgstr "Konto użytkownika"
@@ -1803,9 +2031,13 @@ msgstr "Konto użytkownika"
#. line 67
#. line 25
#. line 67
+#. line 25
+#. line 67
#: ../../../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:77
#: ../../../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:179
#: ../../../../templates/cache/4c/fb/a3bf13b0badfc09442bd42da1cce.php:54
+#: ../../../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:82
+#: ../../../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:190
msgid "Note"
msgstr "Notka"
@@ -1814,6 +2046,7 @@ msgstr "Notka"
#. line 26
#: ../../../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:80
#: ../../../../templates/cache/4c/fb/a3bf13b0badfc09442bd42da1cce.php:57
+#: ../../../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:86
msgid "Date"
msgstr "Data"
@@ -1823,38 +2056,48 @@ msgstr "Data"
#: ../../../../templates/cache/4c/fb/a3bf13b0badfc09442bd42da1cce.php:88
#: ../../../../templates/cache/4c/fb/a3bf13b0badfc09442bd42da1cce.php:321
#: ../../../../templates/cache/4c/fb/a3bf13b0badfc09442bd42da1cce.php:385
+#: ../../../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:120
+#: ../../../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:394
+#: ../../../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:493
msgid "deleted?"
msgstr "usunięty?"
#. line 49
#: ../../../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:142
+#: ../../../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:151
msgid "remove"
msgstr "usuń"
#. line 75
#: ../../../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:189
+#: ../../../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:201
msgid "New note"
msgstr "Nowa notka"
#. line 92
#: ../../../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:226
+#: ../../../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:240
msgid "Status"
msgstr "Status"
#: ../../../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:233
+#: ../../../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:248
msgid "Expired"
msgstr "Wygasły"
#: ../../../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:238
+#: ../../../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:254
msgid "Active"
msgstr "Aktywny"
#: ../../../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:269
+#: ../../../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:288
msgid "no reason"
msgstr "brak powodu"
#: ../../../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:322
#: ../../../../templates/cache/4c/fb/a3bf13b0badfc09442bd42da1cce.php:246
+#: ../../../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:346
msgid "never"
msgstr "nigdy"
@@ -1863,21 +2106,25 @@ msgstr "nigdy"
#. line 140
#: ../../../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:331
#: ../../../../templates/cache/4c/fb/a3bf13b0badfc09442bd42da1cce.php:143
+#: ../../../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:356
msgid "Seen"
msgstr "Widziano"
#: ../../../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:338
#: ../../../../templates/cache/4c/fb/a3bf13b0badfc09442bd42da1cce.php:273
+#: ../../../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:364
msgid "Yes"
msgstr "Tak"
#: ../../../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:343
#: ../../../../templates/cache/4c/fb/a3bf13b0badfc09442bd42da1cce.php:278
+#: ../../../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:370
msgid "No"
msgstr "Nie"
#. line 161
#: ../../../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:378
+#: ../../../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:408
msgid "Remove ban"
msgstr "Usuń ban"
@@ -1886,22 +2133,27 @@ msgstr "Usuń ban"
#. line 181
#: ../../../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:424
#: ../../../../templates/cache/4c/fb/a3bf13b0badfc09442bd42da1cce.php:352
+#: ../../../../templates/cache/24/a0/f1ddafed7a8f9625e747a5ca33f5.php:457
msgid "Time"
msgstr "Czas"
#: ../../../../templates/cache/e5/22/4711dd22e4c786b4de405db7a449.php:41
+#: ../../../../templates/cache/e5/22/4711dd22e4c786b4de405db7a449.php:36
msgid "You were banned! ;_;"
msgstr "Byłeś zbanowany! ;_;"
#: ../../../../templates/cache/e5/22/4711dd22e4c786b4de405db7a449.php:46
+#: ../../../../templates/cache/e5/22/4711dd22e4c786b4de405db7a449.php:42
msgid "You are banned! ;_;"
msgstr "Jesteś zbanowany! ;_;"
#: ../../../../templates/cache/e5/22/4711dd22e4c786b4de405db7a449.php:56
+#: ../../../../templates/cache/e5/22/4711dd22e4c786b4de405db7a449.php:53
msgid "You were banned from"
msgstr "Byłeś zbanowany na"
#: ../../../../templates/cache/e5/22/4711dd22e4c786b4de405db7a449.php:61
+#: ../../../../templates/cache/e5/22/4711dd22e4c786b4de405db7a449.php:59
msgid "You have been banned from"
msgstr "Zostałeś zbanowany na"
@@ -1910,34 +2162,42 @@ msgid "for the following reason:"
msgstr "z następującego powodu:"
#: ../../../../templates/cache/e5/22/4711dd22e4c786b4de405db7a449.php:88
+#: ../../../../templates/cache/e5/22/4711dd22e4c786b4de405db7a449.php:89
msgid "for an unspecified reason."
msgstr "z nieokreślonego powodu."
#. line 32
#: ../../../../templates/cache/e5/22/4711dd22e4c786b4de405db7a449.php:109
+#: ../../../../templates/cache/e5/22/4711dd22e4c786b4de405db7a449.php:111
msgid "Your ban was filed on"
msgstr "Twój ban został nałożony"
#. line 51
#: ../../../../templates/cache/e5/22/4711dd22e4c786b4de405db7a449.php:120
#: ../../../../templates/cache/e5/22/4711dd22e4c786b4de405db7a449.php:150
+#: ../../../../templates/cache/e5/22/4711dd22e4c786b4de405db7a449.php:124
+#: ../../../../templates/cache/e5/22/4711dd22e4c786b4de405db7a449.php:157
msgid "has since expired. Refresh the page to continue."
msgstr "już wygasł. Odśwież stronę, aby kontynuować."
#: ../../../../templates/cache/e5/22/4711dd22e4c786b4de405db7a449.php:125
+#: ../../../../templates/cache/e5/22/4711dd22e4c786b4de405db7a449.php:130
msgid "expires"
msgstr "wygasa"
#: ../../../../templates/cache/e5/22/4711dd22e4c786b4de405db7a449.php:128
+#: ../../../../templates/cache/e5/22/4711dd22e4c786b4de405db7a449.php:134
msgid "from now, which is on"
msgstr "od teraz, czyli"
#: ../../../../templates/cache/e5/22/4711dd22e4c786b4de405db7a449.php:176
+#: ../../../../templates/cache/e5/22/4711dd22e4c786b4de405db7a449.php:184
msgid "will not expire"
msgstr "nie wygaśnie"
#. line 78
#: ../../../../templates/cache/e5/22/4711dd22e4c786b4de405db7a449.php:184
+#: ../../../../templates/cache/e5/22/4711dd22e4c786b4de405db7a449.php:193
msgid "Your IP address is"
msgstr "Twój adres IP to"
@@ -1967,33 +2227,39 @@ msgid "Target board"
msgstr "Board docelowy"
#: ../../../../templates/cache/18/9c/c365d711719f494c684aab98a4ae.php:66
+#: ../../../../templates/cache/18/9c/c365d711719f494c684aab98a4ae.php:70
msgid "(or subnet)"
msgstr "(lub podsieć)"
#: ../../../../templates/cache/18/9c/c365d711719f494c684aab98a4ae.php:80
+#: ../../../../templates/cache/18/9c/c365d711719f494c684aab98a4ae.php:85
msgid "hidden"
msgstr "ukryty"
#. line 41
#: ../../../../templates/cache/18/9c/c365d711719f494c684aab98a4ae.php:107
+#: ../../../../templates/cache/18/9c/c365d711719f494c684aab98a4ae.php:114
msgid "Message"
msgstr "Wiadomość"
#. line 46
#: ../../../../templates/cache/18/9c/c365d711719f494c684aab98a4ae.php:117
#: ../../../../templates/cache/18/9c/c365d711719f494c684aab98a4ae.php:122
+#: ../../../../templates/cache/18/9c/c365d711719f494c684aab98a4ae.php:130
msgid "public; attached to post"
msgstr "publiczny; dołączony do posta"
#. line 58
#: ../../../../templates/cache/18/9c/c365d711719f494c684aab98a4ae.php:133
#: ../../../../templates/cache/18/9c/c365d711719f494c684aab98a4ae.php:138
+#: ../../../../templates/cache/18/9c/c365d711719f494c684aab98a4ae.php:147
msgid "Length"
msgstr "Długość"
#. line 88
#: ../../../../templates/cache/18/9c/c365d711719f494c684aab98a4ae.php:192
#: ../../../../templates/cache/18/9c/c365d711719f494c684aab98a4ae.php:197
+#: ../../../../templates/cache/18/9c/c365d711719f494c684aab98a4ae.php:209
msgid "New Ban"
msgstr "Nowy ban"
@@ -2032,6 +2298,7 @@ msgid "No results."
msgstr "Brak wyników."
#: ../../../../inc/functions.php:594 ../../../../inc/functions.php:603
+#: ../../../../inc/functions.php:623
msgid "Banned!"
msgstr "Zbanowany!"
@@ -2045,6 +2312,7 @@ msgstr "Nie jesteś zbanowany."
#: ../../../../inc/functions.php:549 ../../../../inc/functions.php:566
#: ../../../../inc/functions.php:558 ../../../../inc/functions.php:575
+#: ../../../../inc/functions.php:578 ../../../../inc/functions.php:595
msgid "second"
msgid_plural "seconds"
msgstr[0] "sekunda"
@@ -2053,6 +2321,7 @@ msgstr[2] "sekund"
#: ../../../../inc/functions.php:551 ../../../../inc/functions.php:568
#: ../../../../inc/functions.php:560 ../../../../inc/functions.php:577
+#: ../../../../inc/functions.php:580 ../../../../inc/functions.php:597
msgid "minute"
msgid_plural "minutes"
msgstr[0] "minuta"
@@ -2061,6 +2330,7 @@ msgstr[2] "minut"
#: ../../../../inc/functions.php:553 ../../../../inc/functions.php:570
#: ../../../../inc/functions.php:562 ../../../../inc/functions.php:579
+#: ../../../../inc/functions.php:582 ../../../../inc/functions.php:599
msgid "hour"
msgid_plural "hours"
msgstr[0] "godzina"
@@ -2069,6 +2339,7 @@ msgstr[2] "godzin"
#: ../../../../inc/functions.php:555 ../../../../inc/functions.php:572
#: ../../../../inc/functions.php:564 ../../../../inc/functions.php:581
+#: ../../../../inc/functions.php:584 ../../../../inc/functions.php:601
msgid "day"
msgid_plural "days"
msgstr[0] "dzień"
@@ -2077,6 +2348,7 @@ msgstr[2] "dni"
#: ../../../../inc/functions.php:557 ../../../../inc/functions.php:574
#: ../../../../inc/functions.php:566 ../../../../inc/functions.php:583
+#: ../../../../inc/functions.php:586 ../../../../inc/functions.php:603
msgid "week"
msgid_plural "weeks"
msgstr[0] "tydzień"
@@ -2085,6 +2357,7 @@ msgstr[2] "tygodni"
#: ../../../../inc/functions.php:560 ../../../../inc/functions.php:577
#: ../../../../inc/functions.php:569 ../../../../inc/functions.php:586
+#: ../../../../inc/functions.php:589 ../../../../inc/functions.php:606
msgid "year"
msgid_plural "years"
msgstr[0] "rok"
@@ -2093,6 +2366,7 @@ msgstr[2] "lat"
#. line 118
#: ../../../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:308
+#: ../../../../templates/cache/3a/df/ab38a77244cb9c729b4c6f99759a.php:330
msgid "Other"
msgstr "Inne"
@@ -2122,15 +2396,18 @@ msgstr "usuń"
#. line 55
#: ../../../../templates/cache/c8/8b/242bf87b3b6a29a67cdd09a3afeb.php:133
#: ../../../../templates/cache/f3/ad/68dee281a64ebad9a5c774b53279.php:94
+#: ../../../../templates/cache/f3/ad/68dee281a64ebad9a5c774b53279.php:91
msgid "by"
msgstr "przez"
#: ../../../../templates/cache/c8/8b/242bf87b3b6a29a67cdd09a3afeb.php:136
#: ../../../../templates/cache/f3/ad/68dee281a64ebad9a5c774b53279.php:97
+#: ../../../../templates/cache/f3/ad/68dee281a64ebad9a5c774b53279.php:95
msgid "at"
msgstr "dnia"
#: ../../../../templates/cache/f3/ad/68dee281a64ebad9a5c774b53279.php:66
+#: ../../../../templates/cache/f3/ad/68dee281a64ebad9a5c774b53279.php:61
msgid "(No news to show.)"
msgstr "(Nie ma newsów do wyświetlenia.)"
@@ -2143,24 +2420,28 @@ msgstr "Nie ma dostępnych dodatków."
msgid "Install theme"
msgstr "Zainstaluj dodatek"
-#: ../../../../inc/display.php:211
+#: ../../../../inc/display.php:211 ../../../../inc/display.php:215
#, php-format
msgid "Post too long. Click <a href=\"%s\">here</a> to view the full text."
-msgstr "Post za długi. Kliknij <a href=\"%s\">tutaj</a>, aby zobaczyć jego pełną treść."
+msgstr ""
+"Post za długi. Kliknij <a href=\"%s\">tutaj</a>, aby zobaczyć jego pełną "
+"treść."
#: ../../../../inc/display.php:342 ../../../../inc/display.php:443
+#: ../../../../inc/display.php:347 ../../../../inc/display.php:449
msgid "Delete file"
msgstr "Usuń plik"
#: ../../../../inc/display.php:342 ../../../../inc/display.php:443
+#: ../../../../inc/display.php:347 ../../../../inc/display.php:449
msgid "Are you sure you want to delete this file?"
msgstr "Czy jesteś pewien, że chcesz usunąć ten plik?"
-#: ../../../../inc/display.php:431
+#: ../../../../inc/display.php:431 ../../../../inc/display.php:437
msgid "Delete all posts by IP across all boards"
msgstr "Usuń wszystkie posty z tego IP ze wszystkich boardów"
-#: ../../../../inc/display.php:431
+#: ../../../../inc/display.php:431 ../../../../inc/display.php:437
msgid ""
"Are you sure you want to delete all posts by this IP address, across all "
"boards?"
@@ -2169,7 +2450,8 @@ msgstr ""
"wszystkich boardów?"
#. Page footer
-#: ../../../../inc/config.php:564
+#. Additional lines added to the footer of all pages.
+#: ../../../../inc/config.php:564 ../../../../inc/config.php:653
msgid ""
"All trademarks, copyrights, comments, and images on this page are owned by "
"and are the responsibility of their respective parties."
@@ -2186,3 +2468,25 @@ msgstr "Nie ma boardów do przeszukania!"
#: ../../../../inc/database.php:72
msgid "Database error: "
msgstr "Błąd bazy danych: "
+
+#. line 13
+#: ../../../../templates/cache/3c/80/0ebbee302f4fad8d0d7f13e62db5.php:56
+msgid "Error information"
+msgstr "Informacje o błędzie"
+
+#. line 27
+#: ../../../../templates/cache/39/42/cbc36382096edfa72a8bc26e4514.php:68
+msgid "Update"
+msgstr "Aktualizacja"
+
+#: ../../../../templates/cache/39/42/cbc36382096edfa72a8bc26e4514.php:97
+msgid "Currently editing raw HTML."
+msgstr "Obecnie edytujesz czysty HTML"
+
+#: ../../../../templates/cache/39/42/cbc36382096edfa72a8bc26e4514.php:105
+msgid "Edit markup instead?"
+msgstr "Edytować zamiast tego znaczniki?"
+
+#: ../../../../templates/cache/39/42/cbc36382096edfa72a8bc26e4514.php:115
+msgid "Edit raw HTML instead?"
+msgstr "Edytować zamiast tego czysty HTML?"
diff --git a/install.php b/install.php
index 6971437a..778654b7 100644
--- a/install.php
+++ b/install.php
@@ -1,7 +1,7 @@
<?php
// Installation/upgrade file
-define('VERSION', 'v0.9.6-dev-11');
+define('VERSION', 'v0.9.6-dev-11 + <a href="https://int.vichan.net/devel/">vichan-devel-4.0.8-gold</a>');
require 'inc/functions.php';
@@ -228,8 +228,12 @@ if (file_exists($config['has_installed'])) {
query(sprintf("ALTER TABLE `posts_%s` DROP INDEX `thread`", $_board['uri'])) or error(db_error());
}
case 'v0.9.6-dev-7':
+ case 'v0.9.6-dev-7 + <a href="https://github.com/vichan-devel/Tinyboard/">vichan-devel-4.0-gold</a>':
query("ALTER TABLE `bans` ADD `seen` BOOLEAN NOT NULL") or error(db_error());
case 'v0.9.6-dev-8':
+ case 'v0.9.6-dev-8 + <a href="https://github.com/vichan-devel/Tinyboard/">vichan-devel-4.0.1</a>':
+ query("CREATE TABLE IF NOT EXISTS `search_queries` ( `ip` varchar(39) NOT NULL, `time` int(11) NOT NULL, `query` text NOT NULL) ENGINE=MyISAM DEFAULT CHARSET=utf8;") or error(db_error());
+ case 'v0.9.6-dev-8 + <a href="https://github.com/vichan-devel/Tinyboard/">vichan-devel-4.0.2</a>':
query("ALTER TABLE `mods` CHANGE `password` `password` CHAR( 64 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'SHA256'") or error(db_error());
query("ALTER TABLE `mods` ADD `salt` CHAR( 32 ) NOT NULL AFTER `password`") or error(db_error());
$query = query("SELECT `id`,`password` FROM `mods`") or error(db_error());
@@ -248,7 +252,10 @@ if (file_exists($config['has_installed'])) {
$_query->execute() or error(db_error($_query));
}
}
- case 'v0.9.6-dev-9':
+ case 'v0.9.6-dev-9':
+ case 'v0.9.6-dev-9 + <a href="https://github.com/vichan-devel/Tinyboard/">vichan-devel-4.0.3</a>':
+ case 'v0.9.6-dev-9 + <a href="https://github.com/vichan-devel/Tinyboard/">vichan-devel-4.0.4-gold</a>':
+ case 'v0.9.6-dev-9 + <a href="https://github.com/vichan-devel/Tinyboard/">vichan-devel-4.0.5-gold</a>':
sql_open();
function __query($sql) {
if (mysql_version() >= 50503)
@@ -356,6 +363,9 @@ if (file_exists($config['has_installed'])) {
CHANGE `boards` `boards` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;") or error(db_error());
query("ALTER TABLE `reports`
CHANGE `board` `board` VARCHAR( 58 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL;") or error(db_error());
+ case 'v0.9.6-dev-11':
+ case 'v0.9.6-dev-11 + <a href="https://int.vichan.net/devel/">vichan-devel-4.0.6</a>':
+ case 'v0.9.6-dev-11 + <a href="https://int.vichan.net/devel/">vichan-devel-4.0.7-gold</a>':
case false:
// Update version number
file_write($config['has_installed'], VERSION);
diff --git a/install.sql b/install.sql
index db89452b..84090999 100644
--- a/install.sql
+++ b/install.sql
@@ -230,6 +230,18 @@ CREATE TABLE IF NOT EXISTS `robot` (
-- --------------------------------------------------------
--
+-- Table structure for table `search_queries`
+--
+
+CREATE TABLE IF NOT EXISTS `search_queries` (
+ `ip` varchar(39) NOT NULL,
+ `time` int(11) NOT NULL,
+ `query` text NOT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+
+-- --------------------------------------------------------
+
+--
-- Table structure for table `theme_settings`
--
diff --git a/js/attention-bar.js b/js/attention-bar.js
new file mode 100644
index 00000000..a84cadff
--- /dev/null
+++ b/js/attention-bar.js
@@ -0,0 +1,8 @@
+$(document).ready(function(){
+ $("#attention_bar").click(function(eO){ $("#attention_bar").css("display","none");
+ $("#attention_bar_form").css("display","block"); });
+ $.get(configRoot + "attentionbar.txt", function(data) {
+ $("#attention_bar").text(data);
+ $("#attention_bar_input").val(data);
+ });
+});
diff --git a/js/chrome-board-expanding-fix.js b/js/chrome-board-expanding-fix.js
new file mode 100644
index 00000000..f0a5930a
--- /dev/null
+++ b/js/chrome-board-expanding-fix.js
@@ -0,0 +1,7 @@
+$(document).ready(function(){
+ $(".desktop-style .sub .sub").on("mouseover", function() {
+ $(this).addClass("hover");
+ }).on("mouseout", function() {
+ $(this).removeClass("hover");
+ });
+});
diff --git a/js/expand.js b/js/expand.js
index 07ce9e43..b13d0bcf 100644
--- a/js/expand.js
+++ b/js/expand.js
@@ -14,8 +14,7 @@
$(document).ready(function(){
if($('div.banner').length != 0)
return; // not index
- $('div.post.op span.omitted').each(function() {
-
+
var do_expand = function() {
$(this)
.html($(this).text().replace(_("Click reply to view."), '<a href="javascript:void(0)">'+_("Click to expand")+'</a>.'))
diff --git a/js/hide-threads.js b/js/hide-threads.js
index 575804b6..44bd829b 100644
--- a/js/hide-threads.js
+++ b/js/hide-threads.js
@@ -12,11 +12,9 @@
*/
$(document).ready(function(){
- if($('div.banner').length != 0)
+ if (active_page != "index" && active_page != "ukko")
return; // not index
-
- var board = $('form input[name="board"]').val().toString();
-
+
if (!localStorage.hiddenthreads)
localStorage.hiddenthreads = '{}';
@@ -37,13 +35,16 @@ $(document).ready(function(){
}
}
- if (!hidden_data[board]) {
- hidden_data[board] = {}; // id : timestamp
- }
-
var do_hide_threads = function() {
var id = $(this).children('p.intro').children('a.post_no:eq(1)').text();
var thread_container = $(this).parent();
+
+ var board = thread_container.data("board");
+
+ if (!hidden_data[board]) {
+ hidden_data[board] = {}; // id : timestamp
+ }
+
$('<a class="hide-thread-link" style="float:left;margin-right:5px" href="javascript:void(0)">[–]</a><span> </span>')
.insertBefore(thread_container.find(':not(h2,h2 *):first'))
.click(function() {
diff --git a/js/inline-expanding-filename.js b/js/inline-expanding-filename.js
new file mode 100644
index 00000000..048a0e1a
--- /dev/null
+++ b/js/inline-expanding-filename.js
@@ -0,0 +1,33 @@
+/*
+ * inline-expanding-filename.js
+ * Binds image filename link to expanding, to make kusaba x users somewhat more accustomed.
+ * https://github.com/vichan-devel/Tinyboard/blob/master/js/inline-expanding.js
+ *
+ * Released under the MIT license
+ * Copyright (c) 2012-2013 Marcin Łabanowski <marcin@6irc.net>
+ *
+ * Usage:
+ * $config['additional_javascript'][] = 'js/jquery.min.js';
+ * $config['additional_javascript'][] = 'js/inline-expanding.js';
+ * $config['additional_javascript'][] = 'js/inline-expanding-filename.js';
+ *
+ */
+
+onready(function(){
+ var inline_expanding_filename = function() {
+ $(this).find(".fileinfo > a").click(function(){
+ var imagelink = $(this).parent().parent().find('a[target="_blank"]:first');
+ if(imagelink.length > 0) {
+ imagelink.click();
+ return false;
+ }
+ });
+ };
+
+ $('div[id^="thread_"]').each(inline_expanding_filename);
+
+ // allow to work with auto-reload.js, etc.
+ $(document).bind('new_post', function(e, post) {
+ inline_expanding_filename.call(post);
+ });
+});
diff --git a/js/inline-expanding.js b/js/inline-expanding.js
index 61085b0d..398db181 100644
--- a/js/inline-expanding.js
+++ b/js/inline-expanding.js
@@ -65,5 +65,4 @@ onready(function(){
} else {
inline_expand_post.call(document);
}
-
});
diff --git a/js/mobile-style.js b/js/mobile-style.js
new file mode 100644
index 00000000..89e01b73
--- /dev/null
+++ b/js/mobile-style.js
@@ -0,0 +1,8 @@
+if(navigator.userAgent.match(/iPhone|iPod|iPad|Android|Opera Mini|Blackberry|PlayBook|Windows Phone|Tablet PC|Windows CE|IEMobile/i)) {
+ $('html').addClass("mobile-style");
+ device_type = "mobile";
+}
+else {
+ $('html').addClass("desktop-style");
+ device_type = "desktop";
+}
diff --git a/js/post-hider.js b/js/post-hider.js
new file mode 120000
index 00000000..693c14d6
--- /dev/null
+++ b/js/post-hider.js
@@ -0,0 +1 @@
+hide-threads.js \ No newline at end of file
diff --git a/js/post-hover.js b/js/post-hover.js
index 48f0ed96..040b6a73 100644
--- a/js/post-hover.js
+++ b/js/post-hover.js
@@ -17,13 +17,28 @@ onready(function(){
var $link = $(this);
var id;
-
- if(id = $link.text().match(/^>>(\d+)$/)) {
- id = id[1];
+ var matches;
+
+ if(matches = $link.text().match(/^>>(?:>\/([^\/]+)\/)?(\d+)$/)) {
+ id = matches[2];
} else {
return;
}
+ var board = $(this);
+ while (board.data('board') === undefined) {
+ board = board.parent();
+ }
+ var threadid = board.attr('id').replace("thread_", "");
+ board = board.data('board');
+
+ var parentboard = board;
+
+ if (matches[1] !== undefined) {
+ board = matches[1];
+ }
+
+
var $post = false;
var hovering = false;
var hovered_at;
@@ -32,28 +47,34 @@ onready(function(){
hovered_at = {'x': e.pageX, 'y': e.pageY};
var start_hover = function($link) {
- if($post.is(':visible') &&
+ if($.contains($post[0], $link[0])) {
+ // link links to itself or to op; ignore
+ }
+ else if($post.is(':visible') &&
$post.offset().top + $post.height() >= $(window).scrollTop() &&
- $post.offset().top <= $(window).scrollTop() + $(window).height()
- ) {
+ $post.offset().top <= $(window).scrollTop() + $(window).height()) {
// post is in view
$post.attr('style', 'border-style: none dashed dashed none; background: ' + $post.css('border-right-color'));
} else {
var $newPost = $post.clone();
+ $newPost.find('>.reply, >br').remove();
$newPost.find('span.mentioned').remove();
+
$newPost
.attr('id', 'post-hover-' + id)
+ .attr('data-board', board)
.addClass('post-hover')
.css('position', 'absolute')
.css('border-style', 'solid')
.css('box-shadow', '1px 1px 1px #999')
.css('display', 'block')
- .insertAfter($link.parent());
+ .addClass('reply').addClass('post')
+ .insertAfter($link.parent())
$link.trigger('mousemove');
}
};
- $post = $('div.post#reply_' + id);
+ $post = $('[data-board="' + board + '"] div.post#reply_' + id + ', [data-board="' + board + '"]div#thread_' + id);
if($post.length > 0) {
start_hover($(this));
} else {
@@ -68,13 +89,27 @@ onready(function(){
url: url,
context: document.body,
success: function(data) {
- $(data).find('div.post.reply').each(function() {
- if($('#' + $(this).attr('id')).length == 0)
- $('div.post:first').prepend($(this).css('display', 'none').addClass('hidden'));
+ var mythreadid = $(data).find('div[id^="thread_"]').attr('id').replace("thread_", "");
- });
+ if (mythreadid == threadid && parentboard == board) {
+ $(data).find('div.post.reply').each(function() {
+ if($('[data-board="' + board + '"] #' + $(this).attr('id')).length == 0) {
+ $('[data-board="' + board + '"]#thread_' + threadid + " .post.reply:first").before($(this).hide().addClass('hidden'));
+ }
+ });
+ }
+ else if ($('[data-board="' + board + '"]#thread_'+mythreadid).length > 0) {
+ $(data).find('div.post.reply').each(function() {
+ if($('[data-board="' + board + '"] #' + $(this).attr('id')).length == 0) {
+ $('[data-board="' + board + '"]#thread_' + mythreadid + " .post.reply:first").before($(this).hide().addClass('hidden'));
+ }
+ });
+ }
+ else {
+ $(data).find('div[id^="thread_"]').hide().attr('data-cached', 'yes').prependTo('form[name="postcontrols"]');
+ }
- $post = $('div.post#reply_' + id);
+ $post = $('[data-board="' + board + '"] div.post#reply_' + id + ', [data-board="' + board + '"]div#thread_' + id);
if(hovering && $post.length > 0) {
start_hover($link);
}
@@ -87,14 +122,14 @@ onready(function(){
return;
$post.attr('style', '');
- if($post.hasClass('hidden'))
+ if($post.hasClass('hidden') || $post.data('cached') == 'yes')
$post.css('display', 'none');
$('.post-hover').remove();
}).mousemove(function(e) {
if(!$post)
return;
- var $hover = $('#post-hover-' + id);
+ var $hover = $('#post-hover-' + id + '[data-board="' + board + '"]');
if($hover.length == 0)
return;
diff --git a/js/quick-reply.js b/js/quick-reply.js
index ea504b48..bee204b7 100644
--- a/js/quick-reply.js
+++ b/js/quick-reply.js
@@ -12,6 +12,7 @@
*
*/
+if (active_page == 'index') {
$(document).ready(function(){
if($('div.banner').length != 0)
return; // not index
@@ -43,4 +44,4 @@ $(document).ready(function(){
});
});
});
-
+}
diff --git a/js/smartphone-spoiler.js b/js/smartphone-spoiler.js
index 54c7a9a1..ee904b54 100644
--- a/js/smartphone-spoiler.js
+++ b/js/smartphone-spoiler.js
@@ -6,18 +6,28 @@
* Copyright (c) 2012 Michael Save <savetheinternet@tinyboard.org>
*
* Usage:
+ * $config['additional_javascript'][] = 'js/mobile-style.js';
* $config['additional_javascript'][] = 'js/smartphone-spoiler.js';
*
*/
onready(function(){
- if(navigator.userAgent.match(/iPhone|iPod|iPad|Android|Opera Mini|Blackberry|PlayBook|Windows Phone|Tablet PC|Windows CE|IEMobile/i)) {
- var spoilers = document.getElementsByClassName('spoiler');
- for(var i = 0; i < spoilers.length; i++) {
- spoilers[i].onmousedown = function() {
- this.style.color = 'white';
- };
- }
+ if(device_type == 'mobile') {
+ var fix_spoilers = function(where) {
+ var spoilers = where.getElementsByClassName('spoiler');
+ for(var i = 0; i < spoilers.length; i++) {
+ spoilers[i].onmousedown = function() {
+ this.style.color = 'white';
+ };
+ }
+ };
+ fix_spoilers(document);
+
+ // allow to work with auto-reload.js, etc.
+ $(document).bind('new_post', function(e, post) {
+ fix_spoilers(post);
+ });
+
}
});
diff --git a/post.php b/post.php
index ab4775eb..6a23b64c 100644
--- a/post.php
+++ b/post.php
@@ -79,6 +79,7 @@ if (isset($_POST['delete'])) {
$is_mod = isset($_POST['mod']) && $_POST['mod'];
$root = $is_mod ? $config['root'] . $config['file_mod'] . '?/' : $config['root'];
+ if (!$is_mod) header('X-Associated-Content: "' . $root . $board['dir'] . $config['file_index'] . '"');
header('Location: ' . $root . $board['dir'] . $config['file_index'], true, $config['redirect_http']);
} elseif (isset($_POST['report'])) {
@@ -136,6 +137,7 @@ if (isset($_POST['delete'])) {
$is_mod = isset($_POST['mod']) && $_POST['mod'];
$root = $is_mod ? $config['root'] . $config['file_mod'] . '?/' : $config['root'];
+ if (!$is_mod) header('X-Associated-Content: "' . $root . $board['dir'] . $config['file_index'] . '"');
header('Location: ' . $root . $board['dir'] . $config['file_index'], true, $config['redirect_http']);
} elseif (isset($_POST['post'])) {
@@ -665,6 +667,8 @@ if (isset($_POST['delete'])) {
_syslog(LOG_INFO, 'New post: /' . $board['dir'] . $config['dir']['res'] .
sprintf($config['file_page'], $post['op'] ? $id : $post['thread']) . (!$post['op'] ? '#' . $id : ''));
+ if (!$post['mod']) header('X-Associated-Content: "' . $redirect . '"');
+
if ($post['op'])
rebuildThemes('post-thread', $board['uri']);
else
diff --git a/search.php b/search.php
new file mode 100644
index 00000000..a40c4701
--- /dev/null
+++ b/search.php
@@ -0,0 +1,170 @@
+<?php
+ require 'inc/functions.php';
+
+ if (!$config['search']['enable']) {
+ die(_("Post search is disabled"));
+ }
+
+ $queries_per_minutes = $config['search']['queries_per_minutes'];
+ $queries_per_minutes_all = $config['search']['queries_per_minutes_all'];
+ $search_limit = $config['search']['search_limit'];
+
+ $boards = $config['search']['boards'];
+
+ $body = Element('search_form.html', Array('boards' => $boards, 'board' => isset($_GET['board']) ? $_GET['board'] : false, 'search' => isset($_GET['search']) ? str_replace('"', '&quot;', utf8tohtml($_GET['search'])) : false));
+
+ if(isset($_GET['search']) && !empty($_GET['search']) && isset($_GET['board']) && in_array($_GET['board'], $boards)) {
+ $phrase = $_GET['search'];
+ $_body = '';
+
+ $query = prepare("SELECT COUNT(*) FROM ``search_queries`` WHERE `ip` = :ip AND `time` > :time");
+ $query->bindValue(':ip', $_SERVER['REMOTE_ADDR']);
+ $query->bindValue(':time', time() - ($queries_per_minutes[1] * 60));
+ $query->execute() or error(db_error($query));
+ if($query->fetchColumn() > $queries_per_minutes[0])
+ error(_('Wait a while before searching again, please.'));
+
+ $query = prepare("SELECT COUNT(*) FROM ``search_queries`` WHERE `time` > :time");
+ $query->bindValue(':time', time() - ($queries_per_minutes_all[1] * 60));
+ $query->execute() or error(db_error($query));
+ if($query->fetchColumn() > $queries_per_minutes_all[0])
+ error(_('Wait a while before searching again, please.'));
+
+
+ $query = prepare("INSERT INTO ``search_queries`` VALUES (:ip, :time, :query)");
+ $query->bindValue(':ip', $_SERVER['REMOTE_ADDR']);
+ $query->bindValue(':time', time());
+ $query->bindValue(':query', $phrase);
+ $query->execute() or error(db_error($query));
+
+ _syslog(LOG_NOTICE, 'Searched /' . $_GET['board'] . '/ for "' . $phrase . '"');
+
+ // Cleanup search queries table
+ $query = prepare("DELETE FROM ``search_queries`` WHERE `time` <= :time");
+ $query->bindValue(':time', time() - ($queries_per_minutes_all[1] * 60));
+ $query->execute() or error(db_error($query));
+
+ openBoard($_GET['board']);
+
+ $filters = Array();
+
+ function search_filters($m) {
+ global $filters;
+ $name = $m[2];
+ $value = isset($m[4]) ? $m[4] : $m[3];
+
+ if(!in_array($name, array('id', 'thread', 'subject', 'name'))) {
+ // unknown filter
+ return $m[0];
+ }
+
+ $filters[$name] = $value;
+
+ return $m[1];
+ }
+
+ $phrase = trim(preg_replace_callback('/(^|\s)(\w+):("(.*)?"|[^\s]*)/', 'search_filters', $phrase));
+
+ if(!preg_match('/[^*^\s]/', $phrase) && empty($filters)) {
+ _syslog(LOG_WARNING, 'Query too broad.');
+ $body .= '<p class="unimportant" style="text-align:center">(Query too broad.)</p>';
+ echo Element('page.html', Array(
+ 'config'=>$config,
+ 'title'=>'Search',
+ 'body'=>$body,
+ ));
+ exit;
+ }
+
+ // Escape escape character
+ $phrase = str_replace('!', '!!', $phrase);
+
+ // Remove SQL wildcard
+ $phrase = str_replace('%', '!%', $phrase);
+
+ // Use asterisk as wildcard to suit convention
+ $phrase = str_replace('*', '%', $phrase);
+
+ // Remove `, it's used by table prefix magic
+ $phrase = str_replace('`', '!`', $phrase);
+
+ $like = '';
+ $match = Array();
+
+ // Find exact phrases
+ if(preg_match_all('/"(.+?)"/', $phrase, $m)) {
+ foreach($m[1] as &$quote) {
+ $phrase = str_replace("\"{$quote}\"", '', $phrase);
+ $match[] = $pdo->quote($quote);
+ }
+ }
+
+ $words = explode(' ', $phrase);
+ foreach($words as &$word) {
+ if(empty($word))
+ continue;
+ $match[] = $pdo->quote($word);
+ }
+
+ $like = '';
+ foreach($match as &$phrase) {
+ if(!empty($like))
+ $like .= ' AND ';
+ $phrase = preg_replace('/^\'(.+)\'$/', '\'%$1%\'', $phrase);
+ $like .= '`body` LIKE ' . $phrase . ' ESCAPE \'!\'';
+ }
+
+ foreach($filters as $name => $value) {
+ if(!empty($like))
+ $like .= ' AND ';
+ $like .= '`' . $name . '` = '. $pdo->quote($value);
+ }
+
+ $like = str_replace('%', '%%', $like);
+
+ $query = prepare(sprintf("SELECT * FROM ``posts_%s`` WHERE " . $like . " ORDER BY `time` DESC LIMIT :limit", $board['uri']));
+ $query->bindValue(':limit', $search_limit, PDO::PARAM_INT);
+ $query->execute() or error(db_error($query));
+
+ if($query->rowCount() == $search_limit) {
+ _syslog(LOG_WARNING, 'Query too broad.');
+ $body .= '<p class="unimportant" style="text-align:center">('._('Query too broad.').')</p>';
+ echo Element('page.html', Array(
+ 'config'=>$config,
+ 'title'=>'Search',
+ 'body'=>$body,
+ ));
+ exit;
+ }
+
+ $temp = '';
+ while($post = $query->fetch()) {
+ if(!$post['thread']) {
+ $po = new Thread($post['id'], $post['subject'], $post['email'], $post['name'], $post['trip'], $post['capcode'], $post['body'], $post['time'], $post['thumb'], $post['thumbwidth'], $post['thumbheight'], $post['file'], $post['filewidth'], $post['fileheight'], $post['filesize'], $post['filename'], $post['ip'], $post['sticky'], $post['locked'], $post['sage'], $post['embed']);
+ } else {
+ $po = new Post($post['id'], $post['thread'], $post['subject'], $post['email'], $post['name'], $post['trip'], $post['capcode'], $post['body'], $post['time'], $post['thumb'], $post['thumbwidth'], $post['thumbheight'], $post['file'], $post['filewidth'], $post['fileheight'], $post['filesize'], $post['filename'], $post['ip'], $post['embed']);
+ }
+ $temp .= $po->build(true) . '<hr/>';
+ }
+
+ if(!empty($temp))
+ $_body .= '<fieldset><legend>' .
+ sprintf(ngettext('%d result in', '%d results in', $query->rowCount()),
+ $query->rowCount()) . ' <a href="/' .
+ sprintf($config['board_path'], $board['uri']) . $config['file_index'] .
+ '">' .
+ sprintf($config['board_abbreviation'], $board['uri']) . ' - ' . $board['title'] .
+ '</a></legend>' . $temp . '</fieldset>';
+
+ $body .= '<hr/>';
+ if(!empty($_body))
+ $body .= $_body;
+ else
+ $body .= '<p style="text-align:center" class="unimportant">('._('No results.').')</p>';
+ }
+
+ echo Element('page.html', Array(
+ 'config'=>$config,
+ 'title'=>_('Search'),
+ 'body'=>'' . $body
+ ));
diff --git a/stylesheets/dark.css b/stylesheets/dark.css
index c4a6855c..0982c278 100644
--- a/stylesheets/dark.css
+++ b/stylesheets/dark.css
@@ -9,7 +9,7 @@ body {
font-size: 12px;
}
span.quote {
- color:#B8D962;
+ color:#B8D962;
}
h1 {
font-size: 20pt;
@@ -45,10 +45,10 @@ a.post_no:hover {
div.post.reply {
background: #333333;
border: #555555 1px solid;
- -webkit-border-radius: 10px;
- -khtml-border-radius: 10px;
- -moz-border-radius: 10px;
- border-radius: 10px;
+ -webkit-border-radius: 10px;
+ -khtml-border-radius: 10px;
+ -moz-border-radius: 10px;
+ border-radius: 10px;
}
div.post.reply.highlighted {
@@ -112,7 +112,7 @@ div.banner {
font-size: 12px;
}
div.banner a {
- color:#000;
+ color:#000;
}
input[type="submit"] {
background: #333333;
@@ -125,7 +125,7 @@ input[type="submit"]:hover {
color: #32DD72;
}
input[type="text"]:focus {
- border:#aaa 1px solid;
+ border:#aaa 1px solid;
}
p.fileinfo a:hover {
text-decoration: underline;
@@ -149,7 +149,7 @@ hr {
}
div.boardlist {
color: #999999;
- background-color: rgba(12%, 12%, 12%, 0.10);
+ background-color: rgba(12%, 12%, 12%, 0.10);
}
div.ban {
@@ -173,4 +173,4 @@ table.modlog tr th {
.desktop-style div.boardlist:nth-child(1):hover {
background-color: rgba(30%, 30%, 30%, 0.65);
-} \ No newline at end of file
+}
diff --git a/stylesheets/ferus.css b/stylesheets/ferus.css
index 6a1dfb59..5dbf11ed 100644
--- a/stylesheets/ferus.css
+++ b/stylesheets/ferus.css
@@ -1,13 +1,8 @@
-@font-face {
- font-family: Matrix;
- src: url(data:application/x-font-tff;base64,AAEAAAAOAIAAAwBgRkZUTTHZQ8IAALw8AAAAHE9TLzKQGR/2AAABaAAAAFZjbWFw5AjWjgAACJAAAAMaY3Z0IA0AJ3gAABNsAAABoGZwZ23UiPsUAAALrAAABRhnbHlm1ZlQ+QAAGJgAAJbMaGVhZOxJsogAAADsAAAANmhoZWEN1gd9AAABJAAAACRobXR4Go/MGQAAAcAAAAbQbG9jYflSH7IAABUMAAADjG1heHADwQX3AAABSAAAACBuYW1lMsi/8gAAr2QAAAKLcG9zdHFsGbAAALHwAAAKSXByZXA+daKoAAAQxAAAAqUAAQAAAAEAAIHcJmpfDzz1AB8IAAAAAADDEDQMAAAAAMMQNAz/9v6WBwAG3QAAAAgAAgAAAAAAAAABAAAG3f6WAAAIAP/2/0MHAAABAAAAAAAAAAAAAAAAAAABowABAAABxQBTAAQAWgAEAAIAEAAvADgAAAGoBRgAAwABAAEETAGQAAUACAWaBTMAAACyBZoFMwAAAeMAfQISCA8CAQUJAgECAQMDgAAArxAAIEgAAAAAAAAAAE1PTk8AQAAA8AMFMf6YAfYG3QFqoAAAk43UAAAAAAgAAQAAAAAABNUAAARMAAAETAAABEwAAARMAAAETAAABEwAAARMAAAETAAABEwAAARMAAAETAAABEwAAARMAAAETAAABEwAAARMAAAETAAABEwAAARMAAAETAAABEwAAARMAAAETAAABEwAAARMAAAETAAABEwAAARMAAAETAAABEwAAARMAAAETAAABEwAAARMAfQETADLBEwAzwRMAM0ETADLBEwA0QRMAc8ETAHNBEwBgwRMAOcETADLBEwBdwRMAM8ETAHJBEwA4wRMAMsETADJBEwAxwRMAMkETAD6BEwA4QRMAM8ETADLBEwAyQRMANEETAHNBEwBcQRMAM8ETADLBEwA5QRMAOUETADPBEwAzwRMAMsETADTBEwAywRMAM8ETADPBEwAywRMAMsETADNBEwBIQRMAM0ETADPBEwAywRMAM8ETADNBEwAzwRMAM0ETADRBEwAzQRMAM0ETADNBEwA0QRMAM0ETADbBEwA0QRMAM0ETADPBEwA5QRMAM0ETADfBEz/9gRMAYcETADLBEwA0wRMANAETADJBEwAzQRMAPoETADNBEwAzQRMASEETAEfBEwAzwRMASMETAC6BEwAzwRMAM0ETADPBEwAzwRMAM8ETADNBEwAzQRMANIETADNBEwAuARMANsETADNBEwAzwRMANEETAIXBEwA0QRMAPYETAAABEwAAARMAAAETAAABEwAAARMAAAETAAABEwAAARMAAAETAAABEwAAARMAAAETAAABEwAAARMAAAETAAABEwAAARMAAAETAAABEwAAARMAAAETAAABEwAAARMAAAETAAABEwAAARMAAAETAAABEwAAARMAAAETAAABEwAAARMAAAETAAABEwB9ARMANAETADHBEwAyQRMAMsETAIXBEwAzQRMAMsETACqBEwAywRMAM8ETADBBEwAzwRMAKoETP/2BEwA9gRMAMEETAGLBEwB3wRMAYcETADRBEwAugRMAckETAF3BEwB3QRMAM0ETADZBEwAFARMABQETAAUBEwAuARMAM8ETADPBEwAzwRMAM8ETADLBEwAzwRMANUETADTBEwAzwRMAM8ETADPBEwAywRMAM0ETADNBEwAzQRMAMsETADLBEwAzwRMAM0ETADNBEwAzQRMAM0ETADLBEwBEARMAN8ETADNBEwAzQRMAM0ETADLBEwA0QRMAM8ETADNBEwAywRMAMsETADLBEwAywRMAMsETADLBEwATARMANAETADNBEwAzQRMAM0ETADLBEwBDARMASEETACRBEwAZARMAM0ETADPBEwAzQRMAM0ETADNBEwAzQRMAMsETADBBEwAzQRMANIETADSBEwA0gRMAMsETADNBEwAzwRMAMsETAAABEwAAARMAAAETAAABEwAAARMAAAETAAABEwAAARMAAAETAAABEwAAARMAAAETAAABEwAAARMAAAETAAABEwAAARMAAAETAAABEwAAARMAAAETAAABEwAAARMAAAETAAABEwAAARMAAAETAAABEwAAARMAAAETAAABEwAAARMAAAETAAABEwAAARMAAAETAAABEwAAARMAAAETAAABEwAAARMAAAETAAABEwAAARMAAAETAAABEwAAARMAAAETAAABEwBIQRMAAAETAAABEwAAARMAAAETAAABEwAAARMAAAETAAABEwAAARMAAAETAAABEwAAARMAAAETAAABEwAAARMABkETAEjBEwAAARMAAAETAAABEwAAARMAAAETAAABEwAAARMAAAETAAABEwAAARMAAAETAAABEwAAARMAAAETAAABEwAzQRMAEwETAAABEwAAARMAAAETAAABEwAAARMAAAETAAABEwAAARMAAAETAAABEwAAARMAAAETADNBEwAzQRMAAAETAAABEwAAARMAAAETAAABEwAAARMAAAETAAABEwAAARMAAAETAAABEwAAARMAAAETAAABEwAAARMAAAETAAABEwAAARMAAAETAAABEwAAARMAAAETADLBEwAAARMAAAETAAABEwAAARMAM0ETADPBEwAAARMAAAETAAABEwAAARMAAAETAAABEwAAARMAAAETAAABEwAAARMAAAETAAABEwAAARMAAAETAAABEwAAARMAAAETAAABEwAAARMATsETAAABEwAAATVAO4E1QDuBNUBHQTVAOUE1QIXBNUBrATVAWIE1QD2BNUBOwRMAEwE1QE1AAABYgF3AXcA5QCgAKAAwQDBARkAeQDLAc0B1wBcAM0AzQDRACMAzwDBABQBLwC0AM8A9gDLAM8AyQCwARkAIwAjAYsAAAADAAAAAwAAABwAAQAAAAABEAADAAEAAAAcAAQA9AAAADgAIAAEABgBlALHAskC3QPAIBQgGiAeICIgJiAwIDohIiEmIgIiBiIPIhIiFSIaIh4iKyJIImAiZSXK8AP//wAAAAACxgLJAtgDwCATIBggHCAgICYgMCA5ISIhJiICIgYiDyIRIhUiGSIeIisiSCJgImQlyvAA//8AA/7S/tH+w/3h4Y/hjOGL4Yrhh+F+4Xbgj+CM37Hfrt+m36XfowAA35zfkN90313fWtv2EcEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAAAAAAAAAAAAAAAAAAAALoBuQAGAgoAAAAAAQAAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQA6ADsAPAA9AD4APwBAAEEAQgBDAEQARQBGAEcASABJAEoASwBMAE0ATgBPAFAAUQBSAFMAVABVAFYAVwBYAFkAWgBbAFwAXQBeAF8AYABhAGIAYwBkAGUAZgBnAGgAaQBqAGsAbABtAG4AbwBwAHEAcgBz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AT8BQAFBAUIBQwFEAUUAowCEAIUAvQCWAOgAhgCOAIsAnQCpAKQBRgCKAUcAgwCTAPIA8wCNAJcAiADDAN4A8QCeAKoA9QD0APYAogCtAMkAxwCuAGIAYwCQAGQAywBlAMgAygDPAMwAzQDOAOkAZgDTANAA0QCvAGcA8ACRANYA1ADVAGgA6wDtAIkAagBpAGsAbQBsAG4AoABvAHEAcAByAHMAdQB0AHYAdwDqAHgAegB5AHsAfQB8ALgAoQB/AH4AgACBAOwA7gC6AUgBSQFKAUsBTAFNAP0A/gFOAU8BUAFRAP8BAAFSAVMBVAEBAVUBVgFXAVgBWQFaAVsBXAFdAV4BXwFgAPgA+QFhAWIBYwFkAWUBZgFnAWgBaQFqAWsBbAFtAW4BbwFwAPoA1wFxAXIBcwF0AXUBdgF3AXgBeQF6AXsBfAF9AX4BfwDiAOMBgAGBAYIBgwGEAYUBhgGHAYgBiQGKAYsBjAGNAY4AsACxAY8BkAGRAZIBkwGUAZUBlgGXAZgA+wD8AOQA5QGZAZoBmwGcAZ0BngGfAaABoQGiAaMBpAGlAaYBpwGoAakBqgGrAawBrQGuALsBrwGwAbEBsgDmAOcBswG0AbUBtgG3AbgBuQG6AbsBvAG9Ab4BvwHAAcEBwgHDAcQBxQCmAcYBxwDYAOEA2gDbANwA3QDgANkA3wCbALIAswC2ALcAxAC0ALUAxQCCAMIAhwCrAMYAvgC/AIwAnwCYAKgAmgCZAO8AvAClAJIAnACnAI8AlACVALkA0gDAAMEByAZnbHlwaDEGZ2x5cGgyB3VuaTAwMDAHdW5pMDAwMQd1bmkwMDAyB3VuaTAwMDMHdW5pMDAwNAd1bmkwMDA1B3VuaTAwMDYHdW5pMDAwNwd1bmkwMDA4B3VuaTAwMDkHdW5pMDAwQQd1bmkwMDBCB3VuaTAwMEMHdW5pMDAwRAd1bmkwMDBFB3VuaTAwMEYHdW5pMDAxMAd1bmkwMDExB3VuaTAwMTIHdW5pMDAxMwd1bmkwMDE0B3VuaTAwMTUHdW5pMDAxNgd1bmkwMDE3B3VuaTAwMTgHdW5pMDAxOQd1bmkwMDFBB3VuaTAwMUIHdW5pMDAxQwd1bmkwMDFEB3VuaTAwMUUHdW5pMDAxRgd1bmkwMDdGB3VuaTAwODAHdW5pMDA4MQd1bmkwMDgyB3VuaTAwODMHdW5pMDA4NAd1bmkwMDg1B3VuaTAwODYHdW5pMDA4Nwd1bmkwMDg4B3VuaTAwODkHdW5pMDA4QQd1bmkwMDhCB3VuaTAwOEMHdW5pMDA4RAd1bmkwMDhFB3VuaTAwOEYHdW5pMDA5MAd1bmkwMDkxB3VuaTAwOTIHdW5pMDA5Mwd1bmkwMDk0B3VuaTAwOTUHdW5pMDA5Ngd1bmkwMDk3B3VuaTAwOTgHdW5pMDA5OQd1bmkwMDlBB3VuaTAwOUIHdW5pMDA5Qwd1bmkwMDlEB3VuaTAwOUUHdW5pMDA5RgduYnNwYWNlCXNmdGh5cGhlbglvdmVyc2NvcmUHQW1hY3JvbgdhbWFjcm9uBkFicmV2ZQZhYnJldmUHQW9nb25lawdhb2dvbmVrC0NjaXJjdW1mbGV4C2NjaXJjdW1mbGV4CkNkb3RhY2NlbnQKY2RvdGFjY2VudAZEY2Fyb24GZGNhcm9uBkRjcm9hdAdFbWFjcm9uB2VtYWNyb24GRWJyZXZlBmVicmV2ZQpFZG90YWNjZW50CmVkb3RhY2NlbnQHRW9nb25lawdlb2dvbmVrBkVjYXJvbgZlY2Fyb24LR2NpcmN1bWZsZXgLZ2NpcmN1bWZsZXgKR2RvdGFjY2VudApnZG90YWNjZW50DEdjb21tYWFjY2VudAxnY29tbWFhY2NlbnQLSGNpcmN1bWZsZXgLaGNpcmN1bWZsZXgESGJhcgRoYmFyBkl0aWxkZQZpdGlsZGUHSW1hY3JvbgdpbWFjcm9uBklicmV2ZQZpYnJldmUHSW9nb25lawdpb2dvbmVrAklKAmlqC0pjaXJjdW1mbGV4C2pjaXJjdW1mbGV4DEtjb21tYWFjY2VudAxrY29tbWFhY2NlbnQMa2dyZWVubGFuZGljBkxhY3V0ZQZsYWN1dGUMTGNvbW1hYWNjZW50DGxjb21tYWFjY2VudAZMY2Fyb24GbGNhcm9uBExkb3QEbGRvdAZOYWN1dGUGbmFjdXRlDE5jb21tYWFjY2VudAxuY29tbWFhY2NlbnQGTmNhcm9uBm5jYXJvbgtuYXBvc3Ryb3BoZQNFbmcDZW5nB09tYWNyb24Hb21hY3JvbgZPYnJldmUGb2JyZXZlDU9odW5nYXJ1bWxhdXQNb2h1bmdhcnVtbGF1dAZSYWN1dGUGcmFjdXRlDFJjb21tYWFjY2VudAxyY29tbWFhY2NlbnQGUmNhcm9uBnJjYXJvbgZTYWN1dGUGc2FjdXRlC1NjaXJjdW1mbGV4C3NjaXJjdW1mbGV4DFRjb21tYWFjY2VudAx0Y29tbWFhY2NlbnQGVGNhcm9uBnRjYXJvbgRUYmFyBHRiYXIGVXRpbGRlBnV0aWxkZQdVbWFjcm9uB3VtYWNyb24GVWJyZXZlBnVicmV2ZQVVcmluZwV1cmluZw1VaHVuZ2FydW1sYXV0DXVodW5nYXJ1bWxhdXQHVW9nb25lawd1b2dvbmVrC1djaXJjdW1mbGV4C3djaXJjdW1mbGV4C1ljaXJjdW1mbGV4C3ljaXJjdW1mbGV4BlphY3V0ZQZ6YWN1dGUKWmRvdGFjY2VudAp6ZG90YWNjZW50BWxvbmdzB3VuaTAxODAHdW5pMDE4MQd1bmkwMTgyB3VuaTAxODMHdW5pMDE4NAd1bmkwMTg1B3VuaTAxODYHdW5pMDE4Nwd1bmkwMTg4B3VuaTAxODkHdW5pMDE4QQd1bmkwMThCB3VuaTAxOEMHdW5pMDE4RAd1bmkwMThFB3VuaTAxOEYHdW5pMDE5MAd1bmkwMTkxB3VuaTAxOTMHdW5pMDE5NAxmb3Vyc3VwZXJpb3IAAAAAAAABAAAAAML+SiAAAAAAq8rFpAAAAADDEDP9);
-}
-
body {
background: #050505;
color: #00FF00;
- font-family: Matrix;
- font-size: 13.3px;
+ font-family: monospace;
+ font-size: 11px;
}
h1 {
font-size: 20pt;
@@ -24,11 +19,11 @@ div.title p {
a:link, a:visited, p.intro a.email span.name {
color: #16C816;
text-decoration: underline;
- font-family: Matrix;
+ font-family: monospace;
}
a:link:hover, a:visited:hover {
color: #003C00;
- font-family: Matrix;;
+ font-family: monospace;;
text-decoration: underline overline;
}
a.post_no {
@@ -58,7 +53,7 @@ div.post.reply div.body a:link:hover, div.post.reply div.body a:visited:hover {
}
p.intro span.subject {
font-size: 12px;
- font-family: Matrix;
+ font-family: monospace;
color: #446655;
font-weight: 800;
}
@@ -72,7 +67,7 @@ p.intro a.capcode, p.intro a.nametag {
}
p.intro a.email, p.intro a.email span.name, p.intro a.email:hover, p.intro a.email:hover span.name {
color: #00CC64;
- font-family: Matrix;
+ font-family: monospace;
}
input[type="text"], textarea, select {
background: #333333;
@@ -80,7 +75,7 @@ input[type="text"], textarea, select {
border: #666666 1px solid;
padding-left: 5px;
padding-right: -5px;
- font-family: Matrix;
+ font-family: monospace;
font-size: 10pt;
}
input[type="password"] {
diff --git a/stylesheets/futaba+vichan.css b/stylesheets/futaba+vichan.css
index be0ab672..adf9baef 100644
--- a/stylesheets/futaba+vichan.css
+++ b/stylesheets/futaba+vichan.css
@@ -86,3 +86,19 @@ unimportant, .unimportant * {
table.modlog tr th {
background: #EA8;
}
+div.boardlist {
+ background-color: rgba(90%,90%,90%,0.2);
+}
+div.boardlist .sub {
+ background: none;
+}
+div.boardlist.bottom {
+ background-color:transparent;
+}
+
+.desktop-style div.boardlist:nth-child(1) {
+ text-shadow: #fff 1px 1px 1px, #fff -1px -1px 1px;
+}
+.desktop-style div.boardlist:nth-child(1):hover {
+ background-color: rgba(90%, 90%, 90%, 0.55);
+}
diff --git a/stylesheets/futaba.css b/stylesheets/futaba.css
index d30cb938..2a30bc00 100644
--- a/stylesheets/futaba.css
+++ b/stylesheets/futaba.css
@@ -75,3 +75,12 @@ unimportant, .unimportant * {
table.modlog tr th {
background: #EA8;
}
+
+.desktop-style div.boardlist:nth-child(1) {
+ text-shadow: #fff 1px 1px 1px, #fff -1px -1px 1px;
+}
+
+
+.desktop-style div.boardlist:nth-child(1):hover {
+ background-color: rgba(90%, 90%, 90%, 0.55);
+}
diff --git a/stylesheets/img/arrow.png b/stylesheets/img/arrow.png
new file mode 100644
index 00000000..f7403695
--- /dev/null
+++ b/stylesheets/img/arrow.png
Binary files differ
diff --git a/stylesheets/miku.css b/stylesheets/miku.css
index 23fb1d9d..2f55b48c 100644
--- a/stylesheets/miku.css
+++ b/stylesheets/miku.css
@@ -8,7 +8,7 @@ body {
a:link, a:visited {
text-decoration: none;
- color: #0093AB;
+ color: #00637B;
}
a:link:hover, a:visited:hover {
@@ -54,7 +54,7 @@ p.intro span.name {
}
div.post.reply.highlighted {
- background: #9988EE;
+ background: #a9d8ff;
}
div.post.reply {
@@ -84,4 +84,14 @@ hr {
div.boardlist {
color: #0093AB;
+ background-color: rgba(65%, 85%, 95%, 0.2);
+}
+
+.desktop-style div.boardlist:nth-child(1) {
+ text-shadow: #D2FFEE 1px 1px 1px, #D2FFEE -1px -1px 1px;
+}
+
+
+.desktop-style div.boardlist:nth-child(1):hover {
+ background-color: rgba(70%, 95%, 100%, 0.45);
}
diff --git a/stylesheets/style.css b/stylesheets/style.css
index c0430b7c..fbb5370f 100644
--- a/stylesheets/style.css
+++ b/stylesheets/style.css
@@ -285,6 +285,7 @@ span.spoiler:hover, div.post.reply div.body span.spoiler:hover a {
div.styles {
float: right;
padding-bottom: 20px;
+
}
div.styles a {
margin: 0 10px;
@@ -404,8 +405,59 @@ table.mod.config-editor td {
table.mod.config-editor input[type="text"] {
width: 98%;
}
+.desktop-style div.boardlist:nth-child(1) {
+ position: fixed;
+ top: 0px;
+ left: 0px;
+ right: 0px;
+ /*text-shadow: white 1px 0px 6px, white 1px 0px 6px, black 1px 0px 3px;*/
+ margin-top: 0px;
+ z-index: 30;
+}
+.desktop-style div.boardlist:nth-child(1):hover {
+ background-color: rgba(90%, 90%, 90%, 0.6);
+}
+
+.desktop-style body {
+ padding-top: 20px;
+}
+
+.desktop-style .sub {
+ background: inherit;
+}
+.desktop-style .sub .sub {
+ display: inline-block;
+ text-indent: -9000px;
+ width: 7px;
+ background: url('img/arrow.png') right center no-repeat;
+}
+.desktop-style .sub .sub:hover, .desktop-style .sub .sub.hover {
+ display: inline;
+ text-indent: 0px;
+ background: inherit;
+}
+
+#attention_bar {
+ height: 1.5em;
+ width: 100%;
+ text-align: center;
+}
+#attention_bar_form {
+ display: none;
+ padding: 0;
+ margin: 0;
+}
+#attention_bar_input {
+ width: 100%;
+ padding: 0;
+ margin: 0;
+ text-align: center;
+}
+#attention_bar:hover {
+ background-color: #fff;
+ opacity: 0.8;
+}
p.intro.thread-hidden {
margin: 0px;
padding: 0px;
}
-
diff --git a/stylesheets/testorange.css b/stylesheets/testorange.css
index 7b1ce0a6..c7250de4 100644
--- a/stylesheets/testorange.css
+++ b/stylesheets/testorange.css
@@ -12,6 +12,19 @@ body {
background-position: right bottom, 0% 0%, 0% 0%;
}
+.desktop-style .bl-menu{
+background-image: url('img/testorange_bg.gif');
+ background-repeat: repeat;
+}
+
+.boardlist .board a {
+background-image: url('img/testorange_bg.gif');
+ background-repeat: repeat;
+}
+
+
+
+
a:link, a:visited, div.post.reply div.body a {
color:#ff9100;
text-decoration: none;
@@ -22,7 +35,10 @@ a:link:hover, a:visited:hover, div.post.reply div.body a:hover {
a.email span.name {
color:#ff9100 !important;
+}
+div.post.reply.highlighted {
+background: black;
}
input {
@@ -150,11 +166,10 @@ span.trip, .postertrip {
.omittedposts {
color:#707070;
}
-.reply {
+div.post.reply {
padding: 5px;
border: 1px #707070 solid !important;
- background: #282828 !important;
-
+ background: #282828;
-webkit-border-radius: 10px;
-khtml-border-radius: 10px;
-moz-border-radius: 10px;
@@ -164,45 +179,33 @@ span.trip, .postertrip {
background-color: #1e1e1e;
color: #bebebe;
}
-.doubledash {
- vertical-align:top;
- clear:both;
- float:left;
-}
-.replytitle {
- font-size: 1.2em;
- color:#fff;
- font-weight:800;
-}
-.commentpostername {
- color: #fff;
- font-weight:800;
-}
-.thumbnailmsg {
- font-size: small;
- color: #bebebe;
-}
form table th, div.banner, div.pages, .replymode, .postblock, .passvalid, .catalogmode {
background: #ff9100 url('img/testorange_f_bg.gif') repeat-x !important;
}
-div.pages {
+div.pages, div.pages a {
color: black;
border: 0;
}
-
-.abbrev {
- color:#707070;
+div.boardlist {
+ background-color: rgba(5%,5%,5%,0.2);
}
-.highlight {
- background:#000;
- border: 1px dashed #ff9100;
+div.boardlist.bottom {
+ background-color:transparent;
}
-#watchedthreads {
- background-color: #282828 !important;
+.desktop-style div.boardlist:nth-child(1) {
+ text-shadow: #000 1px 1px 1px, #500 -1px -1px 1px;
}
-.reflinkpreview {
- background-color: #282828 !important;
+
+.desktop-style div.boardlist:nth-child(1):hover {
+ background-color: rgba(0%, 0%, 0%, 0.45);
}
+p.intro span.subject {
+ color:#ee8100;
+}
+
+span.quote {
+ color: #a8c952;
+}
diff --git a/stylesheets/wasabi.css b/stylesheets/wasabi.css
index a080a12a..3da974c3 100644
--- a/stylesheets/wasabi.css
+++ b/stylesheets/wasabi.css
@@ -345,6 +345,8 @@ div.boardlist.bottom {
}
div.boardlist a {
text-decoration: none;
+ color:#ffff22;
+ text-shadow: #000 1px 1px 1px, #000 -1px -1px 1px, #950000 1px 1px 2px, #009500 -1px -1px 2px;
}
div.report {
color: #333;
@@ -389,3 +391,12 @@ div.blotter {
font-weight: bold;
text-align: center;
}
+
+.desktop-style div.boardlist:nth-child(1) {
+
+}
+
+
+.desktop-style div.boardlist:nth-child(1):hover {
+ background-color: rgba(100%, 100%, 30%, 0.35);
+}
diff --git a/templates/attention_bar.html b/templates/attention_bar.html
new file mode 100644
index 00000000..35f6b8f0
--- /dev/null
+++ b/templates/attention_bar.html
@@ -0,0 +1,6 @@
+{% if config.attention_bar %}
+<div id="attention_bar"></div>
+<form method="post" action="{{ config.root }}attentionbar.php" id="attention_bar_form">
+ <input id="attention_bar_input" name="text" value="" type="text">
+</form>
+{% endif %}
diff --git a/templates/boardlist.html b/templates/boardlist.html
new file mode 100644
index 00000000..62646845
--- /dev/null
+++ b/templates/boardlist.html
@@ -0,0 +1 @@
+I'm your overboard boardlist. You can put here anything and I reside in templates/boardlist.html
diff --git a/templates/generic_page.html b/templates/generic_page.html
index 8f608a6a..70cb15aa 100644
--- a/templates/generic_page.html
+++ b/templates/generic_page.html
@@ -20,6 +20,7 @@
</div>
</header>
+ {% include 'attention_bar.html' %}
{% include 'post_form.html' %}
{% if config.global_message %}<hr /><div class="blotter">{{ config.global_message }}</div>{% endif %}
diff --git a/templates/header.html b/templates/header.html
index 6929fdca..0f4bd260 100644
--- a/templates/header.html
+++ b/templates/header.html
@@ -40,4 +40,4 @@
.recaptchatable, #recaptcha_area tr, #recaptcha_area td, #recaptcha_area th {
padding: 0 !important;
}
- {% endraw %}</style>{% endif %} \ No newline at end of file
+ {% endraw %}</style>{% endif %}
diff --git a/templates/index.html b/templates/index.html
index e32ac253..12150d0b 100644
--- a/templates/index.html
+++ b/templates/index.html
@@ -2,6 +2,18 @@
<html>
<head>
<meta charset="utf-8">
+
+ <script type="text/javascript">
+ {% if config.quick_reply %}
+ var new_reply_string = "{{ config.button_reply }}";
+ {% endif %}
+ {% if not no_post_form %}
+ var active_page = "index";
+ {% else %}
+ var active_page = "ukko";
+ {% endif %}
+ </script>
+
{% include 'header.html' %}
<title>{{ board.url }} - {{ board.title|e }}</title>
</head>
@@ -19,8 +31,13 @@
</div>
</header>
- {% include 'post_form.html' %}
-
+ {% include 'attention_bar.html' %}
+ {% if not no_post_form %}
+ {% include 'post_form.html' %}
+ {% else %}
+ {% include 'boardlist.html' %}
+ {% endif %}
+
{% if config.global_message %}<hr /><div class="blotter">{{ config.global_message }}</div>{% endif %}
<hr />
<form name="postcontrols" action="{{ config.post_url }}" method="post">
diff --git a/templates/post_form.html b/templates/post_form.html
index 4d7a37b7..12f1186b 100644
--- a/templates/post_form.html
+++ b/templates/post_form.html
@@ -27,24 +27,22 @@
<td>
<input type="text" name="email" size="25" maxlength="40" autocomplete="off">
{{ antibot.html() }}
+ {% if not (not (config.field_disable_subject or (id and config.field_disable_reply_subject)) or (mod and post.mod|hasPermission(config.mod.bypass_field_disable, board.uri))) %}
+ <input accesskey="s" style="margin-left:2px;" type="submit" name="post" value="{% if id %}{{ config.button_reply }}{% else %}{{ config.button_newtopic }}{% endif %}" />{% if config.spoiler_images %} <input id="spoiler" name="spoiler" type="checkbox"> <label for="spoiler">{% trans %}Spoiler Image{% endtrans %}</label>{% endif %}
+ {% endif %}
</td>
</tr>{% endif %}
- <tr>
- {% if not (config.field_disable_subject or (id and config.field_disable_reply_subject)) or (mod and post.mod|hasPermission(config.mod.bypass_field_disable, board.uri)) %}<th>
+ {% if not (config.field_disable_subject or (id and config.field_disable_reply_subject)) or (mod and post.mod|hasPermission(config.mod.bypass_field_disable, board.uri)) %}<tr>
+ <th>
{% trans %}Subject{% endtrans %}
{{ antibot.html() }}
</th>
<td>
<input style="float:left;" type="text" name="subject" size="25" maxlength="100" autocomplete="off">
- {% else %}<th>
- {% trans %}Submit{% endtrans %}
- {{ antibot.html() }}
- </th>
- <td>
- {% endif %}
<input accesskey="s" style="margin-left:2px;" type="submit" name="post" value="{% if id %}{{ config.button_reply }}{% else %}{{ config.button_newtopic }}{% endif %}" />{% if config.spoiler_images %} <input id="spoiler" name="spoiler" type="checkbox"> <label for="spoiler">{% trans %}Spoiler Image{% endtrans %}</label>{% endif %}
</td>
</tr>
+ {% endif %}
<tr>
<th>
{% trans %}Comment{% endtrans %}
@@ -53,6 +51,11 @@
<td>
<textarea name="body" id="body" rows="5" cols="35"></textarea>
{{ antibot.html() }}
+ {% if not (not (config.field_disable_subject or (id and config.field_disable_reply_subject)) or (mod and post.mod|hasPermission(config.mod.bypass_field_disable, board.uri))) %}
+ {% if not (not config.field_disable_email or (mod and post.mod|hasPermission(config.mod.bypass_field_disable, board.uri))) %}
+ <input accesskey="s" style="margin-left:2px;" type="submit" name="post" value="{% if id %}{{ config.button_reply }}{% else %}{{ config.button_newtopic }}{% endif %}" />{% if config.spoiler_images %} <input id="spoiler" name="spoiler" type="checkbox"> <label for="spoiler">{% trans %}Spoiler Image{% endtrans %}</label>{% endif %}
+ {% endif %}
+ {% endif %}
</td>
</tr>
{% if config.recaptcha %}
diff --git a/templates/post_thread.html b/templates/post_thread.html
index 21add308..a24d7557 100644
--- a/templates/post_thread.html
+++ b/templates/post_thread.html
@@ -1,7 +1,7 @@
{% filter remove_whitespace %}
{# tabs and new lines will be ignored #}
-<div id="thread_{{ post.id }}">
+<div id="thread_{{ post.id }}" data-board="{{ board.uri }}">
{% if post.embed %}
{{ post.embed }}
diff --git a/templates/search_form.html b/templates/search_form.html
new file mode 100644
index 00000000..4c8bd077
--- /dev/null
+++ b/templates/search_form.html
@@ -0,0 +1,19 @@
+<div class="ban">
+ <h2>{% trans %}Search{% endtrans %}</h2>
+ <form style="display:inline" action="" method="get">
+ <p>
+ <label style="display:inline" for="search">{% trans %}Phrase:{% endtrans %}</label>
+ <input id="search" name="search" type="text" size="40" value="{{ search }}">
+ <select name="board">
+ <option value="none">{% trans %}Select board{% endtrans %}&hellip;</option>
+ {% for b in boards %}
+ <option value="{{ b }}"{% if b == board %} selected{% endif %}>/{{ b }}/</option>
+ {% endfor %}
+ </select>
+ <input type="submit" value="{% trans %}Search{% endtrans %}" />
+ </p>
+ </form>
+ <p style="font-size:8pt;margin:5px">
+ {% trans %}Search is case-insensitive and based on keywords. To match exact phrases, use "quotes". Use an asterisk (*) for wildcard.</p><p style="font-size:8pt;margin:5px">You may apply the following filters to your searches: <strong>id</strong>, <strong>thread</strong>, <strong>subject</strong>, and <strong>name</strong>. To apply a filter, simply add to your query, for example, <em>name:Anonymous</em> or <em>subject:"Some Thread"</em>. Wildcards cannot be used in filters.{% endtrans %}
+ </p>
+</div>
diff --git a/templates/themes/ukko/info.php b/templates/themes/ukko/info.php
new file mode 100644
index 00000000..34d59d4e
--- /dev/null
+++ b/templates/themes/ukko/info.php
@@ -0,0 +1,53 @@
+<?php
+ $theme = Array();
+
+ // Theme name
+ $theme['name'] = 'Ukko';
+ // Description (you can use Tinyboard markup here)
+ $theme['description'] = 'Board with threads and messages from all boards';
+ $theme['version'] = 'v0.1';
+
+ // Theme configuration
+ $theme['config'] = Array();
+
+ $theme['config'][] = Array(
+ 'title' => 'Board name',
+ 'name' => 'title',
+ 'type' => 'text',
+ 'default' => 'Ukko'
+ );
+ $theme['config'][] = Array(
+ 'title' => 'Board URI',
+ 'name' => 'uri',
+ 'type' => 'text',
+ 'comment' => '(ukko for example)'
+ );
+ $theme['config'][] = Array(
+ 'title' => 'Subtitle',
+ 'name' => 'subtitle',
+ 'type' => 'text',
+ 'comment' => '(%s = thread limit. for example "%s freshly bumped threads")'
+ );
+ $theme['config'][] = Array(
+ 'title' => 'Excluded boards',
+ 'name' => 'exclude',
+ 'type' => 'text',
+ 'comment' => '(space seperated)'
+ );
+ $theme['config'][] = Array(
+ 'title' => 'Number of threads',
+ 'name' => 'thread_limit',
+ 'type' => 'text',
+ 'default' => '15',
+ );
+ // Unique function name for building everything
+ $theme['build_function'] = 'ukko_build';
+ $theme['install_callback'] = 'ukko_install';
+
+ if(!function_exists('ukko_install')) {
+ function ukko_install($settings) {
+ if (!file_exists($settings['uri']))
+ @mkdir($settings['uri'], 0777) or error("Couldn't create " . $settings['uri'] . ". Check permissions.", true);
+ }
+ }
+
diff --git a/templates/themes/ukko/theme.php b/templates/themes/ukko/theme.php
new file mode 100644
index 00000000..1682b4ec
--- /dev/null
+++ b/templates/themes/ukko/theme.php
@@ -0,0 +1,111 @@
+<?php
+ require 'info.php';
+
+ function ukko_build($action, $settings) {
+ $ukko = new ukko();
+ $ukko->settings = $settings;
+ $ukko->build();
+ }
+
+ class ukko {
+ public $settings;
+ public function build($mod = false) {
+ global $config;
+ $boards = listBoards();
+
+ $body = '';
+ $overflow = array();
+ $board = array(
+ 'url' => $this->settings['uri'],
+ 'name' => $this->settings['title'],
+ 'title' => sprintf($this->settings['subtitle'], $this->settings['thread_limit'])
+ );
+
+ $query = '';
+ foreach($boards as &$_board) {
+ if(in_array($_board['uri'], explode(' ', $this->settings['exclude'])))
+ continue;
+ $query .= sprintf("SELECT *, '%s' AS `board` FROM ``posts_%s`` WHERE `thread` IS NULL UNION ALL ", $_board['uri'], $_board['uri']);
+ }
+ $query = preg_replace('/UNION ALL $/', 'ORDER BY `bump` DESC', $query);
+ $query = query($query) or error(db_error());
+
+ $count = 0;
+ $threads = array();
+ while($post = $query->fetch()) {
+
+ if(!isset($threads[$post['board']])) {
+ $threads[$post['board']] = 1;
+ } else {
+ $threads[$post['board']] += 1;
+ }
+
+ if($count < $this->settings['thread_limit']) {
+ openBoard($post['board']);
+ $thread = new Thread(
+ $post['id'], $post['subject'], $post['email'], $post['name'], $post['trip'], $post['capcode'], $post['body'], $post['time'],
+ $post['thumb'], $post['thumbwidth'], $post['thumbheight'], $post['file'], $post['filewidth'], $post['fileheight'], $post['filesize'],
+ $post['filename'], $post['ip'], $post['sticky'], $post['locked'], $post['sage'], $post['embed'], $mod ? '?/' : $config['root'], $mod
+ );
+
+ $posts = prepare(sprintf("SELECT * FROM ``posts_%s`` WHERE `thread` = :id ORDER BY `id` DESC LIMIT :limit", $post['board']));
+ $posts->bindValue(':id', $post['id']);
+ $posts->bindValue(':limit', ($post['sticky'] ? $config['threads_preview_sticky'] : $config['threads_preview']), PDO::PARAM_INT);
+ $posts->execute() or error(db_error($posts));
+
+ $num_images = 0;
+ while ($po = $posts->fetch()) {
+ if ($po['file'])
+ $num_images++;
+
+ $thread->add(new Post(
+ $po['id'], $post['id'], $po['subject'], $po['email'], $po['name'], $po['trip'], $po['capcode'], $po['body'], $po['time'],
+ $po['thumb'], $po['thumbwidth'], $po['thumbheight'], $po['file'], $po['filewidth'], $po['fileheight'], $po['filesize'],
+ $po['filename'], $po['ip'], $po['embed'], $mod ? '?/' : $config['root'], $mod)
+ );
+
+ }
+ if ($posts->rowCount() == ($post['sticky'] ? $config['threads_preview_sticky'] : $config['threads_preview'])) {
+ $ct = prepare(sprintf("SELECT COUNT(`id`) as `num` FROM ``posts_%s`` WHERE `thread` = :thread UNION ALL SELECT COUNT(`id`) FROM `posts_%s` WHERE `file` IS NOT NULL AND `thread` = :thread", $post['board'], $post['board']));
+ $ct->bindValue(':thread', $post['id'], PDO::PARAM_INT);
+ $ct->execute() or error(db_error($count));
+
+ $c = $ct->fetch();
+ $thread->omitted = $c['num'] - ($post['sticky'] ? $config['threads_preview_sticky'] : $config['threads_preview']);
+
+ $c = $ct->fetch();
+ $thread->omitted_images = $c['num'] - $num_images;
+ }
+
+
+ $thread->posts = array_reverse($thread->posts);
+ $body .= '<h2><a href="' . $config['root'] . $post['board'] . '">/' . $post['board'] . '/</a></h2>';
+ $body .= $thread->build(true);
+ } else {
+ $page = 'index';
+ if(floor($threads[$post['board']] / $config['threads_per_page']) > 0) {
+ $page = floor($threads[$post['board']] / $config['threads_per_page']) + 1;
+ }
+ $overflow[] = array('id' => $post['id'], 'board' => $post['board'], 'page' => $page . '.html');
+ }
+
+ $count += 1;
+ }
+
+ $body .= '<script> var overflow = ' . json_encode($overflow) . '</script>';
+ $body .= '<script type="text/javascript" src="ukko.js"></script>';
+
+ file_write($this->settings['uri'] . '/index.html', Element('index.html', array(
+ 'config' => $config,
+ 'board' => $board,
+ 'no_post_form' => true,
+ 'body' => $body,
+ 'boardlist' => createBoardlist($mod)
+ )));
+
+ file_write($this->settings['uri'] . '/ukko.js', Element('themes/ukko/ukko.js', array()));
+ }
+
+ };
+
+?>
diff --git a/templates/themes/ukko/thumb.png b/templates/themes/ukko/thumb.png
new file mode 100644
index 00000000..49c4237b
--- /dev/null
+++ b/templates/themes/ukko/thumb.png
Binary files differ
diff --git a/templates/themes/ukko/ukko.js b/templates/themes/ukko/ukko.js
new file mode 100644
index 00000000..4a36b394
--- /dev/null
+++ b/templates/themes/ukko/ukko.js
@@ -0,0 +1,115 @@
+(function(){
+
+var cache = new Array(),
+ thread = false,
+ loading = false,
+ ukkotimer = false;
+if (localStorage.hiddenboards !== null) {
+ localStorage.hiddenboards = "{}";
+}
+
+// Load data from HTML5 localStorage
+var hiddenboards = JSON.parse(localStorage.hiddenboards);
+
+var storeboards = function() {
+ localStorage.hiddenboards = JSON.stringify(hiddenboards);
+};
+
+$(document).ready(function() {
+ var addukkohide = function() {
+ var ukkohide = $('<a href="javascript:void(0);" class="unimportant ukkohide"></a>');
+ var board = $(this).next().data("board");
+ var hr = $("<hr />");
+
+ $(this).append(ukkohide);
+ $(this).append(hr);
+
+ if (hiddenboards[board] !== true) {
+ ukkohide.html(_("(hide threads from this board)"));
+ hr.hide();
+ }
+ else {
+ ukkohide.html(_("(show threads from this board)"));
+ $(this).next().hide();
+ }
+ ukkohide.click(function() {
+ hiddenboards[board] = (hiddenboards[board] !== true);
+ if (hiddenboards[board] !== true) {
+ $('[data-board="'+board+'"]:not([data-cached="yes"])').show().prev().
+ find('.ukkohide').html(_("(hide threads from this board)")).
+ parent().find('hr').hide();
+ }
+ else {
+ $('[data-board="'+board+'"]:not([data-cached="yes"])').hide().prev().
+ find('.ukkohide').html(_("(show threads from this board)"))
+ .parent().find('hr').show();
+ }
+ storeboards();
+ return false;
+ });
+
+ };
+ $("h2").each(addukkohide);
+
+ $('.pages').hide();
+ var loadnext = function() {
+ if (overflow.length == 0) {
+ $('.pages').show().html(_("No more threads to display"));
+ }
+ while($(window).scrollTop() + $(window).height() + 1000 > $(document).height() && !loading && overflow.length > 0) {
+ var page = '../' + overflow[0].board + '/' + overflow[0].page;
+ thread = $('div#thread_' + overflow[0].id + '[data-board="' + overflow[0].board + '"]');
+ if (thread.length > 0 && thread.attr("data-cached") !== 'yes') { // already present
+ overflow.shift();
+ continue;
+ }
+
+ var boardheader = $('<h2><a href="/' + overflow[0].board + '/">/' + overflow[0].board + '/</a> </h2>');
+
+ if($.inArray(page, cache) != -1) {
+ if (thread.length > 0) {
+ $('div[id*="thread_"]').last().after(thread.attr('data-board', overflow[0].board).attr("data-cached", "no").css('display', 'block'));
+ boardheader.insertBefore(thread);
+ addukkohide.call(boardheader);
+ $(document).trigger('new_post', thread);
+ }
+ overflow.shift();
+ } else {
+ loading = true;
+ $('.pages').show().html(_("Loading..."));
+ $.get(page, function(data) {
+ cache.push(page);
+
+ $(data).find('div[id*="thread_"]').each(function() {
+ var checkout = $(this).attr('id').replace('thread_', '');
+ if ($('div#thread_' + checkout + '[data-board="' + overflow[0].board + '"]').length == 0) {
+ $('form[name="postcontrols"]').prepend($(this).css('display', 'none').attr("data-cached", "yes").attr('data-board', overflow[0].board));
+ }
+ });
+
+ thread = $('div#thread_' + overflow[0].id + '[data-board="' + overflow[0].board + '"][data-cached="yes"]');
+
+ if(thread.length > 0) {
+ $('div[id*="thread_"]').last().after(thread.attr('data-board', overflow[0].board).attr("data-cached", "no").css('display', 'block'));
+ boardheader.insertBefore(thread);
+ addukkohide.call(boardheader);
+ $(document).trigger('new_post', thread);
+ }
+ overflow.shift();
+
+ loading = false;
+ $('.pages').hide().html("");
+ });
+ break;
+ }
+ }
+ clearTimeout(ukkotimer);
+ ukkotimer = setTimeout(loadnext, 1000);
+ };
+
+ $(window).on('scroll', loadnext);
+
+ ukkotimer = setTimeout(loadnext, 1000);
+});
+
+})();
diff --git a/templates/thread.html b/templates/thread.html
index 97f8a3db..7fe60a39 100644
--- a/templates/thread.html
+++ b/templates/thread.html
@@ -2,6 +2,11 @@
<html>
<head>
<meta charset="utf-8">
+
+ <script type="text/javascript">
+ var active_page = "thread";
+ </script>
+
{% include 'header.html' %}
<title>{{ board.url }} - {% if config.thread_subject_in_title and thread.subject %}{{ thread.subject }}{% else %}{{ board.title|e }}{% endif %}</title>
</head>
@@ -21,6 +26,8 @@
<div class="banner">{% trans %}Posting mode: Reply{% endtrans %} <a class="unimportant" href="{{ return }}">[{% trans %}Return{% endtrans %}]</a></div>
+ {% include 'attention_bar.html' %}
+
{% include 'post_form.html' %}
{% if config.global_message %}<hr /><div class="blotter">{{ config.global_message }}</div>{% endif %}
@@ -42,4 +49,4 @@
ready();
{% endraw %}</script>
</body>
-</html> \ No newline at end of file
+</html>
diff --git a/tools/benchmark.php b/tools/benchmark.php
new file mode 100644
index 00000000..8c97364c
--- /dev/null
+++ b/tools/benchmark.php
@@ -0,0 +1,52 @@
+#!/usr/bin/php
+<?php
+/*
+ * benchmark.php - benchmarks thumbnailing methods
+ *
+ */
+
+require dirname(__FILE__) . '/inc/cli.php';
+require 'inc/image.php';
+
+// move back to this directory
+chdir(dirname(__FILE__));
+
+if(count($argv) != 2)
+ die("Usage: {$argv[0]} [file]\n");
+
+$file = $argv[1];
+$extension = strtolower(substr($file, strrpos($file, '.') + 1));
+$out = tempnam($config['tmp'], 'thumb');
+$count = 300;
+
+function benchmark($method) {
+ global $config, $file, $extension, $out, $count;
+
+ $config['thumb_method'] = $method;
+
+ printf("Method: %s\nThumbnailing %d times... ", $method, $count);
+
+ $start = microtime(true);
+ for($i = 0; $i < $count; $i++) {
+ $image = new Image($file, $extension);
+ $thumb = $image->resize(
+ $config['thumb_ext'] ? $config['thumb_ext'] : $extension,
+ $config['thumb_width'],
+ $config['thumb_height']
+ );
+
+ $thumb->to($out);
+ $thumb->_destroy();
+ $image->destroy();
+ }
+ $end = microtime(true);
+
+ printf("Took %.2f seconds (%.2f/second; %.2f ms)\n", $end - $start, $rate = ($count / ($end - $start)), 1000 / $rate);
+
+ unlink($out);
+}
+
+benchmark('gd');
+benchmark('imagick');
+benchmark('convert');
+
diff --git a/tools/i18n_compile.php b/tools/i18n_compile.php
new file mode 100755
index 00000000..ba193767
--- /dev/null
+++ b/tools/i18n_compile.php
@@ -0,0 +1,44 @@
+#!/usr/bin/php
+<?php
+
+/*
+ * i18n_compile.php - compiles the i18n
+ *
+ * Options:
+ * -l [locale], --locale=[locale]
+ * Compiles [locale] locale.
+ *
+ */
+
+require dirname(__FILE__) . '/inc/cli.php';
+
+// parse command line
+$opts = getopt('l:', Array('locale:'));
+$options = Array();
+
+$options['locale'] = isset($opts['l']) ? $opts['l'] : (isset($opts['locale']) ? $opts['locale'] : false);
+
+if ($options['locale']) $locales = array($options['locale']);
+else die("Error: no locales specified; use -l switch, eg. -l pl_PL\n");
+
+foreach ($locales as $loc) {
+ if (file_exists ($locdir = "inc/locale/".$loc)) {
+ if (!is_dir ($locdir)) {
+ continue;
+ }
+ }
+ else {
+ die("Error: $locdir does not exist\n");
+ }
+
+ // Generate tinyboard.po
+ if (file_exists($locdir."/LC_MESSAGES/tinyboard.po")) $join = "-j";
+ else $join = "";
+ passthru("cd $locdir/LC_MESSAGES;
+ msgfmt tinyboard.po -o tinyboard.mo");
+
+ // Generate javascript.po
+ passthru("cd tools/inc/lib/jsgettext/;
+ php po2json.php -i ../../../../$locdir/LC_MESSAGES/javascript.po \
+ -o ../../../../$locdir/LC_MESSAGES/javascript.js");
+}
diff --git a/tools/i18n_extract.php b/tools/i18n_extract.php
new file mode 100755
index 00000000..4c32b688
--- /dev/null
+++ b/tools/i18n_extract.php
@@ -0,0 +1,47 @@
+#!/usr/bin/php
+<?php
+
+/*
+ * i18n_extract.php - extracts the strings and updates all locales
+ *
+ * Options:
+ * -l [locale], --locale=[locale]
+ * Updates only [locale] locale. If it does not exist yet, we create a new directory.
+ *
+ */
+
+require dirname(__FILE__) . '/inc/cli.php';
+
+// parse command line
+$opts = getopt('l:', Array('locale:'));
+$options = Array();
+
+$options['locale'] = isset($opts['l']) ? $opts['l'] : (isset($opts['locale']) ? $opts['locale'] : false);
+
+$locales = glob("inc/locale/*");
+$locales = array_map("basename", $locales);
+
+if ($options['locale']) $locales = array($options['locale']);
+
+
+foreach ($locales as $loc) {
+ if (file_exists ($locdir = "inc/locale/".$loc)) {
+ if (!is_dir ($locdir)) {
+ continue;
+ }
+ }
+ else {
+ mkdir($locdir);
+ mkdir($locdir."/LC_MESSAGES");
+ }
+
+ // Generate tinyboard.po
+ if (file_exists($locdir."/LC_MESSAGES/tinyboard.po")) $join = "-j";
+ else $join = "";
+ passthru("cd $locdir/LC_MESSAGES;
+ xgettext -d tinyboard -L php --from-code utf-8 $join -c $(find ../../../../ -name \*.php)");
+
+ // Generate javascript.po
+ passthru("cd $locdir/LC_MESSAGES;
+ xgettext -d javascript -L Python --force-po --from-code utf-8 $join -c $(find ../../../../js/ ../../../../templates/ -name \*.js)");
+}
diff --git a/tools/inc/cli.php b/tools/inc/cli.php
new file mode 100644
index 00000000..294609cd
--- /dev/null
+++ b/tools/inc/cli.php
@@ -0,0 +1,100 @@
+<?php
+
+/*
+ * This script will look for Tinyboard in the following places (in order):
+ * - $TINYBOARD_PATH environment varaible
+ * - ./
+ * - ./Tinyboard/
+ * - ../
+ */
+
+set_time_limit(0);
+$shell_path = getcwd();
+
+if(getenv('TINYBOARD_PATH') !== false)
+ $dir = getenv('TINYBOARD_PATH');
+elseif(file_exists('inc/functions.php'))
+ $dir = false;
+elseif(file_exists('Tinyboard') && is_dir('Tinyboard') && file_exists('Tinyboard/inc/functions.php'))
+ $dir = 'Tinyboard';
+elseif(file_exists('../inc/functions.php'))
+ $dir = '..';
+else
+ die("Could not locate Tinyboard directory!\n");
+
+if($dir && !chdir($dir))
+ die("Could not change directory to {$dir}\n");
+
+if(!getenv('TINYBOARD_PATH')) {
+ // follow symlink
+ chdir(realpath('inc') . '/..');
+}
+
+putenv('TINYBOARD_PATH=' . getcwd());
+
+require 'inc/functions.php';
+require 'inc/mod.php';
+
+$mod = Array(
+ 'id' => -1,
+ 'type' => ADMIN,
+ 'username' => '?',
+ 'boards' => Array('*')
+);
+
+function get_httpd_privileges() {
+ global $config, $shell_path, $argv;
+
+ if(php_sapi_name() != 'cli')
+ die("get_httpd_privileges(): invoked from HTTP client.\n");
+
+ echo "Dropping priviledges...\n";
+
+ if(!is_writable('.'))
+ die("get_httpd_privileges(): web directory is not writable\n");
+
+ $filename = '.' . md5(rand()) . '.php';
+ $inc_filename = '.' . md5(rand()) . '.php';
+
+ echo "Copying rebuilder to web directory...\n";
+
+ // replace "/inc/cli.php" with its new filename
+ passthru("cat " . escapeshellarg($shell_path . '/' . $_SERVER['PHP_SELF']) . " | sed \"s/'\/inc\/cli\.php'/'\/{$inc_filename}'/\" > {$filename}");
+
+ $inc_header = "<?php\n";
+
+ // copy environment
+ $env = explode("\n", shell_exec('printenv | grep ^TINYBOARD'));
+ foreach($env as $line) {
+ if(!empty($line))
+ $inc_header .= "putenv('" . addslashes($line) . "');\n";
+ }
+
+ // copy command line arguments
+ $inc_header .= "\$argv = " . var_export($argv, true) . ";\n";
+
+ // copy this file
+ file_put_contents($inc_filename, $inc_header . substr($inc = file_get_contents(__FILE__), strpos($inc, "\n")));
+
+ chmod($filename, 0666);
+ chmod($inc_filename, 0666);
+
+ if(preg_match('/^https?:\/\//', $config['root'])) {
+ $url = $config['root'] . $filename;
+ } elseif($host = getenv('TINYBOARD_HOST')) {
+ $url = 'http://' . $host . $config['root'] . $filename;
+ } else {
+ // assume localhost
+ $url = 'http://localhost' . $config['root'] . $filename;
+ }
+
+ echo "Downloading $url\n";
+
+ passthru('curl -s -N ' . escapeshellarg($url));
+
+ unlink($filename);
+ unlink($inc_filename);
+
+ exit(0);
+}
+
diff --git a/tools/inc/lib/jsgettext/JSParser.php b/tools/inc/lib/jsgettext/JSParser.php
new file mode 100644
index 00000000..adba59bc
--- /dev/null
+++ b/tools/inc/lib/jsgettext/JSParser.php
@@ -0,0 +1,94 @@
+<?php
+
+class JSParser {
+
+ protected $content;
+ protected $keywords;
+ protected $regs = array();
+ protected $regsCounter = 0;
+ protected $strings = array();
+ protected $stringsCounter = 0;
+
+ protected function _extractRegs($match) {
+ $this->regs[$this->regsCounter] = $match[1];
+ $id = "<<reg{$this->regsCounter}>>";
+ $this->regsCounter++;
+ return $id;
+ }
+ protected function _extractStrings($match) {
+ $this->strings[$this->stringsCounter] = $this->importRegExps($match[0]);
+ $id = "<<s{$this->stringsCounter}>>";
+ $this->stringsCounter++;
+ return $id;
+ }
+ protected function importRegExps($input) {
+ $regs = $this->regs;
+ return preg_replace_callback("#<<reg(\d+)>>#", function ($match) use($regs) {
+ return $regs[$match[1]];
+ }, $input);
+ }
+
+ protected function importStrings($input) {
+ $strings = $this->strings;
+ return preg_replace_callback("#<<s(\d+)>>#", function ($match) use($strings) {
+ return $strings[$match[1]];
+ }, $input);
+ }
+
+ public function __construct($file, $keywords = '_') {
+ $this->content = file_get_contents($file);
+ $this->keywords = (array)$keywords;
+ }
+
+ public function parse() {
+ $output = $this->content; //htmlspecialchars($this->content, ENT_NOQUOTES);
+
+ // extract reg exps
+ $output = preg_replace_callback(
+ '# ( / (?: (?>[^/\\\\]++) | \\\\\\\\ | (?<!\\\\)\\\\(?!\\\\) | \\\\/ )+ (?<!\\\\)/ ) [a-z]* \b #ix',
+ array($this, '_extractRegs'), $output
+ );
+
+ // extract strings
+ $output = preg_replace_callback(
+ array(
+ '# " ( (?: (?>[^"\\\\]++) | \\\\\\\\ | (?<!\\\\)\\\\(?!\\\\) | \\\\" )* ) (?<!\\\\)" #ix',
+ "# ' ( (?: (?>[^'\\\\]++) | \\\\\\\\ | (?<!\\\\)\\\\(?!\\\\) | \\\\' )* ) (?<!\\\\)' #ix"
+ ), array($this, '_extractStrings'), $output
+ );
+
+ // delete line comments
+ $output = preg_replace("#(//.*?)$#m", '', $output);
+
+ // delete multiline comments
+ $output = preg_replace('#/\*(.*?)\*/#is', '', $output);
+
+ $strings = $this->strings;
+ $output = preg_replace_callback("#<<s(\d+)>>#", function($match) use($strings) {
+ return $strings[$match[1]];
+ }, $output);
+
+ $keywords = implode('|', $this->keywords);
+
+ $strings = array();
+
+ // extract func calls
+ preg_match_all(
+ '# (?:'.$keywords.') \(\\ *" ( (?: (?>[^"\\\\]++) | \\\\\\\\ | (?<!\\\\)\\\\(?!\\\\) | \\\\" )* ) (?<!\\\\)"\\ *\) #ix',
+ $output, $matches, PREG_SET_ORDER
+ );
+
+ foreach ($matches as $m) $strings[] = stripslashes($m[1]);
+
+ $matches = array();
+ preg_match_all(
+ "# (?:$keywords) \(\\ *' ( (?: (?>[^'\\\\]++) | \\\\\\\\ | (?<!\\\\)\\\\(?!\\\\) | \\\\' )* ) (?<!\\\\)'\\ *\) #ix",
+ $output, $matches, PREG_SET_ORDER
+ );
+
+ foreach ($matches as $m) $strings[] = stripslashes($m[1]);
+
+ return $strings;
+ }
+}
+?>
diff --git a/tools/inc/lib/jsgettext/PoeditParser.php b/tools/inc/lib/jsgettext/PoeditParser.php
new file mode 100644
index 00000000..eebd816e
--- /dev/null
+++ b/tools/inc/lib/jsgettext/PoeditParser.php
@@ -0,0 +1,83 @@
+<?php
+
+require_once 'PoeditString.php';
+
+class PoeditParser {
+
+ protected $file;
+ protected $header = '';
+ protected $strings = array();
+
+ protected function _fixQuotes($str) {
+ return stripslashes($str);
+ }
+
+ public function __construct($file) {
+ $this->file = $file;
+ }
+
+ public function parse() {
+ $contents = file_get_contents($this->file);
+
+ $parts = preg_split('#(\r\n|\n){2}#', $contents, -1, PREG_SPLIT_NO_EMPTY);
+
+ $this->header = array_shift($parts);
+
+ foreach ($parts as $part) {
+
+ // parse comments
+ $comments = array();
+ preg_match_all('#^\\#: (.*?)$#m', $part, $matches, PREG_SET_ORDER);
+ foreach ($matches as $m) $comments[] = $m[1];
+
+ $isFuzzy = preg_match('#^\\#, fuzzy$#im', $part) ? true : false;
+
+ preg_match_all('# ^ (msgid|msgstr)\ " ( (?: (?>[^"\\\\]++) | \\\\\\\\ | (?<!\\\\)\\\\(?!\\\\) | \\\\" )* ) (?<!\\\\)" $ #ixm', $part, $matches2, PREG_SET_ORDER);
+
+ $k = $this->_fixQuotes($matches2[0][2]);
+ $v = !empty($matches2[1][2]) ? $this->_fixQuotes($matches2[1][2]) : '';
+
+ $this->strings[$k] = new PoeditString($k, $v, $isFuzzy, $comments);
+ }
+ }
+
+ public function merge($strings) {
+ foreach ((array)$strings as $str) {
+ if (!in_array($str, array_keys($this->strings))) {
+ $this->strings[$str] = new PoeditString($str);
+ }
+ }
+ }
+
+ public function getHeader() {
+ return $this->header;
+ }
+
+ public function getStrings() {
+ return $this->strings;
+ }
+
+ public function getJSON() {
+ $str = array();
+ foreach ($this->strings as $s) {
+ if ($s->value) $str[$s->key] = $s->value;
+ }
+ return json_encode($str);
+ }
+
+ public function toJSON($outputFilename, $varName = 'l10n') {
+ $str = "$varName = " . $this->getJSON() . ";";
+ return file_put_contents($outputFilename, $str) !== false;
+ }
+
+ public function save($filename = null) {
+ $data = $this->header . "\n\n";
+ foreach ($this->strings as $str) {
+ $data .= $str;
+ }
+ return file_put_contents($filename ? $filename : $this->file, $data) !== false;
+ }
+}
+
+
+?>
diff --git a/tools/inc/lib/jsgettext/PoeditString.php b/tools/inc/lib/jsgettext/PoeditString.php
new file mode 100644
index 00000000..3d59d004
--- /dev/null
+++ b/tools/inc/lib/jsgettext/PoeditString.php
@@ -0,0 +1,29 @@
+<?php
+
+class PoeditString {
+ public $key;
+ public $value;
+ public $fuzzy;
+ public $comments;
+
+ function __construct($key, $value = '', $fuzzy = false, $comments = array()) {
+ $this->key = $key;
+ $this->value = $value;
+ $this->fuzzy = $fuzzy;
+ $this->comments = (array)$comments;
+ }
+
+ public function __toString() {
+ $str ='';
+ foreach ($this->comments as $c) {
+ $str .= "#: $c\n";
+ }
+ if ($this->fuzzy) $str .= "#, fuzzy\n";
+ $str .= 'msgid "'.str_replace('"', '\\"', $this->key).'"' . "\n";
+ $str .= 'msgstr "'.str_replace('"', '\\"', $this->value).'"' . "\n";
+ $str .= "\n";
+ return $str;
+ }
+}
+
+?> \ No newline at end of file
diff --git a/tools/inc/lib/jsgettext/jsgettext.php b/tools/inc/lib/jsgettext/jsgettext.php
new file mode 100644
index 00000000..6c70f0b4
--- /dev/null
+++ b/tools/inc/lib/jsgettext/jsgettext.php
@@ -0,0 +1,63 @@
+<?php
+
+ require_once 'JSParser.php';
+ require_once 'PoeditParser.php';
+
+ function buildOptions($args) {
+ $options = array(
+ 'files' => array(),
+ '-o' => null,
+ '-k' => '_'
+ );
+ $len = count($args);
+ $i = 1;
+ while ($i < $len) {
+ if (preg_match('#^-[a-z]$#i', $args[$i])) {
+ $options[$args[$i]] = isset($args[$i+1]) ? trim($args[$i+1]) : true;
+ $i += 2;
+ }
+ else {
+ $options['files'][] = $args[$i];
+ $i++;
+ }
+ }
+ return $options;
+ }
+
+ $options = buildOptions($argv);
+
+ if (!file_exists($options['-o'])) {
+ touch($options['-o']);
+ }
+
+ if (!is_writable($options['-o'])) {
+ die("Invalid output file name. Make sure it exists and is writable.");
+ }
+
+ $inputFiles = $options['files'];
+
+ if (empty($inputFiles)) {
+ die("You did not provide any input file.");
+ }
+
+ $poeditParser = new PoeditParser($options['-o']);
+ $poeditParser->parse();
+
+ $errors = array();
+
+ foreach ($inputFiles as $f) {
+ if (!is_readable($f) || !preg_match('#\.js$#', $f)) {
+ $errors[] = ("$f is not a valid javascript file.");
+ continue;
+ }
+ $jsparser = new JSParser($f, explode(' ', $options['-k']));
+ $jsStrings = $jsparser->parse();
+ $poeditParser->merge($jsStrings);
+ }
+
+ if (!empty($errors)) {
+ echo "\nThe following errors occured:\n" . implode("\n", $errors) . "\n";
+ }
+
+ $poeditParser->save();
+?>
diff --git a/tools/inc/lib/jsgettext/po2json.php b/tools/inc/lib/jsgettext/po2json.php
new file mode 100644
index 00000000..847b0899
--- /dev/null
+++ b/tools/inc/lib/jsgettext/po2json.php
@@ -0,0 +1,42 @@
+<?php
+
+ require_once 'PoeditParser.php';
+
+ function buildOptions($args) {
+ $options = array(
+ '-o' => null,
+ '-i' => null,
+ '-n' => 'l10n'
+ );
+ $len = count($args);
+ $i = 0;
+ while ($i < $len) {
+ if (preg_match('#^-[a-z]$#i', $args[$i])) {
+ $options[$args[$i]] = isset($args[$i+1]) ? trim($args[$i+1]) : true;
+ $i += 2;
+ }
+ else {
+ $options[] = $args[$i];
+ $i++;
+ }
+ }
+ return $options;
+ }
+
+ $options = buildOptions($argv);
+
+ if (!file_exists($options['-i']) || !is_readable($options['-i'])) {
+ die("Invalid input file. Make sure it exists and is readable.");
+ }
+
+ $poeditParser = new PoeditParser($options['-i']);
+ $poeditParser->parse();
+
+ if ($poeditParser->toJSON($options['-o'], $options['-n'])) {
+ $strings = count($poeditParser->getStrings());
+ echo "Successfully exported " . count($strings) . " strings.\n";
+ }
+ else {
+ echo "Cannor write to file '{$options['-o']}'.\n";
+ }
+?>
diff --git a/tools/rebuild.php b/tools/rebuild.php
new file mode 100755
index 00000000..3b5c0de2
--- /dev/null
+++ b/tools/rebuild.php
@@ -0,0 +1,105 @@
+#!/usr/bin/php
+<?php
+
+/*
+ * rebuild.php - rebuilds all static files
+ *
+ * Command line arguments:
+ * -q, --quiet
+ * Suppress output.
+ *
+ * --quick
+ * Do not rebuild posts.
+ *
+ * -b, --board <string>
+ * Rebuild only the specified board.
+ *
+ * -f, --full
+ * Rebuild replies as well as threads (re-markup).
+ *
+ */
+
+require dirname(__FILE__) . '/inc/cli.php';
+
+if(!is_writable($config['file_script'])) {
+ get_httpd_privileges();
+}
+
+$start = microtime(true);
+
+// parse command line
+$opts = getopt('qfb:', Array('board:', 'quick', 'full', 'quiet'));
+$options = Array();
+
+$options['board'] = isset($opts['board']) ? $opts['board'] : (isset($opts['b']) ? $opts['b'] : false);
+$options['quiet'] = isset($opts['q']) || isset($opts['quiet']);
+$options['quick'] = isset($opts['quick']);
+$options['full'] = isset($opts['full']) || isset($opts['f']);
+
+if(!$options['quiet'])
+ echo "== Tinyboard {$config['version']} ==\n";
+
+if(!$options['quiet'])
+ echo "Clearing template cache...\n";
+
+load_twig();
+$twig->clearCacheFiles();
+
+if(!$options['quiet'])
+ echo "Regenerating theme files...\n";
+rebuildThemes('all');
+
+if(!$options['quiet'])
+ echo "Generating Javascript file...\n";
+buildJavascript();
+
+$main_js = $config['file_script'];
+
+$boards = listBoards();
+
+foreach($boards as &$board) {
+ if($options['board'] && $board['uri'] != $options['board'])
+ continue;
+
+ if(!$options['quiet'])
+ echo "Opening board /{$board['uri']}/...\n";
+ openBoard($board['uri']);
+
+ if($config['file_script'] != $main_js) {
+ // different javascript file
+ if(!$options['quiet'])
+ echo "Generating Javascript file...\n";
+ buildJavascript();
+ }
+
+
+ if(!$options['quiet'])
+ echo "Creating index pages...\n";
+ buildIndex();
+
+ if($options['quick'])
+ continue; // do no more
+
+ if($options['full']) {
+ $query = query(sprintf("SELECT `id` FROM `posts_%s`", $board['uri'])) or error(db_error());
+ while($post = $query->fetch()) {
+ if(!$options['quiet'])
+ echo "Rebuilding #{$post['id']}...\n";
+ rebuildPost($post['id']);
+ }
+ }
+
+ $query = query(sprintf("SELECT `id` FROM `posts_%s` WHERE `thread` IS NULL", $board['uri'])) or error(db_error());
+ while($post = $query->fetch()) {
+ if(!$options['quiet'])
+ echo "Rebuilding #{$post['id']}...\n";
+ buildThread($post['id']);
+ }
+}
+
+if(!$options['quiet'])
+ printf("Complete! Took %g seconds\n", microtime(true) - $start);
+
+unset($board);
+modLog('Rebuilt everything using tools/rebuild.php');
+