diff --git a/inc/config.php b/inc/config.php
index f24a035c..38a17e03 100644
--- a/inc/config.php
+++ b/inc/config.php
@@ -335,9 +335,14 @@
$config['auto_unicode'] = true;
// Whether to turn URLs into functional links
$config['markup_urls'] = true;
+
// Prefix those functional links with some other url, for example some service for hiding referers
// (eg. 'http://www.nullrefer.com/?', or 'http://anonym.to/?'), a pay-per-view exit page, etc.
- $config['url_ads'] = '';
+ $config['url_ads'] = &$config['link_prefix']; // leave alias
+
+ // Optional URL prefix for links (eg. "http://anonym.to/?")
+ $config['link_prefix'] = '';
+
// Wordfilters are used to automatically replace certain words/phrases with something else.
// For a normal string replacement:
@@ -486,7 +491,7 @@
// Display the file's original filename
$config['show_filename']= true;
- // Image identification buttons using regex.info/exif, tineye and google images
+ // Image identification links using regex.info/exif, TinEye and Google Images
$config['image_identification'] = false;
// Redraw the image using GD functions to strip any excess data (commonly ZIP archives)
@@ -542,8 +547,8 @@
$config['ban_date'] = '%A %e %B, %Y';
// The names on the post buttons. (On most imageboards, these are both "Post")
- $config['button_newtopic'] = 'New Topic';
- $config['button_reply'] = 'New Reply';
+ $config['button_newtopic'] = _('New Topic');
+ $config['button_reply'] = _('New Reply');
// Assign each poster in a thread a unique ID, shown by "ID: {id}" before the post number.
$config['poster_ids'] = false;
@@ -554,7 +559,7 @@
$config['thread_subject_in_title'] = false;
// Page footer
- $config['footer'][] = 'All trademarks, copyrights, comments, and images on this page are owned by and are the responsibility of their respective parties.';
+ $config['footer'][] = _('All trademarks, copyrights, comments, and images on this page are owned by and are the responsibility of their respective parties.');
// Characters used to generate a random password (with Javascript)
$config['genpassword_chars'] = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()_+';
@@ -764,9 +769,9 @@
else
$config['root'] = '/'; // CLI mode
- // The scheme and domain. This is needed to get absolute URL of some page (for instance image
- // identification buttons). If you use the CLI tools, it would be wise to override this setting.
- $config['domain'] = (isset ($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') ? "https://" : "http://";
+ // The scheme and domain. This is used to get the site's absolute URL (eg. for image identification links).
+ // If you use the CLI tools, it would be wise to override this setting.
+ $config['domain'] = (isset ($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') ? "https://" : "http://";
$config['domain'] .= isset ($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : 'localhost';
// If for some reason the folders and static HTML index files aren't in the current working direcotry,
diff --git a/inc/display.php b/inc/display.php
index a2d50f74..3ce8eced 100644
--- a/inc/display.php
+++ b/inc/display.php
@@ -25,6 +25,7 @@ function doBoardListPart($list, $root) {
$body = '';
foreach ($list as $board) {
if (is_array($board))
+ // $body .= ' [' . doBoardListPart($board, $root) . '] ';
$body .= ' [' . doBoardListPart($board, $root) . '] ';
else {
if (($key = array_search($board, $list)) && gettype($key) == 'string') {
diff --git a/inc/functions.php b/inc/functions.php
index 42cdb660..8d1ae920 100644
--- a/inc/functions.php
+++ b/inc/functions.php
@@ -1311,6 +1311,13 @@ function buildJavascript() {
'config' => $config,
'stylesheets' => $stylesheets
));
+
+ // Check if we have translation for the javascripts; if yes, we add it to additional javascripts
+ list($pure_locale) = explode(".", $config['locale']);
+ if (file_exists ($jsloc = "inc/locale/$pure_locale/LC_MESSAGES/javascript.js")) {
+ $script = file_get_contents($jsloc) . "\n\n" . $script;
+ }
+
if ($config['additional_javascript_compile']) {
foreach ($config['additional_javascript'] as $file) {
$script .= file_get_contents($file);
@@ -1415,7 +1422,7 @@ function markup_url($matches) {
$markup_urls[] = $url;
- return '' . $url . '' . $after;
+ return '' . $url . '' . $after;
}
function unicodify($body) {
diff --git a/inc/image.php b/inc/image.php
index 7aea9bfe..8cc9d69b 100644
--- a/inc/image.php
+++ b/inc/image.php
@@ -81,9 +81,7 @@ class Image {
$height = $max_height;
}
- if ($gifsicle) {
- $thumb->gifsicle = 1;
- }
+ $thumb->gifsicle = $gifsicle;
$thumb->_resize($this->image->image, $width, $height);
return $thumb;
@@ -288,8 +286,12 @@ class ImageConvert extends ImageBase {
if (shell_exec("gifsicle --unoptimize -O2 --resize {$this->width}x{$this->height} < " .
escapeshellarg($this->src . '') . " > " . escapeshellarg($this->temp)) || !file_exists($this->temp))
error('Failed to resize image!');
+<<<<<<< HEAD
}
else {
+=======
+ } else {
+>>>>>>> 8e4c493a4c5bbff07483fd4a11c44c687c99e441
if (shell_exec("convert -background transparent -filter Point -sample {$this->width}x{$this->height} +antialias -quality {$quality} " .
escapeshellarg($this->src . '') . " " . escapeshellarg($this->temp)) || !file_exists($this->temp))
error('Failed to resize image!');
diff --git a/inc/mod/pages.php b/inc/mod/pages.php
index ab4cdaaf..08604039 100644
--- a/inc/mod/pages.php
+++ b/inc/mod/pages.php
@@ -446,6 +446,23 @@ function mod_new_board() {
if (!preg_match('/^' . $config['board_regex'] . '$/u', $_POST['uri']))
error(sprintf($config['error']['invalidfield'], 'URI'));
+ $bytes = 0;
+ $chars = preg_split('//u', $_POST['uri'], -1, PREG_SPLIT_NO_EMPTY);
+ foreach ($chars as $char) {
+ $o = 0;
+ $ord = ordutf8($char, $o);
+ if ($ord > 0x0080)
+ $bytes += 5; // @01ff
+ else
+ $bytes ++;
+ }
+ $bytes + strlen('posts_.frm');
+
+ if ($bytes > 255) {
+ error('Your filesystem cannot handle a board URI of that length (' . $bytes . '/255 bytes)');
+ exit;
+ }
+
if (openBoard($_POST['uri'])) {
error(sprintf($config['error']['boardexists'], $board['url']));
}
diff --git a/inc/template.php b/inc/template.php
index 071fa761..09e27c26 100644
--- a/inc/template.php
+++ b/inc/template.php
@@ -1,72 +1,72 @@
-setPaths($config['dir']['template']);
- $twig = new Twig_Environment($loader, array(
- 'autoescape' => false,
- 'cache' => "{$config['dir']['template']}/cache",
- 'debug' => $config['debug']
- ));
- $twig->addExtension(new Twig_Extensions_Extension_Tinyboard());
- $twig->addExtension(new Twig_Extensions_Extension_I18n());
-}
-
-function Element($templateFile, array $options) {
- global $config, $debug, $twig;
-
- if (!$twig)
- load_twig();
-
- if (function_exists('create_pm_header') && ((isset($options['mod']) && $options['mod']) || isset($options['__mod'])) && !preg_match('!^mod/!', $templateFile)) {
- $options['pm'] = create_pm_header();
- }
-
- if (isset($options['body']) && $config['debug']) {
- if (isset($debug['start'])) {
- $debug['time'] = '~' . round((microtime(true) - $debug['start']) * 1000, 2) . 'ms';
- unset($debug['start']);
- }
- $debug['included'] = get_included_files();
- $debug['memory'] = round(memory_get_usage(true) / (1024 * 1024), 2) . ' MiB';
- $options['body'] .=
- '
Debug
' .
- str_replace("\n", '
', utf8tohtml(print_r($debug, true))) .
- '
';
- }
-
- // Read the template file
- if (@file_get_contents("{$config['dir']['template']}/${templateFile}")) {
- $body = $twig->render($templateFile, $options);
-
- if ($config['minify_html'] && preg_match('/\.html$/', $templateFile)) {
- $body = trim(preg_replace("/[\t\r\n]/", '', $body));
- }
-
- return $body;
- } else {
- throw new Exception("Template file '${templateFile}' does not exist or is empty in '{$config['dir']['template']}'!");
- }
-}
-
+setPaths($config['dir']['template']);
+ $twig = new Twig_Environment($loader, array(
+ 'autoescape' => false,
+ 'cache' => "{$config['dir']['template']}/cache",
+ 'debug' => $config['debug']
+ ));
+ $twig->addExtension(new Twig_Extensions_Extension_Tinyboard());
+ $twig->addExtension(new Twig_Extensions_Extension_I18n());
+}
+
+function Element($templateFile, array $options) {
+ global $config, $debug, $twig;
+
+ if (!$twig)
+ load_twig();
+
+ if (function_exists('create_pm_header') && ((isset($options['mod']) && $options['mod']) || isset($options['__mod'])) && !preg_match('!^mod/!', $templateFile)) {
+ $options['pm'] = create_pm_header();
+ }
+
+ if (isset($options['body']) && $config['debug']) {
+ if (isset($debug['start'])) {
+ $debug['time'] = '~' . round((microtime(true) - $debug['start']) * 1000, 2) . 'ms';
+ unset($debug['start']);
+ }
+ $debug['included'] = get_included_files();
+ $debug['memory'] = round(memory_get_usage(true) / (1024 * 1024), 2) . ' MiB';
+ $options['body'] .=
+ 'Debug
' .
+ str_replace("\n", '
', utf8tohtml(print_r($debug, true))) .
+ '
';
+ }
+
+ // Read the template file
+ if (@file_get_contents("{$config['dir']['template']}/${templateFile}")) {
+ $body = $twig->render($templateFile, $options);
+
+ if ($config['minify_html'] && preg_match('/\.html$/', $templateFile)) {
+ $body = trim(preg_replace("/[\t\r\n]/", '', $body));
+ }
+
+ return $body;
+ } else {
+ throw new Exception("Template file '${templateFile}' does not exist or is empty in '{$config['dir']['template']}'!");
+ }
+}
+
diff --git a/js/expand.js b/js/expand.js
index c69979f9..b13d0bcf 100644
--- a/js/expand.js
+++ b/js/expand.js
@@ -14,7 +14,7 @@
$(document).ready(function(){
if($('div.banner').length != 0)
return; // not index
-
+
var do_expand = function() {
$(this)
.html($(this).text().replace(_("Click reply to view."), ''+_("Click to expand")+'.'))
diff --git a/js/inline-expanding.js b/js/inline-expanding.js
index 7edb2715..87bf0b11 100644
--- a/js/inline-expanding.js
+++ b/js/inline-expanding.js
@@ -14,7 +14,7 @@
onready(function(){
var inline_expand_post = function() {
var link = this.getElementsByTagName('a');
-
+
for (var i = 0; i < link.length; i++) {
if (typeof link[i] == "object" && link[i].childNodes && typeof link[i].childNodes[0] !== 'undefined' && link[i].childNodes[0].src && link[i].className != 'file') {
link[i].childNodes[0].style.maxWidth = '95%';
@@ -54,7 +54,7 @@ onready(function(){
if (window.jQuery) {
$('div[id^="thread_"]').each(inline_expand_post);
-
+
// allow to work with auto-reload.js, etc.
$(document).bind('new_post', function(e, post) {
inline_expand_post.call(post);
@@ -63,4 +63,3 @@ onready(function(){
inline_expand_post.call(document);
}
});
-
diff --git a/js/local-time.js b/js/local-time.js
index a4e2fb51..d581e304 100644
--- a/js/local-time.js
+++ b/js/local-time.js
@@ -6,7 +6,7 @@
* Copyright (c) 2012 Michael Save
*
* Usage:
- * $config['additional_javascript'][] = 'js/jquery.min.js';
+ * // $config['additional_javascript'][] = 'js/jquery.min.js';
* $config['additional_javascript'][] = 'js/local-time.js';
*
*/
@@ -44,10 +44,12 @@ onready(function(){
};
do_localtime(document);
-
- // allow to work with auto-reload.js, etc.
- $(document).bind('new_post', function(e, post) {
- do_localtime(post);
- });
+
+ if (window.jQuery) {
+ // allow to work with auto-reload.js, etc.
+ $(document).bind('new_post', function(e, post) {
+ do_localtime(post);
+ });
+ }
});
diff --git a/post.php b/post.php
index d2e92be5..45bca539 100644
--- a/post.php
+++ b/post.php
@@ -380,10 +380,22 @@ if (isset($_POST['delete'])) {
wordfilters($post['body']);
- if (mysql_version() >= 50503)
+ if (mysql_version() >= 50503) {
$post['body_nomarkup'] = $post['body']; // Assume we're using the utf8mb4 charset
- else
- $post['body_nomarkup'] = preg_replace('/[\x{010000}-\x{ffffff}]/u', '', $post['body']); // MySQL's `utf8` charset only supports up to 3-byte symbols
+ } else {
+ // MySQL's `utf8` charset only supports up to 3-byte symbols
+ // Remove anything >= 0x010000
+
+ $chars = preg_split('//u', $post['body'], -1, PREG_SPLIT_NO_EMPTY);
+ $post['body_nomarkup'] = '';
+ foreach ($chars as $char) {
+ $o = 0;
+ $ord = ordutf8($char, $o);
+ if ($ord >= 0x010000)
+ continue;
+ $post['body_nomarkup'] .= $char;
+ }
+ }
if (!($mod && isset($post['raw']) && $post['raw']))
$post['tracked_cites'] = markup($post['body'], true);
diff --git a/templates/index.html b/templates/index.html
index 451ca8b1..f01d6851 100644
--- a/templates/index.html
+++ b/templates/index.html
@@ -1,61 +1,61 @@
-
-
-
-
-
-
-
- {% include 'header.html' %}
- {{ board.url }} - {{ board.title|e }}
-
-
- {{ boardlist.top }}
- {% if pm %}You have
an unread PM{% if pm.waiting > 0 %}, plus {{ pm.waiting }} more waiting{% endif %}.
{% endif %}
- {% if config.url_banner %}{% endif %}
-
-
- {% include 'attention_bar.html' %}
- {% if not no_post_form %}
- {% include 'post_form.html' %}
- {% else %}
- {% include 'boardlist.html' %}
- {% endif %}
-
- {% if config.blotter %}
{{ config.blotter }}
{% endif %}
-
-
- {{ btn.prev }} {% for page in pages %}
- [
{{ page.num }}]{% if loop.last %} {% endif %}
- {% endfor %} {{ btn.next }}
- {{ boardlist.bottom }}
-
-
-
-
+
+
+
+
+
+
+
+ {% include 'header.html' %}
+ {{ board.url }} - {{ board.title|e }}
+
+
+ {{ boardlist.top }}
+ {% if pm %}You have
an unread PM{% if pm.waiting > 0 %}, plus {{ pm.waiting }} more waiting{% endif %}.
{% endif %}
+ {% if config.url_banner %}{% endif %}
+
+
+ {% include 'attention_bar.html' %}
+ {% if not no_post_form %}
+ {% include 'post_form.html' %}
+ {% else %}
+ {% include 'boardlist.html' %}
+ {% endif %}
+
+ {% if config.blotter %}
{{ config.blotter }}
{% endif %}
+
+
+ {{ btn.prev }} {% for page in pages %}
+ [
{{ page.num }}]{% if loop.last %} {% endif %}
+ {% endfor %} {{ btn.next }}
+ {{ boardlist.bottom }}
+
+
+
+
diff --git a/templates/main.js b/templates/main.js
index 401d3504..71dcd92a 100644
--- a/templates/main.js
+++ b/templates/main.js
@@ -1,38 +1,38 @@
-{% raw %}
-
-/* gettext-compatible _ function, example of usage:
- *
- * > // Loading pl_PL.json here (containing polish translation strings generated by tools/i18n_compile.php)
- * > alert(_("Hello!"));
- * Witaj!
- */
-function _(s) {
- return (typeof l10n != 'undefined' && typeof l10n[s] != 'undefined') ? l10n[s] : s;
-}
-
-/* printf-like formatting function, example of usage:
- *
- * > alert(fmt("There are {0} birds on {1} trees", [3,4]));
- * There are 3 birds on 4 trees
- * > // Loading pl_PL.json here (containing polish translation strings generated by tools/locale_compile.php)
- * > alert(fmt(_("{0} users"), [3]));
- * 3 uzytkownikow
- */
-function fmt(s,a) {
- return s.replace(/\{([0-9]+)\}/g, function(x) { return a[x[1]]; });
-}
-
-var saved = {};
-
-
-var selectedstyle = '{% endraw %}{{ config.default_stylesheet.0|addslashes }}{% raw %}';
-var styles = {
- {% endraw %}
- {% for stylesheet in stylesheets %}{% raw %}'{% endraw %}{{ stylesheet.name|addslashes }}{% raw %}' : '{% endraw %}{{ stylesheet.uri|addslashes }}{% raw %}',
- {% endraw %}{% endfor %}{% raw %}
-};
+{% raw %}
+
+/* gettext-compatible _ function, example of usage:
+ *
+ * > // Loading pl_PL.json here (containing polish translation strings generated by tools/i18n_compile.php)
+ * > alert(_("Hello!"));
+ * Witaj!
+ */
+function _(s) {
+ return (typeof l10n != 'undefined' && typeof l10n[s] != 'undefined') ? l10n[s] : s;
+}
+
+/* printf-like formatting function, example of usage:
+ *
+ * > alert(fmt("There are {0} birds on {1} trees", [3,4]));
+ * There are 3 birds on 4 trees
+ * > // Loading pl_PL.json here (containing polish translation strings generated by tools/locale_compile.php)
+ * > alert(fmt(_("{0} users"), [3]));
+ * 3 uzytkownikow
+ */
+function fmt(s,a) {
+ return s.replace(/\{([0-9]+)\}/g, function(x) { return a[x[1]]; });
+}
+
+var saved = {};
+
+
+var selectedstyle = '{% endraw %}{{ config.default_stylesheet.0|addslashes }}{% raw %}';
+var styles = {
+ {% endraw %}
+ {% for stylesheet in stylesheets %}{% raw %}'{% endraw %}{{ stylesheet.name|addslashes }}{% raw %}' : '{% endraw %}{{ stylesheet.uri|addslashes }}{% raw %}',
+ {% endraw %}{% endfor %}{% raw %}
+};
var board_name = false;
-
+
function changeStyle(styleName, link) {
{% endraw %}
{% if config.stylesheets_board %}{% raw %}
@@ -43,31 +43,31 @@ function changeStyle(styleName, link) {
{% endraw %}{% else %}
localStorage.stylesheet = styleName;
{% endif %}
- {% raw %}
-
- if (!document.getElementById('stylesheet')) {
- var s = document.createElement('link');
- s.rel = 'stylesheet';
- s.type = 'text/css';
- s.id = 'stylesheet';
- var x = document.getElementsByTagName('head')[0];
- x.appendChild(s);
- }
-
- document.getElementById('stylesheet').href = styles[styleName];
- selectedstyle = styleName;
-
- if (document.getElementsByClassName('styles').length != 0) {
- var styleLinks = document.getElementsByClassName('styles')[0].childNodes;
- for (var i = 0; i < styleLinks.length; i++) {
- styleLinks[i].className = '';
- }
- }
-
- if (link) {
- link.className = 'selected';
- }
-}
+ {% raw %}
+
+ if (!document.getElementById('stylesheet')) {
+ var s = document.createElement('link');
+ s.rel = 'stylesheet';
+ s.type = 'text/css';
+ s.id = 'stylesheet';
+ var x = document.getElementsByTagName('head')[0];
+ x.appendChild(s);
+ }
+
+ document.getElementById('stylesheet').href = styles[styleName];
+ selectedstyle = styleName;
+
+ if (document.getElementsByClassName('styles').length != 0) {
+ var styleLinks = document.getElementsByClassName('styles')[0].childNodes;
+ for (var i = 0; i < styleLinks.length; i++) {
+ styleLinks[i].className = '';
+ }
+ }
+
+ if (link) {
+ link.className = 'selected';
+ }
+}
{% endraw %}
@@ -95,177 +95,177 @@ function changeStyle(styleName, link) {
{% endraw%}
{% else %}
{% raw %}
- if (localStorage.stylesheet) {
- for (var styleName in styles) {
- if (styleName == localStorage.stylesheet) {
- changeStyle(styleName);
- break;
- }
- }
+ if (localStorage.stylesheet) {
+ for (var styleName in styles) {
+ if (styleName == localStorage.stylesheet) {
+ changeStyle(styleName);
+ break;
+ }
+ }
}
- {% endraw %}
+ {% endraw %}
{% endif %}
{% raw %}
-
-function init_stylechooser() {
- var newElement = document.createElement('div');
- newElement.className = 'styles';
-
- for (styleName in styles) {
- var style = document.createElement('a');
- style.innerHTML = '[' + styleName + ']';
- style.onclick = function() {
- changeStyle(this.innerHTML.substring(1, this.innerHTML.length - 1), this);
- };
- if (styleName == selectedstyle) {
- style.className = 'selected';
- }
- style.href = 'javascript:void(0);';
- newElement.appendChild(style);
- }
-
- document.getElementsByTagName('body')[0].insertBefore(newElement, document.getElementsByTagName('body')[0].lastChild.nextSibling);
-}
-
-function get_cookie(cookie_name) {
- var results = document.cookie.match ( '(^|;) ?' + cookie_name + '=([^;]*)(;|$)');
- if (results)
- return (unescape(results[2]));
- else
- return null;
-}
-
-function highlightReply(id) {
- if (typeof window.event != "undefined" && event.which == 2) {
- // don't highlight on middle click
- return true;
- }
-
- var divs = document.getElementsByTagName('div');
- for (var i = 0; i < divs.length; i++)
- {
- if (divs[i].className.indexOf('post') != -1)
- divs[i].className = divs[i].className.replace(/highlighted/, '');
- }
- if (id) {
- var post = document.getElementById('reply_'+id);
- if (post)
- post.className += ' highlighted';
- }
-}
-
-function generatePassword() {
- var pass = '';
- var chars = '{% endraw %}{{ config.genpassword_chars }}{% raw %}';
- for (var i = 0; i < 8; i++) {
- var rnd = Math.floor(Math.random() * chars.length);
- pass += chars.substring(rnd, rnd + 1);
- }
- return pass;
-}
-
-function dopost(form) {
- if (form.elements['name']) {
- localStorage.name = form.elements['name'].value.replace(/( |^)## .+$/, '');
- }
- if (form.elements['email'] && form.elements['email'].value != 'sage') {
- localStorage.email = form.elements['email'].value;
- }
-
- saved[document.location] = form.elements['body'].value;
- sessionStorage.body = JSON.stringify(saved);
-
- return form.elements['body'].value != "" || form.elements['file'].value != "";
-}
-
-function citeReply(id) {
- var body = document.getElementById('body');
-
- if (document.selection) {
- // IE
- body.focus();
- var sel = document.selection.createRange();
- sel.text = '>>' + id + '\n';
- } else if (body.selectionStart || body.selectionStart == '0') {
- // Mozilla
- var start = body.selectionStart;
- var end = body.selectionEnd;
- body.value = body.value.substring(0, start) + '>>' + id + '\n' + body.value.substring(end, body.value.length);
- } else {
- // ???
- body.value += '>>' + id + '\n';
- }
-}
-
-function rememberStuff() {
- if (document.forms.post) {
- if (document.forms.post.password) {
- if (!localStorage.password)
- localStorage.password = generatePassword();
- document.forms.post.password.value = localStorage.password;
- }
-
- if (localStorage.name && document.forms.post.elements['name'])
- document.forms.post.elements['name'].value = localStorage.name;
- if (localStorage.email && document.forms.post.elements['email'])
- document.forms.post.elements['email'].value = localStorage.email;
-
- if (window.location.hash.indexOf('q') == 1)
- citeReply(window.location.hash.substring(2));
-
- if (sessionStorage.body) {
- var saved = JSON.parse(sessionStorage.body);
- if (get_cookie('{% endraw %}{{ config.cookies.js }}{% raw %}')) {
- // Remove successful posts
- var successful = JSON.parse(get_cookie('{% endraw %}{{ config.cookies.js }}{% raw %}'));
- for (var url in successful) {
- saved[url] = null;
- }
- sessionStorage.body = JSON.stringify(saved);
-
- document.cookie = '{% endraw %}{{ config.cookies.js }}{% raw %}={};expires=0;path=/;';
- }
- if (saved[document.location]) {
- document.forms.post.body.value = saved[document.location];
- }
- }
-
- if (localStorage.body) {
- document.forms.post.body.value = localStorage.body;
- localStorage.body = '';
- }
- }
-}
-
-function init() {
- init_stylechooser();
-
- if (document.forms.postcontrols) {
- document.forms.postcontrols.password.value = localStorage.password;
- }
-
- if (window.location.hash.indexOf('q') != 1 && window.location.hash.substring(1))
- highlightReply(window.location.hash.substring(1));
-}
-
-var RecaptchaOptions = {
- theme : 'clean'
-};
-
-onready_callbacks = [];
-function onready(fnc) {
- onready_callbacks.push(fnc);
-}
-
-function ready() {
- for (var i = 0; i < onready_callbacks.length; i++) {
- onready_callbacks[i]();
- }
-}
-
-onready(init);
-
-{% endraw %}{% if config.google_analytics %}{% raw %}
-
-var _gaq = _gaq || [];_gaq.push(['_setAccount', '{% endraw %}{{ config.google_analytics }}{% raw %}']);{% endraw %}{% if config.google_analytics_domain %}{% raw %}_gaq.push(['_setDomainName', '{% endraw %}{{ config.google_analytics_domain }}{% raw %}']){% endraw %}{% endif %}{% if not config.google_analytics_domain %}{% raw %}_gaq.push(['_setDomainName', 'none']){% endraw %}{% endif %}{% raw %};_gaq.push(['_trackPageview']);(function() {var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);})();{% endraw %}{% endif %}
-
+
+function init_stylechooser() {
+ var newElement = document.createElement('div');
+ newElement.className = 'styles';
+
+ for (styleName in styles) {
+ var style = document.createElement('a');
+ style.innerHTML = '[' + styleName + ']';
+ style.onclick = function() {
+ changeStyle(this.innerHTML.substring(1, this.innerHTML.length - 1), this);
+ };
+ if (styleName == selectedstyle) {
+ style.className = 'selected';
+ }
+ style.href = 'javascript:void(0);';
+ newElement.appendChild(style);
+ }
+
+ document.getElementsByTagName('body')[0].insertBefore(newElement, document.getElementsByTagName('body')[0].lastChild.nextSibling);
+}
+
+function get_cookie(cookie_name) {
+ var results = document.cookie.match ( '(^|;) ?' + cookie_name + '=([^;]*)(;|$)');
+ if (results)
+ return (unescape(results[2]));
+ else
+ return null;
+}
+
+function highlightReply(id) {
+ if (typeof window.event != "undefined" && event.which == 2) {
+ // don't highlight on middle click
+ return true;
+ }
+
+ var divs = document.getElementsByTagName('div');
+ for (var i = 0; i < divs.length; i++)
+ {
+ if (divs[i].className.indexOf('post') != -1)
+ divs[i].className = divs[i].className.replace(/highlighted/, '');
+ }
+ if (id) {
+ var post = document.getElementById('reply_'+id);
+ if (post)
+ post.className += ' highlighted';
+ }
+}
+
+function generatePassword() {
+ var pass = '';
+ var chars = '{% endraw %}{{ config.genpassword_chars }}{% raw %}';
+ for (var i = 0; i < 8; i++) {
+ var rnd = Math.floor(Math.random() * chars.length);
+ pass += chars.substring(rnd, rnd + 1);
+ }
+ return pass;
+}
+
+function dopost(form) {
+ if (form.elements['name']) {
+ localStorage.name = form.elements['name'].value.replace(/( |^)## .+$/, '');
+ }
+ if (form.elements['email'] && form.elements['email'].value != 'sage') {
+ localStorage.email = form.elements['email'].value;
+ }
+
+ saved[document.location] = form.elements['body'].value;
+ sessionStorage.body = JSON.stringify(saved);
+
+ return form.elements['body'].value != "" || form.elements['file'].value != "";
+}
+
+function citeReply(id) {
+ var body = document.getElementById('body');
+
+ if (document.selection) {
+ // IE
+ body.focus();
+ var sel = document.selection.createRange();
+ sel.text = '>>' + id + '\n';
+ } else if (body.selectionStart || body.selectionStart == '0') {
+ // Mozilla
+ var start = body.selectionStart;
+ var end = body.selectionEnd;
+ body.value = body.value.substring(0, start) + '>>' + id + '\n' + body.value.substring(end, body.value.length);
+ } else {
+ // ???
+ body.value += '>>' + id + '\n';
+ }
+}
+
+function rememberStuff() {
+ if (document.forms.post) {
+ if (document.forms.post.password) {
+ if (!localStorage.password)
+ localStorage.password = generatePassword();
+ document.forms.post.password.value = localStorage.password;
+ }
+
+ if (localStorage.name && document.forms.post.elements['name'])
+ document.forms.post.elements['name'].value = localStorage.name;
+ if (localStorage.email && document.forms.post.elements['email'])
+ document.forms.post.elements['email'].value = localStorage.email;
+
+ if (window.location.hash.indexOf('q') == 1)
+ citeReply(window.location.hash.substring(2));
+
+ if (sessionStorage.body) {
+ var saved = JSON.parse(sessionStorage.body);
+ if (get_cookie('{% endraw %}{{ config.cookies.js }}{% raw %}')) {
+ // Remove successful posts
+ var successful = JSON.parse(get_cookie('{% endraw %}{{ config.cookies.js }}{% raw %}'));
+ for (var url in successful) {
+ saved[url] = null;
+ }
+ sessionStorage.body = JSON.stringify(saved);
+
+ document.cookie = '{% endraw %}{{ config.cookies.js }}{% raw %}={};expires=0;path=/;';
+ }
+ if (saved[document.location]) {
+ document.forms.post.body.value = saved[document.location];
+ }
+ }
+
+ if (localStorage.body) {
+ document.forms.post.body.value = localStorage.body;
+ localStorage.body = '';
+ }
+ }
+}
+
+function init() {
+ init_stylechooser();
+
+ if (document.forms.postcontrols) {
+ document.forms.postcontrols.password.value = localStorage.password;
+ }
+
+ if (window.location.hash.indexOf('q') != 1 && window.location.hash.substring(1))
+ highlightReply(window.location.hash.substring(1));
+}
+
+var RecaptchaOptions = {
+ theme : 'clean'
+};
+
+onready_callbacks = [];
+function onready(fnc) {
+ onready_callbacks.push(fnc);
+}
+
+function ready() {
+ for (var i = 0; i < onready_callbacks.length; i++) {
+ onready_callbacks[i]();
+ }
+}
+
+onready(init);
+
+{% endraw %}{% if config.google_analytics %}{% raw %}
+
+var _gaq = _gaq || [];_gaq.push(['_setAccount', '{% endraw %}{{ config.google_analytics }}{% raw %}']);{% endraw %}{% if config.google_analytics_domain %}{% raw %}_gaq.push(['_setDomainName', '{% endraw %}{{ config.google_analytics_domain }}{% raw %}']){% endraw %}{% endif %}{% if not config.google_analytics_domain %}{% raw %}_gaq.push(['_setDomainName', 'none']){% endraw %}{% endif %}{% raw %};_gaq.push(['_trackPageview']);(function() {var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);})();{% endraw %}{% endif %}
+
diff --git a/templates/mod/login.html b/templates/mod/login.html
index 43a28d56..476897a6 100644
--- a/templates/mod/login.html
+++ b/templates/mod/login.html
@@ -1,26 +1,26 @@
-{% if error %}{{ error }}
{% endif %}
-
+{% if error %}{{ error }}
{% endif %}
+
diff --git a/templates/page.html b/templates/page.html
index 07eea62e..a7c6a300 100644
--- a/templates/page.html
+++ b/templates/page.html
@@ -1,25 +1,25 @@
-
-
-
-
- {% include 'header.html' %}
- {{ title }}
-
-
- {% if pm %}You have
an unread PM{% if pm.waiting > 0 %}, plus {{ pm.waiting }} more waiting{% endif %}.
{% endif %}
-
- {{ body }}
-
-
-
-
+
+
+
+
+ {% include 'header.html' %}
+ {{ title }}
+
+
+ {% if pm %}You have
an unread PM{% if pm.waiting > 0 %}, plus {{ pm.waiting }} more waiting{% endif %}.
{% endif %}
+
+ {{ body }}
+
+
+
+
diff --git a/templates/post_reply.html b/templates/post_reply.html
index 450f8246..bc96e74c 100644
--- a/templates/post_reply.html
+++ b/templates/post_reply.html
@@ -1,111 +1,111 @@
-{% filter remove_whitespace %}
-{# tabs and new lines will be ignored #}
-
-
-
-
-
- {% if config.poster_ids %}
- ID: {{ post.ip|poster_id(post.thread) }}
- {% endif %}
- No.
-
- {{ post.id }}
-
-
- {% if post.embed %}
- {{ post.embed }}
- {% elseif post.file == 'deleted' %}
-
- {% elseif post.file and post.file %}
-
File: {{ post.file }}
- (
- {% if post.thumb == 'spoiler' %}
- Spoiler Image,
- {% endif %}
- {{ post.filesize|filesize }}
- {% if post.filex and post.filey %}
- , {{ post.filex}}x{{ post.filey }}
- {% if config.show_ratio %}
- , {{ post.ratio }}
- {% endif %}
- {% endif %}
- {% if config.show_filename and post.filename %}
- ,
- {% if post.filename|length > config.max_filename_display %}
- {{ post.filename|truncate(config.max_filename_display)|bidi_cleanup }}
- {% else %}
- {{ post.filename|bidi_cleanup }}
- {% endif %}
- {% endif %}
- {% if post.thumb != 'file' and config.image_identification %}
- ,
-
- io
- {% if post.file|extension == 'jpg' %}
- e
- {% endif %}
- g
- t
-
- {% endif %}
-
- )
-
-
-
-
-
- {% endif %}
- {{ post.postControls }}
-
- {% endfilter %}{% if index %}{{ post.body|truncate_body(post.link) }}{% else %}{{ post.body }}{% endif %}{% filter remove_whitespace %}
-
-
-
-{% endfilter %}
+{% filter remove_whitespace %}
+{# tabs and new lines will be ignored #}
+
+
+
+
+
+ {% if config.poster_ids %}
+ ID: {{ post.ip|poster_id(post.thread) }}
+ {% endif %}
+ No.
+
+ {{ post.id }}
+
+
+ {% if post.embed %}
+ {{ post.embed }}
+ {% elseif post.file == 'deleted' %}
+
+ {% elseif post.file and post.file %}
+
File: {{ post.file }}
+ (
+ {% if post.thumb == 'spoiler' %}
+ Spoiler Image,
+ {% endif %}
+ {{ post.filesize|filesize }}
+ {% if post.filex and post.filey %}
+ , {{ post.filex}}x{{ post.filey }}
+ {% if config.show_ratio %}
+ , {{ post.ratio }}
+ {% endif %}
+ {% endif %}
+ {% if config.show_filename and post.filename %}
+ ,
+ {% if post.filename|length > config.max_filename_display %}
+ {{ post.filename|truncate(config.max_filename_display)|bidi_cleanup }}
+ {% else %}
+ {{ post.filename|bidi_cleanup }}
+ {% endif %}
+ {% endif %}
+ {% if post.thumb != 'file' and config.image_identification %}
+ ,
+
+ io
+ {% if post.file|extension == 'jpg' %}
+ e
+ {% endif %}
+ g
+ t
+
+ {% endif %}
+
+ )
+
+
+
+
+
+ {% endif %}
+ {{ post.postControls }}
+
+ {% endfilter %}{% if index %}{{ post.body|truncate_body(post.link) }}{% else %}{{ post.body }}{% endif %}{% filter remove_whitespace %}
+
+
+
+{% endfilter %}
diff --git a/templates/post_thread.html b/templates/post_thread.html
index cbd37229..c8da07e3 100644
--- a/templates/post_thread.html
+++ b/templates/post_thread.html
@@ -99,27 +99,27 @@
{% endif %}">
{{ post.id }}
- {% if post.sticky %}
- {% if config.font_awesome %}
-
- {% else %}
-
- {% endif %}
- {% endif %}
- {% if post.locked %}
- {% if config.font_awesome %}
-
- {% else %}
-
- {% endif %}
- {% endif %}
- {% if post.bumplocked and (config.mod.view_bumplock < 0 or (post.mod and post.mod|hasPermission(config.mod.view_bumplock, board.uri))) %}
- {% if config.font_awesome %}
-
- {% else %}
-
- {% endif %}
- {% endif %}
+ {% if post.sticky %}
+ {% if config.font_awesome %}
+
+ {% else %}
+
+ {% endif %}
+ {% endif %}
+ {% if post.locked %}
+ {% if config.font_awesome %}
+
+ {% else %}
+
+ {% endif %}
+ {% endif %}
+ {% if post.bumplocked and (config.mod.view_bumplock < 0 or (post.mod and post.mod|hasPermission(config.mod.view_bumplock, board.uri))) %}
+ {% if config.font_awesome %}
+
+ {% else %}
+
+ {% endif %}
+ {% endif %}
{% if index %}
[{% trans %}Reply{% endtrans %}]
{% endif %}
diff --git a/templates/posts.sql b/templates/posts.sql
index 0a1dc92a..698fad77 100644
--- a/templates/posts.sql
+++ b/templates/posts.sql
@@ -1,4 +1,4 @@
-CREATE TABLE IF NOT EXISTS `posts_{{ board }}` (
+CREATE TABLE IF NOT EXISTS `posts_{{ board }}` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`thread` int(11) DEFAULT NULL,
`subject` varchar(100) DEFAULT NULL,
diff --git a/templates/thread.html b/templates/thread.html
index 1b217c2f..619480b4 100644
--- a/templates/thread.html
+++ b/templates/thread.html
@@ -1,51 +1,51 @@
-
-
-
-
-
-
-
- {% include 'header.html' %}
- {{ board.url }} - {% if config.thread_subject_in_title and thread.subject %}{{ thread.subject }}{% else %}{{ board.title|e }}{% endif %}
-
-
- {{ boardlist.top }}
- {% if pm %}You have
an unread PM{% if pm.waiting > 0 %}, plus {{ pm.waiting }} more waiting{% endif %}.
{% endif %}
- {% if config.url_banner %}{% endif %}
-
-
-
-
- {% include 'attention_bar.html' %}
- {% include 'post_form.html' %}
-
- {% if config.blotter %}
{{ config.blotter }}
{% endif %}
-
-
- [{% trans %}Return{% endtrans %}]
-
- {{ boardlist.bottom }}
-
-
-
-
+
+
+
+
+
+
+
+ {% include 'header.html' %}
+ {{ board.url }} - {% if config.thread_subject_in_title and thread.subject %}{{ thread.subject }}{% else %}{{ board.title|e }}{% endif %}
+
+
+ {{ boardlist.top }}
+ {% if pm %}You have
an unread PM{% if pm.waiting > 0 %}, plus {{ pm.waiting }} more waiting{% endif %}.
{% endif %}
+ {% if config.url_banner %}{% endif %}
+
+
+
+
+ {% include 'attention_bar.html' %}
+ {% include 'post_form.html' %}
+
+ {% if config.blotter %}
{{ config.blotter }}
{% endif %}
+
+
+ [{% trans %}Return{% endtrans %}]
+
+ {{ boardlist.bottom }}
+
+
+
+