From 9b8326473555d2419c1c62f957893eb97e6082eb Mon Sep 17 00:00:00 2001 From: Riku Rouvila Date: Wed, 2 Jan 2013 19:40:30 +0200 Subject: [PATCH] Here we go --- info.php | 53 ++++++++++++++++++++++++++ theme.php | 111 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ thumb.png | Bin 0 -> 15123 bytes ukko.js | 37 ++++++++++++++++++ 4 files changed, 201 insertions(+) create mode 100644 info.php create mode 100644 theme.php create mode 100644 thumb.png create mode 100644 ukko.js diff --git a/info.php b/info.php new file mode 100644 index 00000000..34d59d4e --- /dev/null +++ b/info.php @@ -0,0 +1,53 @@ + 'Board name', + 'name' => 'title', + 'type' => 'text', + 'default' => 'Ukko' + ); + $theme['config'][] = Array( + 'title' => 'Board URI', + 'name' => 'uri', + 'type' => 'text', + 'comment' => '(ukko for example)' + ); + $theme['config'][] = Array( + 'title' => 'Subtitle', + 'name' => 'subtitle', + 'type' => 'text', + 'comment' => '(%s = thread limit. for example "%s freshly bumped threads")' + ); + $theme['config'][] = Array( + 'title' => 'Excluded boards', + 'name' => 'exclude', + 'type' => 'text', + 'comment' => '(space seperated)' + ); + $theme['config'][] = Array( + 'title' => 'Number of threads', + 'name' => 'thread_limit', + 'type' => 'text', + 'default' => '15', + ); + // Unique function name for building everything + $theme['build_function'] = 'ukko_build'; + $theme['install_callback'] = 'ukko_install'; + + if(!function_exists('ukko_install')) { + function ukko_install($settings) { + if (!file_exists($settings['uri'])) + @mkdir($settings['uri'], 0777) or error("Couldn't create " . $settings['uri'] . ". Check permissions.", true); + } + } + diff --git a/theme.php b/theme.php new file mode 100644 index 00000000..6fa5fa7e --- /dev/null +++ b/theme.php @@ -0,0 +1,111 @@ +settings = $settings; + $ukko->build(); + } + + class ukko { + public $settings; + public function build($mod = false) { + global $config; + $boards = listBoards(); + + $body = ''; + $overflow = array(); + $board = array( + 'url' => $this->settings['uri'], + 'name' => $this->settings['title'], + 'title' => sprintf($this->settings['subtitle'], $this->settings['thread_limit']) + ); + + $query = ''; + foreach($boards as &$_board) { + if(in_array($_board['uri'], explode(' ', $this->settings['exclude']))) + continue; + $query .= sprintf("SELECT *, '%s' AS `board` FROM `posts_%s` WHERE `thread` IS NULL UNION ALL ", $_board['uri'], $_board['uri']); + } + $query = preg_replace('/UNION ALL $/', 'ORDER BY `bump` DESC', $query); + $query = query($query) or error(db_error()); + + $count = 0; + $threads = array(); + while($post = $query->fetch()) { + + if(!isset($threads[$post['board']])) { + $threads[$post['board']] = 1; + } else { + $threads[$post['board']] += 1; + } + + if($count < $this->settings['thread_limit']) { + openBoard($post['board']); + $thread = new Thread( + $post['id'], $post['subject'], $post['email'], $post['name'], $post['trip'], $post['capcode'], $post['body'], $post['time'], + $post['thumb'], $post['thumbwidth'], $post['thumbheight'], $post['file'], $post['filewidth'], $post['fileheight'], $post['filesize'], + $post['filename'], $post['ip'], $post['sticky'], $post['locked'], $post['sage'], $post['embed'], $mod ? '?/' : $config['root'], $mod + ); + + $posts = prepare(sprintf("SELECT * FROM `posts_%s` WHERE `thread` = :id ORDER BY `id` DESC LIMIT :limit", $post['board'])); + $posts->bindValue(':id', $post['id']); + $posts->bindValue(':limit', ($post['sticky'] ? $config['threads_preview_sticky'] : $config['threads_preview']), PDO::PARAM_INT); + $posts->execute() or error(db_error($posts)); + + $num_images = 0; + while ($po = $posts->fetch()) { + if ($po['file']) + $num_images++; + + $thread->add(new Post( + $po['id'], $post['id'], $po['subject'], $po['email'], $po['name'], $po['trip'], $po['capcode'], $po['body'], $po['time'], + $po['thumb'], $po['thumbwidth'], $po['thumbheight'], $po['file'], $po['filewidth'], $po['fileheight'], $po['filesize'], + $po['filename'], $po['ip'], $po['embed'], $mod ? '?/' : $config['root'], $mod) + ); + + } + if ($posts->rowCount() == ($post['sticky'] ? $config['threads_preview_sticky'] : $config['threads_preview'])) { + $ct = prepare(sprintf("SELECT COUNT(`id`) as `num` FROM `posts_%s` WHERE `thread` = :thread UNION ALL SELECT COUNT(`id`) FROM `posts_%s` WHERE `file` IS NOT NULL AND `thread` = :thread", $post['board'], $post['board'])); + $ct->bindValue(':thread', $post['id'], PDO::PARAM_INT); + $ct->execute() or error(db_error($count)); + + $c = $ct->fetch(); + $thread->omitted = $c['num'] - ($post['sticky'] ? $config['threads_preview_sticky'] : $config['threads_preview']); + + $c = $ct->fetch(); + $thread->omitted_images = $c['num'] - $num_images; + } + + + $thread->posts = array_reverse($thread->posts); + $body .= '

/' . $post['board'] . '/

'; + $body .= $thread->build(true); + } else { + $page = 'index'; + if(floor($threads[$post['board']] / $config['threads_per_page']) > 0) { + $page = floor($threads[$post['board']] / $config['threads_per_page']) + 1; + } + $overflow[] = array('id' => $post['id'], 'board' => $post['board'], 'page' => $page . '.html'); + } + + $count += 1; + } + + $body .= ''; + $body .= ''; + + file_write($this->settings['uri'] . '/index.html', Element('index.html', array( + 'config' => $config, + 'board' => $board, + 'no_post_form' => true, + 'body' => $body, + 'boardlist' => createBoardlist($mod) + ))); + + file_write($this->settings['uri'] . '/ukko.js', Element('themes/ukko/ukko.js', array())); + } + + }; + +?> diff --git a/thumb.png b/thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..49c4237bde9f837b8fe98234d37afbee703dd2f0 GIT binary patch literal 15123 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 B5)S|X literal 0 HcmV?d00001 diff --git a/ukko.js b/ukko.js new file mode 100644 index 00000000..baf0f78d --- /dev/null +++ b/ukko.js @@ -0,0 +1,37 @@ +var cache = new Array(), + thread = false, + loading = false; +$(document).ready(function() { + $(window).on('scroll', function() { + if($(window).scrollTop() + $(window).height() + 100 > $(document).height() && !loading && overflow.length > 0) { + var page = '../' + overflow[0].board + '/' + overflow[0].page; + if($.inArray(page, cache) != -1) { + thread = $('div#thread_' + overflow[0].id); + if(thread.length > 0) { + thread.prepend('

/' + overflow[0].board + '/

'); + $('div[id*="thread_"]').last().after(thread.attr('data-board', overflow[0].board).css('display', 'block')); + overflow.shift(); + } + } else { + loading = true; + $.get(page, function(data) { + cache.push(page); + + $(data).find('div[id*="thread_"]').each(function() { + $('body').prepend($(this).css('display', 'none').attr('data-board', overflow[0].board)); + }); + + thread = $('div#thread_' + overflow[0].id + '[data-board="' + overflow[0].board + '"]'); + if(thread.length > 0) { + thread.prepend('

/' + overflow[0].board + '/

'); + $('div[id*="thread_"]').last().after(thread.attr('data-board', overflow[0].board).css('display', 'block')); + overflow.shift(); + } + + loading = false; + }); + } + } + }); + +}); \ No newline at end of file