Version 3.0.5
This commit is contained in:
1 parent
19b38c7c74
commit
1d4720f3e2
3755 files changed
+508378
-664541
No files matched your search
@@ -0,0 +1,640 @@
|
||||
/************************************************/
|
||||
/* IPB3 Javascript */
|
||||
/* -------------------------------------------- */
|
||||
/* ips.topic.js - Topic view code */
|
||||
/* (c) IPS, Inc 2008 */
|
||||
/* -------------------------------------------- */
|
||||
/* Author: Rikki Tissier */
|
||||
/************************************************/
|
||||
|
||||
var _topic = window.IPBoard;
|
||||
|
||||
_topic.prototype.topic = {
|
||||
totalChecked: 0,
|
||||
inSection: '',
|
||||
postcache: [],
|
||||
poll: [],
|
||||
pollPopups: [],
|
||||
|
||||
init: function()
|
||||
{
|
||||
Debug.write("Initializing ips.topic.js");
|
||||
|
||||
document.observe("dom:loaded", function(){
|
||||
if( ipb.topic.inSection == 'topicview' )
|
||||
{
|
||||
if( $('show_filters') )
|
||||
{
|
||||
$('show_filters').observe('click', ipb.topic.toggleFilters );
|
||||
$('filter_form').hide();
|
||||
}
|
||||
|
||||
ipb.topic.preCheckPosts();
|
||||
|
||||
// Set up delegates
|
||||
ipb.delegate.register('.multiquote', ipb.topic.toggleMultimod);
|
||||
ipb.delegate.register('.delete_post', ipb.topic.confirmSingleDelete);
|
||||
ipb.delegate.register('.edit_post', ipb.topic.ajaxEditShow);
|
||||
ipb.delegate.register('.toggle_post', ipb.topic.ajaxTogglePostApprove);
|
||||
ipb.delegate.register('input.post_mod', ipb.topic.checkPost);
|
||||
ipb.delegate.register('a[rel="bookmark"]', ipb.topic.showLinkToTopic );
|
||||
}
|
||||
});
|
||||
|
||||
Event.observe( window, 'load', function(){
|
||||
// Resize images
|
||||
$$('.post', '.poll').each( function(elem){
|
||||
ipb.global.findImgs( $( elem ) );
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
/* ------------------------------ */
|
||||
/**
|
||||
* Event handler for moderating posts
|
||||
*
|
||||
* @param {event} e The event
|
||||
*/
|
||||
submitPostModeration: function(e)
|
||||
{
|
||||
if( $F('tact') == 'delete' ){
|
||||
if( !confirm(ipb.lang['delete_confirm']) ){
|
||||
Event.stop(e);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
/* ------------------------------ */
|
||||
/**
|
||||
* Event handler for moderating the topic
|
||||
*
|
||||
* @param {event} e The event
|
||||
*/
|
||||
submitTopicModeration: function(e)
|
||||
{
|
||||
if( $F('topic_moderation') == '03' ){ // Delete code
|
||||
if( !confirm(ipb.lang['delete_confirm']) ){
|
||||
Event.stop(e);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* MATT
|
||||
* Toggle post approval thingy majigy
|
||||
*/
|
||||
ajaxTogglePostApprove: function(e, elem)
|
||||
{
|
||||
Event.stop(e);
|
||||
|
||||
var postid = elem.id.replace( /toggle(text)?_post_/, '' );
|
||||
if( !postid ){ return; }
|
||||
|
||||
var toApprove = ( $('post_id_' + postid).hasClassName( 'moderated' ) ) ? 1 : 0;
|
||||
|
||||
var url = ipb.vars['base_url'] + 'app=forums&module=ajax§ion=topics&do=postApproveToggle&p=' + postid + '&t=' + ipb.topic.topic_id + '&f=' + ipb.topic.forum_id + '&approve=' + toApprove;
|
||||
|
||||
new Ajax.Request( url,
|
||||
{
|
||||
method: 'post',
|
||||
evalJSON: 'force',
|
||||
parameters: {
|
||||
md5check: ipb.vars['secure_hash']
|
||||
},
|
||||
onSuccess: function(t)
|
||||
{
|
||||
if( t.responseJSON['error'] )
|
||||
{
|
||||
switch( t.responseJSON['error'] )
|
||||
{
|
||||
case 'notopic':
|
||||
alert(ipb.lang['no_permission']);
|
||||
break;
|
||||
case 'nopermission':
|
||||
alert(ipb.lang['no_permission']);
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( toApprove )
|
||||
{
|
||||
$('post_id_' + postid).removeClassName( 'moderated' );
|
||||
$('toggletext_post_' + postid).update( ipb.lang['unapprove'] );
|
||||
}
|
||||
else
|
||||
{
|
||||
$('post_id_' + postid).addClassName( 'moderated' );
|
||||
$('toggletext_post_' + postid).update( ipb.lang['approve'] );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
},
|
||||
/* END MATT */
|
||||
|
||||
/* ------------------------------ */
|
||||
/**
|
||||
* Shows the quick ajax edit box
|
||||
*
|
||||
* @var {event} e The event
|
||||
*/
|
||||
ajaxEditShow: function(e, elem)
|
||||
{
|
||||
// If user is holding ctrl or command, just submit since they
|
||||
// want to open a new tab (requested by Luke)
|
||||
if( e.ctrlKey == true || e.metaKey == true || e.keyCode == 91 )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
Event.stop(e);
|
||||
var edit = [];
|
||||
|
||||
edit['button'] = elem;
|
||||
if( !edit['button'] ){ return; }
|
||||
|
||||
// Prevents loading the editor twice
|
||||
if( edit['button'].readAttribute('_editing') == '1' )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
edit['pid'] = edit['button'].id.replace('edit_post_', '');
|
||||
edit['tid'] = ipb.topic.topic_id;
|
||||
edit['fid'] = ipb.topic.forum_id;
|
||||
edit['post'] = $( 'post_id_' + edit['pid'] ).down('.post');
|
||||
|
||||
// Find post content
|
||||
ipb.topic.postcache[ edit['pid'] ] = edit['post'].innerHTML;
|
||||
|
||||
url = ipb.vars['base_url'] + 'app=forums&module=ajax§ion=topics&do=editBoxShow&p=' + edit['pid'] +'&t=' + edit['tid'] +'&f=' + edit['fid'];
|
||||
|
||||
if ( Prototype.Browser.IE7 )
|
||||
{
|
||||
window.location = '#entry' + edit['pid'];
|
||||
}
|
||||
else
|
||||
{
|
||||
new Effect.ScrollTo( edit['post'], { offset: -50 } );
|
||||
}
|
||||
|
||||
// DO TEH AJAX LOL
|
||||
new Ajax.Request( url,
|
||||
{
|
||||
method: 'post',
|
||||
parameters: {
|
||||
md5check: ipb.vars['secure_hash']
|
||||
},
|
||||
onSuccess: function(t)
|
||||
{
|
||||
if( t.responseText == 'nopermission' || t.responseText == 'NO_POST_FORUM' || t.responseText == 'NO_EDIT_PERMS' )
|
||||
{
|
||||
alert(ipb.lang['no_permission']);
|
||||
return;
|
||||
}
|
||||
if( t.responseText == 'error' )
|
||||
{
|
||||
alert(ipb.lang['action_failed']);
|
||||
return;
|
||||
}
|
||||
|
||||
// Put it in
|
||||
edit['button'].writeAttribute('_editing', '1');
|
||||
|
||||
edit['post'].update( t.responseText );
|
||||
|
||||
edit['pid'] = 'e' + edit['pid'];
|
||||
|
||||
// Init the editor
|
||||
ipb.editors[ edit['pid'] ] = new ipb.editor( edit['pid'], USE_RTE );
|
||||
|
||||
// Set up events
|
||||
if( $('edit_save_' + edit['pid'] ) ){
|
||||
$('edit_save_' + edit['pid'] ).observe('click', ipb.topic.ajaxEditSave );
|
||||
}
|
||||
if( $('edit_switch_' + edit['pid'] ) ){
|
||||
$('edit_switch_' + edit['pid'] ).observe('click', ipb.topic.ajaxEditSwitch );
|
||||
}
|
||||
if( $('edit_cancel_' + edit['pid'] ) ){
|
||||
$('edit_cancel_' + edit['pid'] ).observe('click', ipb.topic.ajaxEditCancel );
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
Debug.write( url );
|
||||
},
|
||||
|
||||
/* ------------------------------ */
|
||||
/**
|
||||
* Switches from quick edit to full editor
|
||||
*/
|
||||
ajaxEditSwitch: function(e)
|
||||
{
|
||||
// Because all posts on a topic page are wrapped in a form tag for moderation
|
||||
// purposes, to switch editor we have to perform a bit of trickery by building
|
||||
// a new form at the bottom of the page, filling it with the right values,
|
||||
// and submitting it.
|
||||
|
||||
Event.stop(e);
|
||||
var elem = Event.element(e);
|
||||
var postid = elem.id.replace('edit_switch_e', '');
|
||||
if( !postid ){ return; }
|
||||
var url = ipb.vars['base_url'] + 'app=forums&module=post§ion=post&do=edit_post&f=' + ipb.topic.forum_id + '&t=' + ipb.topic.topic_id + '&p=' + postid + '&st=' + ipb.topic.start_id + '&_from=quickedit';
|
||||
|
||||
try {
|
||||
// Need to update for submit manually in this case
|
||||
ipb.editors[ 'e' + postid ].update_for_form_submit();
|
||||
var Post = $F( 'e' + postid + '_textarea' );
|
||||
} catch(err) {
|
||||
Debug.error( err );
|
||||
return;
|
||||
}
|
||||
|
||||
form = new Element('form', { action: url, method: 'post' } );
|
||||
textarea = new Element('textarea', { name: 'Post' } );
|
||||
reason = new Element('input', { name: 'post_edit_reason' } );
|
||||
md5check = new Element('input', { type: 'hidden', name: 'md5check', value: ipb.vars['secure_hash'] } );
|
||||
|
||||
// Opera needs "value", but don't replace the & or it will freak out at you
|
||||
if( Prototype.Browser.Opera ){
|
||||
textarea.value = Post;//.replace( /&/g, '&' );
|
||||
} else {
|
||||
textarea.value = Post.replace( /&/g, '&' );
|
||||
}
|
||||
|
||||
reason.value = ( $('post_edit_reason') ) ? $('post_edit_reason').value : '';
|
||||
|
||||
form.insert( md5check ).insert( textarea ).insert( reason ).hide();
|
||||
$$('body')[0].insert( form );
|
||||
|
||||
form.submit();
|
||||
},
|
||||
|
||||
/* ------------------------------ */
|
||||
/**
|
||||
* Saves the contents of quick edit
|
||||
*/
|
||||
ajaxEditSave: function(e)
|
||||
{
|
||||
Event.stop(e);
|
||||
var elem = Event.element(e);
|
||||
var postid = elem.id.replace('edit_save_e', '');
|
||||
if( !postid ){ return; }
|
||||
|
||||
try {
|
||||
// Need to update for submit manually in this case
|
||||
ipb.editors[ 'e' + postid ].update_for_form_submit();
|
||||
var Post = $F( 'e' + postid + '_textarea' );
|
||||
} catch(err) {
|
||||
Debug.error( err );
|
||||
Debug.dir( ipb.editors );
|
||||
return;
|
||||
}
|
||||
|
||||
if( Post.blank() )
|
||||
{
|
||||
alert( ipb.lang['post_empty'] );
|
||||
return;
|
||||
}
|
||||
|
||||
var add_edit = null;
|
||||
var edit_reason = '';
|
||||
var post_htmlstatus = '';
|
||||
|
||||
if( $('add_edit') ){
|
||||
add_edit = $F('add_edit');
|
||||
}
|
||||
|
||||
if( $('post_edit_reason') ){
|
||||
edit_reason = $F('post_edit_reason');
|
||||
}
|
||||
|
||||
if( $('post_htmlstatus') ) {
|
||||
post_htmlstatus = $F('post_htmlstatus');
|
||||
}
|
||||
|
||||
var url = ipb.vars['base_url'] + 'app=forums&module=ajax§ion=topics&do=editBoxSave&p=' + postid + '&t=' + ipb.topic.topic_id + '&f=' + ipb.topic.forum_id;
|
||||
|
||||
new Ajax.Request( url,
|
||||
{
|
||||
method: 'post',
|
||||
evalJSON: 'force',
|
||||
encoding: ipb.vars['charset'],
|
||||
parameters: {
|
||||
md5check: ipb.vars['secure_hash'],
|
||||
Post: Post.encodeParam(),
|
||||
add_edit: add_edit,
|
||||
post_edit_reason: edit_reason.encodeParam(),
|
||||
post_htmlstatus: post_htmlstatus
|
||||
},
|
||||
onSuccess: function(t)
|
||||
{
|
||||
if( t.responseJSON['error'] )
|
||||
{
|
||||
if( $('error_msg_e' + postid) )
|
||||
{
|
||||
$('error_msg_e' + postid).update( t.responseJSON['error'] );
|
||||
new Effect.BlindDown( $('error_msg_e' + postid), { duration: 0.4 } );
|
||||
}
|
||||
else
|
||||
{
|
||||
alert( t.responseJSON['error'] );
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Update post; SKINNOTE: need to fix linked image sizes
|
||||
// SKINNOTE: also need to reapply "code" javascript
|
||||
$('edit_post_' + postid).writeAttribute('_editing', '0');
|
||||
|
||||
$('post_id_' + postid).down('.post').update( t.responseJSON['successString'] );
|
||||
|
||||
ipb.global.findImgs( $( 'post_id_' + postid ).down('.post') );
|
||||
//dp.SyntaxHighlighter.HighlightAll('bbcode_code');
|
||||
prettyPrint();
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
},
|
||||
|
||||
|
||||
/* ------------------------------ */
|
||||
/**
|
||||
* Cancel the quick edit
|
||||
*
|
||||
* @var {event} e The event
|
||||
*/
|
||||
ajaxEditCancel: function(e)
|
||||
{
|
||||
Event.stop(e);
|
||||
var elem = Event.element(e);
|
||||
var postid = elem.id.replace('edit_cancel_e', '');
|
||||
if( !postid ){ return; }
|
||||
|
||||
if( ipb.topic.postcache[ postid ] ){
|
||||
$('post_id_' + postid).down('.post').update( ipb.topic.postcache[ postid ] );
|
||||
ipb.editors[ postid ] = null;
|
||||
$('edit_post_' + postid).writeAttribute('_editing', '0');
|
||||
}
|
||||
|
||||
return;
|
||||
},
|
||||
|
||||
/* ------------------------------ */
|
||||
/**
|
||||
* Reads the cookie and checks posts as necessary
|
||||
*/
|
||||
preCheckPosts: function()
|
||||
{
|
||||
if( !$('selectedpidsJS') ){ return; }
|
||||
|
||||
// Get the cookie
|
||||
pids = $F('selectedpidsJS').split(',');
|
||||
|
||||
if( pids )
|
||||
{
|
||||
pids.each( function(pid)
|
||||
{
|
||||
if( !pid.blank() )
|
||||
{
|
||||
ipb.topic.totalChecked++;
|
||||
|
||||
if( $('checkbox_' + pid) )
|
||||
{
|
||||
$('checkbox_' + pid).checked = true;
|
||||
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
ipb.topic.updatePostModButton();
|
||||
},
|
||||
|
||||
/* ------------------------------ */
|
||||
/**
|
||||
* Checks a post
|
||||
*
|
||||
* @var {event} e The event
|
||||
*/
|
||||
checkPost: function(e, check)
|
||||
{
|
||||
Debug.write("Check post");
|
||||
remove = $A();
|
||||
data = $F('selectedpidsJS');
|
||||
|
||||
if( data != null ){
|
||||
pids = data.split(',') || $A();
|
||||
} else {
|
||||
pids = $A();
|
||||
}
|
||||
|
||||
if( check.checked == true )
|
||||
{
|
||||
pids.push( check.id.replace('checkbox_', '') );
|
||||
ipb.topic.totalChecked++;
|
||||
}
|
||||
else
|
||||
{
|
||||
remove.push( check.id.replace('checkbox_', '') );
|
||||
ipb.topic.totalChecked--;
|
||||
}
|
||||
|
||||
pids = pids.uniq().without( remove ).join(',');
|
||||
ipb.Cookie.set('modpids', pids, 0);
|
||||
$F('selectedpidsJS').value = pids;
|
||||
ipb.topic.updatePostModButton();
|
||||
},
|
||||
|
||||
/* ------------------------------ */
|
||||
/**
|
||||
* Updates the text on the moderation submit button
|
||||
*/
|
||||
updatePostModButton: function()
|
||||
{
|
||||
if( $('mod_submit') )
|
||||
{
|
||||
if( ipb.topic.totalChecked == 0 ){
|
||||
$('mod_submit').disabled = true;
|
||||
} else {
|
||||
$('mod_submit').disabled = false;
|
||||
}
|
||||
|
||||
$('mod_submit').value = ipb.lang['with_selected'].replace('{num}', ipb.topic.totalChecked);
|
||||
}
|
||||
},
|
||||
|
||||
/* ------------------------------ */
|
||||
/**
|
||||
* Shows a prompt allowing user to copy the URL
|
||||
*
|
||||
* @var {event} e The event
|
||||
*/
|
||||
showLinkToTopic: function(e, elem)
|
||||
{
|
||||
_t = prompt( ipb.lang['copy_topic_link'], $( elem ).readAttribute('href') );
|
||||
Event.stop(e);
|
||||
},
|
||||
|
||||
/* ------------------------------ */
|
||||
/**
|
||||
* Confirm they want to delete stuff
|
||||
*
|
||||
* @var {event} e The event
|
||||
*/
|
||||
confirmSingleDelete: function(e, elem)
|
||||
{
|
||||
if( !confirm( ipb.lang['delete_post_confirm'] ) )
|
||||
{
|
||||
Event.stop(e);
|
||||
}
|
||||
},
|
||||
|
||||
/* ------------------------------ */
|
||||
/**
|
||||
* Toggles the multimod buttons in posts
|
||||
*
|
||||
* @param {event} e The event
|
||||
* @param {element} elem The element that fired
|
||||
*/
|
||||
toggleMultimod: function(e, elem)
|
||||
{
|
||||
Event.stop(e);
|
||||
|
||||
// Get list of already quoted posts
|
||||
try {
|
||||
quoted = ipb.Cookie.get('mqtids').split(',').compact();
|
||||
} catch(err){
|
||||
quoted = $A();
|
||||
}
|
||||
|
||||
id = elem.id.replace('multiq_', '');
|
||||
|
||||
// Hokay, are we selecting/deselecting?
|
||||
if( elem.hasClassName('selected') )
|
||||
{
|
||||
elem.removeClassName('selected');
|
||||
quoted = quoted.uniq().without( id ).join(',');
|
||||
}
|
||||
else
|
||||
{
|
||||
elem.addClassName('selected');
|
||||
quoted.push( id );
|
||||
quoted = quoted.uniq().join(',');
|
||||
}
|
||||
|
||||
// Save cookie
|
||||
ipb.Cookie.set('mqtids', quoted, 0);
|
||||
},
|
||||
|
||||
/* ------------------------------ */
|
||||
/**
|
||||
* Toggles the filters bar
|
||||
*
|
||||
* @var {event} e The event
|
||||
*/
|
||||
toggleFilters: function(e)
|
||||
{
|
||||
if( $('filter_form') )
|
||||
{
|
||||
Effect.toggle( $('filter_form'), 'blind', {duration: 0.2} );
|
||||
Effect.toggle( $('show_filters'), 'blind', {duration: 0.2} );
|
||||
}
|
||||
},
|
||||
|
||||
/* ------------------------------ */
|
||||
/**
|
||||
* Sets the supplied post to hidden
|
||||
*
|
||||
* @var {int} id The ID of the post to hide
|
||||
*/
|
||||
setPostHidden: function(id)
|
||||
{
|
||||
if( $( 'post_id_' + id ).select('.post_wrap')[0] )
|
||||
{
|
||||
$( 'post_id_' + id ).select('.post_wrap')[0].hide();
|
||||
|
||||
if( $('unhide_post_' + id ) )
|
||||
{
|
||||
$('unhide_post_' + id).observe('click', ipb.topic.showHiddenPost );
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
/* ------------------------------ */
|
||||
/**
|
||||
* Unhides the supplied post
|
||||
*
|
||||
* @var {event} e The link event
|
||||
*/
|
||||
showHiddenPost: function(e)
|
||||
{
|
||||
link = Event.findElement(e, 'a');
|
||||
id = link.id.replace('unhide_post_', '');
|
||||
|
||||
if( $('post_id_' + id ).select('.post_wrap')[0] )
|
||||
{
|
||||
elem = $('post_id_' + id ).select('.post_wrap')[0];
|
||||
new Effect.Parallel( [
|
||||
new Effect.BlindDown( elem ),
|
||||
new Effect.Appear( elem )
|
||||
], { duration: 0.5, afterFinish: function(e){
|
||||
ipb.global.findImgs( $( elem ) );
|
||||
} } );
|
||||
}
|
||||
|
||||
if( $('post_id_' + id ).select('.post_ignore')[0] )
|
||||
{
|
||||
ignoreElem = $('post_id_' + id ).select('.post_ignore')[0];
|
||||
/*new Effect.BlindUp( elem, {duration: 0.2} );*/
|
||||
ignoreElem.hide();
|
||||
}
|
||||
|
||||
Event.stop(e);
|
||||
},
|
||||
|
||||
/* ------------------------------ */
|
||||
/**
|
||||
* Scrolls the browser to a particular post
|
||||
*
|
||||
* @var {int} pid Post ID to scroll to
|
||||
*/
|
||||
scrollToPost: function( pid )
|
||||
{
|
||||
if( !pid || !Object.isNumber( pid ) ){ return; }
|
||||
$('entry' + pid).scrollTo();
|
||||
},
|
||||
|
||||
showVoters: function( e, qid, cid )
|
||||
{
|
||||
Event.stop(e);
|
||||
|
||||
if( !ipb.topic.poll[ qid ] || !ipb.topic.poll[ qid ][ cid ] ){ return; }
|
||||
|
||||
/*if( ipb.topic.pollPopups[ qid+'_'+cid ] )
|
||||
{
|
||||
ipb.topic.pollPopups[ qid+'_'+cid ].show();
|
||||
}
|
||||
else
|
||||
{*/
|
||||
var content = ipb.templates['poll_voters'].evaluate( { title: ipb.topic.poll[ qid ][ cid ]['name'], content: ipb.topic.poll[ qid ][ cid ]['users'] } );
|
||||
|
||||
ipb.topic.pollPopups[ qid+'_'+cid ] = new ipb.Popup( 'b_voters_' + qid + '_' + cid, {
|
||||
type: 'balloon',
|
||||
initial: content,
|
||||
stem: true,
|
||||
hideAtStart: false,
|
||||
attach: { target: $('l_voters_' + qid + '_' + cid ), position: 'auto', 'event': 'click' },
|
||||
w: '500px'
|
||||
});
|
||||
//}
|
||||
}
|
||||
|
||||
}
|
||||
ipb.topic.init();
|
||||
Reference in new issue
Block a user