diff --git a/inc/api.php b/inc/api.php index a8ae9eed..3769a9c9 100644 --- a/inc/api.php +++ b/inc/api.php @@ -41,8 +41,8 @@ class Api { ); $this->fileFields = array( - 'thumbheight' => 'tn_w', - 'thumbwidth' => 'tn_h', + 'thumbheight' => 'tn_h', + 'thumbwidth' => 'tn_w', 'height' => 'w', 'width' => 'h', 'size' => 'fsize', @@ -113,6 +113,7 @@ class Api { $apiPost['ext'] = substr($file->file, $dotPos); $dotPos = strrpos($file->file, '.'); $apiPost['tim'] = substr($file->file, 0, $dotPos); + $apiPost['md5'] = base64_encode(md5_file($file->file_path, true)); } return $apiPost; diff --git a/js/auto-reload.js b/js/auto-reload.js index 4a872024..87e332df 100644 --- a/js/auto-reload.js +++ b/js/auto-reload.js @@ -8,6 +8,7 @@ * Copyright (c) 2012 Michael Save * Copyright (c) 2013-2014 Marcin Ɓabanowski * Copyright (c) 2013 undido + * Copyright (c) 2014 Fredrick Brennan * * Usage: * $config['additional_javascript'][] = 'js/jquery.min.js'; @@ -27,6 +28,8 @@ $(document).ready(function(){ var poll_interval; + // Add an update link + $('.boardlist.bottom').prev().after("["+_("Update thread")+"] ()"); // Grab the settings var settings = new script_settings('auto-reload'); @@ -37,6 +40,7 @@ $(document).ready(function(){ // number of ms to wait before reloading var poll_interval_delay = poll_interval_mindelay_bottom; + var poll_current_time = poll_interval_delay; var end_of_page = false; @@ -68,6 +72,14 @@ $(document).ready(function(){ window_active = false; }); + var timer_update = function() { + $('#update_secs').text(poll_current_time/1000); + } + + var decrement_timer = function() { + poll_current_time = poll_current_time - 1000; + } + var recheck_activated = function() { if (new_posts && window_active && $(window).scrollTop() + $(window).height() >= @@ -115,6 +127,9 @@ $(document).ready(function(){ } poll_interval = setTimeout(poll, poll_interval_delay); + poll_current_time = poll_interval_delay; + + return false; }; $(window).scroll(function() { @@ -128,9 +143,15 @@ $(document).ready(function(){ clearTimeout(poll_interval); poll_interval = setTimeout(poll, poll_interval_shortdelay); + poll_current_time = poll_interval_shortdelay; end_of_page = true; }).trigger('scroll'); + $('#update_thread').on('click', poll); + setInterval(timer_update, 1000); + setInterval(decrement_timer, 1000); + poll_interval = setTimeout(poll, poll_interval_delay); + timer_update(); }); diff --git a/js/catalog-link.js b/js/catalog-link.js index 899e6859..5c5d9b13 100644 --- a/js/catalog-link.js +++ b/js/catalog-link.js @@ -16,11 +16,11 @@ function catalog() { var board = $("input[name='board']"); if (board.length>0) { -if (window.location.href.indexOf("/res/")==-1){ //if we are inside a thread -var catalog_url = 'catalog.html'; +if (window.location.pathname.indexOf("/res/")>0){ //if we are inside a thread +var catalog_url = '../catalog.html'; } else { -var catalog_url = '../catalog.html'; +var catalog_url = 'catalog.html'; } var pages = document.getElementsByClassName('pages')[0]; var bottom = document.getElementsByClassName('boardlist bottom')[0] diff --git a/js/no-animated-gif.js b/js/no-animated-gif.js index 7e777d87..45a55f97 100644 --- a/js/no-animated-gif.js +++ b/js/no-animated-gif.js @@ -13,7 +13,10 @@ */ function unanimate_gif(e) { - var c = $(''); + if (active_page === "catalog") + var c = $(''); + else + var c = $(''); $(e).parent().prepend(c); c.attr('width', $(e).width()); c.attr('height',$(e).height()); @@ -32,7 +35,7 @@ function unanimate_gif(e) { } function no_animated_gif() { - var anim_gifs = $('img.post-image[src$=".gif"]'); + var anim_gifs = $('img.post-image[src$=".gif"], img.thread-image[src$=".gif"]'); localStorage.no_animated_gif = true; $('#no-animated-gif>a').text(_('Animate GIFs')); $('#no-animated-gif>input').prop('checked', true); @@ -48,7 +51,7 @@ function animated_gif() { $('#no-animated-gif>input').prop('checked', false); } -if (active_page == 'thread' || active_page == 'index' || active_page == 'ukko') { +if (active_page == 'thread' || active_page == 'index' || active_page == 'ukko' || active_page == 'catalog') { $(function(){ var selector, event; if (window.Options && Options.get_tab('general')) { diff --git a/js/post-hover.js b/js/post-hover.js index 2808b8e7..0becfb70 100644 --- a/js/post-hover.js +++ b/js/post-hover.js @@ -58,8 +58,8 @@ onready(function(){ // link links to itself or to op; ignore } else if($post.is(':visible') && - $post.offset().top + $post.height() >= $(window).scrollTop() && - $post.offset().top <= $(window).scrollTop() + $(window).height()) { + $post.offset().top >= $(window).scrollTop() && + $post.offset().top + $post.height() <= $(window).scrollTop() + $(window).height()) { // post is in view $post.addClass('highlighted'); } else { diff --git a/search.php b/search.php index 394aa3ff..71f4ae5e 100644 --- a/search.php +++ b/search.php @@ -15,7 +15,7 @@ $boards = listBoards(TRUE); } - $body = Element('search_form.html', Array('boards' => $boards, 'board' => isset($_GET['board']) ? $_GET['board'] : false, 'search' => isset($_GET['search']) ? str_replace('"', '"', utf8tohtml($_GET['search'])) : false)); + $body = Element('search_form.html', Array('boards' => $boards, 'b' => isset($_GET['board']) ? $_GET['board'] : false, 'search' => isset($_GET['search']) ? str_replace('"', '"', utf8tohtml($_GET['search'])) : false)); if(isset($_GET['search']) && !empty($_GET['search']) && isset($_GET['board']) && in_array($_GET['board'], $boards)) { $phrase = $_GET['search']; diff --git a/stylesheets/catalog.css b/stylesheets/catalog.css deleted file mode 100644 index 29ff4cbf..00000000 --- a/stylesheets/catalog.css +++ /dev/null @@ -1,75 +0,0 @@ -img { - float:none!important; - margin: auto; - margin-bottom: 12px; - /*max-height: 150px; - max-width: 200px;*/ - box-shadow: 0 0 4px rgba(0, 0, 0, 0.55); - border: 2px solid rgba(153, 153, 153, 0); -} - -/* -img:hover { - border: 2px solid rgba(153, 153, 153, 0.27); -} -*/ - -div.threads{ - text-align: center; - margin-left: -20px; -} - -div.thread { - display: inline-block; - vertical-align: top; - margin-bottom:25px; - margin-left: 20px; - margin-right: 15px; - text-align:center; - font-weight:normal; - width:205px; - overflow:hidden; - position: relative; - font-size:11px; - padding: 15px; - background: rgba(182, 182, 182, 0.12); - border: 2px solid rgba(111, 111, 111, 0.34); - max-height:300px; -} - -div.thread:hover { - background: #D6DAF0; - border-color: #B7C5D9; -} - -div.grid-size-small { - width: 200px; - max-width: 200px; - max-height: 350px; -} - -div.grid-size-large { - width: 300px; - max-width: 300px; - max-height: 450px; -} - -img.thread-image { - height: auto; - max-width: 100%; -} - -@media (max-width: 420px) { - ul#Grid { - padding-left: 18px; - } - div.thread { - width: auto; - margin-left: 0; - margin-right: 0; - - } - div.threads { - overflow: hidden; - } -} \ No newline at end of file diff --git a/stylesheets/style.css b/stylesheets/style.css index a21b30f5..2c37d8b1 100644 --- a/stylesheets/style.css +++ b/stylesheets/style.css @@ -7,25 +7,33 @@ body { padding-left: 5px; padding-right: 5px; } + table * { margin: 0; } + a, a:visited { text-decoration: underline; color: #34345C; } + a:hover, p.intro a.post_no:hover { color: #ff0000; } + a.post_no { text-decoration: none; margin: 0; padding: 0; } + p.intro a.post_no { color: inherit; } -p.intro a.post_no, p.intro a.email, p.intro a.post_anchor { + +p.intro a.post_no, +p.intro a.email, +p.intro a.post_anchor { margin: 0; } p.intro a.email span.name { @@ -214,7 +222,8 @@ div.post.reply div.body a { color: #D00; } div.post { - max-width: 97%; + max-width: 95%; + padding-left:20px; } div.post div.body { word-wrap: break-word; @@ -502,7 +511,6 @@ form.ban-appeal textarea { .theme-catalog div.thread img { float:none!important; margin: auto; - margin-bottom: 12px; max-height: 150px; max-width: 200px; box-shadow: 0 0 4px rgba(0, 0, 0, 0.55); @@ -511,9 +519,6 @@ form.ban-appeal textarea { .theme-catalog div.thread { display: inline-block; vertical-align: top; - margin-bottom:25px; - margin-left: 20px; - margin-right: 15px; text-align:center; font-weight:normal; padding: 2px; @@ -547,19 +552,19 @@ div.thread:hover { width: 100px; max-width: 100px; max-height: 150px; -} +} .theme-catalog div.grid-size-small { width: 200px; max-width: 200px; max-height: 350px; -} +} .theme-catalog div.grid-size-large { width: 300px; max-width: 300px; max-height: 450px; -} +} .theme-catalog img.thread-image { height: auto; @@ -581,8 +586,6 @@ div.thread:hover { } } -@include url("tooltipster/tooltipster.css"); - .compact-boardlist { padding: 3px; padding-bottom: 0; @@ -667,7 +670,7 @@ div.thread:hover { background-color: #d6daf0; border: 1px solid black; display: inline-block; - position: relative; + position: relative; margin-top: 20px; width: 600px; height: 300px; @@ -690,6 +693,7 @@ div.thread:hover { .options_tab_icon { padding: 5px; color: black; + cursor: pointer; } .options_tab_icon.active { color: red; @@ -719,3 +723,17 @@ div.thread:hover { height: 100%; margin-top: 0px; } +.mentioned { + word-wrap: break-word; +} + + +code > pre { +/* Better code tags */ + background:black; + max-width:inherit; +} + +code > pre > span.pln { + color:grey; +} diff --git a/stylesheets/tooltipster/tooltipster.css b/stylesheets/tooltipster/tooltipster.css deleted file mode 100644 index e5c609cc..00000000 --- a/stylesheets/tooltipster/tooltipster.css +++ /dev/null @@ -1,274 +0,0 @@ -/* This is the default Tooltipster theme (feel free to modify or duplicate and create multiple themes!): */ -.tooltipster-default { - border-radius: 5px; - border: 2px solid #000; - background: #4c4c4c; - color: #fff; -} - -/* Use this next selector to style things like font-size and line-height: */ -.tooltipster-default .tooltipster-content { - font-family: Arial, sans-serif; - font-size: 14px; - line-height: 16px; - padding: 8px 10px; - overflow: hidden; -} - -/* This next selector defines the color of the border on the outside of the arrow. This will automatically match the color and size of the border set on the main tooltip styles. Set display: none; if you would like a border around the tooltip but no border around the arrow */ -.tooltipster-default .tooltipster-arrow .tooltipster-arrow-border { - /* border-color: ... !important; */ -} - - -/* If you're using the icon option, use this next selector to style them */ -.tooltipster-icon { - cursor: help; - margin-left: 4px; -} - - - - - - - - -/* This is the base styling required to make all Tooltipsters work */ -.tooltipster-base { - padding: 0; - font-size: 0; - line-height: 0; - position: absolute; - left: 0; - top: 0; - z-index: 9999999; - pointer-events: none; - width: auto; - overflow: visible; -} -.tooltipster-base .tooltipster-content { - overflow: hidden; -} - - -/* These next classes handle the styles for the little arrow attached to the tooltip. By default, the arrow will inherit the same colors and border as what is set on the main tooltip itself. */ -.tooltipster-arrow { - display: block; - text-align: center; - width: 100%; - height: 100%; - position: absolute; - top: 0; - left: 0; - z-index: -1; -} -.tooltipster-arrow span, .tooltipster-arrow-border { - display: block; - width: 0; - height: 0; - position: absolute; -} -.tooltipster-arrow-top span, .tooltipster-arrow-top-right span, .tooltipster-arrow-top-left span { - border-left: 8px solid transparent !important; - border-right: 8px solid transparent !important; - border-top: 8px solid; - bottom: -7px; -} -.tooltipster-arrow-top .tooltipster-arrow-border, .tooltipster-arrow-top-right .tooltipster-arrow-border, .tooltipster-arrow-top-left .tooltipster-arrow-border { - border-left: 9px solid transparent !important; - border-right: 9px solid transparent !important; - border-top: 9px solid; - bottom: -7px; -} - -.tooltipster-arrow-bottom span, .tooltipster-arrow-bottom-right span, .tooltipster-arrow-bottom-left span { - border-left: 8px solid transparent !important; - border-right: 8px solid transparent !important; - border-bottom: 8px solid; - top: -7px; -} -.tooltipster-arrow-bottom .tooltipster-arrow-border, .tooltipster-arrow-bottom-right .tooltipster-arrow-border, .tooltipster-arrow-bottom-left .tooltipster-arrow-border { - border-left: 9px solid transparent !important; - border-right: 9px solid transparent !important; - border-bottom: 9px solid; - top: -7px; -} -.tooltipster-arrow-top span, .tooltipster-arrow-top .tooltipster-arrow-border, .tooltipster-arrow-bottom span, .tooltipster-arrow-bottom .tooltipster-arrow-border { - left: 0; - right: 0; - margin: 0 auto; -} -.tooltipster-arrow-top-left span, .tooltipster-arrow-bottom-left span { - left: 6px; -} -.tooltipster-arrow-top-left .tooltipster-arrow-border, .tooltipster-arrow-bottom-left .tooltipster-arrow-border { - left: 5px; -} -.tooltipster-arrow-top-right span, .tooltipster-arrow-bottom-right span { - right: 6px; -} -.tooltipster-arrow-top-right .tooltipster-arrow-border, .tooltipster-arrow-bottom-right .tooltipster-arrow-border { - right: 5px; -} -.tooltipster-arrow-left span, .tooltipster-arrow-left .tooltipster-arrow-border { - border-top: 8px solid transparent !important; - border-bottom: 8px solid transparent !important; - border-left: 8px solid; - top: 50%; - margin-top: -7px; - right: -7px; -} -.tooltipster-arrow-left .tooltipster-arrow-border { - border-top: 9px solid transparent !important; - border-bottom: 9px solid transparent !important; - border-left: 9px solid; - margin-top: -8px; -} -.tooltipster-arrow-right span, .tooltipster-arrow-right .tooltipster-arrow-border { - border-top: 8px solid transparent !important; - border-bottom: 8px solid transparent !important; - border-right: 8px solid; - top: 50%; - margin-top: -7px; - left: -7px; -} -.tooltipster-arrow-right .tooltipster-arrow-border { - border-top: 9px solid transparent !important; - border-bottom: 9px solid transparent !important; - border-right: 9px solid; - margin-top: -8px; -} - - -/* Some CSS magic for the awesome animations - feel free to make your own custom animations and reference it in your Tooltipster settings! */ - -.tooltipster-fade { - opacity: 0; - -webkit-transition-property: opacity; - -moz-transition-property: opacity; - -o-transition-property: opacity; - -ms-transition-property: opacity; - transition-property: opacity; -} -.tooltipster-fade-show { - opacity: 1; -} - -.tooltipster-grow { - -webkit-transform: scale(0,0); - -moz-transform: scale(0,0); - -o-transform: scale(0,0); - -ms-transform: scale(0,0); - transform: scale(0,0); - -webkit-transition-property: -webkit-transform; - -moz-transition-property: -moz-transform; - -o-transition-property: -o-transform; - -ms-transition-property: -ms-transform; - transition-property: transform; - -webkit-backface-visibility: hidden; -} -.tooltipster-grow-show { - -webkit-transform: scale(1,1); - -moz-transform: scale(1,1); - -o-transform: scale(1,1); - -ms-transform: scale(1,1); - transform: scale(1,1); - -webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); - -webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15); - -moz-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15); - -ms-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15); - -o-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15); - transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15); -} - -.tooltipster-swing { - opacity: 0; - -webkit-transform: rotateZ(4deg); - -moz-transform: rotateZ(4deg); - -o-transform: rotateZ(4deg); - -ms-transform: rotateZ(4deg); - transform: rotateZ(4deg); - -webkit-transition-property: -webkit-transform, opacity; - -moz-transition-property: -moz-transform; - -o-transition-property: -o-transform; - -ms-transition-property: -ms-transform; - transition-property: transform; -} -.tooltipster-swing-show { - opacity: 1; - -webkit-transform: rotateZ(0deg); - -moz-transform: rotateZ(0deg); - -o-transform: rotateZ(0deg); - -ms-transform: rotateZ(0deg); - transform: rotateZ(0deg); - -webkit-transition-timing-function: cubic-bezier(0.230, 0.635, 0.495, 1); - -webkit-transition-timing-function: cubic-bezier(0.230, 0.635, 0.495, 2.4); - -moz-transition-timing-function: cubic-bezier(0.230, 0.635, 0.495, 2.4); - -ms-transition-timing-function: cubic-bezier(0.230, 0.635, 0.495, 2.4); - -o-transition-timing-function: cubic-bezier(0.230, 0.635, 0.495, 2.4); - transition-timing-function: cubic-bezier(0.230, 0.635, 0.495, 2.4); -} - -.tooltipster-fall { - top: 0; - -webkit-transition-property: top; - -moz-transition-property: top; - -o-transition-property: top; - -ms-transition-property: top; - transition-property: top; - -webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); - -webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15); - -moz-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15); - -ms-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15); - -o-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15); - transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15); -} -.tooltipster-fall-show { -} -.tooltipster-fall.tooltipster-dying { - -webkit-transition-property: all; - -moz-transition-property: all; - -o-transition-property: all; - -ms-transition-property: all; - transition-property: all; - top: 0px !important; - opacity: 0; -} - -.tooltipster-slide { - left: -40px; - -webkit-transition-property: left; - -moz-transition-property: left; - -o-transition-property: left; - -ms-transition-property: left; - transition-property: left; - -webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); - -webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15); - -moz-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15); - -ms-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15); - -o-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15); - transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15); -} -.tooltipster-slide.tooltipster-slide-show { -} -.tooltipster-slide.tooltipster-dying { - -webkit-transition-property: all; - -moz-transition-property: all; - -o-transition-property: all; - -ms-transition-property: all; - transition-property: all; - left: 0px !important; - opacity: 0; -} - - -/* CSS transition for when contenting is changing in a tooltip that is still open. The only properties that will NOT transition are: width, height, top, and left */ -.tooltipster-content-changing { - opacity: 0.5; - -webkit-transform: scale(1.1, 1.1); - -moz-transform: scale(1.1, 1.1); - -o-transform: scale(1.1, 1.1); - -ms-transform: scale(1.1, 1.1); - transform: scale(1.1, 1.1); -} diff --git a/templates/main.js b/templates/main.js index 97f1135f..9286d201 100644 --- a/templates/main.js +++ b/templates/main.js @@ -154,6 +154,7 @@ function highlightReply(id) { var post = document.getElementById('reply_'+id); if (post) post.className += ' highlighted'; + window.location.hash = id; } return true; }