forked from leftypol/leftypol
Merge branch 'master' of https://github.com/savetheinternet/Tinyboard into vichan-devel-4.5
Conflicts: inc/config.php inc/display.php inc/mod/pages.php install.php js/quick-reply.js post.php templates/index.html
This commit is contained in:
commit
6cb7eb939e
46 changed files with 2985 additions and 597 deletions
77
js/ajax-post-controls.js
Normal file
77
js/ajax-post-controls.js
Normal file
|
@ -0,0 +1,77 @@
|
|||
/*
|
||||
* ajax-post-controls.js
|
||||
* https://github.com/savetheinternet/Tinyboard/blob/master/js/ajax-post-controls.js
|
||||
*
|
||||
* Released under the MIT license
|
||||
* Copyright (c) 2013 Michael Save <savetheinternet@tinyboard.org>
|
||||
*
|
||||
* Usage:
|
||||
* $config['additional_javascript'][] = 'js/jquery.min.js';
|
||||
* $config['additional_javascript'][] = 'js/ajax-post-controls.js';
|
||||
*
|
||||
*/
|
||||
|
||||
$(window).ready(function() {
|
||||
var do_not_ajax = false;
|
||||
|
||||
var setup_form = function($form) {
|
||||
$form.find('input[type="submit"]').click(function() {
|
||||
$form.data('submit-btn', this);
|
||||
});;
|
||||
$form.submit(function(e) {
|
||||
if (!$(this).data('submit-btn'))
|
||||
return true;
|
||||
if (do_not_ajax)
|
||||
return true;
|
||||
if (window.FormData === undefined)
|
||||
return true;
|
||||
|
||||
var form = this;
|
||||
|
||||
var formData = new FormData(this);
|
||||
formData.append('json_response', '1');
|
||||
formData.append($($(form).data('submit-btn')).attr('name'), $($(form).data('submit-btn')).val());
|
||||
|
||||
$.ajax({
|
||||
url: this.action,
|
||||
type: 'POST',
|
||||
success: function(post_response) {
|
||||
if (post_response.error) {
|
||||
alert(post_response.error);
|
||||
} else if (post_response.success) {
|
||||
if ($($(form).data('submit-btn')).attr('name') == 'report') {
|
||||
alert(_('Reported post(s).'));
|
||||
if ($(form).hasClass('post-actions')) {
|
||||
$(form).parents('div.post').find('input[type="checkbox"].delete').click();
|
||||
} else {
|
||||
$(form).find('input[name="reason"]').val('');
|
||||
}
|
||||
} else {
|
||||
window.location.reload();
|
||||
}
|
||||
} else {
|
||||
alert(_('An unknown error occured!'));
|
||||
}
|
||||
$($(form).data('submit-btn')).val($($(form).data('submit-btn')).data('orig-val')).removeAttr('disabled');
|
||||
},
|
||||
error: function(xhr, status, er) {
|
||||
// An error occured
|
||||
// TODO
|
||||
alert(_('Something went wrong... An unknown error occured!'));
|
||||
},
|
||||
data: formData,
|
||||
cache: false,
|
||||
contentType: false,
|
||||
processData: false
|
||||
}, 'json');
|
||||
|
||||
$($(form).data('submit-btn')).attr('disabled', true).data('orig-val', $($(form).data('submit-btn')).val()).val(_('Working...'));
|
||||
|
||||
return false;
|
||||
});
|
||||
};
|
||||
setup_form($('form[name="postcontrols"]'));
|
||||
$(window).on('quick-post-controls', function(e, form) {
|
||||
setup_form($(form));
|
||||
});
|
||||
});
|
128
js/ajax.js
Normal file
128
js/ajax.js
Normal file
|
@ -0,0 +1,128 @@
|
|||
/*
|
||||
* ajax.js
|
||||
* https://github.com/savetheinternet/Tinyboard/blob/master/js/ajax.js
|
||||
*
|
||||
* Released under the MIT license
|
||||
* Copyright (c) 2013 Michael Save <savetheinternet@tinyboard.org>
|
||||
*
|
||||
* Usage:
|
||||
* $config['additional_javascript'][] = 'js/jquery.min.js';
|
||||
* $config['additional_javascript'][] = 'js/ajax.js';
|
||||
*
|
||||
*/
|
||||
|
||||
$(window).ready(function() {
|
||||
var do_not_ajax = false;
|
||||
|
||||
var setup_form = function($form) {
|
||||
$form.submit(function() {
|
||||
if (do_not_ajax)
|
||||
return true;
|
||||
var form = this;
|
||||
var submit_txt = $(this).find('input[type="submit"]').val();
|
||||
if (window.FormData === undefined)
|
||||
return true;
|
||||
|
||||
var formData = new FormData(this);
|
||||
formData.append('json_response', '1');
|
||||
formData.append('post', submit_txt);
|
||||
|
||||
var updateProgress = function(e) {
|
||||
$(form).find('input[type="submit"]').val(_('Posting... (#%)').replace('#', Math.round(e.position / e.total * 100)));
|
||||
};
|
||||
|
||||
$.ajax({
|
||||
url: this.action,
|
||||
type: 'POST',
|
||||
xhr: function() {
|
||||
var xhr = $.ajaxSettings.xhr();
|
||||
if(xhr.upload) {
|
||||
xhr.upload.addEventListener('progress', updateProgress, false);
|
||||
}
|
||||
return xhr;
|
||||
},
|
||||
success: function(post_response) {
|
||||
if (post_response.error) {
|
||||
if (post_response.banned) {
|
||||
// You are banned. Must post the form normally so the user can see the ban message.
|
||||
do_not_ajax = true;
|
||||
$(form).find('input[type="submit"]').each(function() {
|
||||
var $replacement = $('<input type="hidden">');
|
||||
$replacement.attr('name', $(this).attr('name'));
|
||||
$replacement.val(submit_txt);
|
||||
$(this)
|
||||
.after($replacement)
|
||||
.replaceWith($('<input type="button">').val(submit_txt));
|
||||
});
|
||||
$(form).submit();
|
||||
} else {
|
||||
alert(post_response.error);
|
||||
$(form).find('input[type="submit"]').val(submit_txt);
|
||||
$(form).find('input[type="submit"]').removeAttr('disabled');
|
||||
}
|
||||
} else if (post_response.redirect && post_response.id) {
|
||||
if (!$(form).find('input[name="thread"]').length) {
|
||||
document.location = post_response.redirect;
|
||||
} else {
|
||||
$.ajax({
|
||||
url: document.location,
|
||||
success: function(data) {
|
||||
$(data).find('div.post.reply').each(function() {
|
||||
var id = $(this).attr('id');
|
||||
if($('#' + id).length == 0) {
|
||||
$(this).insertAfter($('div.post:last').next()).after('<br class="clear">');
|
||||
$(document).trigger('new_post', this);
|
||||
}
|
||||
});
|
||||
|
||||
highlightReply(post_response.id);
|
||||
window.location.hash = post_response.id;
|
||||
$(window).scrollTop($('div.post#reply_' + post_response.id).offset().top);
|
||||
|
||||
$(form).find('input[type="submit"]').val(submit_txt);
|
||||
$(form).find('input[type="submit"]').removeAttr('disabled');
|
||||
$(form).find('input[name="subject"],input[name="file_url"],\
|
||||
textarea[name="body"],input[type="file"]').val('').change();
|
||||
},
|
||||
cache: false,
|
||||
contentType: false,
|
||||
processData: false
|
||||
}, 'html');
|
||||
}
|
||||
$(form).find('input[type="submit"]').val(_('Posted...'));
|
||||
} else {
|
||||
alert(_('An unknown error occured when posting!'));
|
||||
$(form).find('input[type="submit"]').val(submit_txt);
|
||||
$(form).find('input[type="submit"]').removeAttr('disabled');
|
||||
}
|
||||
},
|
||||
error: function(xhr, status, er) {
|
||||
// An error occured
|
||||
do_not_ajax = true;
|
||||
$(form).find('input[type="submit"]').each(function() {
|
||||
var $replacement = $('<input type="hidden">');
|
||||
$replacement.attr('name', $(this).attr('name'));
|
||||
$replacement.val(submit_txt);
|
||||
$(this)
|
||||
.after($replacement)
|
||||
.replaceWith($('<input type="button">').val(submit_txt));
|
||||
});
|
||||
$(form).submit();
|
||||
},
|
||||
data: formData,
|
||||
cache: false,
|
||||
contentType: false,
|
||||
processData: false
|
||||
}, 'json');
|
||||
|
||||
$(form).find('input[type="submit"]').val(_('Posting...'));
|
||||
$(form).find('input[type="submit"]').attr('disabled', true);
|
||||
|
||||
return false;
|
||||
});
|
||||
};
|
||||
setup_form($('form[name="post"]'));
|
||||
$(window).on('quick-reply', function() {
|
||||
setup_form($('form#quick-reply'));
|
||||
});
|
||||
});
|
6
js/jquery-ui.custom.min.js
vendored
Executable file
6
js/jquery-ui.custom.min.js
vendored
Executable file
File diff suppressed because one or more lines are too long
|
@ -63,6 +63,8 @@ $(document).ready(function(){
|
|||
post_form.appendTo($(this).parent().parent());
|
||||
//post_form.insertBefore($(this));
|
||||
}
|
||||
|
||||
$(window).trigger('quick-post-controls', post_form);
|
||||
} else {
|
||||
var elm = $(this).parent().parent().find('form');
|
||||
|
||||
|
|
46
js/quick-reply-old.js
Normal file
46
js/quick-reply-old.js
Normal file
|
@ -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;
|
||||
});
|
||||
});
|
||||
});
|
||||
|
47
js/quick-reply-vd-old.js
Normal file
47
js/quick-reply-vd-old.js
Normal file
|
@ -0,0 +1,47 @@
|
|||
/*
|
||||
* 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';
|
||||
*
|
||||
*/
|
||||
|
||||
if (active_page == 'index') {
|
||||
$(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;
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
|
@ -3,45 +3,363 @@
|
|||
* 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/jquery-ui.custom.min.js'; // Optional; if you want the form to be draggable.
|
||||
* $config['additional_javascript'][] = 'js/quick-reply.js';
|
||||
*
|
||||
*/
|
||||
|
||||
if (active_page == 'index') {
|
||||
$(document).ready(function(){
|
||||
if($('div.banner').length != 0)
|
||||
return; // not index
|
||||
var do_css = function() {
|
||||
$('#quick-reply-css').remove();
|
||||
|
||||
txt_new_topic = $('form[name=post] input[type=submit]').val();
|
||||
txt_new_reply = txt_new_topic == _('Submit') ? txt_new_topic : new_reply_string;
|
||||
// Find background of reply posts
|
||||
var dummy_reply = $('<div class="post reply"></div>').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();
|
||||
|
||||
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();
|
||||
$('<style type="text/css" id="quick-reply-css">\
|
||||
#quick-reply {\
|
||||
position: fixed;\
|
||||
right: 0;\
|
||||
top: 5%;\
|
||||
float: right;\
|
||||
display: block;\
|
||||
padding: 0 0 0 0;\
|
||||
width: 300px;\
|
||||
}\
|
||||
#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;\
|
||||
}\
|
||||
}\
|
||||
</style>').appendTo($('head'));
|
||||
};
|
||||
|
||||
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 = $('<div class="nonsense"></div>').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 <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().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');
|
||||
$('<td class="submit"></td>').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 = $('<tr><td class="recaptcha-response" colspan="2"></td></tr>');
|
||||
$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($('<td class="recaptcha" colspan="2"></td>').append($('<span></span>').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 = $('<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');
|
||||
}
|
||||
|
||||
if ($(this).find('input[name="spoiler"]').length) {
|
||||
$td.removeAttr('colspan');
|
||||
}
|
||||
}
|
||||
|
||||
// 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') {
|
||||
$td.find('label').remove();
|
||||
$(this).attr('id', 'q-spoiler-image');
|
||||
$postForm.find('input[type="file"]').parent()
|
||||
.removeAttr('colspan')
|
||||
.after($('<td class="spoiler"></td>').append(this, ' ', $('<label for="q-spoiler-image">').text(_('Spoiler Image'))));
|
||||
} else {
|
||||
$(tr).remove();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$td.find('small').hide();
|
||||
}
|
||||
});
|
||||
|
||||
$postForm.find('textarea[name="body"]').removeAttr('id').removeAttr('cols').attr('placeholder', _('Comment'));
|
||||
|
||||
$postForm.find('textarea:not([name="body"]),input[type="hidden"]').removeAttr('id').appendTo($dummyStuff);
|
||||
|
||||
$postForm.find('br').remove();
|
||||
$postForm.find('table').prepend('<tr><th colspan="2">\
|
||||
<span class="handle">\
|
||||
<a class="close-btn" href="javascript:void(0)">X</a>\
|
||||
' + _('Quick Reply') + '\
|
||||
</span>\
|
||||
</th></tr>');
|
||||
|
||||
$postForm.attr('id', 'quick-reply');
|
||||
|
||||
$postForm.appendTo($('body')).hide();
|
||||
$origPostForm = $('form[name="post"]:first');
|
||||
|
||||
// Synchronise body text with original post form
|
||||
$origPostForm.find('textarea[name="body"]').bind('change input propertychange', function() {
|
||||
$postForm.find('textarea[name="body"]').val($(this).val());
|
||||
});
|
||||
$postForm.find('textarea[name="body"]').bind('change input propertychange', function() {
|
||||
$origPostForm.find('textarea[name="body"]').val($(this).val());
|
||||
});
|
||||
$postForm.find('textarea[name="body"]').focus(function() {
|
||||
$origPostForm.find('textarea[name="body"]').removeAttr('id');
|
||||
$(this).attr('id', 'body');
|
||||
});
|
||||
$origPostForm.find('textarea[name="body"]').focus(function() {
|
||||
$postForm.find('textarea[name="body"]').removeAttr('id');
|
||||
$(this).attr('id', 'body');
|
||||
});
|
||||
// Synchronise other inputs
|
||||
$origPostForm.find('input[type="text"],select').bind('change input propertychange', function() {
|
||||
$postForm.find('[name="' + $(this).attr('name') + '"]').val($(this).val());
|
||||
});
|
||||
$postForm.find('input[type="text"],select').bind('change input propertychange', function() {
|
||||
$origPostForm.find('[name="' + $(this).attr('name') + '"]').val($(this).val());
|
||||
});
|
||||
|
||||
if (typeof $postForm.draggable != 'undefined') {
|
||||
if (localStorage.quickReplyPosition) {
|
||||
var offset = JSON.parse(localStorage.quickReplyPosition);
|
||||
if (offset.right > $(window).width() - $postForm.width())
|
||||
offset.right = $(window).width() - $postForm.width();
|
||||
if (offset.top > $(window).height() - $postForm.height())
|
||||
offset.top = $(window).height() - $postForm.height();
|
||||
$postForm.css('right', offset.right).css('top', offset.top);
|
||||
}
|
||||
$postForm.draggable({
|
||||
handle: 'th .handle',
|
||||
containment: 'window',
|
||||
distance: 10,
|
||||
scroll: false,
|
||||
stop: function() {
|
||||
var offset = {
|
||||
top: $(this).offset().top - $(window).scrollTop(),
|
||||
right: $(window).width() - $(this).offset().left - $(this).width(),
|
||||
};
|
||||
localStorage.quickReplyPosition = JSON.stringify(offset);
|
||||
|
||||
$postForm.css('right', offset.right).css('top', offset.top).css('left', 'auto');
|
||||
}
|
||||
});
|
||||
$postForm.find('th .handle').css('cursor', 'move');
|
||||
}
|
||||
|
||||
$('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('th .close-btn').click(function() {
|
||||
$origPostForm.find('textarea[name="body"]').attr('id', 'body');
|
||||
$postForm.remove();
|
||||
});
|
||||
|
||||
// Fix bug when table gets too big for form. Shouldn't exist, but crappy CSS etc.
|
||||
$postForm.show();
|
||||
$postForm.width($postForm.find('table').width());
|
||||
$postForm.hide();
|
||||
|
||||
$(window).trigger('quick-reply');
|
||||
|
||||
$(window).ready(function() {
|
||||
$(window).scroll(function() {
|
||||
if ($(this).width() <= 800)
|
||||
return;
|
||||
if ($(this).scrollTop() < $origPostForm.offset().top + $origPostForm.height() - 100)
|
||||
$postForm.fadeOut(100);
|
||||
else
|
||||
$postForm.fadeIn(100);
|
||||
}).on('stylesheet', function() {
|
||||
do_css();
|
||||
if ($('link#stylesheet').attr('href')) {
|
||||
$('link#stylesheet')[0].onload = do_css;
|
||||
}
|
||||
}).scroll();
|
||||
});
|
||||
};
|
||||
|
||||
$(window).on('cite', function(e, id, with_link) {
|
||||
if ($(this).width() <= 800)
|
||||
return;
|
||||
show_quick_reply();
|
||||
$('#quick-reply textarea').focus();
|
||||
if (with_link) {
|
||||
$(window).ready(function() {
|
||||
if ($('#' + id).length) {
|
||||
highlightReply(id);
|
||||
$(window).scrollTop($('#' + id).offset().top);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue