print statements and relax rules in config
This commit is contained in:
parent
d9909b23cb
commit
c595bfbabd
|
@ -1939,6 +1939,8 @@ function remove_modifiers($body) {
|
|||
function markup(&$body, $track_cites = false, $op = false) {
|
||||
global $board, $config, $markup_urls;
|
||||
|
||||
print_err("Markup BEGIN");
|
||||
|
||||
$modifiers = extract_modifiers($body);
|
||||
|
||||
$body = preg_replace('@<tinyboard (?!escape )([\w\s]+)>(.+?)</tinyboard>@us', '', $body);
|
||||
|
@ -1948,9 +1950,13 @@ function markup(&$body, $track_cites = false, $op = false) {
|
|||
return array();
|
||||
}
|
||||
|
||||
print_err("Markup utf start");
|
||||
|
||||
$body = str_replace("\r", '', $body);
|
||||
$body = utf8tohtml($body);
|
||||
|
||||
print_err("Markup utf OK");
|
||||
|
||||
if (mysql_version() < 50503)
|
||||
$body = mb_encode_numericentity($body, array(0x010000, 0xffffff, 0, 0xffffff), 'UTF-8');
|
||||
|
||||
|
@ -1981,9 +1987,11 @@ function markup(&$body, $track_cites = false, $op = false) {
|
|||
-1,
|
||||
$num_links);
|
||||
|
||||
if ($num_links > $config['max_links'])
|
||||
if ($num_links > $config['max_links']) {
|
||||
print_err("Error too many links");
|
||||
error($config['error']['toomanylinks']);
|
||||
}
|
||||
}
|
||||
|
||||
if ($config['markup_repair_tidy'])
|
||||
$body = str_replace(' ', ' ', $body);
|
||||
|
@ -2000,6 +2008,8 @@ function markup(&$body, $track_cites = false, $op = false) {
|
|||
|
||||
$tracked_cites = array();
|
||||
|
||||
print_err("Cites BEGIN");
|
||||
|
||||
// Cites
|
||||
if (isset($board) && preg_match_all('/(^|\s)>>(\d+?)([\s,.)?]|$)/m', $body, $cites, PREG_SET_ORDER | PREG_OFFSET_CAPTURE)) {
|
||||
if (count($cites[0]) > $config['max_cites']) {
|
||||
|
@ -2047,6 +2057,9 @@ function markup(&$body, $track_cites = false, $op = false) {
|
|||
}
|
||||
}
|
||||
|
||||
print_err("Cites END");
|
||||
print_err("Cross board linking BEGIN");
|
||||
|
||||
// Cross-board linking
|
||||
if (preg_match_all('/(^|\s)>>>\/(' . $config['board_regex'] . 'f?)\/(\d+)?([\s,.)?]|$)/um', $body, $cites, PREG_SET_ORDER | PREG_OFFSET_CAPTURE)) {
|
||||
if (count($cites[0]) > $config['max_cites']) {
|
||||
|
@ -2182,6 +2195,8 @@ function markup(&$body, $track_cites = false, $op = false) {
|
|||
}
|
||||
}
|
||||
|
||||
print_err("Cross board linking End");
|
||||
|
||||
$tracked_cites = array_unique($tracked_cites, SORT_REGULAR);
|
||||
|
||||
$body = preg_replace("/^\s*>.*$/m", '<span class="quote">$0</span>', $body);
|
||||
|
|
|
@ -0,0 +1,213 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* Instance Configuration
|
||||
* ----------------------
|
||||
* Edit this file and not config.php for imageboard configuration.
|
||||
*
|
||||
* You can copy values from config.php (defaults) and paste them here.
|
||||
*/
|
||||
|
||||
$config['boards'] = array(
|
||||
array('leftypol', 'b'),
|
||||
array('GET', 'ref'),
|
||||
array('gulag' => 'http://status.example.org/')
|
||||
);
|
||||
// Board categories. Only used in the "Categories" theme.
|
||||
$config['categories'] = array(
|
||||
'Leftypol' => array('leftypol', 'b'),
|
||||
'GET' => array('GET', 'ref'),
|
||||
'Meta' => array('gulag')
|
||||
);
|
||||
// Optional for the Categories theme. This is an array of name => (title, url) groups for categories
|
||||
// with non-board links.
|
||||
$config['custom_categories'] = array(
|
||||
'Links' => array(
|
||||
'Leftypedia' => 'http://example.org',
|
||||
'Staff application' => 'staff_applications.html',
|
||||
'FAQ' => 'faq.html',
|
||||
'Donate' => 'donate.html'
|
||||
)
|
||||
);
|
||||
|
||||
|
||||
$config['db']['server'] = 'localhost';
|
||||
$config['db']['database'] = 'lainchan';
|
||||
$config['db']['prefix'] = '';
|
||||
$config['db']['user'] = 'lainchan';
|
||||
$config['db']['password'] = 'oijrljqqwjr242kjn';
|
||||
|
||||
|
||||
$config['cookies']['mod'] = 'mod';
|
||||
$config['cookies']['salt'] = 'ZGZkYWU3NGUwZDNiYjU2MDEwZmRkMW';
|
||||
|
||||
$config['flood_time'] = 10;
|
||||
$config['flood_time_ip'] = 120;
|
||||
$config['flood_time_same'] = 30;
|
||||
$config['max_body'] = 1800;
|
||||
$config['reply_limit'] = 250;
|
||||
$config['max_links'] = 20;
|
||||
$config['max_filesize'] = 10485760;
|
||||
$config['thumb_width'] = 255;
|
||||
$config['thumb_height'] = 255;
|
||||
$config['max_width'] = 10000;
|
||||
$config['max_height'] = 10000;
|
||||
$config['max_images'] = 4;
|
||||
$config['threads_per_page'] = 10;
|
||||
$config['max_pages'] = 10;
|
||||
$config['threads_preview'] = 5;
|
||||
$config['root'] = '/';
|
||||
$config['secure_trip_salt'] = 'MzdhNTJiMjNkMTM5Nzc5NDcwOGViMD';
|
||||
|
||||
$config['thumb_method'] = 'gm+gifsicle';
|
||||
$config['gnu_md5'] = '1';
|
||||
|
||||
// < Added by Zero >
|
||||
// Sun Aug 30 17:44:19 UTC 2020
|
||||
|
||||
// Allowed image file extensions.
|
||||
$config['allowed_ext'][] = 'jpg';
|
||||
$config['allowed_ext'][] = 'jpeg';
|
||||
$config['allowed_ext'][] = 'bmp';
|
||||
$config['allowed_ext'][] = 'gif';
|
||||
$config['allowed_ext'][] = 'png';
|
||||
|
||||
// TODO test section, please remove
|
||||
$config['allowed_ext'][] = 'mp4';
|
||||
$config['allowed_ext'][] = 'webm';
|
||||
$config['allowed_ext_files'][] = 'webm';
|
||||
$config['webm']['use_ffmpeg'] = true;
|
||||
$config['additional_javascript'][] = 'js/options.js';
|
||||
$config['additional_javascript'][] = 'js/webm-settings.js';
|
||||
$config['additional_javascript'][] = 'js/expand-video.js';
|
||||
$config['max_filesize'] = 50 * 1024 * 1024; // 50MB
|
||||
$config['webm']['ffmpeg_path'] = '/usr/bin/ffmpeg';
|
||||
$config['webm']['ffprobe_path'] = '/usr/bin/ffprobe';
|
||||
$config['mp4']['ffmpeg_path'] = '/usr/bin/ffmpeg';
|
||||
$config['mp4']['ffprobe_path'] = '/usr/bin/ffprobe';
|
||||
$config['webm']['allow_audio'] = true;
|
||||
$config['webm']['max_length'] = 620;
|
||||
//end test section
|
||||
|
||||
|
||||
$config['allowed_ext_files'][] = 'mp4';
|
||||
$config['allowed_ext_files'][] = 'pdf';
|
||||
$config['allowed_ext_files'][] = 'txt';
|
||||
$config['allowed_ext_files'][] = 'zip';
|
||||
$config['allowed_ext_files'][] = 'epub';
|
||||
|
||||
/*
|
||||
* From Config:
|
||||
// Always regenerate markup. This isn't recommended and should only be used for debugging; by default,
|
||||
// Tinyboard only parses post markup when it needs to, and keeps post-markup HTML in the database. This
|
||||
// will significantly impact performance when enabled.
|
||||
*
|
||||
*/
|
||||
$config['markup_repair_tidy'] = false;
|
||||
|
||||
|
||||
$config['image_reject_repost'] = false;
|
||||
$config['flood_time'] = 0;
|
||||
// Minimum time between between each post with the exact same content AND same IP address.
|
||||
$config['flood_time_ip'] = 0;
|
||||
|
||||
$config['filters'] = array();
|
||||
$config['always_noko'] = false; // the migration script now relies on this default behavior, we can turn this on later.
|
||||
// </ Added by Zero >
|
||||
|
||||
// Changes made via web editor by "admin" @ Tue, 02 Jun 2020 23:16:58 -0700:
|
||||
$config['debug'] = true;
|
||||
|
||||
|
||||
// Changes made via web editor by "admin" @ Tue, 02 Jun 2020 23:24:29 -0700:
|
||||
$config['debug'] = false;
|
||||
$config['verbose_errors'] = false;
|
||||
|
||||
|
||||
/*
|
||||
* ====================
|
||||
* Javascript
|
||||
* ====================
|
||||
*/
|
||||
|
||||
// Additional Javascript files to include on board index and thread pages. See js/ for available scripts.
|
||||
$config['additional_javascript'][] = 'js/jquery.min.js';
|
||||
$config['additional_javascript'][] = 'js/inline-expanding.js';
|
||||
$config['additional_javascript'][] = 'js/multi-image.js'; // required when using multi file upload
|
||||
$config['additional_javascript'][] = 'js/local-time.js';
|
||||
$config['additional_javascript'][] = 'js/auto-reload.js';
|
||||
$config['additional_javascript'][] = 'js/post-hover.js';
|
||||
$config['additional_javascript'][] = 'js/style-select.js';
|
||||
|
||||
// Some scripts require jQuery. Check the comments in script files to see what's needed. When enabling
|
||||
// jQuery, you should first empty the array so that "js/query.min.js" can be the first, and then re-add
|
||||
// "js/inline-expanding.js" or else the inline-expanding script might not interact properly with other
|
||||
// scripts.
|
||||
// $config['additional_javascript'] = array();
|
||||
// $config['additional_javascript'][] = 'js/jquery.min.js';
|
||||
// $config['additional_javascript'][] = 'js/inline-expanding.js';
|
||||
// $config['additional_javascript'][] = 'js/auto-reload.js';
|
||||
// $config['additional_javascript'][] = 'js/post-hover.js';
|
||||
// $config['additional_javascript'][] = 'js/style-select.js';
|
||||
|
||||
// Where these script files are located on the web. Defaults to $config['root'].
|
||||
// $config['additional_javascript_url'] = 'http://static.example.org/tinyboard-javascript-stuff/';
|
||||
|
||||
// Compile all additional scripts into one file ($config['file_script']) instead of including them seperately.
|
||||
$config['additional_javascript_compile'] = false;
|
||||
|
||||
// Minify Javascript using http://code.google.com/p/minify/.
|
||||
$config['minify_js'] = false;
|
||||
|
||||
// Dispatch thumbnail loading and image configuration with JavaScript. It will need a certain javascript
|
||||
// code to work.
|
||||
$config['javascript_image_dispatch'] = false;
|
||||
|
||||
$config['multiimage_method'] = 'each';
|
||||
|
||||
|
||||
$config['mod']['show_ip'] = DISABLED;
|
||||
$config['mod']['move'] = MOD;
|
||||
|
||||
// Changes made via web editor by "admin" @ Sun, 23 Aug 2020 16:45:14 -0700:
|
||||
$config['force_image_op'] = false;
|
||||
|
||||
|
||||
// Changes made via web editor by "admin" @ Sun, 23 Aug 2020 16:48:22 -0700:
|
||||
$config['force_body_op'] = false;
|
||||
|
||||
|
||||
// Changes made via web editor by "admin" @ Sun, 23 Aug 2020 17:38:52 -0700:
|
||||
$config['flood_time'] = 0;
|
||||
$config['flood_time_ip'] = 0;
|
||||
$config['flood_time_same'] = 0;
|
||||
|
||||
|
||||
// Changes made via web editor by "admin" @ Wed, 26 Aug 2020 20:15:11 -0700:
|
||||
$config['min_body'] = 5;
|
||||
|
||||
|
||||
// Changes made via web editor by "admin" @ Wed, 26 Aug 2020 20:15:44 -0700:
|
||||
$config['force_image_op'] = true;
|
||||
$config['min_body'] = 15;
|
||||
|
||||
|
||||
// Changes made via web editor by "admin" @ Sat, 29 Aug 2020 13:26:51 -0700:
|
||||
$config['force_image_op'] = false;
|
||||
|
||||
|
||||
// Changes made via web editor by "admin" @ Sat, 29 Aug 2020 23:13:46 -0700:
|
||||
$config['cookies']['salt'] = 'ZGZkYWU3NGUwZDNiYjU2MDEwZmRkMX';
|
||||
|
||||
|
||||
// Changes made via web editor by "admin" @ Sat, 29 Aug 2020 23:21:09 -0700:
|
||||
$config['cookies']['salt'] = 'ZGZkYWU3NGUwZDNiYjU2MDEwZmRkMA';
|
||||
|
||||
|
||||
// Changes made via web editor by "admin" @ Sun, 30 Aug 2020 10:48:36 -0700:
|
||||
$config['max_body'] = 100000;
|
||||
|
||||
|
||||
// Changes made via web editor by "admin" @ Sun, 30 Aug 2020 15:25:41 -0700:
|
||||
$config['max_links'] = 40;
|
||||
|
|
@ -35,8 +35,9 @@ function is_valid_webm($ffprobe_out) {
|
|||
}
|
||||
if ((count($ffprobe_out['streams']) > 1) && (!$config['webm']['allow_audio']))
|
||||
return array('code' => 3, 'msg' => $config['error']['webmhasaudio']."error 4");
|
||||
if (empty($ffprobe_out['streams'][0]['width']) || (empty($ffprobe_out['streams'][0]['height'])))
|
||||
if ((empty($ffprobe_out['streams'][0]['width']) || (empty($ffprobe_out['streams'][0]['height']))) && !$config['webm']['allow_audio']) {
|
||||
return array('code' => 2, 'msg' => $config['error']['invalidwebm']."error 5");
|
||||
}
|
||||
if ($ffprobe_out['format']['duration'] > $config['webm']['max_length'])
|
||||
return array('code' => 4, 'msg' => sprintf($config['error']['webmtoolong'], $config['webm']['max_length'])."error 6");
|
||||
}
|
||||
|
|
29
post.php
29
post.php
|
@ -726,7 +726,7 @@ function handle_post(){
|
|||
$stripped_whitespace = preg_replace('/[\s]/u', '', $post['body']);
|
||||
|
||||
print_err(print_r(preg_last_error(), true));
|
||||
if (preg_last_error() != PREG_BAD_UTF8_ERROR) {
|
||||
if (preg_last_error() == PREG_BAD_UTF8_ERROR) {
|
||||
print_err("Bad unicode preg error");
|
||||
}
|
||||
|
||||
|
@ -936,6 +936,8 @@ function handle_post(){
|
|||
|
||||
$post['body'] = escape_markup_modifiers($post['body']);
|
||||
|
||||
print_err("body escaped");
|
||||
|
||||
if ($mod && isset($post['raw']) && $post['raw']) {
|
||||
$post['body'] .= "\n<tinyboard raw html>1</tinyboard>";
|
||||
}
|
||||
|
@ -964,6 +966,8 @@ function handle_post(){
|
|||
}
|
||||
}
|
||||
|
||||
print_err("flag stuff block OK");
|
||||
|
||||
if ($config['user_flag'] && isset($_POST['user_flag']))
|
||||
if (!empty($_POST['user_flag']) ){
|
||||
|
||||
|
@ -978,16 +982,22 @@ function handle_post(){
|
|||
"\n<tinyboard flag alt>" . $flag_alt . "</tinyboard>";
|
||||
}
|
||||
|
||||
print_err("user flag block ok");
|
||||
|
||||
if ($config['allowed_tags'] && $post['op'] && isset($_POST['tag']) && isset($config['allowed_tags'][$_POST['tag']])) {
|
||||
$post['body'] .= "\n<tinyboard tag>" . $_POST['tag'] . "</tinyboard>";
|
||||
}
|
||||
|
||||
print_err("allowed tags block ok");
|
||||
|
||||
if (!$dropped_post)
|
||||
if ($config['proxy_save'] && isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
|
||||
$proxy = preg_replace("/[^0-9a-fA-F.,: ]/", '', $_SERVER['HTTP_X_FORWARDED_FOR']);
|
||||
$post['body'] .= "\n<tinyboard proxy>".$proxy."</tinyboard>";
|
||||
}
|
||||
|
||||
print_err("proxy save block ok");
|
||||
|
||||
if (mysql_version() >= 50503) {
|
||||
$post['body_nomarkup'] = $post['body']; // Assume we're using the utf8mb4 charset
|
||||
} else {
|
||||
|
@ -1005,6 +1015,8 @@ function handle_post(){
|
|||
}
|
||||
}
|
||||
|
||||
print_err("body nomarkup block OK");
|
||||
|
||||
$post['tracked_cites'] = markup($post['body'], true);
|
||||
|
||||
print_err("Process post tags flags and other stuff");
|
||||
|
@ -1019,11 +1031,14 @@ function handle_post(){
|
|||
|
||||
foreach ($post['files'] as $key => &$file) {
|
||||
if ($post['op'] && $config['allowed_ext_op']) {
|
||||
if (!in_array($file['extension'], $config['allowed_ext_op']))
|
||||
if (!in_array($file['extension'], $config['allowed_ext_op'])) {
|
||||
print_err("Unknown extension (1)!");
|
||||
error($config['error']['unknownext']);
|
||||
}
|
||||
elseif (!in_array($file['extension'], $config['allowed_ext']) && !in_array($file['extension'], $config['allowed_ext_files']))
|
||||
} elseif (!in_array($file['extension'], $config['allowed_ext']) && !in_array($file['extension'], $config['allowed_ext_files'])) {
|
||||
print_err("Unknown extension (2)!");
|
||||
error($config['error']['unknownext']);
|
||||
}
|
||||
|
||||
$file['is_an_image'] = !in_array($file['extension'], $config['allowed_ext_files']);
|
||||
|
||||
|
@ -1158,7 +1173,10 @@ function handle_post(){
|
|||
$file['width'] = $image->size->width;
|
||||
$file['height'] = $image->size->height;
|
||||
|
||||
print_err("image size width and height");
|
||||
|
||||
if ($config['spoiler_images'] && isset($_POST['spoiler'])) {
|
||||
print_err("spoiler set");
|
||||
$file['thumb'] = 'spoiler';
|
||||
|
||||
$size = @getimagesize($config['spoiler_image']);
|
||||
|
@ -1169,20 +1187,25 @@ function handle_post(){
|
|||
$image->size->height <= $config['thumb_height'] &&
|
||||
$file['extension'] == ($config['thumb_ext'] ? $config['thumb_ext'] : $file['extension'])) {
|
||||
|
||||
print_err("minimum copy resize");
|
||||
// Copy, because there's nothing to resize
|
||||
copy($file['tmp_name'], $file['thumb']);
|
||||
|
||||
$file['thumbwidth'] = $image->size->width;
|
||||
$file['thumbheight'] = $image->size->height;
|
||||
} else {
|
||||
print_err("thumbnail resize");
|
||||
$thumb = $image->resize(
|
||||
$config['thumb_ext'] ? $config['thumb_ext'] : $file['extension'],
|
||||
$post['op'] ? $config['thumb_op_width'] : $config['thumb_width'],
|
||||
$post['op'] ? $config['thumb_op_height'] : $config['thumb_height']
|
||||
);
|
||||
print_err("thumbnail resize ok");
|
||||
|
||||
$thumb->to($file['thumb']);
|
||||
|
||||
print_err("thumbnail save ok");
|
||||
|
||||
$file['thumbwidth'] = $thumb->width;
|
||||
$file['thumbheight'] = $thumb->height;
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<?php
|
||||
require '/var/www/html/inc/functions.php';
|
||||
require './inc/functions.php';
|
||||
|
||||
$method = $_SERVER['REQUEST_METHOD'];
|
||||
if ($method == 'POST') {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<?php
|
||||
$name = $contactmethod = $email = $application = $antispam = $displaymessage = "";
|
||||
require '/var/www/html/inc/functions.php';
|
||||
require './inc/functions.php';
|
||||
if (isset ($_POST["antispam"])){
|
||||
if ($_POST["antispam"] == "DUCK"){
|
||||
$namecheck = ! empty($_POST["name"]);
|
||||
|
|
|
@ -1,55 +0,0 @@
|
|||
<?php
|
||||
$theme = array();
|
||||
|
||||
// Theme name
|
||||
$theme['name'] = 'Overboard (Ukko)';
|
||||
// Description (you can use Tinyboard markup here)
|
||||
$theme['description'] = 'Board with threads and messages from all boards';
|
||||
$theme['version'] = 'v0.2';
|
||||
|
||||
// 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',
|
||||
'default' => '*',
|
||||
'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);
|
||||
file_write($settings['uri'] . '/ukko.js', Element('themes/ukko/ukko.js', array()));
|
||||
}
|
||||
}
|
||||
|
|
@ -1,162 +0,0 @@
|
|||
<?php
|
||||
require 'info.php';
|
||||
|
||||
function ukko_build($action, $settings) {
|
||||
global $config;
|
||||
|
||||
$ukko = new ukko();
|
||||
$ukko->settings = $settings;
|
||||
|
||||
if (! ($action == 'all' || $action == 'post' || $action == 'post-thread' || $action == 'post-delete')) {
|
||||
return;
|
||||
}
|
||||
|
||||
$action = generation_strategy('sb_ukko', array());
|
||||
|
||||
if ($action == 'delete') {
|
||||
file_unlink($settings['uri'] . '/index.html');
|
||||
if ($config['api']['enabled']) {
|
||||
$jsonFilename = $settings['uri'] . '/0.json';
|
||||
file_unlink($jsonFilename);
|
||||
$jsonFilename = $settings['uri'] . '/catalog.json';
|
||||
file_unlink($jsonFilename);
|
||||
$jsonFilename = $settings['uri'] . '/threads.json';
|
||||
file_unlink($jsonFilename);
|
||||
}
|
||||
}
|
||||
elseif ($action == 'rebuild') {
|
||||
file_write($settings['uri'] . '/index.html', $ukko->build());
|
||||
}
|
||||
}
|
||||
|
||||
class ukko {
|
||||
public $settings;
|
||||
public function build($mod = false) {
|
||||
global $config;
|
||||
$boards = listBoards();
|
||||
|
||||
$body = '';
|
||||
$overflow = array();
|
||||
$board = array(
|
||||
'dir' => $this->settings['uri'] . "/",
|
||||
'url' => $this->settings['uri'],
|
||||
'uri' => $this->settings['uri'],
|
||||
'name' => $this->settings['title'],
|
||||
'title' => sprintf($this->settings['subtitle'], $this->settings['thread_limit'])
|
||||
);
|
||||
|
||||
$boardsforukko = array();
|
||||
$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']);
|
||||
array_push($boardsforukko,$_board);
|
||||
}
|
||||
$query = preg_replace('/UNION ALL $/', 'ORDER BY `bump` DESC', $query);
|
||||
$query = query($query) or error(db_error());
|
||||
|
||||
$count = 0;
|
||||
$threads = array();
|
||||
if ($config['api']['enabled']) {
|
||||
$apithreads = 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, $mod ? '?/' : $config['root'], $mod);
|
||||
|
||||
$posts = prepare(sprintf("SELECT * FROM ``posts_%s`` WHERE `thread` = :id ORDER BY `sticky` DESC, `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['files'])
|
||||
$num_images++;
|
||||
$post2 = new Post($po, $mod ? '?/' : $config['root'], $mod);
|
||||
$thread->add($post2);
|
||||
|
||||
}
|
||||
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 `files` 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);
|
||||
if ($config['api']['enabled']) {
|
||||
array_push($apithreads,$thread);
|
||||
}
|
||||
} 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="/'.$this->settings['uri'].'/ukko.js"></script>';
|
||||
|
||||
// json api
|
||||
if ($config['api']['enabled']) {
|
||||
require_once __DIR__. '/../../../inc/api.php';
|
||||
$api = new Api();
|
||||
$jsonFilename = $board['dir'] . '0.json';
|
||||
$json = json_encode($api->translatePage($apithreads));
|
||||
file_write($jsonFilename, $json);
|
||||
|
||||
|
||||
$catalog = array();
|
||||
$catalog[0] = $apithreads;
|
||||
|
||||
$json = json_encode($api->translateCatalog($catalog));
|
||||
$jsonFilename = $board['dir'] . 'catalog.json';
|
||||
file_write($jsonFilename, $json);
|
||||
|
||||
$json = json_encode($api->translateCatalog($catalog, true));
|
||||
$jsonFilename = $board['dir'] . 'threads.json';
|
||||
file_write($jsonFilename, $json);
|
||||
}
|
||||
$antibot = null;
|
||||
if (!$antibot) {
|
||||
$antibot = create_antibot($board['uri']);
|
||||
}
|
||||
$antibot->reset();
|
||||
|
||||
return Element('index.html', array(
|
||||
'config' => $config,
|
||||
'board' => $board,
|
||||
'no_post_form' => $config['overboard_post_form'] ? false : true,
|
||||
'body' => $body,
|
||||
'mod' => $mod,
|
||||
'boardlist' => createBoardlist($mod),
|
||||
'boards' => $boardsforukko,
|
||||
'antibot' => $antibot )
|
||||
);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
?>
|
Binary file not shown.
Before Width: | Height: | Size: 13 KiB |
|
@ -1,116 +0,0 @@
|
|||
(function(){
|
||||
|
||||
var cache = new Array(),
|
||||
thread = false,
|
||||
loading = false,
|
||||
ukkotimer = false;
|
||||
|
||||
if (localStorage.hiddenboards === undefined) {
|
||||
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 = modRoot + 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);
|
||||
});
|
||||
|
||||
})();
|
|
@ -1,55 +0,0 @@
|
|||
<?php
|
||||
$theme = array();
|
||||
|
||||
// Theme name
|
||||
$theme['name'] = 'Overboard (Ukko2)';
|
||||
// Description (you can use Tinyboard markup here)
|
||||
$theme['description'] = 'Board with threads and messages from all boards';
|
||||
$theme['version'] = 'v0.2';
|
||||
|
||||
// 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',
|
||||
'default' => '*',
|
||||
'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' => 'included boards',
|
||||
'name' => 'include',
|
||||
'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'] = 'ukko2_build';
|
||||
$theme['install_callback'] = 'ukko2_install';
|
||||
|
||||
if(!function_exists('ukko2_install')) {
|
||||
function ukko2_install($settings) {
|
||||
if (!file_exists($settings['uri']))
|
||||
@mkdir($settings['uri'], 0777) or error("Couldn't create " . $settings['uri'] . ". Check permissions.", true);
|
||||
file_write($settings['uri'] . '/ukko.js', Element('themes/ukko/ukko.js', array()));
|
||||
}
|
||||
}
|
||||
|
|
@ -1,161 +0,0 @@
|
|||
<?php
|
||||
require 'info.php';
|
||||
|
||||
function ukko2_build($action, $settings) {
|
||||
global $config;
|
||||
|
||||
$ukko2 = new ukko2();
|
||||
$ukko2->settings = $settings;
|
||||
|
||||
if (! ($action == 'all' || $action == 'post' || $action == 'post-thread' || $action == 'post-delete')) {
|
||||
return;
|
||||
}
|
||||
|
||||
$action = generation_strategy('sb_ukko2', array());
|
||||
|
||||
if ($action == 'delete') {
|
||||
file_unlink($settings['uri'] . '/index.html');
|
||||
if ($config['api']['enabled']) {
|
||||
$jsonFilename = $settings['uri'] . '/0.json';
|
||||
file_unlink($jsonFilename);
|
||||
$jsonFilename = $settings['uri'] . '/catalog.json';
|
||||
file_unlink($jsonFilename);
|
||||
$jsonFilename = $settings['uri'] . '/threads.json';
|
||||
file_unlink($jsonFilename);
|
||||
}
|
||||
}
|
||||
elseif ($action == 'rebuild') {
|
||||
file_write($settings['uri'] . '/index.html', $ukko2->build());
|
||||
}
|
||||
}
|
||||
|
||||
class ukko2 {
|
||||
public $settings;
|
||||
public function build($mod = false) {
|
||||
global $config;
|
||||
$boards = listBoards();
|
||||
|
||||
$body = '';
|
||||
$overflow = array();
|
||||
$board = array(
|
||||
'dir' => $this->settings['uri'] . "/",
|
||||
'url' => $this->settings['uri'],
|
||||
'uri' => $this->settings['uri'],
|
||||
'name' => $this->settings['title'],
|
||||
'title' => sprintf($this->settings['subtitle'], $this->settings['thread_limit'])
|
||||
);
|
||||
$boardsforukko2 = array();
|
||||
$query = '';
|
||||
foreach($boards as &$_board) {
|
||||
if(in_array($_board['uri'], explode(' ', $this->settings['include']))){
|
||||
$query .= sprintf("SELECT *, '%s' AS `board` FROM ``posts_%s`` WHERE `thread` IS NULL UNION ALL ", $_board['uri'], $_board['uri']);
|
||||
array_push($boardsforukko2,$_board);
|
||||
}
|
||||
}
|
||||
$query = preg_replace('/UNION ALL $/', 'ORDER BY `sticky` DESC ,`bump` DESC', $query);
|
||||
$query = query($query) or error(db_error());
|
||||
|
||||
$count = 0;
|
||||
$threads = array();
|
||||
if ($config['api']['enabled']) {
|
||||
$apithreads = 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, $mod ? '?/' : $config['root'], $mod);
|
||||
|
||||
$posts = prepare(sprintf("SELECT * FROM ``posts_%s`` WHERE `thread` = :id ORDER BY `sticky` DESC, `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['files'])
|
||||
$num_images++;
|
||||
$post2 = new Post($po, $mod ? '?/' : $config['root'], $mod);
|
||||
$thread->add($post2);
|
||||
|
||||
}
|
||||
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 `files` 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);
|
||||
if ($config['api']['enabled']) {
|
||||
array_push($apithreads,$thread);
|
||||
}
|
||||
} 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="/'.$this->settings['uri'].'/ukko.js"></script>';
|
||||
|
||||
// json api
|
||||
if ($config['api']['enabled']) {
|
||||
require_once __DIR__. '/../../../inc/api.php';
|
||||
$api = new Api();
|
||||
$jsonFilename = $board['dir'] . '0.json';
|
||||
$json = json_encode($api->translatePage($apithreads));
|
||||
file_write($jsonFilename, $json);
|
||||
|
||||
|
||||
$catalog = array();
|
||||
$catalog[0] = $apithreads;
|
||||
|
||||
$json = json_encode($api->translateCatalog($catalog));
|
||||
$jsonFilename = $board['dir'] . 'catalog.json';
|
||||
file_write($jsonFilename, $json);
|
||||
|
||||
$json = json_encode($api->translateCatalog($catalog, true));
|
||||
$jsonFilename = $board['dir'] . 'threads.json';
|
||||
file_write($jsonFilename, $json);
|
||||
}
|
||||
$antibot = null;
|
||||
if (!$antibot) {
|
||||
$antibot = create_antibot($board['uri']);
|
||||
}
|
||||
$antibot->reset();
|
||||
|
||||
return Element('index.html', array(
|
||||
'config' => $config,
|
||||
'board' => $board,
|
||||
'no_post_form' => $config['overboard_post_form'] ? false : true,
|
||||
'body' => $body,
|
||||
'mod' => $mod,
|
||||
'boardlist' => createBoardlist($mod),
|
||||
'boards' => $boardsforukko2,
|
||||
'antibot' => $antibot )
|
||||
);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
?>
|
Binary file not shown.
Before Width: | Height: | Size: 13 KiB |
|
@ -1,116 +0,0 @@
|
|||
(function(){
|
||||
|
||||
var cache = new Array(),
|
||||
thread = false,
|
||||
loading = false,
|
||||
ukkotimer = false;
|
||||
|
||||
if (localStorage.hiddenboards === undefined) {
|
||||
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 = modRoot + 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);
|
||||
});
|
||||
|
||||
})();
|
|
@ -1,55 +0,0 @@
|
|||
<?php
|
||||
$theme = array();
|
||||
|
||||
// Theme name
|
||||
$theme['name'] = 'Overboard (Ukko3)';
|
||||
// Description (you can use Tinyboard markup here)
|
||||
$theme['description'] = 'Board with threads and messages from all boards';
|
||||
$theme['version'] = 'v0.2';
|
||||
|
||||
// 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',
|
||||
'default' => '*',
|
||||
'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' => 'included boards',
|
||||
'name' => 'include',
|
||||
'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'] = 'ukko3_build';
|
||||
$theme['install_callback'] = 'ukko3_install';
|
||||
|
||||
if(!function_exists('ukko3_install')) {
|
||||
function ukko3_install($settings) {
|
||||
if (!file_exists($settings['uri']))
|
||||
@mkdir($settings['uri'], 0777) or error("Couldn't create " . $settings['uri'] . ". Check permissions.", true);
|
||||
file_write($settings['uri'] . '/ukko.js', Element('themes/ukko/ukko.js', array()));
|
||||
}
|
||||
}
|
||||
|
|
@ -1,162 +0,0 @@
|
|||
<?php
|
||||
require 'info.php';
|
||||
|
||||
function ukko3_build($action, $settings) {
|
||||
global $config;
|
||||
|
||||
$ukko3 = new ukko3();
|
||||
$ukko3->settings = $settings;
|
||||
|
||||
if (! ($action == 'all' || $action == 'post' || $action == 'post-thread' || $action == 'post-delete')) {
|
||||
return;
|
||||
}
|
||||
|
||||
$action = generation_strategy('sb_ukko3', array());
|
||||
|
||||
if ($action == 'delete') {
|
||||
file_unlink($settings['uri'] . '/index.html');
|
||||
if ($config['api']['enabled']) {
|
||||
$jsonFilename = $settings['uri'] . '/0.json';
|
||||
file_unlink($jsonFilename);
|
||||
$jsonFilename = $settings['uri'] . '/catalog.json';
|
||||
file_unlink($jsonFilename);
|
||||
$jsonFilename = $settings['uri'] . '/threads.json';
|
||||
file_unlink($jsonFilename);
|
||||
}
|
||||
}
|
||||
elseif ($action == 'rebuild') {
|
||||
file_write($settings['uri'] . '/index.html', $ukko3->build());
|
||||
}
|
||||
}
|
||||
|
||||
class ukko3 {
|
||||
public $settings;
|
||||
public function build($mod = false) {
|
||||
global $config;
|
||||
$boards = listBoards();
|
||||
|
||||
$body = '';
|
||||
$overflow = array();
|
||||
$board = array(
|
||||
'dir' => $this->settings['uri'] . "/",
|
||||
'url' => $this->settings['uri'],
|
||||
'uri' => $this->settings['uri'],
|
||||
'name' => $this->settings['title'],
|
||||
'title' => sprintf($this->settings['subtitle'], $this->settings['thread_limit'])
|
||||
);
|
||||
|
||||
$boardsforukko3 = array();
|
||||
$query = '';
|
||||
foreach($boards as &$_board) {
|
||||
if(in_array($_board['uri'], explode(' ', $this->settings['include']))){
|
||||
$query .= sprintf("SELECT *, '%s' AS `board` FROM ``posts_%s`` WHERE `thread` IS NULL UNION ALL ", $_board['uri'], $_board['uri']);
|
||||
array_push($boardsforukko3,$_board);
|
||||
}
|
||||
}
|
||||
$query = preg_replace('/UNION ALL $/', 'ORDER BY `sticky` DESC ,`bump` DESC', $query);
|
||||
$query = query($query) or error(db_error());
|
||||
|
||||
$count = 0;
|
||||
$threads = array();
|
||||
if ($config['api']['enabled']) {
|
||||
$apithreads = 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, $mod ? '?/' : $config['root'], $mod);
|
||||
|
||||
$posts = prepare(sprintf("SELECT * FROM ``posts_%s`` WHERE `thread` = :id ORDER BY `sticky` DESC, `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['files'])
|
||||
$num_images++;
|
||||
$post2 = new Post($po, $mod ? '?/' : $config['root'], $mod);
|
||||
$thread->add($post2);
|
||||
|
||||
}
|
||||
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 `files` 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);
|
||||
if ($config['api']['enabled']) {
|
||||
array_push($apithreads,$thread);
|
||||
}
|
||||
} 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="/'.$this->settings['uri'].'/ukko.js"></script>';
|
||||
|
||||
// json api
|
||||
if ($config['api']['enabled']) {
|
||||
require_once __DIR__. '/../../../inc/api.php';
|
||||
$api = new Api();
|
||||
$jsonFilename = $board['dir'] . '0.json';
|
||||
$json = json_encode($api->translatePage($apithreads));
|
||||
file_write($jsonFilename, $json);
|
||||
|
||||
|
||||
$catalog = array();
|
||||
$catalog[0] = $apithreads;
|
||||
|
||||
$json = json_encode($api->translateCatalog($catalog));
|
||||
$jsonFilename = $board['dir'] . 'catalog.json';
|
||||
file_write($jsonFilename, $json);
|
||||
|
||||
$json = json_encode($api->translateCatalog($catalog, true));
|
||||
$jsonFilename = $board['dir'] . 'threads.json';
|
||||
file_write($jsonFilename, $json);
|
||||
}
|
||||
$antibot = null;
|
||||
if (!$antibot) {
|
||||
$antibot = create_antibot($board['uri']);
|
||||
}
|
||||
$antibot->reset();
|
||||
|
||||
return Element('index.html', array(
|
||||
'config' => $config,
|
||||
'board' => $board,
|
||||
'no_post_form' => $config['overboard_post_form'] ? false : true,
|
||||
'body' => $body,
|
||||
'mod' => $mod,
|
||||
'boardlist' => createBoardlist($mod),
|
||||
'boards' => $boardsforukko3,
|
||||
'antibot' => $antibot )
|
||||
);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
?>
|
Binary file not shown.
Before Width: | Height: | Size: 13 KiB |
|
@ -1,116 +0,0 @@
|
|||
(function(){
|
||||
|
||||
var cache = new Array(),
|
||||
thread = false,
|
||||
loading = false,
|
||||
ukkotimer = false;
|
||||
|
||||
if (localStorage.hiddenboards === undefined) {
|
||||
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 = modRoot + 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);
|
||||
});
|
||||
|
||||
})();
|
|
@ -1,55 +0,0 @@
|
|||
<?php
|
||||
$theme = array();
|
||||
|
||||
// Theme name
|
||||
$theme['name'] = 'Overboard (Ukko) 4';
|
||||
// Description (you can use Tinyboard markup here)
|
||||
$theme['description'] = 'Board with threads and messages from all boards';
|
||||
$theme['version'] = 'v0.2';
|
||||
|
||||
// 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',
|
||||
'default' => '*',
|
||||
'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'] = 'ukko4_build';
|
||||
$theme['install_callback'] = 'ukko4_install';
|
||||
|
||||
if(!function_exists('ukko4_install')) {
|
||||
function ukko4_install($settings) {
|
||||
if (!file_exists($settings['uri']))
|
||||
@mkdir($settings['uri'], 0777) or error("Couldn't create " . $settings['uri'] . ". Check permissions.", true);
|
||||
file_write($settings['uri'] . '/ukko.js', Element('themes/ukko/ukko.js', array()));
|
||||
}
|
||||
}
|
||||
|
|
@ -1,162 +0,0 @@
|
|||
<?php
|
||||
require 'info.php';
|
||||
|
||||
function ukko4_build($action, $settings) {
|
||||
global $config;
|
||||
|
||||
$ukko = new ukko();
|
||||
$ukko->settings = $settings;
|
||||
|
||||
if (! ($action == 'all' || $action == 'post' || $action == 'post-thread' || $action == 'post-delete')) {
|
||||
return;
|
||||
}
|
||||
|
||||
$action = generation_strategy('sb_ukko', array());
|
||||
|
||||
if ($action == 'delete') {
|
||||
file_unlink($settings['uri'] . '/index.html');
|
||||
if ($config['api']['enabled']) {
|
||||
$jsonFilename = $settings['uri'] . '/0.json';
|
||||
file_unlink($jsonFilename);
|
||||
$jsonFilename = $settings['uri'] . '/catalog.json';
|
||||
file_unlink($jsonFilename);
|
||||
$jsonFilename = $settings['uri'] . '/threads.json';
|
||||
file_unlink($jsonFilename);
|
||||
}
|
||||
}
|
||||
elseif ($action == 'rebuild') {
|
||||
file_write($settings['uri'] . '/index.html', $ukko->build());
|
||||
}
|
||||
}
|
||||
|
||||
class ukko4 {
|
||||
public $settings;
|
||||
public function build($mod = false) {
|
||||
global $config;
|
||||
$boards = listBoards();
|
||||
|
||||
$body = '';
|
||||
$overflow = array();
|
||||
$board = array(
|
||||
'dir' => $this->settings['uri'] . "/",
|
||||
'url' => $this->settings['uri'],
|
||||
'uri' => $this->settings['uri'],
|
||||
'name' => $this->settings['title'],
|
||||
'title' => sprintf($this->settings['subtitle'], $this->settings['thread_limit'])
|
||||
);
|
||||
|
||||
$boardsforukko = array();
|
||||
$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']);
|
||||
array_push($boardsforukko,$_board);
|
||||
}
|
||||
$query = preg_replace('/UNION ALL $/', 'ORDER BY `bump` DESC', $query);
|
||||
$query = query($query) or error(db_error());
|
||||
|
||||
$count = 0;
|
||||
$threads = array();
|
||||
if ($config['api']['enabled']) {
|
||||
$apithreads = 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, $mod ? '?/' : $config['root'], $mod);
|
||||
|
||||
$posts = prepare(sprintf("SELECT * FROM ``posts_%s`` WHERE `thread` = :id ORDER BY `sticky` DESC, `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['files'])
|
||||
$num_images++;
|
||||
$post2 = new Post($po, $mod ? '?/' : $config['root'], $mod);
|
||||
$thread->add($post2);
|
||||
|
||||
}
|
||||
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 `files` 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);
|
||||
if ($config['api']['enabled']) {
|
||||
array_push($apithreads,$thread);
|
||||
}
|
||||
} 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="/'.$this->settings['uri'].'/ukko.js"></script>';
|
||||
|
||||
// json api
|
||||
if ($config['api']['enabled']) {
|
||||
require_once __DIR__. '/../../../inc/api.php';
|
||||
$api = new Api();
|
||||
$jsonFilename = $board['dir'] . '0.json';
|
||||
$json = json_encode($api->translatePage($apithreads));
|
||||
file_write($jsonFilename, $json);
|
||||
|
||||
|
||||
$catalog = array();
|
||||
$catalog[0] = $apithreads;
|
||||
|
||||
$json = json_encode($api->translateCatalog($catalog));
|
||||
$jsonFilename = $board['dir'] . 'catalog.json';
|
||||
file_write($jsonFilename, $json);
|
||||
|
||||
$json = json_encode($api->translateCatalog($catalog, true));
|
||||
$jsonFilename = $board['dir'] . 'threads.json';
|
||||
file_write($jsonFilename, $json);
|
||||
}
|
||||
$antibot = null;
|
||||
if (!$antibot) {
|
||||
$antibot = create_antibot($board['uri']);
|
||||
}
|
||||
$antibot->reset();
|
||||
|
||||
return Element('index.html', array(
|
||||
'config' => $config,
|
||||
'board' => $board,
|
||||
'no_post_form' => $config['overboard_post_form'] ? false : true,
|
||||
'body' => $body,
|
||||
'mod' => $mod,
|
||||
'boardlist' => createBoardlist($mod),
|
||||
'boards' => $boardsforukko,
|
||||
'antibot' => $antibot )
|
||||
);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
?>
|
Binary file not shown.
Before Width: | Height: | Size: 13 KiB |
|
@ -1,116 +0,0 @@
|
|||
(function(){
|
||||
|
||||
var cache = new Array(),
|
||||
thread = false,
|
||||
loading = false,
|
||||
ukkotimer = false;
|
||||
|
||||
if (localStorage.hiddenboards === undefined) {
|
||||
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 = modRoot + 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);
|
||||
});
|
||||
|
||||
})();
|
Loading…
Reference in New Issue