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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 KpUXO@geCwztP&3Z 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