diff options
| author | Michael Foster <savetheinternet@tinyboard.org> | 2013-09-15 07:17:02 +1000 |
|---|---|---|
| committer | Michael Foster <savetheinternet@tinyboard.org> | 2013-09-15 07:17:02 +1000 |
| commit | 9a8cebe4a1c298b3d6ff13332a2daded90506d3c (patch) | |
| tree | 23f476005e224d126962d41125505229b0bcf3e1 | |
| parent | 4cd23896559dbbcd0bae5746ee458ece36be7a65 (diff) | |
add real quick reply (wtf was the other thing?)
| -rw-r--r-- | js/quick-reply-old.js | 46 | ||||
| -rw-r--r-- | js/quick-reply.js | 164 | ||||
| -rw-r--r-- | templates/main.js | 4 |
3 files changed, 186 insertions, 28 deletions
diff --git a/js/quick-reply-old.js b/js/quick-reply-old.js new file mode 100644 index 00000000..ea504b48 --- /dev/null +++ b/js/quick-reply-old.js @@ -0,0 +1,46 @@ +/* + * quick-reply.js + * https://github.com/savetheinternet/Tinyboard/blob/master/js/quick-reply.js + * + * Released under the MIT license + * Copyright (c) 2012 Michael Save <savetheinternet@tinyboard.org> + * + * Usage: + * $config['quick_reply'] = true; + * $config['additional_javascript'][] = 'js/jquery.min.js'; + * $config['additional_javascript'][] = 'js/quick-reply.js'; + * + */ + +$(document).ready(function(){ + if($('div.banner').length != 0) + return; // not index + + txt_new_topic = $('form[name=post] input[type=submit]').val(); + txt_new_reply = txt_new_topic == _('Submit') ? txt_new_topic : new_reply_string; + + undo_quick_reply = function() { + $('div.banner').remove(); + $('form[name=post] input[type=submit]').val(txt_new_topic); + $('form[name=post] input[name=quick-reply]').remove(); + } + + $('div.post.op').each(function() { + var id = $(this).children('p.intro').children('a.post_no:eq(1)').text(); + $('<a href="#">['+_("Quick reply")+']</a>').insertAfter($(this).children('p.intro').children('a:last')).click(function() { + $('div.banner').remove(); + $('<div class="banner">'+fmt(_("Posting mode: Replying to <small>>>{0}</small>"), [id])+' <a class="unimportant" onclick="undo_quick_reply()" href="javascript:void(0)">['+_("Return")+']</a></div>') + .insertBefore('form[name=post]'); + $('form[name=post] input[type=submit]').val(txt_new_reply); + + $('<input type="hidden" name="quick-reply" value="' + id + '">').appendTo($('form[name=post]')); + + $('form[name=post] textarea').select(); + + window.scrollTo(0, 0); + + return false; + }); + }); +}); + diff --git a/js/quick-reply.js b/js/quick-reply.js index ea504b48..3ff6002c 100644 --- a/js/quick-reply.js +++ b/js/quick-reply.js @@ -3,44 +3,152 @@ * https://github.com/savetheinternet/Tinyboard/blob/master/js/quick-reply.js * * Released under the MIT license - * Copyright (c) 2012 Michael Save <savetheinternet@tinyboard.org> + * Copyright (c) 2013 Michael Save <savetheinternet@tinyboard.org> * * Usage: - * $config['quick_reply'] = true; * $config['additional_javascript'][] = 'js/jquery.min.js'; * $config['additional_javascript'][] = 'js/quick-reply.js'; * */ -$(document).ready(function(){ - if($('div.banner').length != 0) +var show_quick_reply = function(){ + if($('div.banner').length == 0) return; // not index + + $('<style type="text/css">\ + #quick-reply {\ + position: fixed;\ + right: 0;\ + top: 10%;\ + float: right;\ + background: #D6DAF0;\ + display: block;\ + padding: 0 0 0 0;\ + width: 350px;\ + }\ + #quick-reply table {\ + border-collapse: collapse;\ + margin: 0;\ + 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 input[type="text"] {\ + width: 100%;\ + padding: 2px;\ + margin: 0 0 1px 0;\ + 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;\ + }\ + #quick-reply input[type="file"] {\ + padding: 5px 0;\ + }\ + #quick-reply .nonsense {\ + display: none;\ + }\ + #quick-reply td.submit {\ + width: 1%;\ + }\ + </style>').appendTo($('head')); + + var $postForm = $('form[name="post"]').clone(); - txt_new_topic = $('form[name=post] input[type=submit]').val(); - txt_new_reply = txt_new_topic == _('Submit') ? txt_new_topic : new_reply_string; + $postForm.clone(); - undo_quick_reply = function() { - $('div.banner').remove(); - $('form[name=post] input[type=submit]').val(txt_new_topic); - $('form[name=post] input[name=quick-reply]').remove(); - } + $dummyStuff = $('<div class="nonsense"></div>').appendTo($postForm); - $('div.post.op').each(function() { - var id = $(this).children('p.intro').children('a.post_no:eq(1)').text(); - $('<a href="#">['+_("Quick reply")+']</a>').insertAfter($(this).children('p.intro').children('a:last')).click(function() { - $('div.banner').remove(); - $('<div class="banner">'+fmt(_("Posting mode: Replying to <small>>>{0}</small>"), [id])+' <a class="unimportant" onclick="undo_quick_reply()" href="javascript:void(0)">['+_("Return")+']</a></div>') - .insertBefore('form[name=post]'); - $('form[name=post] input[type=submit]').val(txt_new_reply); - - $('<input type="hidden" name="quick-reply" value="' + id + '">').appendTo($('form[name=post]')); - - $('form[name=post] textarea').select(); - - window.scrollTo(0, 0); - - return false; - }); + $postForm.find('table tr').each(function() { + var $th = $(this).children('th'); + var $td = $(this).children('td'); + if ($th.length && $td.length) { + $td.attr('colspan', 2); + + if ($td.find('input[type="text"]').length) { + // Replace <th> 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> + $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'); + $('<td class="submit"></td>').append($td.find('input[type="submit"]')).insertAfter($td); + } + + 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 + $newRow = $('<tr><td colspan="2"></td></tr>'); + + $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'); + } + } + } }); -}); + + $postForm.find('textarea[name="body"]').removeAttr('id').removeAttr('cols').attr('placeholder', _('Comment')); + + $postForm.find('br').remove(); + $postForm.find('table').prepend('<tr><th colspan="2">' + _('Quick Reply') + '</th></tr>'); + + $postForm.attr('id', 'quick-reply'); + + $postForm.appendTo($('body')); + + // Synchronise body text with original post form + $('#body').bind('change input propertychange', function() { + $postForm.find('textarea[name="body"]').val($(this).val()); + }); + $postForm.find('textarea[name="body"]').bind('change input propertychange', function() { + $('#body').val($(this).val()); + }); + // Synchronise other inputs + $('form[name="post"] input[type="text"]').bind('change input propertychange', function() { + $postForm.find('input[name="' + $(this).attr('name') + '"]').val($(this).val()); + }); + $postForm.find('input[type="text"]').bind('change input propertychange', function() { + $('form[name="post"] input[name="' + $(this).attr('name') + '"]').val($(this).val()); + }); +}; +$(window).on('cite', function() { + show_quick_reply(); + $('#quick-reply textarea').focus(); +}); diff --git a/templates/main.js b/templates/main.js index 144c5f62..c0961878 100644 --- a/templates/main.js +++ b/templates/main.js @@ -198,6 +198,10 @@ function citeReply(id) { // ??? body.value += '>>' + id + '\n'; } + if ($) { + $(window).trigger('cite', id); + $(body).change(); + } } function rememberStuff() { |
