From cff15bd765d1bd65f17a4407970244cc9d258521 Mon Sep 17 00:00:00 2001 From: Michael Foster Date: Wed, 18 Sep 2013 14:02:01 +1000 Subject: [PATCH 1/7] bugfix: bans --- inc/bans.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inc/bans.php b/inc/bans.php index cf24f097..d860c02c 100644 --- a/inc/bans.php +++ b/inc/bans.php @@ -253,7 +253,7 @@ class Bans { modLog('Created a new ' . ($length > 0 ? preg_replace('/^(\d+) (\w+?)s?$/', '$1-$2', until($length)) : 'permanent') . ' ban on ' . - ($board ? '/' . $board . '/' : 'all boards') . + ($ban_board ? '/' . $ban_board . '/' : 'all boards') . ' for ' . (filter_var($mask, FILTER_VALIDATE_IP) !== false ? "$mask" : $mask) . ' (#' . $pdo->lastInsertId() . ')' . From d13f30b39f93f694241239c86c08c306c7b94fd4 Mon Sep 17 00:00:00 2001 From: Michael Foster Date: Wed, 18 Sep 2013 14:40:39 +1000 Subject: [PATCH 2/7] js/settings.js: Simple config stuff for javascript extensions --- js/ajax.js | 4 +- js/quick-reply.js | 684 +++++++++++++++++++++++++++--------------------------- post.php | 1 + templates/main.js | 11 + 4 files changed, 362 insertions(+), 338 deletions(-) diff --git a/js/ajax.js b/js/ajax.js index 74cfe9c0..276e1ac7 100644 --- a/js/ajax.js +++ b/js/ajax.js @@ -12,6 +12,7 @@ */ $(window).ready(function() { + var settings = new script_settings('ajax'); var do_not_ajax = false; var setup_form = function($form) { @@ -61,7 +62,8 @@ $(window).ready(function() { $(form).find('input[type="submit"]').removeAttr('disabled'); } } else if (post_response.redirect && post_response.id) { - if (!$(form).find('input[name="thread"]').length) { + if (!$(form).find('input[name="thread"]').length + || (!settings.get('always_noko_replies', true) && !post_response.noko)) { document.location = post_response.redirect; } else { $.ajax({ diff --git a/js/quick-reply.js b/js/quick-reply.js index 267b6915..a3cf1404 100644 --- a/js/quick-reply.js +++ b/js/quick-reply.js @@ -12,354 +12,364 @@ * */ -var do_css = function() { - $('#quick-reply-css').remove(); +(function() { + var settings = new script_settings('quick-reply'); - // Find background of reply posts - var dummy_reply = $('
').appendTo($('body')); - var reply_background = dummy_reply.css('backgroundColor'); - var reply_border_style = dummy_reply.css('borderStyle'); - var reply_border_color = dummy_reply.css('borderColor'); - var reply_border_width = dummy_reply.css('borderWidth'); - dummy_reply.remove(); - - $('').appendTo($('head')); -}; - -var show_quick_reply = function(){ - if($('div.banner').length == 0) - return; - if($('#quick-reply').length != 0) - return; + #quick-reply table {\ + border-collapse: collapse;\ + background: ' + reply_background + ';\ + border-style: ' + reply_border_style + ';\ + border-width: ' + reply_border_width + ';\ + border-color: ' + reply_border_color + ';\ + margin: 0;\ + width: 100%;\ + }\ + #quick-reply tr td:nth-child(2) {\ + white-space: nowrap;\ + text-align: right;\ + padding-right: 4px;\ + }\ + #quick-reply tr td:nth-child(2) input[type="submit"] {\ + width: 100%;\ + }\ + #quick-reply th, #quick-reply td {\ + margin: 0;\ + padding: 0;\ + }\ + #quick-reply th {\ + text-align: center;\ + padding: 2px 0;\ + border: 1px solid #222;\ + }\ + #quick-reply th .handle {\ + float: left;\ + width: 100%;\ + display: inline-block;\ + }\ + #quick-reply th .close-btn {\ + float: right;\ + padding: 0 5px;\ + }\ + #quick-reply input[type="text"], #quick-reply select {\ + width: 100%;\ + padding: 2px;\ + font-size: 10pt;\ + box-sizing: border-box;\ + -webkit-box-sizing:border-box;\ + -moz-box-sizing: border-box;\ + }\ + #quick-reply textarea {\ + width: 100%;\ + box-sizing: border-box;\ + -webkit-box-sizing:border-box;\ + -moz-box-sizing: border-box;\ + font-size: 10pt;\ + resize: vertical;\ + }\ + #quick-reply input, #quick-reply select, #quick-reply textarea {\ + margin: 0 0 1px 0;\ + }\ + #quick-reply input[type="file"] {\ + padding: 5px 2px;\ + }\ + #quick-reply .nonsense {\ + display: none;\ + }\ + #quick-reply td.submit {\ + width: 1%;\ + }\ + #quick-reply td.recaptcha {\ + text-align: center;\ + padding: 0 0 1px 0;\ + }\ + #quick-reply td.recaptcha span {\ + display: inline-block;\ + width: 100%;\ + background: white;\ + border: 1px solid #ccc;\ + cursor: pointer;\ + }\ + #quick-reply td.recaptcha-response {\ + padding: 0 0 1px 0;\ + }\ + @media screen and (max-width: 800px) {\ + #quick-reply {\ + display: none !important;\ + }\ + }\ + ').appendTo($('head')); + }; - do_css(); + var show_quick_reply = function(){ + if($('div.banner').length == 0) + return; + if($('#quick-reply').length != 0) + return; + + do_css(); + + var $postForm = $('form[name="post"]').clone(); + + $postForm.clone(); + + $dummyStuff = $('
').appendTo($postForm); + + $postForm.find('table tr').each(function() { + var $th = $(this).children('th:first'); + var $td = $(this).children('td:first'); + if ($th.length && $td.length) { + $td.attr('colspan', 2); - var $postForm = $('form[name="post"]').clone(); - - $postForm.clone(); - - $dummyStuff = $('
').appendTo($postForm); - - $postForm.find('table tr').each(function() { - var $th = $(this).children('th:first'); - var $td = $(this).children('td:first'); - if ($th.length && $td.length) { - $td.attr('colspan', 2); - - if ($td.find('input[type="text"]').length) { - // Replace with input placeholders - $td.find('input[type="text"]') - .removeAttr('size') - .attr('placeholder', $th.clone().children().remove().end().text()); - } - - // Move anti-spam nonsense and remove - $th.contents().filter(function() { - return this.nodeType == 3; // Node.TEXT_NODE - }).remove(); - $th.contents().appendTo($dummyStuff); - $th.remove(); - - if ($td.find('input[name="password"]').length) { - // Hide password field - $(this).hide(); - } - - // Fix submit button - if ($td.find('input[type="submit"]').length) { - $td.removeAttr('colspan'); - $('').append($td.find('input[type="submit"]')).insertAfter($td); - } - - // reCAPTCHA - if ($td.find('#recaptcha_widget_div').length) { - // Just show the image, and have it interact with the real form. - var $captchaimg = $td.find('#recaptcha_image img'); - - $captchaimg - .removeAttr('id') - .removeAttr('style') - .addClass('recaptcha_image') - .click(function() { - $('#recaptcha_reload').click(); - }); - - // When we get a new captcha... - $('#recaptcha_response_field').focus(function() { - if ($captchaimg.attr('src') != $('#recaptcha_image img').attr('src')) { - $captchaimg.attr('src', $('#recaptcha_image img').attr('src')); - $postForm.find('input[name="recaptcha_challenge_field"]').val($('#recaptcha_challenge_field').val()); - $postForm.find('input[name="recaptcha_response_field"]').val('').focus(); - } - }); - - $postForm.submit(function() { - setTimeout(function() { - $('#recaptcha_reload').click(); - }, 200); - }); - - // Make a new row for the response text - var $newRow = $(''); - $newRow.children().first().append( - $td.find('input').removeAttr('style') - ); - $newRow.find('#recaptcha_response_field') - .removeAttr('id') - .addClass('recaptcha_response_field') - .attr('placeholder', $('#recaptcha_response_field').attr('placeholder')); - - $('#recaptcha_response_field').addClass('recaptcha_response_field') - - $td.replaceWith($('').append($('').append($captchaimg))); - - $newRow.insertAfter(this); - } - - // Upload section - if ($td.find('input[type="file"]').length) { - if ($td.find('input[name="file_url"]').length) { - $file_url = $td.find('input[name="file_url"]'); - - // Make a new row for it - var $newRow = $(''); - - $file_url.clone().attr('placeholder', _('Upload URL')).appendTo($newRow.find('td')); - $file_url.parent().remove(); - - $newRow.insertBefore(this); - - $td.find('label').remove(); - $td.contents().filter(function() { - return this.nodeType == 3; // Node.TEXT_NODE - }).remove(); - $td.find('input[name="file_url"]').removeAttr('id'); + if ($td.find('input[type="text"]').length) { + // Replace with input placeholders + $td.find('input[type="text"]') + .removeAttr('size') + .attr('placeholder', $th.clone().children().remove().end().text()); } - - if ($(this).find('input[name="spoiler"]').length) { + + // Move anti-spam nonsense and remove + $th.contents().filter(function() { + return this.nodeType == 3; // Node.TEXT_NODE + }).remove(); + $th.contents().appendTo($dummyStuff); + $th.remove(); + + if ($td.find('input[name="password"]').length) { + // Hide password field + $(this).hide(); + } + + // Fix submit button + if ($td.find('input[type="submit"]').length) { $td.removeAttr('colspan'); + $('').append($td.find('input[type="submit"]')).insertAfter($td); } - } - - // Remove mod controls, because it looks shit. - if ($td.find('input[type="checkbox"]').length) { - var tr = this; - $td.find('input[type="checkbox"]').each(function() { - if ($(this).attr('name') == 'spoiler') { + + // reCAPTCHA + if ($td.find('#recaptcha_widget_div').length) { + // Just show the image, and have it interact with the real form. + var $captchaimg = $td.find('#recaptcha_image img'); + + $captchaimg + .removeAttr('id') + .removeAttr('style') + .addClass('recaptcha_image') + .click(function() { + $('#recaptcha_reload').click(); + }); + + // When we get a new captcha... + $('#recaptcha_response_field').focus(function() { + if ($captchaimg.attr('src') != $('#recaptcha_image img').attr('src')) { + $captchaimg.attr('src', $('#recaptcha_image img').attr('src')); + $postForm.find('input[name="recaptcha_challenge_field"]').val($('#recaptcha_challenge_field').val()); + $postForm.find('input[name="recaptcha_response_field"]').val('').focus(); + } + }); + + $postForm.submit(function() { + setTimeout(function() { + $('#recaptcha_reload').click(); + }, 200); + }); + + // Make a new row for the response text + var $newRow = $(''); + $newRow.children().first().append( + $td.find('input').removeAttr('style') + ); + $newRow.find('#recaptcha_response_field') + .removeAttr('id') + .addClass('recaptcha_response_field') + .attr('placeholder', $('#recaptcha_response_field').attr('placeholder')); + + $('#recaptcha_response_field').addClass('recaptcha_response_field') + + $td.replaceWith($('').append($('').append($captchaimg))); + + $newRow.insertAfter(this); + } + + // Upload section + if ($td.find('input[type="file"]').length) { + if ($td.find('input[name="file_url"]').length) { + $file_url = $td.find('input[name="file_url"]'); + + // Make a new row for it + var $newRow = $(''); + + $file_url.clone().attr('placeholder', _('Upload URL')).appendTo($newRow.find('td')); + $file_url.parent().remove(); + + $newRow.insertBefore(this); + $td.find('label').remove(); - $(this).attr('id', 'q-spoiler-image'); - $postForm.find('input[type="file"]').parent() - .removeAttr('colspan') - .after($('').append(this, ' ', $('